From: Mike Bayer Date: Sun, 12 Feb 2012 22:10:50 +0000 (-0500) Subject: - Added missing compilation support for X-Git-Tag: rel_0_7_6~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba0fb069d5e76e4fe3365765caa1239bfd7371cc;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Added missing compilation support for LONG [ticket:2401] - broke out oracle tests for types that only require dialect --- diff --git a/CHANGES b/CHANGES index bfc08bea2c..79f6cd4681 100644 --- a/CHANGES +++ b/CHANGES @@ -65,6 +65,11 @@ CHANGES commit or rollback transaction with errors on engine.begin(). +- oracle + + - Added missing compilation support for + LONG [ticket:2401] + 0.7.5 (January 28, 2012) ===== - orm diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index 56838f8039..5d55847b46 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -309,6 +309,9 @@ class OracleTypeCompiler(compiler.GenericTypeCompiler): "", ) + def visit_LONG(self, type_): + return "LONG" + def visit_TIMESTAMP(self, type_): if type_.timezone: return "TIMESTAMP WITH TIME ZONE" diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py index f12b355932..ad9220076e 100644 --- a/test/dialect/test_oracle.py +++ b/test/dialect/test_oracle.py @@ -655,8 +655,7 @@ class ConstraintTest(fixtures.TestBase): onupdate='CASCADE')) assert_raises(exc.SAWarning, bat.create) -class TypesTest(fixtures.TestBase, AssertsCompiledSQL): - __only_on__ = 'oracle' +class DialectTypesTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = oracle.OracleDialect() def test_no_clobs_for_string_params(self): @@ -678,6 +677,59 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): b = bindparam("foo", u"hello world!") assert b.type.dialect_impl(dialect).get_dbapi_type(dbapi) == 'STRING' + def test_long(self): + self.assert_compile(oracle.LONG(), "LONG") + + def test_type_adapt(self): + dialect = cx_oracle.dialect() + + for start, test in [ + (Date(), cx_oracle._OracleDate), + (oracle.OracleRaw(), cx_oracle._OracleRaw), + (String(), String), + (VARCHAR(), cx_oracle._OracleString), + (DATE(), DATE), + (String(50), cx_oracle._OracleString), + (Unicode(), cx_oracle._OracleNVarChar), + (Text(), cx_oracle._OracleText), + (UnicodeText(), cx_oracle._OracleUnicodeText), + (NCHAR(), cx_oracle._OracleNVarChar), + (oracle.RAW(50), cx_oracle._OracleRaw), + ]: + assert isinstance(start.dialect_impl(dialect), test), \ + "wanted %r got %r" % (test, start.dialect_impl(dialect)) + + def test_raw_compile(self): + self.assert_compile(oracle.RAW(), "RAW") + self.assert_compile(oracle.RAW(35), "RAW(35)") + + def test_char_length(self): + self.assert_compile(VARCHAR(50),"VARCHAR(50 CHAR)") + + oracle8dialect = oracle.dialect() + oracle8dialect.server_version_info = (8, 0) + self.assert_compile(VARCHAR(50),"VARCHAR(50)",dialect=oracle8dialect) + + self.assert_compile(NVARCHAR(50),"NVARCHAR2(50)") + self.assert_compile(CHAR(50),"CHAR(50)") + + def test_varchar_types(self): + dialect = oracle.dialect() + for typ, exp in [ + (String(50), "VARCHAR2(50 CHAR)"), + (Unicode(50), "NVARCHAR2(50)"), + (NVARCHAR(50), "NVARCHAR2(50)"), + (VARCHAR(50), "VARCHAR(50 CHAR)"), + (oracle.NVARCHAR2(50), "NVARCHAR2(50)"), + (oracle.VARCHAR2(50), "VARCHAR2(50 CHAR)"), + ]: + self.assert_compile(typ, exp, dialect=dialect) + +class TypesTest(fixtures.TestBase): + __only_on__ = 'oracle' + __dialect__ = oracle.OracleDialect() + + @testing.fails_on('+zxjdbc', 'zxjdbc lacks the FIXED_CHAR dbapi type') def test_fixed_char(self): m = MetaData(testing.db) @@ -708,25 +760,6 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): finally: t.drop() - def test_type_adapt(self): - dialect = cx_oracle.dialect() - - for start, test in [ - (Date(), cx_oracle._OracleDate), - (oracle.OracleRaw(), cx_oracle._OracleRaw), - (String(), String), - (VARCHAR(), cx_oracle._OracleString), - (DATE(), DATE), - (String(50), cx_oracle._OracleString), - (Unicode(), cx_oracle._OracleNVarChar), - (Text(), cx_oracle._OracleText), - (UnicodeText(), cx_oracle._OracleUnicodeText), - (NCHAR(), cx_oracle._OracleNVarChar), - (oracle.RAW(50), cx_oracle._OracleRaw), - ]: - assert isinstance(start.dialect_impl(dialect), test), \ - "wanted %r got %r" % (test, start.dialect_impl(dialect)) - @testing.requires.returning def test_int_not_float(self): m = MetaData(testing.db) @@ -869,7 +902,8 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): foo.create() foo.insert().execute( - {'idata':5, 'ndata':decimal.Decimal("45.6"), 'ndata2':decimal.Decimal("45.0"), + {'idata':5, 'ndata':decimal.Decimal("45.6"), + 'ndata2':decimal.Decimal("45.0"), 'nidata':decimal.Decimal('53'), 'fdata':45.68392}, ) @@ -1019,10 +1053,6 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): for row in types_table.select().execute().fetchall(): [row[k] for k in row.keys()] - def test_raw_compile(self): - self.assert_compile(oracle.RAW(), "RAW") - self.assert_compile(oracle.RAW(35), "RAW(35)") - @testing.provide_metadata def test_raw_roundtrip(self): metadata = self.metadata @@ -1061,16 +1091,8 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): eq_(res, data) assert isinstance(res, unicode) - def test_char_length(self): - self.assert_compile(VARCHAR(50),"VARCHAR(50 CHAR)") - - oracle8dialect = oracle.dialect() - oracle8dialect.server_version_info = (8, 0) - self.assert_compile(VARCHAR(50),"VARCHAR(50)",dialect=oracle8dialect) - - self.assert_compile(NVARCHAR(50),"NVARCHAR2(50)") - self.assert_compile(CHAR(50),"CHAR(50)") + def test_char_length(self): metadata = MetaData(testing.db) t1 = Table('t1', metadata, Column("c1", VARCHAR(50)), @@ -1087,17 +1109,6 @@ class TypesTest(fixtures.TestBase, AssertsCompiledSQL): finally: t1.drop() - def test_varchar_types(self): - dialect = oracle.dialect() - for typ, exp in [ - (String(50), "VARCHAR2(50 CHAR)"), - (Unicode(50), "NVARCHAR2(50)"), - (NVARCHAR(50), "NVARCHAR2(50)"), - (VARCHAR(50), "VARCHAR(50 CHAR)"), - (oracle.NVARCHAR2(50), "NVARCHAR2(50)"), - (oracle.VARCHAR2(50), "VARCHAR2(50 CHAR)"), - ]: - self.assert_compile(typ, exp, dialect=dialect) def test_longstring(self): metadata = MetaData(testing.db)