From: Mike Bayer Date: Fri, 22 Nov 2013 22:56:35 +0000 (-0500) Subject: Fixed bug where Oracle ``VARCHAR`` types given with no length X-Git-Tag: rel_0_8_4~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d848680f46ffdabca84d7e2b3a4fd862d1f0bda;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Fixed bug where Oracle ``VARCHAR`` types given with no length (e.g. for a ``CAST`` or similar) would incorrectly render ``None CHAR`` or similar. [ticket:2870] --- diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index dde98e82f5..cc51febe1c 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -11,6 +11,15 @@ .. 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 diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index ca8d50636a..ccab67f3ba 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -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: diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py index 41996682d6..20655be808 100644 --- a/test/dialect/test_oracle.py +++ b/test/dialect/test_oracle.py @@ -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)