summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/engine/threadlocal.py13
-rw-r--r--test/engine/transaction.py21
2 files changed, 28 insertions, 6 deletions
diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py
index d69a40755..d86828716 100644
--- a/lib/sqlalchemy/engine/threadlocal.py
+++ b/lib/sqlalchemy/engine/threadlocal.py
@@ -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)
diff --git a/test/engine/transaction.py b/test/engine/transaction.py
index 5f429761e..6711af8b8 100644
--- a/test/engine/transaction.py
+++ b/test/engine/transaction.py
@@ -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')
@@ -174,6 +176,25 @@ class TLTransactionTest(testbase.PersistTest):
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()
trans = conn.begin()