]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
transactional session rolls back bound connection
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 17 Aug 2007 19:34:40 +0000 (19:34 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 17 Aug 2007 19:34:40 +0000 (19:34 +0000)
lib/sqlalchemy/orm/session.py
test/orm/session.py

index 5b39be7d0cc1465412c72c9150d32c8f3687e7fa..f21d8d69bcd19524d348ee25b438b218f74b1108 100644 (file)
@@ -242,6 +242,8 @@ class SessionTransaction(object):
         for t in util.Set(self.__connections.values()):
             if t[2]:
                 t[0].close()
+            else:
+                t[1].rollback()
         self.session.transaction = None
 
     def __enter__(self):
index 5cf56ac4ad208ddc9943e5a0b3c01932ef0a9499..e6db74baac76bfa89fa2e813b7589ed1435d4657 100644 (file)
@@ -357,7 +357,28 @@ class SessionTest(AssertMixin):
         transaction.rollback()
         assert len(sess.query(User).select()) == 0
         sess.close()
-    
+
+    def test_bound_connection_transactional(self):
+        class User(object):pass
+        mapper(User, users)
+        c = testbase.db.connect()
+
+        sess = create_session(bind=c, transactional=True)
+        u = User()
+        sess.save(u)
+        sess.flush()
+        sess.close()
+        assert not c.in_transaction()
+        assert c.scalar("select count(1) from users") == 0
+
+        sess = create_session(bind=c, transactional=True)
+        u = User()
+        sess.save(u)
+        sess.flush()
+        sess.commit()
+        assert not c.in_transaction()
+        assert c.scalar("select count(1) from users") == 1
+        
     @engines.close_open_connections
     def test_update(self):
         """test that the update() method functions and doesnet blow away changes"""