diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2021-04-07 16:07:08 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-04-07 16:07:08 +0000 |
| commit | de72737987e6b9757e6b2fe5bea07bb110356ce8 (patch) | |
| tree | ed40cf5984549c8b115afbad4024a80ced12dabe | |
| parent | 57e46cde849d3d35e4e97e953ce29ee8bcc138a7 (diff) | |
| parent | abcb9dc2734b5dd01d2f3115393d6f76e0da5411 (diff) | |
| download | sqlalchemy-de72737987e6b9757e6b2fe5bea07bb110356ce8.tar.gz | |
Merge "Add test support for merge_frozen_result"
| -rw-r--r-- | doc/build/changelog/unreleased_14/6211.rst | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/loading.py | 4 | ||||
| -rw-r--r-- | test/orm/test_loading.py | 35 |
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 |
