From 649f06759d933f4aacdfbb302e845e2bcb5e7641 Mon Sep 17 00:00:00 2001 From: Rodrigo Menezes Date: Thu, 14 Aug 2014 14:47:23 -0400 Subject: Added support for postgres_relkind. --- test/dialect/postgresql/test_reflection.py | 102 ++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) (limited to 'test/dialect/postgresql/test_reflection.py') diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 1d6a41765..313be0b37 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -12,8 +12,108 @@ import sqlalchemy as sa from sqlalchemy.dialects.postgresql import base as postgresql -class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): +class RelKindReflectionTest(fixtures.TestBase, AssertsExecutionResults): + """Test postgresql_relkind reflection option""" + + __requires__ = 'postgresql_test_dblink', + __only_on__ = 'postgresql >= 9.3' + __backend__ = True + + @classmethod + def setup_class(cls): + from sqlalchemy.testing import config + cls.dblink = config.file_config.get('sqla_testing', 'postgres_test_db_link') + + metadata = MetaData(testing.db) + testtable = Table( + 'testtable', metadata, + Column( + 'id', Integer, primary_key=True), + Column( + 'data', String(30))) + metadata.create_all() + testtable.insert().execute({'id': 89, 'data': 'd1'}) + + con = testing.db.connect() + for ddl in \ + "CREATE MATERIALIZED VIEW test_mview AS SELECT * FROM testtable;", \ + "CREATE SERVER test_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'test', host '%s');" % cls.dblink, \ + "CREATE USER MAPPING FOR public SERVER test_server options (user 'scott', password 'tiger');", \ + "CREATE FOREIGN TABLE test_foreigntable ( \ + id INT, \ + data VARCHAR(30) \ + ) SERVER test_server OPTIONS (table_name 'testtable');": + try: + con.execute(ddl) + except exc.DBAPIError as e: + if 'already exists' not in str(e): + raise e + + @classmethod + def teardown_class(cls): + con = testing.db.connect() + con.execute('DROP FOREIGN TABLE test_foreigntable;') + con.execute('DROP USER MAPPING FOR public SERVER test_server;') + con.execute('DROP SERVER test_server;') + con.execute('DROP MATERIALIZED VIEW test_mview;') + con.execute('DROP TABLE testtable;') + + def test_mview_is_reflected(self): + mview_relkind_names = ('m', 'materialized') + for mview_relkind_name in mview_relkind_names: + metadata = MetaData(testing.db) + table = Table('test_mview', metadata, autoload=True, postgresql_relkind=mview_relkind_name) + eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected mview didn't equal expected columns") + + def test_mview_select(self): + metadata = MetaData(testing.db) + table = Table('test_mview', metadata, autoload=True, postgresql_relkind='m') + assert table.select().execute().fetchall() == [ + (89, 'd1',) + ] + + def test_foreign_table_is_reflected(self): + foreign_table_relkind_names = ('f', 'foreign') + for foreign_table_relkind_name in foreign_table_relkind_names: + metadata = MetaData(testing.db) + table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind=foreign_table_relkind_name) + eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected foreign table didn't equal expected columns") + + def test_foreign_table_select(self): + metadata = MetaData(testing.db) + table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='f') + assert table.select().execute().fetchall() == [ + (89, 'd1',) + ] + + def test_foreign_table_roundtrip(self): + metadata = MetaData(testing.db) + table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='f') + + connection = testing.db.connect() + trans = connection.begin() + try: + table.delete().execute() + table.insert().execute({'id': 89, 'data': 'd1'}) + trans.commit() + except: + trans.rollback() + raise + + assert table.select().execute().fetchall() == [ + (89, 'd1',) + ] + + def test_invalid_relkind(self): + metadata = MetaData(testing.db) + def create_bad_table(): + return Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='nope') + + assert_raises(exc.SQLAlchemyError, create_bad_table) + + +class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test PostgreSQL domains""" __only_on__ = 'postgresql > 8.3' -- cgit v1.2.1 From 2f7dce1d6fa43e88f64c81b6e612fbc42235fddd Mon Sep 17 00:00:00 2001 From: Rodrigo Menezes Date: Tue, 26 Aug 2014 12:53:34 -0400 Subject: Removed all mentions to postgresql_relkind --- test/dialect/postgresql/test_reflection.py | 33 ++++++++++-------------------- 1 file changed, 11 insertions(+), 22 deletions(-) (limited to 'test/dialect/postgresql/test_reflection.py') diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 678c35881..405ac5921 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -13,8 +13,8 @@ import sqlalchemy as sa from sqlalchemy.dialects.postgresql import base as postgresql -class RelKindReflectionTest(fixtures.TestBase, AssertsExecutionResults): - """Test postgresql_relkind reflection option""" +class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults): + """Test reflection on materialized views and foreign tables""" __requires__ = 'postgresql_test_dblink', __only_on__ = 'postgresql >= 9.3' @@ -61,36 +61,32 @@ class RelKindReflectionTest(fixtures.TestBase, AssertsExecutionResults): con.execute('DROP TABLE testtable;') def test_mview_is_reflected(self): - mview_relkind_names = ('m', 'materialized') - for mview_relkind_name in mview_relkind_names: - metadata = MetaData(testing.db) - table = Table('test_mview', metadata, autoload=True, postgresql_relkind=mview_relkind_name) - eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected mview didn't equal expected columns") + metadata = MetaData(testing.db) + table = Table('test_mview', metadata, autoload=True) + eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected mview didn't equal expected columns") def test_mview_select(self): metadata = MetaData(testing.db) - table = Table('test_mview', metadata, autoload=True, postgresql_relkind='m') + table = Table('test_mview', metadata, autoload=True) assert table.select().execute().fetchall() == [ (89, 'd1',) ] def test_foreign_table_is_reflected(self): - foreign_table_relkind_names = ('f', 'foreign') - for foreign_table_relkind_name in foreign_table_relkind_names: - metadata = MetaData(testing.db) - table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind=foreign_table_relkind_name) - eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected foreign table didn't equal expected columns") + metadata = MetaData(testing.db) + table = Table('test_foreigntable', metadata, autoload=True) + eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected foreign table didn't equal expected columns") def test_foreign_table_select(self): metadata = MetaData(testing.db) - table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='f') + table = Table('test_foreigntable', metadata, autoload=True) assert table.select().execute().fetchall() == [ (89, 'd1',) ] def test_foreign_table_roundtrip(self): metadata = MetaData(testing.db) - table = Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='f') + table = Table('test_foreigntable', metadata, autoload=True) connection = testing.db.connect() trans = connection.begin() @@ -106,13 +102,6 @@ class RelKindReflectionTest(fixtures.TestBase, AssertsExecutionResults): (89, 'd1',) ] - def test_invalid_relkind(self): - metadata = MetaData(testing.db) - def create_bad_table(): - return Table('test_foreigntable', metadata, autoload=True, postgresql_relkind='nope') - - assert_raises(exc.SQLAlchemyError, create_bad_table) - class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test PostgreSQL domains""" -- cgit v1.2.1 From fbd2d70a5cfd7b5c219c51cb5b7866c4ab89cece Mon Sep 17 00:00:00 2001 From: Rodrigo Menezes Date: Wed, 3 Sep 2014 16:38:43 -0400 Subject: Fixing some pep8s and adding get_foreign_tables. --- test/dialect/postgresql/test_reflection.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'test/dialect/postgresql/test_reflection.py') diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 405ac5921..567aec927 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -13,7 +13,7 @@ import sqlalchemy as sa from sqlalchemy.dialects.postgresql import base as postgresql -class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults): +class AltRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test reflection on materialized views and foreign tables""" __requires__ = 'postgresql_test_dblink', @@ -23,7 +23,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults) @classmethod def setup_class(cls): from sqlalchemy.testing import config - cls.dblink = config.file_config.get('sqla_testing', 'postgres_test_db_link') + cls.dblink = config.file_config.get('sqla_testing', + 'postgres_test_db_link') metadata = MetaData(testing.db) testtable = Table( @@ -39,8 +40,10 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults) for ddl in \ "CREATE MATERIALIZED VIEW test_mview AS SELECT * FROM testtable;", \ - "CREATE SERVER test_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (dbname 'test', host '%s');" % cls.dblink, \ - "CREATE USER MAPPING FOR public SERVER test_server options (user 'scott', password 'tiger');", \ + "CREATE SERVER test_server FOREIGN DATA WRAPPER postgres_fdw \ + OPTIONS (dbname 'test', host '%s');" % cls.dblink, \ + "CREATE USER MAPPING FOR public \ + SERVER test_server options (user 'scott', password 'tiger');", \ "CREATE FOREIGN TABLE test_foreigntable ( \ id INT, \ data VARCHAR(30) \ @@ -63,7 +66,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults) def test_mview_is_reflected(self): metadata = MetaData(testing.db) table = Table('test_mview', metadata, autoload=True) - eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected mview didn't equal expected columns") + eq_(set(table.columns.keys()), set(['id', 'data']), + "Columns of reflected mview didn't equal expected columns") def test_mview_select(self): metadata = MetaData(testing.db) @@ -75,7 +79,8 @@ class AlternateRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults) def test_foreign_table_is_reflected(self): metadata = MetaData(testing.db) table = Table('test_foreigntable', metadata, autoload=True) - eq_(set(table.columns.keys()), set(['id', 'data']), "Columns of reflected foreign table didn't equal expected columns") + eq_(set(table.columns.keys()), set(['id', 'data']), + "Columns of reflected foreign table didn't equal expected columns") def test_foreign_table_select(self): metadata = MetaData(testing.db) -- cgit v1.2.1 From fd2faa9bc2c6d2d1b0b8e1738f0bce21e2527bb0 Mon Sep 17 00:00:00 2001 From: Rodrigo Menezes Date: Fri, 5 Sep 2014 13:54:48 -0400 Subject: Added documentation. Changed my mind - added get_foreign_table_names() only to PGInspect and not in the Dialect. Added tests for PGInspect and removed a bunch of the old test scaffolding. --- test/dialect/postgresql/test_reflection.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'test/dialect/postgresql/test_reflection.py') diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py index 567aec927..3bc4cd715 100644 --- a/test/dialect/postgresql/test_reflection.py +++ b/test/dialect/postgresql/test_reflection.py @@ -107,6 +107,12 @@ class AltRelkindReflectionTest(fixtures.TestBase, AssertsExecutionResults): (89, 'd1',) ] + def test_get_foreign_table_names(self): + inspector = inspect(testing.db) + connection = testing.db.connect() + ft_names = inspector.get_foreign_table_names(connection) + assert u'test_foreigntable' in ft_names + class DomainReflectionTest(fixtures.TestBase, AssertsExecutionResults): """Test PostgreSQL domains""" -- cgit v1.2.1