]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- oracle will now reflect "DATE" as an OracleDateTime column, not
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 18 Nov 2007 02:44:15 +0000 (02:44 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 18 Nov 2007 02:44:15 +0000 (02:44 +0000)
OracleDate

- added awareness of schema name in oracle table_names() function,
fixes metadata.reflect(schema='someschema') [ticket:847]

CHANGES
lib/sqlalchemy/databases/oracle.py
test/engine/reflection.py

diff --git a/CHANGES b/CHANGES
index 1f3416d146f05f7299ec3362c96b1f25a1d4676f..ff0462814ec6323dcd966582e7d14fc14c3934a8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -157,9 +157,15 @@ CHANGES
     could get polluted by certain generative calls [ticket:852]
     
 - dialects
-
   - Added experimental support for MaxDB (versions >= 7.6.03.007 only).
 
+  - oracle will now reflect "DATE" as an OracleDateTime column, not 
+    OracleDate
+
+  - added awareness of schema name in oracle table_names() function,
+    fixes metadata.reflect(schema='someschema') [ticket:847]
+
   - sqlite will reflect "DECIMAL" as a numeric column.
 
   - Made access dao detection more reliable [ticket:828]
index 015701e901c39b6ae7e40a1356d07e874db54e3a..71c82bfd86bd744efb0b45558e6cd77fd4846419 100644 (file)
@@ -177,7 +177,7 @@ colspecs = {
 
 ischema_names = {
     'VARCHAR2' : OracleString,
-    'DATE' : OracleDate,
+    'DATE' : OracleDateTime,
     'DATETIME' : OracleDateTime,
     'NUMBER' : OracleNumeric,
     'BLOB' : OracleBinary,
@@ -442,10 +442,23 @@ class OracleDialect(default.DefaultDialect):
         else:
             return name.encode(self.encoding)
     
+    def get_default_schema_name(self,connection):
+        try:
+            return self._default_schema_name
+        except AttributeError:
+            name = self._default_schema_name = \
+                connection.execute('SELECT USER FROM DUAL').scalar()
+            return name
+
     def table_names(self, connection, schema):
         # note that table_names() isnt loading DBLINKed or synonym'ed tables
-        s = "select table_name from all_tables where tablespace_name NOT IN ('SYSTEM', 'SYSAUX')"
-        return [self._normalize_name(row[0]) for row in connection.execute(s)]
+        if schema is None:
+            s = "select table_name from all_tables where tablespace_name NOT IN ('SYSTEM', 'SYSAUX')"
+            cursor = connection.execute(s)
+        else:
+            s = "select table_name from all_tables where tablespace_name NOT IN ('SYSTEM','SYSAUX') AND OWNER = :owner"
+            cursor = connection.execute(s,{'owner':self._denormalize_name(schema)})
+        return [self._normalize_name(row[0]) for row in cursor]
 
     def reflecttable(self, connection, table, include_columns):
         preparer = self.identifier_preparer
index 534cdd2c1bc64b1e26490ec87422c4a3097057cc..cbc221e93554a9b17c79819c9174a6f070c5a25c 100644 (file)
@@ -186,7 +186,7 @@ class ReflectionTest(PersistTest):
     def test_unknown_types(self):
         meta = MetaData(testbase.db)
         t = Table("test", meta, 
-            Column('foo', String(30)))
+            Column('foo', DateTime))
             
         import sys
         dialect_module = sys.modules[testbase.db.dialect.__module__]
@@ -689,7 +689,7 @@ class CreateDropTest(PersistTest):
         metadata.drop_all(bind=testbase.db)
 
 class UnicodeTest(PersistTest):
-    @testing.unsupported('sybase', 'maxdb')
+    @testing.unsupported('sybase', 'maxdb', 'oracle')
     def test_basic(self):
         try:
             # the 'convert_unicode' should not get in the way of the reflection