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]
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]
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
ischema_names = {
'VARCHAR2' : OracleString,
+ 'NVARCHAR2' : OracleNVarchar,
'CHAR' : OracleString,
'DATE' : OracleDateTime,
'DATETIME' : OracleDateTime,
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
+# coding: utf-8
+
import testenv; testenv.configure_for_tests()
from sqlalchemy import *
from sqlalchemy.sql import table, column
)
[[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("""