From: Mike Bayer Date: Thu, 22 Jun 2006 20:03:09 +0000 (+0000) Subject: identified another TLTransaction scenario, and adjusted TLConnection/TLSession to... X-Git-Tag: rel_0_2_4~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0e0cedaf9dc085f61949fbe93f389f5a1f5b9cf8;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git identified another TLTransaction scenario, and adjusted TLConnection/TLSession to fix this as well (reverted previous change, and overriding in_transaction() instead) --- diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py index d69a40755e..d868287162 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 5f429761e7..6711af8b8a 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') @@ -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()