diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-14 10:29:50 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-07-14 13:28:25 -0400 |
| commit | 79a3dafb1425488ba29d309cc32e0e24004be256 (patch) | |
| tree | 19edb827f4d3bbed2a686c46cf24adee0db232fd /test/sql | |
| parent | ac5ccb7e8560832beb8ec5fdeaab90816cb05973 (diff) | |
| download | sqlalchemy-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.py | 17 |
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 " |
