From: Mike Bayer Date: Fri, 17 Aug 2007 19:34:40 +0000 (+0000) Subject: transactional session rolls back bound connection X-Git-Tag: rel_0_4beta4~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=99b1bee20e20ddb74b1ade6b186f6f7a174968a2;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git transactional session rolls back bound connection --- 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"""