summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2020-01-07 01:52:52 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2020-01-07 01:52:52 +0000
commit463a5f2e29ca28e53b5d19ac2b63acf39438ce87 (patch)
treed959439bc630ce430ddbc44235039460a4abb2df
parenta697fcc1cb87b5a4e4f0c70361bd598086f4210f (diff)
parent5ecb7732fb62d80adb4434bdd0e606e43aa14a98 (diff)
downloadsqlalchemy-463a5f2e29ca28e53b5d19ac2b63acf39438ce87.tar.gz
Merge "Fix QueryContext ref cycle on joinedload"
-rw-r--r--doc/build/changelog/unreleased_13/5056.rst2
-rw-r--r--lib/sqlalchemy/orm/query.py2
-rw-r--r--lib/sqlalchemy/orm/strategies.py1
-rw-r--r--test/aaa_profiling/test_memusage.py15
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")