summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@openerp.com>2012-08-16 02:26:27 +0200
committerThibault Delavallée <tde@openerp.com>2012-08-16 02:26:27 +0200
commit5f866fbacd3267d0317bb2e9400a3303850b0f21 (patch)
tree08588337b2444ef0134cfd44f8ccdd961efa4bb8
parent7125c97d6584a60129d0cf60f6ee72ce059f7e53 (diff)
parentd90b1ad170d39ce10dd0b1ace80ea2f942182adf (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.py3
-rw-r--r--openerp/osv/fields.py27
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])