diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-05 18:25:35 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-05 18:25:35 +0000 |
commit | 82ee832c8d16a1df7182a73d4c117d5601a9ead5 (patch) | |
tree | e319602f99c4befcb4d75f8b38abdc80dbbfaf58 /lib/sqlalchemy/engine/threadlocal.py | |
parent | 120dcee5a71187d4bebfe50aedbbefb09184cac1 (diff) | |
download | sqlalchemy-82ee832c8d16a1df7182a73d4c117d5601a9ead5.tar.gz |
more fixes to transaction nesting, interacts better with close() statement
Diffstat (limited to 'lib/sqlalchemy/engine/threadlocal.py')
-rw-r--r-- | lib/sqlalchemy/engine/threadlocal.py | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/lib/sqlalchemy/engine/threadlocal.py b/lib/sqlalchemy/engine/threadlocal.py index e78098fa3..040c6bd9f 100644 --- a/lib/sqlalchemy/engine/threadlocal.py +++ b/lib/sqlalchemy/engine/threadlocal.py @@ -12,7 +12,7 @@ class TLSession(object): self.__tcount = 0 def get_connection(self, close_with_result=False): try: - return self.__transaction + return self.__transaction._increment_connect() except AttributeError: return TLConnection(self, close_with_result=close_with_result) def set_transaction(self, tlconnection, trans): @@ -38,13 +38,13 @@ class TLSession(object): def rollback(self): if self.__tcount > 0: try: - self.__trans.rollback() + self.__trans._rollback_impl() finally: self.reset() def commit(self): if self.__tcount == 1: try: - self.__trans.commit() + self.__trans._commit_impl() finally: self.reset() elif self.__tcount > 1: @@ -56,25 +56,31 @@ class TLConnection(base.Connection): def __init__(self, session, close_with_result): base.Connection.__init__(self, session.engine, close_with_result=close_with_result) self.__session = session + self.__opencount = 1 session = property(lambda s:s.__session) + def _increment_connect(self): + self.__opencount += 1 + return self def _create_transaction(self, parent): return TLTransaction(self, parent) def _begin(self): return base.Connection.begin(self) def begin(self): - trans = base.Connection.begin(self) - self.__session.set_transaction(self, trans) - return trans - + return self.session.begin() + def close(self): + if self.__opencount == 1: + base.Connection.close(self) + self.__opencount -= 1 + class TLTransaction(base.Transaction): - def commit(self): + def _commit_impl(self): base.Transaction.commit(self) - if not self.is_active: - self.connection.session.reset() - def rollback(self): + def _rollback_impl(self): base.Transaction.rollback(self) - if not self.is_active: - self.connection.session.reset() + def commit(self): + self.connection.session.commit() + def rollback(self): + self.connection.session.rollback() class TLEngine(base.ComposedSQLEngine): """a ComposedSQLEngine that includes support for thread-local managed transactions. This engine |