summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--lib/sqlalchemy/orm/session.py4
-rw-r--r--test/orm/session.py4
3 files changed, 11 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 9dc7e8004..ec383e182 100644
--- 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.
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py
index bd271e96d..20bb85e80 100644
--- a/lib/sqlalchemy/orm/session.py
+++ b/lib/sqlalchemy/orm/session.py
@@ -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:
diff --git a/test/orm/session.py b/test/orm/session.py
index 0282d28fd..f06b20515 100644
--- a/test/orm/session.py
+++ b/test/orm/session.py
@@ -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