From 75ebaf7c91e96d7567eb5760be713dc134c58763 Mon Sep 17 00:00:00 2001 From: Carson Ip Date: Fri, 3 Jan 2020 11:02:03 +0800 Subject: [PATCH] Fix QueryContext ref cycle on joinedload Fixes: #5071 --- lib/sqlalchemy/orm/query.py | 2 +- lib/sqlalchemy/orm/strategies.py | 1 - test/aaa_profiling/test_memusage.py | 15 +++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index e1a873b570..051a368f43 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -3911,7 +3911,7 @@ class Query(object): 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 e234596f6f..4bd74988a5 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -1707,7 +1707,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 be825151d5..0b407c1169 100644 --- a/test/aaa_profiling/test_memusage.py +++ b/test/aaa_profiling/test_memusage.py @@ -1208,6 +1208,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") -- 2.47.3