From d0cf2e728dd3ada4d2d9e2f883a30c1cdbd3d5f5 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 5 Jun 2011 12:24:02 -0400 Subject: [PATCH] - Fixed bug where transaction-level "deleted" collection wouldn't be cleared of expunged states, raising an error if they later became transient [ticket:2182]. --- CHANGES | 5 +++++ lib/sqlalchemy/orm/session.py | 2 ++ test/orm/test_session.py | 14 ++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/CHANGES b/CHANGES index da822abd92..5fb4c8a218 100644 --- a/CHANGES +++ b/CHANGES @@ -56,6 +56,11 @@ CHANGES the Column isn't set up to detect auto-increment correctly; [ticket:2170]. + - Fixed bug where transaction-level "deleted" + collection wouldn't be cleared of expunged + states, raising an error if they later + became transient [ticket:2182]. + - sql - Fixed bug whereby if FetchedValue was passed to column server_onupdate, it would not diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 61ceeeeb09..54cdeae3ba 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -1032,6 +1032,8 @@ class Session(object): self.identity_map.discard(state) self._deleted.pop(state, None) state.detach() + elif self.transaction: + self.transaction._deleted.pop(state, None) def _register_newly_persistent(self, state): mapper = _state_mapper(state) diff --git a/test/orm/test_session.py b/test/orm/test_session.py index 5bf03bfdbc..8ce65d28c9 100644 --- a/test/orm/test_session.py +++ b/test/orm/test_session.py @@ -299,6 +299,20 @@ class SessionTest(_fixtures.FixtureTest): sess.flush() assert u1 in sess + @testing.resolve_artifact_names + def test_make_transient_plus_rollback(self): + # test for [ticket:2182] + mapper(User, users) + sess = Session() + u1 = User(name='test') + sess.add(u1) + sess.commit() + + sess.delete(u1) + sess.flush() + make_transient(u1) + sess.rollback() + @testing.resolve_artifact_names def test_deleted_flag(self): mapper(User, users) -- 2.47.3