From: Mike Bayer Date: Sun, 5 Jun 2011 16:24:02 +0000 (-0400) Subject: - Fixed bug where transaction-level "deleted" X-Git-Tag: rel_0_6_8~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0cf2e728dd3ada4d2d9e2f883a30c1cdbd3d5f5;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed bug where transaction-level "deleted" collection wouldn't be cleared of expunged states, raising an error if they later became transient [ticket:2182]. --- 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)