From: Mike Bayer Date: Sun, 23 Oct 2022 14:34:33 +0000 (-0400) Subject: test support for has_table()->view; backport to 1.4 X-Git-Tag: rel_2_0_0b3~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c02f6b744d304578fe67da2e13d2c02ab71140d2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git test support for has_table()->view; backport to 1.4 For 1.4 only; in 2.0 this just refines the test suite a bit. Fixed regression which occurred throughout the 1.4 series where the :meth:`.Inspector.has_table` method, which historically reported on views as well, stopped working for SQL Server. The issue is not present in the 2.0 series which uses a different reflection architecture. Test support is added to ensure ``has_table()`` remains working per spec re: views. Fixes: #8700 Change-Id: I119a91ec07911edb08cf0799234827fec9ea1195 --- diff --git a/doc/build/changelog/unreleased_14/8700.rst b/doc/build/changelog/unreleased_14/8700.rst new file mode 100644 index 0000000000..9e969c3e23 --- /dev/null +++ b/doc/build/changelog/unreleased_14/8700.rst @@ -0,0 +1,9 @@ +.. change:: + :tags: bug, mssql, reflection + :tickets: 8700 + + Fixed regression which occurred throughout the 1.4 series where the + :meth:`.Inspector.has_table` method, which historically reported on views + as well, stopped working for SQL Server. The issue is not present in the + 2.0 series which uses a different reflection architecture. Test support is + added to ensure ``has_table()`` remains working per spec re: views. diff --git a/lib/sqlalchemy/testing/suite/test_reflection.py b/lib/sqlalchemy/testing/suite/test_reflection.py index 7e54ee57a0..dd7d38c5ac 100644 --- a/lib/sqlalchemy/testing/suite/test_reflection.py +++ b/lib/sqlalchemy/testing/suite/test_reflection.py @@ -65,6 +65,28 @@ class HasTableTest(fixtures.TablesTest): schema=config.test_schema, ) + if testing.requires.view_reflection: + cls.define_views(metadata) + + @classmethod + def define_views(cls, metadata): + query = "CREATE VIEW vv AS SELECT * FROM test_table" + + event.listen(metadata, "after_create", DDL(query)) + event.listen(metadata, "before_drop", DDL("DROP VIEW vv")) + + if testing.requires.schemas.enabled: + query = "CREATE VIEW %s.vv AS SELECT * FROM %s.test_table_s" % ( + config.test_schema, + config.test_schema, + ) + event.listen(metadata, "after_create", DDL(query)) + event.listen( + metadata, + "before_drop", + DDL("DROP VIEW %s.vv" % (config.test_schema)), + ) + def test_has_table(self): with config.db.begin() as conn: is_true(config.db.dialect.has_table(conn, "test_table")) @@ -105,29 +127,14 @@ class HasTableTest(fixtures.TablesTest): @testing.requires.views def test_has_table_view(self, connection): - query = "CREATE VIEW vv AS SELECT * FROM test_table" - connection.execute(sa.sql.text(query)) insp = inspect(connection) - try: - is_true(insp.has_table("vv")) - finally: - connection.execute(sa.sql.text("DROP VIEW vv")) + is_true(insp.has_table("vv")) @testing.requires.views @testing.requires.schemas def test_has_table_view_schema(self, connection): - query = "CREATE VIEW %s.vv AS SELECT * FROM %s.test_table_s" % ( - config.test_schema, - config.test_schema, - ) - connection.execute(sa.sql.text(query)) insp = inspect(connection) - try: - is_true(insp.has_table("vv", config.test_schema)) - finally: - connection.execute( - sa.sql.text("DROP VIEW %s.vv" % config.test_schema) - ) + is_true(insp.has_table("vv", config.test_schema)) class HasIndexTest(fixtures.TablesTest):