[IMP] expression.parse: improved code about extracting inherits\'d fields. I do not like while True statements, I prefer having a clear condition. Behavior should still be the same as before.

bzr revid: tde@openerp.com-20121127163758-tddhbglygcbkvzed
This commit is contained in:
Thibault Delavallée 2012-11-27 17:37:58 +01:00
parent 48138c9d26
commit 07f26441bb
1 changed files with 8 additions and 11 deletions

View File

@ -500,24 +500,21 @@ class expression(object):
working_table = table # The table containing the field (the name provided in the left operand) working_table = table # The table containing the field (the name provided in the left operand)
field_path = left.split('.', 1) field_path = left.split('.', 1)
# 1 Handle inherits fields: replace by a join # 1 Extract field
# - Search for the working_table and extract the field # - Try to directly extract the field
# - Handle inherits fields: replace by a join, find the final new
# working table and extract the field
field = None field = working_table._columns.get(field_path[0])
if field_path[0] in table._inherit_fields: if field_path[0] in table._inherit_fields:
while True: while not field:
field = working_table._columns.get(field_path[0])
if field:
self.leaf_to_table[i] = working_table
break
next_table = working_table.pool.get(working_table._inherit_fields[field_path[0]][0]) next_table = working_table.pool.get(working_table._inherit_fields[field_path[0]][0])
if not self._has_table_alias(next_table._table): if not self._has_table_alias(next_table._table):
self.joins.append('%s."%s"=%s."%s"' % (next_table._table, 'id', working_table._table, working_table._inherits[next_table._name])) self.joins.append('%s."%s"=%s."%s"' % (next_table._table, 'id', working_table._table, working_table._inherits[next_table._name]))
self._add_table_alias(next_table._table, next_table) self._add_table_alias(next_table._table, next_table)
working_table = next_table working_table = next_table
# Or (try to) directly extract the field. field = working_table._columns.get(field_path[0])
else: self.leaf_to_table[i] = working_table
field = working_table._columns.get(field_path[0])
# 2 Field not found # 2 Field not found
# - ('id', 'child_of', ids) and continue the processing OR # - ('id', 'child_of', ids) and continue the processing OR