]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
test support for has_table()->view; backport to 1.4
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Oct 2022 14:34:33 +0000 (10:34 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Oct 2022 14:35:31 +0000 (10:35 -0400)
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

doc/build/changelog/unreleased_14/8700.rst [new file with mode: 0644]
lib/sqlalchemy/testing/suite/test_reflection.py

diff --git a/doc/build/changelog/unreleased_14/8700.rst b/doc/build/changelog/unreleased_14/8700.rst
new file mode 100644 (file)
index 0000000..9e969c3
--- /dev/null
@@ -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.
index 7e54ee57a0d222f6334af8b54e202f53de5b6c63..dd7d38c5ac06c4189cbc38b32d7b719f66b4675e 100644 (file)
@@ -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):