summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Trier <mtrier@gmail.com>2008-12-28 07:40:56 +0000
committerMichael Trier <mtrier@gmail.com>2008-12-28 07:40:56 +0000
commitcae83f6d4fc3eef57814e6bd554bc39461644359 (patch)
tree6fa7468f27e727b43e6d5eeaf9080363e0639af1
parentdefba2fc020556dadd106e7e4e35907216d9208d (diff)
downloadsqlalchemy-cae83f6d4fc3eef57814e6bd554bc39461644359.tar.gz
On MSSQL if a field is part of the primary_key then it should not allow NULLS.
-rw-r--r--CHANGES4
-rw-r--r--lib/sqlalchemy/databases/mssql.py2
-rwxr-xr-xtest/dialect/mssql.py17
-rw-r--r--test/sql/constraints.py2
4 files changed, 13 insertions, 12 deletions
diff --git a/CHANGES b/CHANGES
index 6768a45a4..0e648b049 100644
--- a/CHANGES
+++ b/CHANGES
@@ -234,6 +234,10 @@ CHANGES
new doc section "Custom Comparators".
- mssql
+ - If the column is part of a ``primary_key`` it will be
+ ``NOT NULL`` since MSSQL doesn't allow ``NULL`` in primary_key
+ columns.
+
- ``MSBinary`` now returns a ``BINARY`` instead of an
``IMAGE``. This is a backwards incompatible change in that
``BINARY`` is a fixed length data type whereas ``IMAGE`` is
diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py
index 777c86d40..61f54a8ba 100644
--- a/lib/sqlalchemy/databases/mssql.py
+++ b/lib/sqlalchemy/databases/mssql.py
@@ -1499,7 +1499,7 @@ class MSSQLSchemaGenerator(compiler.SchemaGenerator):
colspec = self.preparer.format_column(column) + " " + column.type.dialect_impl(self.dialect).get_col_spec()
if column.nullable is not None:
- if not column.nullable:
+ if not column.nullable or column.primary_key:
colspec += " NOT NULL"
else:
colspec += " NULL"
diff --git a/test/dialect/mssql.py b/test/dialect/mssql.py
index b87a1566e..c4056fd9b 100755
--- a/test/dialect/mssql.py
+++ b/test/dialect/mssql.py
@@ -252,8 +252,9 @@ class GenerativeQueryTest(TestBase):
class SchemaTest(TestBase):
def setUp(self):
- t = Table('sometable', MetaData(),
- Column('test_column', Integer)
+ t = Table('sometable', MetaData(),
+ Column('pk_column', Integer),
+ Column('test_column', String)
)
self.column = t.c.test_column
@@ -262,8 +263,7 @@ class SchemaTest(TestBase):
mssql.MSSQLDialect().schemagenerator(mssql.MSSQLDialect(), None)
column_specification = \
schemagenerator.get_column_specification(self.column)
- assert "test_column INTEGER NULL" == column_specification, \
- column_specification
+ eq_("test_column VARCHAR NULL", column_specification)
def test_that_mssql_none_nullability_does_not_emit_nullability(self):
schemagenerator = \
@@ -271,8 +271,7 @@ class SchemaTest(TestBase):
self.column.nullable = None
column_specification = \
schemagenerator.get_column_specification(self.column)
- assert "test_column INTEGER" == column_specification, \
- column_specification
+ eq_("test_column VARCHAR", column_specification)
def test_that_mssql_specified_nullable_emits_null(self):
schemagenerator = \
@@ -280,8 +279,7 @@ class SchemaTest(TestBase):
self.column.nullable = True
column_specification = \
schemagenerator.get_column_specification(self.column)
- assert "test_column INTEGER NULL" == column_specification, \
- column_specification
+ eq_("test_column VARCHAR NULL", column_specification)
def test_that_mssql_specified_not_nullable_emits_not_null(self):
schemagenerator = \
@@ -289,8 +287,7 @@ class SchemaTest(TestBase):
self.column.nullable = False
column_specification = \
schemagenerator.get_column_specification(self.column)
- assert "test_column INTEGER NOT NULL" == column_specification, \
- column_specification
+ eq_("test_column VARCHAR NOT NULL", column_specification)
def full_text_search_missing():
diff --git a/test/sql/constraints.py b/test/sql/constraints.py
index c9b52da7c..d019aa037 100644
--- a/test/sql/constraints.py
+++ b/test/sql/constraints.py
@@ -29,7 +29,7 @@ class ConstraintTest(TestBase, AssertsExecutionResults):
ForeignKeyConstraint(['emp_id', 'emp_soc'], ['employees.id', 'employees.soc'])
)
metadata.create_all()
-
+
def test_double_fk_usage_raises(self):
f = ForeignKey('b.id')