From 62ae90231becb2539c1f33c699fcda4f934dfa1a Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Tue, 19 Aug 2008 23:42:53 +0200 Subject: [PATCH] Bugfix ORM _inherits bzr revid: fp@tinyerp.com-20080819214253-nd4e5ym37lhyv2jj --- bin/osv/expression.py | 9 +++++---- bin/osv/orm.py | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/osv/expression.py b/bin/osv/expression.py index bf6b8f9fe50..abdb9990137 100644 --- a/bin/osv/expression.py +++ b/bin/osv/expression.py @@ -84,7 +84,8 @@ class expression(object): if left in table._inherit_fields: working_table = table.pool.get(table._inherit_fields[left][0]) if working_table not in self.__tables.values(): - self.__joins.append('%s.%s' % (table._table, table._inherits[working_table._name])) + self.__joins.append(('%s.%s=%s.%s' % (working_table._table, 'id', table._table, table._inherits[working_table._name]), working_table._table)) + print 'JOINS', self.__joins self.__tables[i] = working_table @@ -286,13 +287,13 @@ class expression(object): stack.append('(%s %s %s)' % (q1, ops[e], q2,)) query = ' AND '.join(reversed(stack)) - joins = ' AND '.join(map(lambda j: '%s.id = %s' % (self.__main_table._table, j), self.__joins)) + joins = ' AND '.join(map(lambda j: j[0], self.__joins)) if joins: - query = '(%s AND (%s))' % (joins, query) + query = '(%s) AND (%s)' % (joins, query) return (query, flatten(params)) def get_tables(self): - return ['"%s"' % t._table for t in set(self.__tables.values())] + return ['"%s"' % t._table for t in set(self.__tables.values()+[self.__main_table])] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 26da17e0d83..8c1dd59bf25 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -2336,6 +2336,7 @@ class orm(orm_template): else: qu1, qu2, tables = [], [], ['"%s"' % self._table] + print 'WC RES', qu1, qu2, tables return (qu1, qu2, tables) def _check_qorder(self, word): @@ -2345,10 +2346,12 @@ class orm(orm_template): def search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False): + print 'SEARCH', self._name, args if not context: context = {} # compute the where, order by, limit and offset clauses (qu1, qu2, tables) = self._where_calc(cr, user, args, context=context) + print qu1, qu2, tables if len(qu1): qu1 = ' where '+string.join(qu1, ' and ')