From: Mike Bayer Date: Thu, 9 Dec 2010 15:04:23 +0000 (-0500) Subject: - further fixes to no trans in progress, no trans ever for TLEngine, [ticket:1998] X-Git-Tag: rel_0_6_6~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b99c5bf6392d4fbcc5ed6b7154bad82cb86e853f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - further fixes to no trans in progress, no trans ever for TLEngine, [ticket:1998] --- diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py index c315b83ad8..55f2c88cf2 100644 --- a/lib/sqlalchemy/engine/threadlocal.py +++ b/lib/sqlalchemy/engine/threadlocal.py @@ -72,18 +72,21 @@ class TLEngine(base.Engine): self._connections.trans.append(self.contextual_connect().begin()) def prepare(self): - if not self._connections.trans: + if not hasattr(self._connections, 'trans') or \ + not self._connections.trans: return self._connections.trans[-1].prepare() def commit(self): - if not self._connections.trans: + if not hasattr(self._connections, 'trans') or \ + not self._connections.trans: return trans = self._connections.trans.pop(-1) trans.commit() def rollback(self): - if not self._connections.trans: + if not hasattr(self._connections, 'trans') or \ + not self._connections.trans: return trans = self._connections.trans.pop(-1) trans.rollback() diff --git a/test/engine/test_transaction.py b/test/engine/test_transaction.py index a9045b3024..72081071f6 100644 --- a/test/engine/test_transaction.py +++ b/test/engine/test_transaction.py @@ -540,14 +540,38 @@ class TLTransactionTest(TestBase): tlengine.close() def test_rollback_no_trans(self): + tlengine = create_engine(testing.db.url, strategy="threadlocal") + + # shouldn't fail + tlengine.rollback() + + tlengine.begin() + tlengine.rollback() + # shouldn't fail tlengine.rollback() def test_commit_no_trans(self): + tlengine = create_engine(testing.db.url, strategy="threadlocal") + + # shouldn't fail + tlengine.commit() + + tlengine.begin() + tlengine.rollback() + # shouldn't fail tlengine.commit() def test_prepare_no_trans(self): + tlengine = create_engine(testing.db.url, strategy="threadlocal") + + # shouldn't fail + tlengine.prepare() + + tlengine.begin() + tlengine.rollback() + # shouldn't fail tlengine.prepare()