]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
identified another TLTransaction scenario, and adjusted TLConnection/TLSession to...
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Jun 2006 20:03:09 +0000 (20:03 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Jun 2006 20:03:09 +0000 (20:03 +0000)
lib/sqlalchemy/engine/threadlocal.py
test/engine/transaction.py

index d69a40755edd01b7b71e7b34e62c910d4d2b521c..d868287162bf685b0f48bc89626d0a0210adeec5 100644 (file)
@@ -23,12 +23,11 @@ class TLSession(object):
         except AttributeError:
             pass
         self.__tcount = 0
-    def begin(self, tlconnection=None):
+    def in_transaction(self):
+        return self.__tcount > 0
+    def begin(self):
         if self.__tcount == 0:
-            if tlconnection is None:
-                self.__transaction = self.get_connection()
-            else:
-                self.__transaction = tlconnection
+            self.__transaction = self.get_connection()
             self.__trans = self.__transaction._begin()
         self.__tcount += 1
         return self.__trans
@@ -62,8 +61,10 @@ class TLConnection(base.Connection):
         return TLTransaction(self, parent)
     def _begin(self):
         return base.Connection.begin(self)
+    def in_transaction(self):
+        return self.session.in_transaction()
     def begin(self):
-        return self.session.begin(self)
+        return self.session.begin()
     def close(self):
         if self.__opencount == 1:
             base.Connection.close(self)
index 5f429761e7fb698167f34aa8ebaf6cbc69850535..6711af8b8aadf3347c8909f02a2ead5d9286d285 100644 (file)
@@ -159,6 +159,8 @@ class TLTransactionTest(testbase.PersistTest):
 
     @testbase.unsupported('mysql')
     def testrollback_off_conn(self):
+        # test that a TLTransaction opened off a TLConnection allows that
+        # TLConnection to be aware of the transactional context
         conn = tlengine.contextual_connect()
         trans = conn.begin()
         conn.execute(users.insert(), user_id=1, user_name='user1')
@@ -173,6 +175,25 @@ class TLTransactionTest(testbase.PersistTest):
         finally:
             external_connection.close()
 
+    @testbase.unsupported('mysql')
+    def testmorerollback_off_conn(self):
+        # test that an existing TLConnection automatically takes place in a TLTransaction
+        # opened on a second TLConnection
+        conn = tlengine.contextual_connect()
+        conn2 = tlengine.contextual_connect()
+        trans = conn2.begin()
+        conn.execute(users.insert(), user_id=1, user_name='user1')
+        conn.execute(users.insert(), user_id=2, user_name='user2')
+        conn.execute(users.insert(), user_id=3, user_name='user3')
+        trans.rollback()
+
+        external_connection = tlengine.connect()
+        result = external_connection.execute("select * from query_users")
+        try:
+            assert len(result.fetchall()) == 0
+        finally:
+            external_connection.close()
+
     @testbase.unsupported('mysql')
     def testcommit_off_conn(self):
         conn = tlengine.contextual_connect()