diff options
-rw-r--r-- | lib/sqlalchemy/engine/threadlocal.py | 13 | ||||
-rw-r--r-- | test/engine/transaction.py | 21 |
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() |