diff options
| author | Michael Trier <mtrier@gmail.com> | 2008-12-28 07:40:56 +0000 |
|---|---|---|
| committer | Michael Trier <mtrier@gmail.com> | 2008-12-28 07:40:56 +0000 |
| commit | cae83f6d4fc3eef57814e6bd554bc39461644359 (patch) | |
| tree | 6fa7468f27e727b43e6d5eeaf9080363e0639af1 | |
| parent | defba2fc020556dadd106e7e4e35907216d9208d (diff) | |
| download | sqlalchemy-cae83f6d4fc3eef57814e6bd554bc39461644359.tar.gz | |
On MSSQL if a field is part of the primary_key then it should not allow NULLS.
| -rw-r--r-- | CHANGES | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 2 | ||||
| -rwxr-xr-x | test/dialect/mssql.py | 17 | ||||
| -rw-r--r-- | test/sql/constraints.py | 2 |
4 files changed, 13 insertions, 12 deletions
@@ -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') |
