]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed bug where Oracle ``VARCHAR`` types given with no length
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 22 Nov 2013 22:56:35 +0000 (17:56 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 22 Nov 2013 22:56:57 +0000 (17:56 -0500)
(e.g. for a ``CAST`` or similar) would incorrectly render ``None CHAR``
or similar. [ticket:2870]

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/dialects/oracle/base.py
test/dialect/test_oracle.py

index dde98e82f5af8099faefecb6b8a906000ab82ed7..cc51febe1cab4b1c63d41c52129208c1361b5748 100644 (file)
 .. changelog::
     :version: 0.8.4
 
+    .. change::
+        :tags: bug, oracle
+        :tickets: 2870
+        :versions: 0.9.0b2
+
+        Fixed bug where Oracle ``VARCHAR`` types given with no length
+        (e.g. for a ``CAST`` or similar) would incorrectly render ``None CHAR``
+        or similar.
+
     .. change::
         :tags: bug, ext
         :tickets: 2869
index ca8d50636a6e0e8a77e53084f2a086a357bba522..ccab67f3bab477f5cf21d97c33b868591a8014fe 100644 (file)
@@ -363,7 +363,9 @@ class OracleTypeCompiler(compiler.GenericTypeCompiler):
         return self._visit_varchar(type_, '', '')
 
     def _visit_varchar(self, type_, n, num):
-        if not n and self.dialect._supports_char_length:
+        if not type_.length:
+            return "%(n)sVARCHAR%(two)s" % {'two': num, 'n': n}
+        elif not n and self.dialect._supports_char_length:
             varchar = "VARCHAR%(two)s(%(length)s CHAR)"
             return varchar % {'length': type_.length, 'two': num}
         else:
index 41996682d6b757a3a2b1626be353ee77ee4f5853..20655be8084a300751248f39325cb63d067b5bde 100644 (file)
@@ -980,6 +980,12 @@ class DialectTypesTest(fixtures.TestBase, AssertsCompiledSQL):
             (VARCHAR(50), "VARCHAR(50 CHAR)"),
             (oracle.NVARCHAR2(50), "NVARCHAR2(50)"),
             (oracle.VARCHAR2(50), "VARCHAR2(50 CHAR)"),
+            (String(), "VARCHAR2"),
+            (Unicode(), "NVARCHAR2"),
+            (NVARCHAR(), "NVARCHAR2"),
+            (VARCHAR(), "VARCHAR"),
+            (oracle.NVARCHAR2(), "NVARCHAR2"),
+            (oracle.VARCHAR2(), "VARCHAR2"),
         ]:
             self.assert_compile(typ, exp, dialect=dialect)