[FIX] bugfix child_of in expressions (to backport to 5.0 branch if no bug is reported)
authorChristophe Simonis <christophe@cobalt>
Tue, 17 Feb 2009 15:01:35 +0000 (16:01 +0100)
committerChristophe Simonis <christophe@cobalt>
Tue, 17 Feb 2009 15:01:35 +0000 (16:01 +0100)
bzr revid: christophe@cobalt-20090217150135-q8j3efqz56ov7v0g

bin/osv/expression.py

index 24e2c9a..2ee1492 100644 (file)
@@ -72,7 +72,7 @@ class expression(object):
         if not self.__exp:
             return self
 
-        def _rec_get(ids, table, parent, left='id', prefix=''):
+        def _rec_get(ids, table, parent=None, left='id', prefix=''):
             if table._parent_store and (not table.pool._init):
 # TODO: Improve where joins are implemented for many with '.', replace by:
 # doms += ['&',(prefix+'.parent_left','<',o.parent_right),(prefix+'.parent_left','>=',o.parent_left)]
@@ -90,7 +90,7 @@ class expression(object):
                         return []
                     ids2 = table.search(cr, uid, [(parent, 'in', ids)], context=context)
                     return ids + rg(ids2, table, parent)
-                return [(left, 'in', rg(ids, table, parent))]
+                return [(left, 'in', rg(ids, table, parent or table._parent_name))]
 
         self.__main_table = table
 
@@ -114,7 +114,7 @@ class expression(object):
             field = working_table._columns.get(fargs[0], False)
             if not field:
                 if left == 'id' and operator == 'child_of':
-                    dom = _rec_get(right, working_table, working_table._parent_name)
+                    dom = _rec_get(right, working_table)
                     self.__exp = self.__exp[:i] + dom + self.__exp[i+1:]
                 continue
 
@@ -167,7 +167,7 @@ class expression(object):
                             return ids
                         return self.__execute_recursive_in(cr, field._id1, field._rel, field._id2, ids)
 
-                    dom = _rec_get(ids2, field_obj, working_table._parent_name)
+                    dom = _rec_get(ids2, field_obj)
                     ids2 = field_obj.search(cr, uid, dom, context=context)
                     self.__exp[i] = ('id', 'in', _rec_convert(ids2))
                 else:
@@ -185,9 +185,9 @@ class expression(object):
 
                     self.__operator = 'in'
                     if field._obj != working_table._name:
-                        dom = _rec_get(ids2, field_obj, working_table._parent_name, left=left, prefix=field._obj)
+                        dom = _rec_get(ids2, field_obj, left=left, prefix=field._obj)
                     else:
-                        dom = _rec_get(ids2, working_table, left)
+                        dom = _rec_get(ids2, working_table, parent=left)
                     self.__exp = self.__exp[:i] + dom + self.__exp[i+1:]
                 else:
                     if isinstance(right, basestring): # and not isinstance(field, fields.related):