From b99c5bf6392d4fbcc5ed6b7154bad82cb86e853f Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 9 Dec 2010 10:04:23 -0500 Subject: [PATCH] - further fixes to no trans in progress, no trans ever for TLEngine, [ticket:1998] --- lib/sqlalchemy/engine/threadlocal.py | 9 ++++++--- test/engine/test_transaction.py | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) 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() -- 2.47.2