]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- MSSQL - the String/Unicode types, and their counterparts VARCHAR/
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 16 Dec 2010 22:52:43 +0000 (17:52 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 16 Dec 2010 22:52:43 +0000 (17:52 -0500)
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.

CHANGES
lib/sqlalchemy/dialects/mssql/base.py
test/dialect/test_mssql.py

diff --git a/CHANGES b/CHANGES
index 407d40d226888f933cc2f630363e3ee9bfc64a09..900cdd54f9feaab68324616424dd8402cfbdc08c 100644 (file)
--- 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
index 8f3b9ddb6ed94670f97b0adc2b2d91899ea308d8..b1fb46041dea881a59c0c2f3b751223c67350ef6 100644 (file)
@@ -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:
index f3643c4df348043fcc305bedbe170b4131a3eb81..68203cfea8ffd4c3ddd613aeba4bd1f7bdd0ab55 100644 (file)
@@ -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'},