From 6e4515948f87a2299461003c709393b68453d2d0 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 6b222680c2..adcce08c6d 100644 --- a/lib/sqlalchemy/engine/threadlocal.py +++ b/lib/sqlalchemy/engine/threadlocal.py @@ -77,18 +77,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 1e8c33a983..01a561d7b8 100644 --- a/test/engine/test_transaction.py +++ b/test/engine/test_transaction.py @@ -543,14 +543,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