From 99b1bee20e20ddb74b1ade6b186f6f7a174968a2 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 17 Aug 2007 19:34:40 +0000 Subject: [PATCH] transactional session rolls back bound connection --- lib/sqlalchemy/orm/session.py | 2 ++ test/orm/session.py | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 5b39be7d0c..f21d8d69bc 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -242,6 +242,8 @@ class SessionTransaction(object): for t in util.Set(self.__connections.values()): if t[2]: t[0].close() + else: + t[1].rollback() self.session.transaction = None def __enter__(self): diff --git a/test/orm/session.py b/test/orm/session.py index 5cf56ac4ad..e6db74baac 100644 --- a/test/orm/session.py +++ b/test/orm/session.py @@ -357,7 +357,28 @@ class SessionTest(AssertMixin): transaction.rollback() assert len(sess.query(User).select()) == 0 sess.close() - + + def test_bound_connection_transactional(self): + class User(object):pass + mapper(User, users) + c = testbase.db.connect() + + sess = create_session(bind=c, transactional=True) + u = User() + sess.save(u) + sess.flush() + sess.close() + assert not c.in_transaction() + assert c.scalar("select count(1) from users") == 0 + + sess = create_session(bind=c, transactional=True) + u = User() + sess.save(u) + sess.flush() + sess.commit() + assert not c.in_transaction() + assert c.scalar("select count(1) from users") == 1 + @engines.close_open_connections def test_update(self): """test that the update() method functions and doesnet blow away changes""" -- 2.47.3