summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2021-04-07 16:07:08 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2021-04-07 16:07:08 +0000
commitde72737987e6b9757e6b2fe5bea07bb110356ce8 (patch)
treeed40cf5984549c8b115afbad4024a80ced12dabe
parent57e46cde849d3d35e4e97e953ce29ee8bcc138a7 (diff)
parentabcb9dc2734b5dd01d2f3115393d6f76e0da5411 (diff)
downloadsqlalchemy-de72737987e6b9757e6b2fe5bea07bb110356ce8.tar.gz
Merge "Add test support for merge_frozen_result"
-rw-r--r--doc/build/changelog/unreleased_14/6211.rst7
-rw-r--r--lib/sqlalchemy/orm/loading.py4
-rw-r--r--test/orm/test_loading.py35
3 files changed, 44 insertions, 2 deletions
diff --git a/doc/build/changelog/unreleased_14/6211.rst b/doc/build/changelog/unreleased_14/6211.rst
new file mode 100644
index 000000000..599b865eb
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/6211.rst
@@ -0,0 +1,7 @@
+.. change::
+ :tags: bug, orm, regression
+ :tickets: 6211
+
+ Fixed regression where the :func:`_orm.merge_frozen_result` function relied
+ upon by the dogpile.caching example was not included in tests and began
+ failing due to incorrect internal arguments.
diff --git a/lib/sqlalchemy/orm/loading.py b/lib/sqlalchemy/orm/loading.py
index 9dcaca0ea..0dc92daf5 100644
--- a/lib/sqlalchemy/orm/loading.py
+++ b/lib/sqlalchemy/orm/loading.py
@@ -201,7 +201,7 @@ def merge_frozen_result(session, statement, frozen_result, load=True):
session._autoflush()
ctx = querycontext.ORMSelectCompileState._create_entities_collection(
- statement
+ statement, legacy=False
)
autoflush = session.autoflush
@@ -262,7 +262,7 @@ def merge_result(query, iterator, load=True):
frozen_result = None
ctx = querycontext.ORMSelectCompileState._create_entities_collection(
- query, True
+ query, legacy=True
)
autoflush = session.autoflush
diff --git a/test/orm/test_loading.py b/test/orm/test_loading.py
index e15dbb09f..84fb4975d 100644
--- a/test/orm/test_loading.py
+++ b/test/orm/test_loading.py
@@ -127,6 +127,15 @@ class MergeResultTest(_fixtures.FixtureTest):
it = loading.merge_result(q, collection)
eq_([x.id for x in it], [1, 2, 7, 8])
+ def test_single_entity_frozen(self):
+ s = fixture_session()
+ User = self.classes.User
+
+ stmt = select(User).where(User.id.in_([7, 8, 9])).order_by(User.id)
+ result = s.execute(stmt)
+ it = loading.merge_frozen_result(s, stmt, result.freeze())
+ eq_([x.id for x in it().scalars()], [7, 8, 9])
+
def test_single_column(self):
User = self.classes.User
@@ -137,6 +146,16 @@ class MergeResultTest(_fixtures.FixtureTest):
it = loading.merge_result(q, collection)
eq_(list(it), [(1,), (2,), (7,), (8,)])
+ def test_single_column_frozen(self):
+ User = self.classes.User
+
+ s = fixture_session()
+
+ stmt = select(User.id).where(User.id.in_([7, 8, 9])).order_by(User.id)
+ result = s.execute(stmt)
+ it = loading.merge_frozen_result(s, stmt, result.freeze())
+ eq_([x.id for x in it()], [7, 8, 9])
+
def test_entity_col_mix_plain_tuple(self):
s, (u1, u2, u3, u4) = self._fixture()
User = self.classes.User
@@ -148,6 +167,22 @@ class MergeResultTest(_fixtures.FixtureTest):
eq_([(x.id, y) for x, y in it], [(1, 1), (2, 2), (7, 7), (8, 8)])
eq_(list(it[0]._mapping.keys()), ["User", "id"])
+ def test_entity_col_mix_plain_tuple_frozen(self):
+ s = fixture_session()
+ User = self.classes.User
+
+ stmt = (
+ select(User, User.id)
+ .where(User.id.in_([7, 8, 9]))
+ .order_by(User.id)
+ )
+ result = s.execute(stmt)
+
+ it = loading.merge_frozen_result(s, stmt, result.freeze())
+ it = list(it())
+ eq_([(x.id, y) for x, y in it], [(7, 7), (8, 8), (9, 9)])
+ eq_(list(it[0]._mapping.keys()), ["User", "id"])
+
def test_entity_col_mix_keyed_tuple(self):
s, (u1, u2, u3, u4) = self._fixture()
User = self.classes.User