diff options
author | Michael Trier <mtrier@gmail.com> | 2008-12-28 01:46:44 +0000 |
---|---|---|
committer | Michael Trier <mtrier@gmail.com> | 2008-12-28 01:46:44 +0000 |
commit | defba2fc020556dadd106e7e4e35907216d9208d (patch) | |
tree | ca7d9b3ffb97103b4f08816453c77a615bc46b51 | |
parent | 0465d0b880be6ae13feeed98b93d2e1d2fdec773 (diff) | |
download | sqlalchemy-defba2fc020556dadd106e7e4e35907216d9208d.tar.gz |
MSSQL refactoring of BINARY type and addition of MSVarBinary and MSImage.
- Added in new types: MSVarBinary and MSImage
- Modified MSBinary to now return BINARY instead of IMAGE. This is a
backwards incompatible change. Closes #1249.
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 21 | ||||
-rwxr-xr-x | test/dialect/mssql.py | 20 |
3 files changed, 41 insertions, 6 deletions
@@ -39,6 +39,7 @@ CHANGES built from it. - mssql + - Added in new types: MSVarBinary and MSImage. [ticket:1249] - Added in the MSReal and MSNText types. - bugfixes, behavioral changes @@ -233,6 +234,11 @@ CHANGES new doc section "Custom Comparators". - mssql + - ``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 + a variable length data type. [ticket:1249] + - ``get_default_schema_name`` is now reflected from the database based on the user's default schema. This only works with MSSQL 2005 and later. [ticket:1258] diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 5bf7f28af..777c86d40 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -678,8 +678,25 @@ class MSNChar(_StringType, sqltypes.NCHAR): class MSBinary(sqltypes.Binary): def get_col_spec(self): + if self.length: + return "BINARY(%s)" % self.length + else: + return "BINARY" + + +class MSVarBinary(MSBinary): + def get_col_spec(self): + if self.length: + return "VARBINARY(%s)" % self.length + else: + return "VARBINARY" + + +class MSImage(MSBinary): + def get_col_spec(self): return "IMAGE" + class MSBoolean(sqltypes.Boolean): def get_col_spec(self): return "BIT" @@ -861,10 +878,10 @@ class MSSQLDialect(default.DefaultDialect): 'date': MSDate, 'smalldatetime' : MSSmallDate, 'binary' : MSBinary, - 'varbinary' : MSBinary, + 'varbinary' : MSVarBinary, 'bit': MSBoolean, 'real' : MSFloat, - 'image' : MSBinary, + 'image' : MSImage, 'timestamp': MSTimeStamp, 'money': MSMoney, 'smallmoney': MSSmallMoney, diff --git a/test/dialect/mssql.py b/test/dialect/mssql.py index 440221cb6..b87a1566e 100755 --- a/test/dialect/mssql.py +++ b/test/dialect/mssql.py @@ -548,6 +548,16 @@ class TypesTest2(TestBase, AssertsExecutionResults): columns = [ # column type, args, kwargs, expected ddl (mssql.MSBinary, [], {}, + 'BINARY'), + (mssql.MSBinary, [10], {}, + 'BINARY(10)'), + + (mssql.MSVarBinary, [], {}, + 'VARBINARY'), + (mssql.MSVarBinary, [10], {}, + 'VARBINARY(10)'), + + (mssql.MSImage, [], {}, 'IMAGE') ] @@ -570,6 +580,12 @@ class TypesTest2(TestBase, AssertsExecutionResults): assert True except: raise + + reflected_binary = Table('test_mssql_binary', MetaData(testing.db), autoload=True) + for col in reflected_binary.c: + testing.eq_(col.type.__class__, binary_table.c[col.name].type.__class__) + if binary_table.c[col.name].type.length: + testing.eq_(col.type.length, binary_table.c[col.name].type.length) binary_table.drop() def test_boolean(self): @@ -678,8 +694,6 @@ class TypesTest2(TestBase, AssertsExecutionResults): 'VARCHAR'), (mssql.MSString, [1], {}, 'VARCHAR(1)'), - (mssql.MSString, ['max'], {}, - 'VARCHAR(max)'), (mssql.MSString, [1], {'collation': 'Latin1_General_CI_AS'}, 'VARCHAR(1) COLLATE Latin1_General_CI_AS'), @@ -687,8 +701,6 @@ class TypesTest2(TestBase, AssertsExecutionResults): 'NVARCHAR'), (mssql.MSNVarchar, [1], {}, 'NVARCHAR(1)'), - (mssql.MSNVarchar, ['max'], {}, - 'NVARCHAR(max)'), (mssql.MSNVarchar, [1], {'collation': 'Latin1_General_CI_AS'}, 'NVARCHAR(1) COLLATE Latin1_General_CI_AS'), |