diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-20 00:11:48 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-20 00:11:48 -0500 |
commit | 4f63e2497020681a4f2aa5d4a28495ded008d2b2 (patch) | |
tree | d1609f6954a7b841c30ac7f945f91fac253d3b8b | |
parent | ad66266d3d275a6129e3270eaacdad171bc10817 (diff) | |
download | sqlalchemy-4f63e2497020681a4f2aa5d4a28495ded008d2b2.tar.gz |
- remove the need for a recursive call here
-rw-r--r-- | lib/sqlalchemy/orm/session.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index a33b42612..6dc6d3755 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -237,14 +237,21 @@ class SessionTransaction(object): self.session, self, nested=nested) def _iterate_parents(self, upto=None): - if self._parent is upto: - return (self,) - else: - if self._parent is None: + + current = self + result = () + while current: + result += (current, ) + if current._parent is upto: + break + elif current._parent is None: raise sa_exc.InvalidRequestError( "Transaction %s is not on the active transaction list" % ( upto)) - return (self,) + self._parent._iterate_parents(upto) + else: + current = current._parent + + return result def _take_snapshot(self): if not self._is_transaction_boundary: |