.. changelog::
:version: 1.1.5
+ .. change:: 3548
+ :tag: bug, firebird
+ :tickets: 3548
+
+ 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.
+
.. changelog::
:version: 1.1.4
:released: November 15, 2016
from sqlalchemy.sql import expression
from sqlalchemy.engine import base, default, reflection
from sqlalchemy.sql import compiler
+from sqlalchemy.sql.elements import quoted_name
from sqlalchemy.types import (BIGINT, BLOB, DATE, FLOAT, INTEGER, NUMERIC,
SMALLINT, TEXT, TIME, TIMESTAMP, Integer)
elif name.upper() == name and \
not self.identifier_preparer._requires_quotes(name.lower()):
return name.lower()
+ elif name.lower() == name:
+ return quoted_name(name, quote=True)
else:
return name
import operator
from sqlalchemy.schema import DDL, Index
from sqlalchemy import event
+from sqlalchemy.sql.elements import quoted_name
+from sqlalchemy import ForeignKey
metadata, users = None, None
assert id_.get('autoincrement', True)
-__all__ = ('ComponentReflectionTest', 'HasTableTest')
+class NormalizedNameTest(fixtures.TablesTest):
+ __requires__ = 'denormalized_names',
+ __backend__ = True
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table(
+ quoted_name('t1', quote=True), metadata,
+ Column('id', Integer, primary_key=True),
+ )
+ Table(
+ quoted_name('t2', quote=True), metadata,
+ Column('id', Integer, primary_key=True),
+ Column('t1id', ForeignKey('t1.id'))
+ )
+
+ def test_reflect_lowercase_forced_tables(self):
+
+ 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)
+
+ def test_get_table_names(self):
+ tablenames = [
+ t for t in inspect(testing.db).get_table_names()
+ if t.lower() in ("t1", "t2")]
+
+ eq_(tablenames[0].upper(), tablenames[0].lower())
+ eq_(tablenames[1].upper(), tablenames[1].lower())
+
+
+__all__ = ('ComponentReflectionTest', 'HasTableTest', 'NormalizedNameTest')
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
-
- Table(
- quoted_name('t1', quote=True), metadata,
- Column('id', Integer, primary_key=True),
- )
- 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)