diff options
| author | Thibault Delavallée <tde@openerp.com> | 2012-08-16 02:26:27 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2012-08-16 02:26:27 +0200 |
| commit | 5f866fbacd3267d0317bb2e9400a3303850b0f21 (patch) | |
| tree | 08588337b2444ef0134cfd44f8ccdd961efa4bb8 | |
| parent | 7125c97d6584a60129d0cf60f6ee72ce059f7e53 (diff) | |
| parent | d90b1ad170d39ce10dd0b1ace80ea2f942182adf (diff) | |
[MERGE] Merged OpenChatter-3-5 followers refactoring. This server-side branch holds a small refactoring in many2many fields: the query has been taken in a method to be more easily overiden. Please note that this commit is likely to be trashed when merging trunk-mail-review.
bzr revid: tde@openerp.com-20120816002627-n3gnbi7izq34t09h
| -rw-r--r-- | openerp/addons/base/res/res_partner.py | 3 | ||||
| -rw-r--r-- | openerp/osv/fields.py | 27 |
2 files changed, 19 insertions, 11 deletions
diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index aaf93da8c66..4376cb694d3 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -330,7 +330,8 @@ class res_partner(osv.osv): def update_address(self, cr, uid, ids, vals, context=None): addr_vals = dict((key, vals[key]) for key in POSTAL_ADDRESS_FIELDS if vals.get(key)) - return super(res_partner, self).write(cr, uid, ids, addr_vals, context) + if addr_vals: + return super(res_partner, self).write(cr, uid, ids, addr_vals, context) def name_get(self, cr, uid, ids, context=None): if context is None: diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index d6a5f4f63d8..5a47601f8a5 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -658,6 +658,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 = {} @@ -695,15 +709,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, @@ -712,7 +718,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]) |
