]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added OracleNVarchar type, produces NVARCHAR2, and also
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Dec 2008 22:32:04 +0000 (22:32 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 28 Dec 2008 22:32:04 +0000 (22:32 +0000)
      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]

CHANGES
lib/sqlalchemy/databases/oracle.py
test/dialect/oracle.py

diff --git a/CHANGES b/CHANGES
index 082e9e7b2b3aba2bad7563dd67447f895586b0fc..6d34b8e081cd2c1394fec70819287a1f59ddcbc6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -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]
index aed070f2e5429b40b50affd86fec676883ce3644..5a305ffd2bcff0fd1f490b3090a5ecb19ff7cc6e 100644 (file)
@@ -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
index 611e4bc50961a70807342864368a5ddc6fcc4a63..3eaba8fb3cf483dbcd0476a2ac00391f6aa1d16d 100644 (file)
@@ -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("""