From cae83f6d4fc3eef57814e6bd554bc39461644359 Mon Sep 17 00:00:00 2001 From: Michael Trier Date: Sun, 28 Dec 2008 07:40:56 +0000 Subject: [PATCH] On MSSQL if a field is part of the primary_key then it should not allow NULLS. --- CHANGES | 4 ++++ lib/sqlalchemy/databases/mssql.py | 2 +- test/dialect/mssql.py | 17 +++++++---------- test/sql/constraints.py | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index 6768a45a4f..0e648b0494 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 777c86d40f..61f54a8ba3 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 b87a1566ef..c4056fd9be 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 c9b52da7cb..d019aa0378 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') -- 2.47.3