summaryrefslogtreecommitdiff
path: root/test/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-07-14 10:29:50 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2021-07-14 13:28:25 -0400
commit79a3dafb1425488ba29d309cc32e0e24004be256 (patch)
tree19edb827f4d3bbed2a686c46cf24adee0db232fd /test/sql
parentac5ccb7e8560832beb8ec5fdeaab90816cb05973 (diff)
downloadsqlalchemy-79a3dafb1425488ba29d309cc32e0e24004be256.tar.gz
Ensure alias traversal block works when adapt_from_selectables present
Fixed regression which appeared in version 1.4.3 due to :ticket:`6060` where rules that limit ORM adaptation of derived selectables interfered with other ORM-adaptation based cases, in this case when applying adaptations for a :func:`_orm.with_polymorphic` against a mapping which uses a :func:`_orm.column_property` which in turn makes use of a scalar select that includes a :func:`_orm.aliased` object of the mapped table. Fixes: #6762 Change-Id: Ice3dc34b97d12b59f044bdc0c5faaefcc4015227
Diffstat (limited to 'test/sql')
-rw-r--r--test/sql/test_external_traversal.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/test/sql/test_external_traversal.py b/test/sql/test_external_traversal.py
index c7e51c807..b0241da59 100644
--- a/test/sql/test_external_traversal.py
+++ b/test/sql/test_external_traversal.py
@@ -2172,7 +2172,16 @@ class ClauseAdapterTest(fixtures.TestBase, AssertsCompiledSQL):
{"param_1": 5, "param_2": 10},
)
- def test_aliasedselect_to_aliasedselect_join_nested_table(self):
+ @testing.combinations((True,), (False,), argnames="use_adapt_from")
+ def test_aliasedselect_to_aliasedselect_join_nested_table(
+ self, use_adapt_from
+ ):
+ """test the logic in clauseadapter regarding not traversing aliases.
+
+ adapt_from_selectables case added to test #6762, which is a regression
+ from #6060
+
+ """
s1 = select(t1).alias("foo")
s2 = select(s1).limit(5).offset(10).alias()
talias = t1.alias("bar")
@@ -2191,8 +2200,12 @@ class ClauseAdapterTest(fixtures.TestBase, AssertsCompiledSQL):
j = s1.outerjoin(talias, s1.c.col1 == talias.c.col1)
+ if use_adapt_from:
+ vis = sql_util.ClauseAdapter(s2, adapt_from_selectables=[s1])
+ else:
+ vis = sql_util.ClauseAdapter(s2)
self.assert_compile(
- sql_util.ClauseAdapter(s2).traverse(j).select(),
+ vis.traverse(j).select(),
"SELECT anon_1.col1, anon_1.col2, "
"anon_1.col3, bar.col1 AS col1_1, bar.col2 AS col2_1, "
"bar.col3 AS col3_1 "