]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed the close() method on Transaction when using strategy='threadlocal'
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 7 Nov 2007 18:31:35 +0000 (18:31 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 7 Nov 2007 18:31:35 +0000 (18:31 +0000)
CHANGES
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/threadlocal.py
test/engine/transaction.py

diff --git a/CHANGES b/CHANGES
index b849557463f1ebe98ca874fa1deccdb376e1fed9..9f329b1e58cce3935ade6839d542998dd8e77b80 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -39,7 +39,9 @@ CHANGES
 
   - Added a field ("info") for storing arbitrary data on schema items
     [ticket:573]    
-    
+
+  - fixed the close() method on Transaction when using strategy='threadlocal'
+      
 - orm
   - eager loading with LIMIT/OFFSET applied no longer adds the primary 
     table joined to a limited subquery of itself; the eager loads now
index bd82f897d943e40c4f0d885bd31724fd7856cebd..f554d6a163adde98179cd26d773aa38a897bf342 100644 (file)
@@ -939,7 +939,7 @@ class Transaction(object):
         method returns.
 
         This is used to cancel a Transaction without affecting the scope of
-        an enclosign transaction.
+        an enclosing transaction.
         """
         if not self._parent._is_active:
             return
index dc6b6007fb2344532e38d32dfab0da92b0b23436..8eb0392082b3a4a94d67e46a8d9ba232326fbbfe 100644 (file)
@@ -76,7 +76,11 @@ class TLSession(object):
                 self.reset()
         elif self.__tcount > 1:
             self.__tcount -= 1
-
+            
+    def close(self):
+        if self.__tcount == 1:
+            self.rollback()
+        
     def is_begun(self):
         return self.__tcount > 0
 
@@ -138,6 +142,9 @@ class TLTransaction(base.Transaction):
     def commit(self):
         self._session.commit()
 
+    def close(self):
+        self._session.close()
+
     def __enter__(self):
         return self
 
index f1fb99316bde8337289b1d654140cf9d6fa6a8ce..ca10965a5e92819abeeca040131e3b1372832446 100644 (file)
@@ -384,7 +384,7 @@ class TLTransactionTest(PersistTest):
         users.drop(tlengine)
         tlengine.dispose()
     
-    def testclose(self):
+    def test_connection_close(self):
         """test that when connections are closed for real, transactions are rolled back and disposed."""
         
         c = tlengine.contextual_connect()
@@ -396,6 +396,32 @@ class TLTransactionTest(PersistTest):
         assert not tlengine.session.in_transaction()
         assert not hasattr(tlengine.session, '_TLSession__transaction')
         assert not hasattr(tlengine.session, '_TLSession__trans')
+
+    def test_transaction_close(self):
+        c = tlengine.contextual_connect()
+        t = c.begin()
+        tlengine.execute(users.insert(), user_id=1, user_name='user1')
+        tlengine.execute(users.insert(), user_id=2, user_name='user2')
+        t2 = c.begin()
+        tlengine.execute(users.insert(), user_id=3, user_name='user3')
+        tlengine.execute(users.insert(), user_id=4, user_name='user4')
+        t2.close()
+
+        external_connection = tlengine.connect()
+        result = external_connection.execute("select * from query_users")
+        try:
+            assert len(result.fetchall()) == 4
+        finally:
+            external_connection.close()
+
+        t.close()
+
+        external_connection = tlengine.connect()
+        result = external_connection.execute("select * from query_users")
+        try:
+            assert len(result.fetchall()) == 0
+        finally:
+            external_connection.close()
         
     def testrollback(self):
         """test a basic rollback"""