summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py3
-rw-r--r--test/dialect/test_oracle.py103
3 files changed, 65 insertions, 46 deletions
diff --git a/CHANGES b/CHANGES
index bfc08bea2..79f6cd468 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 56838f803..5d55847b4 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 f12b35593..ad9220076 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)