diff options
Diffstat (limited to 'test/dialect/postgresql/test_reflection.py')
-rw-r--r-- | test/dialect/postgresql/test_reflection.py | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 8da18108f..27874b28a 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -17,6 +17,7 @@ import re class ForeignTableReflectionTest(fixtures.TablesTest, AssertsExecutionResults): + """Test reflection on foreign tables""" __requires__ = 'postgresql_test_dblink', @@ -74,6 +75,7 @@ class ForeignTableReflectionTest(fixtures.TablesTest, AssertsExecutionResults): class MaterializedViewReflectionTest( fixtures.TablesTest, AssertsExecutionResults): + """Test reflection on materialized views""" __only_on__ = 'postgresql >= 9.3' @@ -142,6 +144,7 @@ class MaterializedViewReflectionTest( class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): + """Test PostgreSQL domains""" __only_on__ = 'postgresql > 8.3' @@ -610,7 +613,7 @@ class ReflectionTest(fixtures.TestBase): @testing.provide_metadata def test_index_reflection(self): - """ Reflecting partial & expression-based indexes should warn + """ reflect partial & expression-based indexes """ metadata = self.metadata @@ -624,41 +627,43 @@ class ReflectionTest(fixtures.TestBase): Column( 'aname', String(20))) metadata.create_all() - testing.db.execute(""" - create index idx1 on party ((id || name)) - """) - testing.db.execute(""" - create unique index idx2 on party (id) where name = 'test' - """) - testing.db.execute(""" - create index idx3 on party using btree - (lower(name::text), lower(aname::text)) - """) - - def go(): - m2 = MetaData(testing.db) - t2 = Table('party', m2, autoload=True) - assert len(t2.indexes) == 2 + with testing.db.connect().execution_options(autocommit=True) as conn: + conn.execute(""" + CREATE INDEX idx1 ON party (((id)::text || (name)::text)) + """) + conn.execute(""" + CREATE UNIQUE INDEX idx2 ON party (id) WHERE (name)::text = 'test'::text + """) + conn.execute(""" + CREATE INDEX idx3 ON party USING btree + (lower((name)::text), lower((aname)::text)) + """) - # Make sure indexes are in the order we expect them in + m = MetaData() + t2 = Table('party', m, autoload_with=conn) + eq_(len(t2.indexes), 4) tmp = [(idx.name, idx) for idx in t2.indexes] tmp.sort() - r1, r2 = [idx[1] for idx in tmp] - assert r1.name == 'idx2' - assert r1.unique == True - assert r2.unique == False - assert [t2.c.id] == r1.columns - assert [t2.c.name] == r2.columns - - testing.assert_warnings( - go, - ['Skipped unsupported reflection of ' - 'expression-based index idx1', - 'Predicate of partial index idx2 ignored during ' - 'reflection', - 'Skipped unsupported reflection of ' - 'expression-based index idx3']) + r1, r2, r3, r4 = [idx[1] for idx in tmp] + + eq_(r1.unique, False) + eq_(r1.name, 'idx1') + eq_(r1.expressions[0].text, '(((id)::text || (name)::text))') + + eq_(r2.unique, True) + eq_(r2.name, 'idx2') + eq_(r2.unique, True) + eq_(r2.columns, [t2.c.id]) + eq_(r2.dialect_options['postgresql']['where'], "((name)::text = 'test'::text)") + + eq_(r3.unique, False) + eq_(r3.name, 'idx3') + eq_(r3.expressions[0].text, 'lower((name)::text)') + eq_(r3.expressions[1].text, 'lower((aname)::text)') + + eq_(r4.unique, False) + eq_(r4.columns, [t2.c.name]) @testing.provide_metadata def test_index_reflection_modified(self): |