summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-04-01 18:40:11 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-04-01 18:40:11 -0400
commit62cf9c8f8f7252473da26b8bafa5ffa6e3b22f92 (patch)
tree26e6b4598d9fec30c3eadcdd31b02e31ff987bfa /lib
parentbffdb4db3596aeb28bc2072672a0c6b388c0a877 (diff)
downloadsqlalchemy-62cf9c8f8f7252473da26b8bafa5ffa6e3b22f92.tar.gz
many-to-one completed for self-referential
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/dependency.py29
1 files changed, 15 insertions, 14 deletions
diff --git a/lib/sqlalchemy/orm/dependency.py b/lib/sqlalchemy/orm/dependency.py
index b458cebf2..973036639 100644
--- a/lib/sqlalchemy/orm/dependency.py
+++ b/lib/sqlalchemy/orm/dependency.py
@@ -140,19 +140,6 @@ class DependencyProcessor(object):
def process_saves(self, uowcommit, states):
pass
- def whose_dependent_on_who(self, state1, state2):
- """Given an object pair assuming `obj2` is a child of `obj1`,
- return a tuple with the dependent object second, or None if
- there is no dependency.
-
- """
- if state1 is state2:
- return None
- elif self.direction == ONETOMANY:
- return (state1, state2)
- else:
- return (state2, state1)
-
def _verify_canload(self, state):
if state is not None and \
not self.mapper._canload(state, allow_subtypes=not self.enable_typechecks):
@@ -271,7 +258,6 @@ class OneToManyDP(DependencyProcessor):
uow.dependencies.update([
(child_action, before_delete),
(before_delete, delete_parent),
- (child_action, delete_parent)
])
def presort_deletes(self, uowcommit, states):
@@ -398,6 +384,21 @@ class ManyToOneDP(DependencyProcessor):
(parent_deletes, child_deletes)
])
+ def per_state_dependencies(self, uow,
+ save_parent,
+ delete_parent,
+ child_action,
+ after_save, before_delete, isdelete):
+ if not isdelete:
+ uow.dependencies.update([
+ (child_action, after_save),
+ (after_save, save_parent),
+ ])
+ else:
+ uow.dependencies.update([
+ (delete_parent, child_action)
+ ])
+
def presort_deletes(self, uowcommit, states):
if self.cascade.delete or self.cascade.delete_orphan:
for state in states: