detect oracle pure-quoted lowercase names

Issue #3548 resolved
Mike Bayer repo owner created an issue
diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py
index e080568..32dce9c 100644
--- a/test/dialect/test_oracle.py
+++ b/test/dialect/test_oracle.py
@@ -5,6 +5,7 @@ from sqlalchemy.testing import eq_
 from sqlalchemy import *
 from sqlalchemy import types as sqltypes, exc, schema
 from sqlalchemy.sql import table, column
+from sqlalchemy.sql.elements import quoted_name
 from sqlalchemy.testing import fixtures, AssertsExecutionResults, AssertsCompiledSQL
 from sqlalchemy import testing
 from sqlalchemy.util import u, b
@@ -1859,6 +1860,27 @@ class TableReflectionTest(fixtures.TestBase):
         tbl = Table('test_compress', m2, autoload=True)
         assert tbl.dialect_options['oracle']['compress'] == "OLTP"

+    @testing.provide_metadata
+    def test_reflect_lowercase_forced_tables(self):
+        metadata = self.metadata
+
+        t1 = Table(quoted_name('t1', quote=True), metadata, 
+             Column('id', Integer, primary_key=True),
+        )
+        t2 = Table(quoted_name('t2', quote=True), metadata, 
+             Column('id', Integer, primary_key=True),
+             Column('t1id', ForeignKey('t1.id'))
+        )
+        metadata.create_all()
+
+        m2 = MetaData(testing.db)
+        t2_ref = Table(quoted_name('t2', quote=True), m2, autoload=True)
+        t1_ref = m2.tables['t1']
+        assert t2_ref.c.t1id.references(t1_ref.c.id)
+
+        m3 = MetaData(testing.db)
+        m3.reflect(only=lambda name, m: name.lower() in ('t1', 't2'))
+        assert m3.tables['t2'].c.t1id.references(m3.tables['t1'].c.id)

at some point this would apply to firebird as well...

Comments (5)

  1. Mike Bayer reporter
    • Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:.quoted_name construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548

    → <<cset 4578ab54a5b8>>

  2. Mike Bayer reporter
    • Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:.quoted_name construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548

    (cherry picked from commit 4578ab54a5b849fdb94a7032987f105b7ec117a4)

    → <<cset 0b8489f70f13>>

  3. Mike Bayer reporter

    Port lower case quoted name fix to firebird

    Ported the fix for Oracle quoted-lowercase names to Firebird, so that a table name that is quoted as lower case can be reflected properly including when the table name comes from the get_table_names() inspection function.

    Also genericize the test to the test suite for denormlized name dialects.

    Fixes: #3548

    Change-Id: I8ca62e8d2b359e363ccb01cfe2daa0995354a3cb

    → <<cset 68d3018ceefc>>

  4. Log in to comment