diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-15 15:13:34 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-17 09:48:52 -0400 |
| commit | 5b3e887f46afdbee312d5efd2a14f7c9b7eeac65 (patch) | |
| tree | 7c12dd2686dc3d26222383d39527b24613e49da3 /test/sql/test_external_traversal.py | |
| parent | 29fbbd9cebf5d4a4f21d01a74bcfb6dce923fe1b (diff) | |
| download | sqlalchemy-5b3e887f46afdbee312d5efd2a14f7c9b7eeac65.tar.gz | |
memoize current options and joins w with_entities/with_only_cols
Fixed further regressions in the same area as that of :ticket:`6052` where
loader options as well as invocations of methods like
:meth:`_orm.Query.join` would fail if the left side of the statement for
which the option/join depends upon were replaced by using the
:meth:`_orm.Query.with_entities` method, or when using 2.0 style queries
when using the :meth:`_sql.Select.with_only_columns` method. A new set of
state has been added to the objects which tracks the "left" entities that
the options / join were made against which is memoized when the lead
entities are changed.
Fixes: #6503
Fixes: #6253
Change-Id: I211b2af98b0b20d1263fb15dc513884dcc5de6a4
Diffstat (limited to 'test/sql/test_external_traversal.py')
| -rw-r--r-- | test/sql/test_external_traversal.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/sql/test_external_traversal.py b/test/sql/test_external_traversal.py index 3469dcb37..c7e51c807 100644 --- a/test/sql/test_external_traversal.py +++ b/test/sql/test_external_traversal.py @@ -1747,6 +1747,29 @@ class ClauseAdapterTest(fixtures.TestBase, AssertsCompiledSQL): "addresses.user_id", ) + def test_prev_entities_adapt(self): + """test #6503""" + + m = MetaData() + users = Table("users", m, Column("id", Integer, primary_key=True)) + addresses = Table( + "addresses", + m, + Column("id", Integer, primary_key=True), + Column("user_id", ForeignKey("users.id")), + ) + + ualias = users.alias() + + s = select(users).join(addresses).with_only_columns(addresses.c.id) + s = sql_util.ClauseAdapter(ualias).traverse(s) + + self.assert_compile( + s, + "SELECT addresses.id FROM users AS users_1 " + "JOIN addresses ON users_1.id = addresses.user_id", + ) + @testing.combinations((True,), (False,), argnames="use_adapt_from") def test_table_to_alias_1(self, use_adapt_from): t1alias = t1.alias("t1alias") |
