From: Mike Bayer Date: Thu, 16 Dec 2010 22:52:43 +0000 (-0500) Subject: - MSSQL - the String/Unicode types, and their counterparts VARCHAR/ X-Git-Tag: rel_0_7b1~157^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=54085a0e6a2f2782171ec51de8b12c05963841c0;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - MSSQL - the String/Unicode types, and their counterparts VARCHAR/ NVARCHAR, emit "max" as the length when no length is specified. This makes it more compatible with Postgresql's VARCHAR type which is similarly unbounded when no length specified. --- diff --git a/CHANGES b/CHANGES index 407d40d226..900cdd54f9 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,16 @@ ======= CHANGES ======= +0.7.0b1 +======= + +- mssql + - the String/Unicode types, and their counterparts VARCHAR/ + NVARCHAR, emit "max" as the length when no length is + specified. This makes it more compatible with Postgresql's + VARCHAR type which is similarly unbounded when no length + specified. + 0.6.6 ===== - orm diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index 8f3b9ddb6e..b1fb46041d 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -479,7 +479,7 @@ ischema_names = { class MSTypeCompiler(compiler.GenericTypeCompiler): - def _extend(self, spec, type_): + def _extend(self, spec, type_, length=None): """Extend a string-type declaration with standard SQL COLLATE annotations. @@ -489,9 +489,12 @@ class MSTypeCompiler(compiler.GenericTypeCompiler): collation = 'COLLATE %s' % type_.collation else: collation = None - - if type_.length: - spec = spec + "(%d)" % type_.length + + if not length: + length = type_.length + + if length: + spec = spec + "(%s)" % length return ' '.join([c for c in (spec, collation) if c is not None]) @@ -545,7 +548,8 @@ class MSTypeCompiler(compiler.GenericTypeCompiler): return self._extend("TEXT", type_) def visit_VARCHAR(self, type_): - return self._extend("VARCHAR", type_) + return self._extend("VARCHAR", type_, + length = type_.length or 'max') def visit_CHAR(self, type_): return self._extend("CHAR", type_) @@ -554,7 +558,8 @@ class MSTypeCompiler(compiler.GenericTypeCompiler): return self._extend("NCHAR", type_) def visit_NVARCHAR(self, type_): - return self._extend("NVARCHAR", type_) + return self._extend("NVARCHAR", type_, + length = type_.length or 'max') def visit_date(self, type_): if self.dialect.server_version_info < MS_2008_VERSION: diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index f3643c4df3..68203cfea8 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -764,19 +764,19 @@ class SchemaTest(TestBase): return self.ddl_compiler.get_column_specification(self.column) def test_that_mssql_default_nullability_emits_null(self): - eq_("test_column VARCHAR NULL", self._column_spec()) + eq_("test_column VARCHAR(max) NULL", self._column_spec()) def test_that_mssql_none_nullability_does_not_emit_nullability(self): self.column.nullable = None - eq_("test_column VARCHAR", self._column_spec()) + eq_("test_column VARCHAR(max)", self._column_spec()) def test_that_mssql_specified_nullable_emits_null(self): self.column.nullable = True - eq_("test_column VARCHAR NULL", self._column_spec()) + eq_("test_column VARCHAR(max) NULL", self._column_spec()) def test_that_mssql_specified_not_nullable_emits_not_null(self): self.column.nullable = False - eq_("test_column VARCHAR NOT NULL", self._column_spec()) + eq_("test_column VARCHAR(max) NOT NULL", self._column_spec()) def full_text_search_missing(): @@ -1424,16 +1424,16 @@ class TypesTest(TestBase, AssertsExecutionResults, ComparesTables): 'NCHAR(1)'), (mssql.MSNChar, [1], {'collation': 'Latin1_General_CI_AS'}, 'NCHAR(1) COLLATE Latin1_General_CI_AS'), - + (mssql.MSString, [], {}, - 'VARCHAR'), + 'VARCHAR(max)'), (mssql.MSString, [1], {}, 'VARCHAR(1)'), (mssql.MSString, [1], {'collation': 'Latin1_General_CI_AS'}, 'VARCHAR(1) COLLATE Latin1_General_CI_AS'), (mssql.MSNVarchar, [], {}, - 'NVARCHAR'), + 'NVARCHAR(max)'), (mssql.MSNVarchar, [1], {}, 'NVARCHAR(1)'), (mssql.MSNVarchar, [1], {'collation': 'Latin1_General_CI_AS'},