]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug where transaction-level "deleted"
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 5 Jun 2011 16:22:34 +0000 (12:22 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 5 Jun 2011 16:22:34 +0000 (12:22 -0400)
collection wouldn't be cleared of expunged
states, raising an error if they later
became transient [ticket:2182].
Also in 0.6.8.

CHANGES
lib/sqlalchemy/orm/session.py
test/orm/test_session.py

diff --git a/CHANGES b/CHANGES
index 3c7bcd3d4d486adc5abba24272af4f8d5ece855a..345447674234430af41d3519fcac0cd01ae28f45 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -31,6 +31,12 @@ CHANGES
     auto-increment correctly; [ticket:2170].
     Also in 0.6.8.
 
+  - Fixed bug where transaction-level "deleted"
+    collection wouldn't be cleared of expunged
+    states, raising an error if they later
+    became transient [ticket:2182]. 
+    Also in 0.6.8.
+
 - sql
   - Fixed bug whereby metadata.reflect(bind)
     would close a Connection passed as a
index 29353c4b7229bfc8fcc6c00d03154b9d1b7df23f..fe38f01be8314aa4bc3a394228d4f43777771799 100644 (file)
@@ -1072,6 +1072,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)
index 2c1214210229d667db50bf4af47b9d0db9fa4075..282a8914dcc7de6a3b739fd48dcd18c9954e06a7 100644 (file)
@@ -292,6 +292,21 @@ class SessionTest(_fixtures.FixtureTest):
         sess.flush()
         assert u1 in sess
 
+    def test_make_transient_plus_rollback(self):
+        # test for [ticket:2182]
+        users, User = self.tables.users, self.classes.User
+
+        mapper(User, users)
+        sess = Session()
+        u1 = User(name='test')
+        sess.add(u1)
+        sess.commit()
+
+        sess.delete(u1)
+        sess.flush()
+        make_transient(u1)
+        sess.rollback()
+
     def test_deleted_flag(self):
         users, User = self.tables.users, self.classes.User