From: Mike Bayer Date: Sun, 8 Oct 2006 19:38:56 +0000 (+0000) Subject: added correct insert ordering X-Git-Tag: rel_0_3_0~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa4e9782ea05cce1443924363b056e25393ac458;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git added correct insert ordering --- diff --git a/lib/sqlalchemy/orm/uowdumper.py b/lib/sqlalchemy/orm/uowdumper.py index e284ebf324..415916332a 100644 --- a/lib/sqlalchemy/orm/uowdumper.py +++ b/lib/sqlalchemy/orm/uowdumper.py @@ -11,7 +11,7 @@ class UOWDumper(unitofwork.UOWExecutor): self.starttask = task self.headers = {} self.execute(None, task) - + def execute(self, trans, task, isdelete=None): oldstarttask = self.starttask oldheaders = self.headers @@ -44,7 +44,25 @@ class UOWDumper(unitofwork.UOWExecutor): self.headers = oldheaders def save_objects(self, trans, task): - for rec in task.tosave_elements: + # sort elements to be inserted by insert order + def comparator(a, b): + if a.obj is None: + x = None + elif not hasattr(a.obj, '_sa_insert_order'): + x = None + else: + x = a.obj._sa_insert_order + if b.obj is None: + y = None + elif not hasattr(b.obj, '_sa_insert_order'): + y = None + else: + y = b.obj._sa_insert_order + return cmp(x, y) + + l = list(task.polymorphic_tosave_elements) + l.sort(comparator) + for rec in l: if rec.listonly: continue self.header("Save elements"+ self._inheritance_tag(task)) @@ -52,7 +70,7 @@ class UOWDumper(unitofwork.UOWExecutor): self.closeheader() def delete_objects(self, trans, task): - for rec in task.todelete_elements: + for rec in task.polymorphic_todelete_elements: if rec.listonly: continue self.header("Delete elements"+ self._inheritance_tag(task))