diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index 4715d9268c4..1e3ac1d0034 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -490,7 +490,7 @@ class ExtendedLeaf(object): # i.e.: many2one: 'state_id': current field name # -------------------------------------------------- - def __init__(self, leaf, model, join_context=None): + def __init__(self, leaf, model, join_context=None, internal=False): """ Initialize the ExtendedLeaf :attr [string, tuple] leaf: operator or tuple-formatted domain @@ -529,7 +529,7 @@ class ExtendedLeaf(object): self._models.append(item[0]) self._models.append(model) # check validity - self.check_leaf() + self.check_leaf(internal) def __str__(self): return '' % (str(self.leaf), self.model._table, ','.join(self._get_context_debug())) @@ -575,7 +575,7 @@ class ExtendedLeaf(object): # Leaf manipulation # -------------------------------------------------- - def check_leaf(self): + def check_leaf(self, internal=False): """ Leaf validity rules: - a valid leaf is an operator or a leaf - a valid leaf has a field objects unless @@ -584,7 +584,7 @@ class ExtendedLeaf(object): - left is id, operator is 'child_of' - left is in MAGIC_COLUMNS """ - if not is_operator(self.leaf) and not is_leaf(self.leaf, True): + if not is_operator(self.leaf) and not is_leaf(self.leaf, internal): raise ValueError("Invalid leaf %s" % str(self.leaf)) def is_operator(self): @@ -603,14 +603,14 @@ class ExtendedLeaf(object): self.leaf = normalize_leaf(self.leaf) return True -def create_substitution_leaf(leaf, new_elements, new_model=None): +def create_substitution_leaf(leaf, new_elements, new_model=None, internal=False): """ From a leaf, create a new leaf (based on the new_elements tuple and new_model), that will have the same join context. Used to insert equivalent leafs in the processing stack. """ if new_model is None: new_model = leaf.model new_join_context = [tuple(context) for context in leaf.join_context] - new_leaf = ExtendedLeaf(new_elements, new_model, join_context=new_join_context) + new_leaf = ExtendedLeaf(new_elements, new_model, join_context=new_join_context, internal=internal) return new_leaf class expression(object): @@ -1062,7 +1062,7 @@ class expression(object): 'model', right, ) - push(create_substitution_leaf(leaf, ('id', inselect_operator, (subselect, params)), working_model)) + push(create_substitution_leaf(leaf, ('id', inselect_operator, (subselect, params)), working_model, internal=True)) else: push_result(leaf)