diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-12-28 22:32:04 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-12-28 22:32:04 +0000 |
commit | 8598780e8d746a85897ab19bd514c9980bfe446e (patch) | |
tree | 4ca3be41a5673273c8d349d182b4ef4f01a1e4de | |
parent | bd23baf4ac0f9dd520120445594bd00f1b760f4b (diff) | |
download | sqlalchemy-8598780e8d746a85897ab19bd514c9980bfe446e.tar.gz |
- Added OracleNVarchar type, produces NVARCHAR2, and also
subclasses Unicode so that convert_unicode=True by default.
NVARCHAR2 reflects into this type automatically so
these columns pass unicode on a reflected table with no explicit
convert_unicode=True flags. [ticket:1233]
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 7 | ||||
-rw-r--r-- | test/dialect/oracle.py | 18 |
3 files changed, 30 insertions, 1 deletions
@@ -303,6 +303,12 @@ CHANGES of Oracle two-phase commit working properly with this change. + - Added OracleNVarchar type, produces NVARCHAR2, and also + subclasses Unicode so that convert_unicode=True by default. + NVARCHAR2 reflects into this type automatically so + these columns pass unicode on a reflected table with no explicit + convert_unicode=True flags. [ticket:1233] + - mysql - Fixed bug in exception raise when FK columns not present during reflection. [ticket:1241] diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index aed070f2e..5a305ffd2 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -202,6 +202,10 @@ class OracleString(sqltypes.String): def get_col_spec(self): return "VARCHAR(%(length)s)" % {'length' : self.length} +class OracleNVarchar(sqltypes.Unicode, OracleString): + def get_col_spec(self): + return "NVARCHAR2(%(length)s)" % {'length' : self.length} + class OracleText(sqltypes.Text): def get_dbapi_type(self, dbapi): return dbapi.CLOB @@ -297,6 +301,7 @@ colspecs = { ischema_names = { 'VARCHAR2' : OracleString, + 'NVARCHAR2' : OracleNVarchar, 'CHAR' : OracleString, 'DATE' : OracleDateTime, 'DATETIME' : OracleDateTime, @@ -888,4 +893,4 @@ dialect.schemagenerator = OracleSchemaGenerator dialect.schemadropper = OracleSchemaDropper dialect.preparer = OracleIdentifierPreparer dialect.defaultrunner = OracleDefaultRunner -dialect.execution_ctx_cls = OracleExecutionContext
\ No newline at end of file +dialect.execution_ctx_cls = OracleExecutionContext diff --git a/test/dialect/oracle.py b/test/dialect/oracle.py index 611e4bc50..3eaba8fb3 100644 --- a/test/dialect/oracle.py +++ b/test/dialect/oracle.py @@ -1,3 +1,5 @@ +# coding: utf-8 + import testenv; testenv.configure_for_tests() from sqlalchemy import * from sqlalchemy.sql import table, column @@ -296,6 +298,22 @@ class TypesTest(TestBase, AssertsCompiledSQL): ) [[row[k] for k in row.keys()] for row in types_table.select().execute().fetchall()] + def test_reflect_nvarchar(self): + metadata = MetaData(testing.db) + t = Table('t', metadata, + Column('data', oracle.OracleNVarchar(255)) + ) + metadata.create_all() + try: + m2 = MetaData(testing.db) + t2 = Table('t', m2, autoload=True) + assert isinstance(t2.c.data.type, oracle.OracleNVarchar) + data = u'm’a réveillé.' + t2.insert().execute(data=data) + eq_(t2.select().execute().fetchone()['data'], data) + finally: + metadata.drop_all() + def test_longstring(self): metadata = MetaData(testing.db) testing.db.execute(""" |