]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
begin() pre-issues a flush() in all cases, better fix for [ticket:1046] and allows...
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 16 May 2008 22:25:53 +0000 (22:25 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 16 May 2008 22:25:53 +0000 (22:25 +0000)
lib/sqlalchemy/orm/session.py
test/orm/transaction.py

index 5583012e530e9698044f10a975372c2d4aafa601..c34a695e3bcf38ab648f1b1a7c2553a0a480a55d 100644 (file)
@@ -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()
     
index ca3680057062209931770cdd4de6336b24d9b4f5..cfa11d2cc55a21e4ceae4cfcc314dc475f9fc63c 100644 (file)
@@ -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__':