diff --git a/CHANGES.txt b/CHANGES.txt index e78bddca..c25b4a07 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,11 @@ CHANGES ------- +0.5.1 (2014-10-31) +^^^^^^^^^^^^^^^^^^ + +* Fix a bug for processing transactions in line. + 0.5.0 (2014-10-31) ^^^^^^^^^^^^^^^^^^ diff --git a/aiopg/sa/connection.py b/aiopg/sa/connection.py index 60b7dfc3..418b2add 100644 --- a/aiopg/sa/connection.py +++ b/aiopg/sa/connection.py @@ -170,6 +170,7 @@ def _commit_impl(self): yield from cur.execute('COMMIT') finally: cur.close() + self._transaction = None @asyncio.coroutine def _rollback_impl(self): diff --git a/tests/test_sa_transaction.py b/tests/test_sa_transaction.py index 3528f584..b5aef88b 100644 --- a/tests/test_sa_transaction.py +++ b/tests/test_sa_transaction.py @@ -390,3 +390,32 @@ def go(): yield from tr.commit() self.loop.run_until_complete(go()) + + def test_transactions_sequence(self): + @asyncio.coroutine + def go(): + conn = yield from self.connect() + + yield from conn.execute(tbl.delete()) + + self.assertIsNone(conn._transaction) + + tr1 = yield from conn.begin() + self.assertIs(tr1, conn._transaction) + yield from conn.execute(tbl.insert().values(name='a')) + res1 = yield from conn.scalar(tbl.count()) + self.assertEqual(1, res1) + + yield from tr1.commit() + self.assertIsNone(conn._transaction) + + tr2 = yield from conn.begin() + self.assertIs(tr2, conn._transaction) + yield from conn.execute(tbl.insert().values(name='b')) + res2 = yield from conn.scalar(tbl.count()) + self.assertEqual(2, res2) + + yield from tr2.commit() + self.assertIsNone(conn._transaction) + + self.loop.run_until_complete(go())