From: Mike Bayer Date: Fri, 16 May 2008 22:25:53 +0000 (+0000) Subject: begin() pre-issues a flush() in all cases, better fix for [ticket:1046] and allows... X-Git-Tag: rel_0_5beta1~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcc4f9193a06aa87b0d95636af64213262a429e5;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git begin() pre-issues a flush() in all cases, better fix for [ticket:1046] and allows rollback to work properly with autocommit=True/begin() --- diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 5583012e53..c34a695e3b 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -250,17 +250,9 @@ class SessionTransaction(object): self._deleted = self._parent._deleted return - if self.nested: + if self.autoflush: self.session.flush() - if self.autoflush and not self.session.autocommit: - # TODO: the "dirty_states" assertion is expensive, - # so consider these assertions as temporary - # during development - assert not self.session._new - assert not self.session._deleted - assert not self.session._dirty_states - self._new = weakref.WeakKeyDictionary() self._deleted = weakref.WeakKeyDictionary() diff --git a/test/orm/transaction.py b/test/orm/transaction.py index ca36800570..cfa11d2cc5 100644 --- a/test/orm/transaction.py +++ b/test/orm/transaction.py @@ -354,6 +354,21 @@ class AutocommitTest(TransactionTest): sess = create_session(autocommit=True) self.assertRaises(sa_exc.InvalidRequestError, sess.begin_nested) + def test_begin_preflush(self): + sess = create_session(autocommit=True) + + u1 = User(name='ed') + sess.add(u1) + + sess.begin() + u2 = User(name='some other user') + sess.add(u2) + sess.rollback() + assert u2 not in sess + assert u1 in sess + assert sess.query(User).filter_by(name='ed').one() is u1 + + if __name__ == '__main__':