diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-01-07 01:52:52 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-01-07 01:52:52 +0000 |
| commit | 463a5f2e29ca28e53b5d19ac2b63acf39438ce87 (patch) | |
| tree | d959439bc630ce430ddbc44235039460a4abb2df | |
| parent | a697fcc1cb87b5a4e4f0c70361bd598086f4210f (diff) | |
| parent | 5ecb7732fb62d80adb4434bdd0e606e43aa14a98 (diff) | |
| download | sqlalchemy-463a5f2e29ca28e53b5d19ac2b63acf39438ce87.tar.gz | |
Merge "Fix QueryContext ref cycle on joinedload"
| -rw-r--r-- | doc/build/changelog/unreleased_13/5056.rst | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 1 | ||||
| -rw-r--r-- | test/aaa_profiling/test_memusage.py | 15 |
4 files changed, 17 insertions, 3 deletions
diff --git a/doc/build/changelog/unreleased_13/5056.rst b/doc/build/changelog/unreleased_13/5056.rst index 217044c18..950cce3c2 100644 --- a/doc/build/changelog/unreleased_13/5056.rst +++ b/doc/build/changelog/unreleased_13/5056.rst @@ -1,6 +1,6 @@ .. change:: :tags: bug, orm, engine - :tickets: 5056, 5050 + :tickets: 5056, 5050, 5071 Added test support and repaired a wide variety of unnecessary reference cycles created for short-lived objects, mostly in the area of ORM queries. diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index e69ebde56..5f799cc68 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -3878,7 +3878,7 @@ class Query(Generative): for rec in context.create_eager_joins: strategy = rec[0] - strategy(*rec[1:]) + strategy(context, *rec[1:]) if context.from_clause: # "load from explicit FROMs" mode, diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 4f27c23d6..79e36026c 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -1759,7 +1759,6 @@ class JoinedLoader(AbstractRelationshipLoader): context.create_eager_joins.append( ( self._create_eager_join, - context, entity, path, adapter, diff --git a/test/aaa_profiling/test_memusage.py b/test/aaa_profiling/test_memusage.py index 71d5481d3..55890cd06 100644 --- a/test/aaa_profiling/test_memusage.py +++ b/test/aaa_profiling/test_memusage.py @@ -1269,6 +1269,21 @@ class CycleTest(_fixtures.FixtureTest): go() + def test_query_joinedload(self): + User, Address = self.classes("User", "Address") + + s = Session() + + def generate(): + s.query(User).options(joinedload(User.addresses)).all() + + # cycles here are due to ClauseElement._cloned_set and Load.context + @assert_cycles(28) + def go(): + generate() + + go() + def test_plain_join(self): users, addresses = self.tables("users", "addresses") |
