From abcb9dc2734b5dd01d2f3115393d6f76e0da5411 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 7 Apr 2021 10:40:14 -0400 Subject: [PATCH] Add test support for merge_frozen_result 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. Fixes: #6211 Change-Id: I0b53d0f569c817994ad4827a3ddb1626fd2d082f --- doc/build/changelog/unreleased_14/6211.rst | 7 +++++ lib/sqlalchemy/orm/loading.py | 4 +-- test/orm/test_loading.py | 35 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 doc/build/changelog/unreleased_14/6211.rst diff --git a/doc/build/changelog/unreleased_14/6211.rst b/doc/build/changelog/unreleased_14/6211.rst new file mode 100644 index 0000000000..599b865eb9 --- /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 9dcaca0ea0..0dc92daf5b 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 e15dbb09f3..84fb4975db 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 -- 2.47.2