summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-12-09 10:04:23 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2010-12-09 10:04:23 -0500
commit6e4515948f87a2299461003c709393b68453d2d0 (patch)
tree9fad0361163f5c0e8670fae9fabb6183266e4bae
parent2cbf1e590f87df848a42c18aa17e0dfb12443852 (diff)
downloadsqlalchemy-6e4515948f87a2299461003c709393b68453d2d0.tar.gz
- further fixes to no trans in progress, no trans ever for TLEngine, [ticket:1998]
-rw-r--r--lib/sqlalchemy/engine/threadlocal.py9
-rw-r--r--test/engine/test_transaction.py24
2 files changed, 30 insertions, 3 deletions
diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py
index 6b222680c..adcce08c6 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 1e8c33a98..01a561d7b 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()