From 155fbd97fcb02cf09be67d9b46cf140e6fd16770 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 1 Oct 2005 19:47:07 +0000 Subject: [PATCH] --- lib/sqlalchemy/mapper.py | 21 ++++++++++++--------- lib/sqlalchemy/objectstore.py | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/lib/sqlalchemy/mapper.py b/lib/sqlalchemy/mapper.py index e9ec1ee578..218c4fb660 100644 --- a/lib/sqlalchemy/mapper.py +++ b/lib/sqlalchemy/mapper.py @@ -658,17 +658,17 @@ class PropertyLoader(MapperProperty): #uowcommit.register_task(self.mapper, True, self, self.parent, False) else: raise " no foreign key ?" - + + def get_object_dependencies(self, obj, uowcommit, passive = True): + """function to retreive the child list off of an object. "passive" means, if its + a lazy loaded list that is not loaded yet, dont load it.""" + if self.uselist: + return uowcommit.uow.attributes.get_list_history(obj, self.key, passive = passive) + else: + return uowcommit.uow.attributes.get_history(obj, self.key) + def process_dependencies(self, deplist, uowcommit, delete = False): print self.mapper.table.name + " " + repr(deplist.map.values()) + " process_dep isdelete " + repr(delete) - - # function to retreive the child list off of an object. "passive" means, if its - # a lazy loaded list that is not loaded yet, dont load it. - def getlist(obj, passive = True): - if self.uselist: - return uowcommit.uow.attributes.get_list_history(obj, self.key, passive = passive) - else: - return uowcommit.uow.attributes.get_history(obj, self.key) # fucntion to set properties across a parent/child object plus an "association row", # based on a join condition @@ -676,6 +676,9 @@ class PropertyLoader(MapperProperty): self._sync_foreign_keys(binary, obj, child, associationrow, clearkeys) setter = BinaryVisitor(sync_foreign_keys) + def getlist(obj, passive=True): + return self.get_object_dependencies(obj, uowcommit, passive) + associationrow = {} # plugin point diff --git a/lib/sqlalchemy/objectstore.py b/lib/sqlalchemy/objectstore.py index 96e2f12ee9..f4639cb47f 100644 --- a/lib/sqlalchemy/objectstore.py +++ b/lib/sqlalchemy/objectstore.py @@ -426,6 +426,26 @@ class UOWTask(object): processor.process_dependencies(targettask.objects, trans, delete = self.isdelete) if not self.listonly and self.isdelete: self.mapper.delete_obj(obj_list, trans) + + def sort_circular_dependencies(self): + d = {} + head = None + for obj in obj_list: + d[obj] = UOWTask(self.mapper, self.isdelete, self.listonly) + d[obj].dependencies = self.dependencies + if head is None: + head = obj + for dep in self.dependencies: + (processor, targettask) = dep + if targetttask is self: + for o in processor.get_object_dependencies(obj, self, passive = True): + if o is head: + head = obj + d[obj].objects.append(o) + if head is None: + return self + else: + return d[head] def __str__(self): if self.isdelete: -- 2.47.2