]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Session.delete() adds the given object to the session if
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Aug 2008 21:31:00 +0000 (21:31 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 24 Aug 2008 21:31:00 +0000 (21:31 +0000)
not already present.  This was a regression bug from 0.4
[ticket:1150]

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

diff --git a/CHANGES b/CHANGES
index 9dc7e8004fc8a23d0555560455611377e4275366..ec383e18270b109c2c29ae8907453ef5dd4465fe 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -69,6 +69,10 @@ CHANGES
       may now be a mix of lists and tuples.  (Previously members
       were always lists.)
 
+    - Session.delete() adds the given object to the session if 
+      not already present.  This was a regression bug from 0.4
+      [ticket:1150]
+      
     - The `echo_uow` flag on `Session` is deprecated, and unit-of-work
       logging is now application-level only, not per-session level.
       
index bd271e96d0c8fbf91425d4810875340af0d74a62..20bb85e80b80719d056f9ca0e21e00213f351b8e 100644 (file)
@@ -1241,6 +1241,7 @@ class Session(object):
             raise sa_exc.InvalidRequestError(
                 "Object '%s' already has an identity - it can't be registered "
                 "as pending" % mapperutil.state_str(state))
+                
         self._attach(state)
         if state not in self._new:
             self._new[state] = state.obj()
@@ -1290,8 +1291,9 @@ class Session(object):
                 "different identity" % (mapperutil.state_str(state),
                                         state.key))
 
-        self._deleted[state] = state.obj()
         self._attach(state)
+        self._deleted[state] = state.obj()
+        self.identity_map.add(state)
 
     def _attach(self, state):
         if state.session_id and state.session_id is not self.hash_key:
index 0282d28fd599e2e1567e844ab230eb32b8f8811b..f06b20515bc99bbd8c9baf91379babb73221ca09 100644 (file)
@@ -660,7 +660,11 @@ class SessionTest(_fixtures.FixtureTest):
         u2 = s2.query(User).get(user.id)
         self.assertRaisesMessage(sa.exc.InvalidRequestError, "already persisted with a different identity", s.delete, u2)
 
+        s.expunge(user)
+        assert user not in s
         s.delete(user)
+        assert user in s
+        
         s.flush()
         assert user not in s
         assert s.query(User).count() == 0