]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Repair find tables
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 9 Apr 2020 15:15:03 +0000 (11:15 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 9 Apr 2020 16:55:23 +0000 (12:55 -0400)
The recipe given out on the ML for improving ABC
fails in 1.4 due to find_tables() missing out on subqueries,
which is due to the refactor of Alias into multiple sub-types.

Change-Id: Idd2803b26a84b28db28e0b8c328b8f24550577e4

lib/sqlalchemy/sql/util.py
test/sql/test_utils.py

index fae68da98739878922d56e76e061db85c8438d6f..ca5bde091fc50b1197c31827e87556a9a1af994e 100644 (file)
@@ -249,7 +249,9 @@ def find_tables(
         _visitors["join"] = tables.append
 
     if include_aliases:
-        _visitors["alias"] = tables.append
+        _visitors["alias"] = _visitors["subquery"] = _visitors[
+            "tablesample"
+        ] = _visitors["lateral"] = tables.append
 
     if include_crud:
         _visitors["insert"] = _visitors["update"] = _visitors[
index 1ccd1e123f111bdb20018aae5561ae2e5603b5d9..a63e55c4e57469f84cbe3dfcdadd6a2f77e3a29a 100644 (file)
@@ -30,3 +30,21 @@ class MiscTest(fixtures.TestBase):
         subset_select = select([common.c.id, common.c.data]).alias()
 
         eq_(sql_util.find_tables(subset_select), [common])
+
+    def test_find_tables_aliases(self):
+        metadata = MetaData()
+        common = Table(
+            "common",
+            metadata,
+            Column("id", Integer, primary_key=True),
+            Column("data", Integer),
+            Column("extra", String(45)),
+        )
+
+        calias = common.alias()
+        subset_select = select([common.c.id, calias.c.data]).subquery()
+
+        eq_(
+            set(sql_util.find_tables(subset_select, include_aliases=True)),
+            {common, calias, subset_select},
+        )