From: Mike Bayer Date: Thu, 9 Apr 2020 15:15:03 +0000 (-0400) Subject: Repair find tables X-Git-Tag: rel_1_4_0b1~397^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0aa38a973778114b9b63c74f89a47adcb1cbab82;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Repair find tables 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 --- diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index fae68da987..ca5bde091f 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -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[ diff --git a/test/sql/test_utils.py b/test/sql/test_utils.py index 1ccd1e123f..a63e55c4e5 100644 --- a/test/sql/test_utils.py +++ b/test/sql/test_utils.py @@ -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}, + )