diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-04-06 12:54:29 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-04-06 12:54:29 -0400 |
commit | 8ebc714f6b4c07a8540d228d6a35190c6cfe05c0 (patch) | |
tree | b23e57d6c1090f7ddb282f14d3c7faec859db229 /lib/sqlalchemy/orm/unitofwork.py | |
parent | 33e084532f22d9c12537c817fab908f38b4614a7 (diff) | |
download | sqlalchemy-8ebc714f6b4c07a8540d228d6a35190c6cfe05c0.tar.gz |
add batch execute to ProcessState
Diffstat (limited to 'lib/sqlalchemy/orm/unitofwork.py')
-rw-r--r-- | lib/sqlalchemy/orm/unitofwork.py | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index b4258a58e..585188cfe 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -202,9 +202,9 @@ class UOWTransaction(object): # the per-state actions for those per-mapper actions # that were broken up. for edge in list(self.dependencies): - if None in edge or\ - cycles.issuperset(edge) or \ - edge[0].disabled or edge[1].disabled: + if None in edge or \ + edge[0].disabled or edge[1].disabled or \ + cycles.issuperset(edge): self.dependencies.remove(edge) elif edge[0] in cycles: self.dependencies.remove(edge) @@ -230,12 +230,6 @@ class UOWTransaction(object): n = set_.pop() n.execute_aggregate(self, set_) else: - #r = list(topological.sort( - # self.dependencies, - # postsort_actions)) - #print "-----------" - #print self.dependencies - #print r for rec in topological.sort( self.dependencies, postsort_actions): @@ -396,11 +390,20 @@ class ProcessState(PostSortRec): self.delete = delete self.state = state - def execute(self, uow): - if self.delete: - self.dependency_processor.process_deletes(uow, [self.state]) + def execute_aggregate(self, uow, recs): + cls_ = self.__class__ + dependency_processor = self.dependency_processor + delete = self.delete + our_recs = [r for r in recs + if r.__class__ is cls_ and + r.dependency_processor is dependency_processor and + r.delete is delete] + recs.difference_update(our_recs) + states = [self.state] + [r.state for r in our_recs] + if delete: + dependency_processor.process_deletes(uow, states) else: - self.dependency_processor.process_saves(uow, [self.state]) + dependency_processor.process_saves(uow, states) def __repr__(self): return "%s(%s, %s, delete=%s)" % ( @@ -415,12 +418,6 @@ class SaveUpdateState(PostSortRec): self.state = state self.mapper = mapper - def execute(self, uow): - self.mapper._save_obj( - [self.state], - uow - ) - def execute_aggregate(self, uow, recs): cls_ = self.__class__ mapper = self.mapper @@ -444,13 +441,6 @@ class DeleteState(PostSortRec): self.state = state self.mapper = mapper - def execute(self, uow): - if uow.states[self.state][0]: - self.mapper._delete_obj( - [self.state], - uow - ) - def execute_aggregate(self, uow, recs): cls_ = self.__class__ mapper = self.mapper |