[IMP] fields: many2many: extracted query generation, to ease overrides.

bzr revid: tde@openerp.com-20120809144203-sm93gsl2db608z85
This commit is contained in:
Thibault Delavallée 2012-08-09 16:42:03 +02:00
parent f58ef68d4d
commit 5ce0720b75
1 changed files with 17 additions and 10 deletions

View File

@ -648,6 +648,20 @@ class many2many(_column):
col2 = '%s_id' % dest_model._table
return (tbl, col1, col2)
def _get_query_and_where_params(self, cr, model, ids, values, where_params):
""" Extracted from ``get`` to facilitate fine-tuning of the generated
query. """
query = 'SELECT %(rel)s.%(id2)s, %(rel)s.%(id1)s \
FROM %(rel)s, %(from_c)s \
WHERE %(rel)s.%(id1)s IN %%s \
AND %(rel)s.%(id2)s = %(tbl)s.id \
%(where_c)s \
%(order_by)s \
%(limit)s \
OFFSET %(offset)d' \
% values
return (query, where_params)
def get(self, cr, model, ids, name, user=None, offset=0, context=None, values=None):
if not context:
context = {}
@ -685,15 +699,7 @@ class many2many(_column):
if self._limit is not None:
limit_str = ' LIMIT %d' % self._limit
query = 'SELECT %(rel)s.%(id2)s, %(rel)s.%(id1)s \
FROM %(rel)s, %(from_c)s \
WHERE %(rel)s.%(id1)s IN %%s \
AND %(rel)s.%(id2)s = %(tbl)s.id \
%(where_c)s \
%(order_by)s \
%(limit)s \
OFFSET %(offset)d' \
% {'rel': rel,
query, where_params = self._get_query_and_where_params(cr, model, ids, {'rel': rel,
'from_c': from_c,
'tbl': obj._table,
'id1': id1,
@ -702,7 +708,8 @@ class many2many(_column):
'limit': limit_str,
'order_by': order_by,
'offset': offset,
}
}, where_params)
cr.execute(query, [tuple(ids),] + where_params)
for r in cr.fetchall():
res[r[1]].append(r[0])