]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
On MSSQL if a field is part of the primary_key then it should not allow NULLS.
authorMichael Trier <mtrier@gmail.com>
Sun, 28 Dec 2008 07:40:56 +0000 (07:40 +0000)
committerMichael Trier <mtrier@gmail.com>
Sun, 28 Dec 2008 07:40:56 +0000 (07:40 +0000)
CHANGES
lib/sqlalchemy/databases/mssql.py
test/dialect/mssql.py
test/sql/constraints.py

diff --git a/CHANGES b/CHANGES
index 6768a45a4f323fa16ca3f51221a0f2a3d4433934..0e648b0494017600226e2a7ba139e450823954e1 100644 (file)
--- 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
index 777c86d40f0c645aa442e001cfcd31e06008eb82..61f54a8ba3d5a79acd83f09bb0abff5ebcf5f037 100644 (file)
@@ -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"
index b87a1566efd37423e3257eb41e340989ba3750ed..c4056fd9be26ba7d53b1eea09b1740935a7d0e69 100755 (executable)
@@ -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():
index c9b52da7cba7242a3c62f4c13817fa47058f93a6..d019aa0378bb30098d70efed426d50fb8377fc95 100644 (file)
@@ -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')