Merge lp:~openerp-dev/openobject-server/6.0-bug-1071710-chs into lp:openobject-server/6.0

Proposed by Christophe Simonis (OpenERP)
Status: Merged
Merged at revision: 3672
Proposed branch: lp:~openerp-dev/openobject-server/6.0-bug-1071710-chs
Merge into: lp:openobject-server/6.0
Diff against target: 75 lines (+25/-4)
2 files modified
bin/addons/base/test/test_osv_expression.yml (+14/-1)
bin/osv/expression.py (+11/-3)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.0-bug-1071710-chs
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+200605@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/addons/base/test/test_osv_expression.yml'
--- bin/addons/base/test/test_osv_expression.yml 2010-12-29 17:42:23 +0000
+++ bin/addons/base/test/test_osv_expression.yml 2014-01-06 22:46:37 +0000
@@ -110,4 +110,17 @@
110 res_ids = self.search(cr, uid, [('company_id.partner_id', 'not in', [])])110 res_ids = self.search(cr, uid, [('company_id.partner_id', 'not in', [])])
111 res_ids.sort()111 res_ids.sort()
112 assert res_ids == all_ids, "Searching against empty set failed, returns %r" % res_ids112 assert res_ids == all_ids, "Searching against empty set failed, returns %r" % res_ids
113113-
114 Check that we can exclude translated fields (bug lp:1071710)
115-
116 !python {model: res.country}: |
117 # first install french language
118 BLI = self.pool.get('base.language.install')
119 BLI.lang_install(cr, uid, [BLI.create(cr, uid, {'lang': 'fr_FR'})])
120
121 be_id = self.search(cr, uid, [('name', '=', 'Belgium')])[0]
122
123 ctx = {'lang': 'fr_FR'}
124 not_be = self.search(cr, uid, [('name', '!=', 'Belgique')], context=ctx)
125
126 assert be_id not in not_be, "Search match failed"
114127
=== modified file 'bin/osv/expression.py'
--- bin/osv/expression.py 2011-01-17 08:41:08 +0000
+++ bin/osv/expression.py 2014-01-06 22:46:37 +0000
@@ -37,7 +37,7 @@
3737
38 def _is_leaf(self, element, internal=False):38 def _is_leaf(self, element, internal=False):
39 OPS = ('=', '!=', '<>', '<=', '<', '>', '>=', '=?', '=like', '=ilike', 'like', 'not like', 'ilike', 'not ilike', 'in', 'not in', 'child_of')39 OPS = ('=', '!=', '<>', '<=', '<', '>', '>=', '=?', '=like', '=ilike', 'like', 'not like', 'ilike', 'not ilike', 'in', 'not in', 'child_of')
40 INTERNAL_OPS = OPS + ('inselect',)40 INTERNAL_OPS = OPS + ('inselect', 'not inselect')
41 return (isinstance(element, tuple) or isinstance(element, list)) \41 return (isinstance(element, tuple) or isinstance(element, list)) \
42 and len(element) == 3 \42 and len(element) == 3 \
43 and (((not internal) and element[1] in OPS) \43 and (((not internal) and element[1] in OPS) \
@@ -358,6 +358,11 @@
358358
359 operator = operator == '=like' and 'like' or operator359 operator = operator == '=like' and 'like' or operator
360360
361 new_op = 'inselect'
362 if operator in ['not like', 'not ilike', 'not in', '<>', '!=']:
363 new_op = 'not inselect'
364 operator = {'not like': 'like', 'not ilike': 'ilike', 'not in': 'in', '<>': '=', '!=': '='}[operator]
365
361 query1 = '( SELECT res_id' \366 query1 = '( SELECT res_id' \
362 ' FROM ir_translation' \367 ' FROM ir_translation' \
363 ' WHERE name = %s' \368 ' WHERE name = %s' \
@@ -365,7 +370,7 @@
365 ' AND type = %s'370 ' AND type = %s'
366 instr = ' %s'371 instr = ' %s'
367 #Covering in,not in operators with operands (%s,%s) ,etc.372 #Covering in,not in operators with operands (%s,%s) ,etc.
368 if operator in ['in','not in']:373 if operator == 'in':
369 instr = ','.join(['%s'] * len(right))374 instr = ','.join(['%s'] * len(right))
370 query1 += ' AND value ' + operator + ' ' +" (" + instr + ")" \375 query1 += ' AND value ' + operator + ' ' +" (" + instr + ")" \
371 ') UNION (' \376 ') UNION (' \
@@ -386,7 +391,7 @@
386 right,391 right,
387 ]392 ]
388393
389 self.__exp[i] = ('id', 'inselect', (query1, query2))394 self.__exp[i] = ('id', new_op, (query1, query2))
390395
391 return self396 return self
392397
@@ -398,6 +403,9 @@
398 if operator == 'inselect':403 if operator == 'inselect':
399 query = '(%s.%s in (%s))' % (table._table, left, right[0])404 query = '(%s.%s in (%s))' % (table._table, left, right[0])
400 params = right[1]405 params = right[1]
406 elif operator == 'not inselect':
407 query = '(%s.%s not in (%s))' % (table._table, left, right[0])
408 params = right[1]
401 elif operator in ['in', 'not in']:409 elif operator in ['in', 'not in']:
402 params = right and right[:] or []410 params = right and right[:] or []
403 len_before = len(params)411 len_before = len(params)