Merge lp:~openerp-dev/openobject-server/7.0-unaccent-trans-search2-chs into lp:openobject-server/7.0

Proposed by Christophe Simonis (OpenERP)
Status: Merged
Merged at revision: 5268
Proposed branch: lp:~openerp-dev/openobject-server/7.0-unaccent-trans-search2-chs
Merge into: lp:openobject-server/7.0
Diff against target: 80 lines (+28/-22)
1 file modified
openerp/osv/expression.py (+28/-22)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/7.0-unaccent-trans-search2-chs
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+213449@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 'openerp/osv/expression.py'
--- openerp/osv/expression.py 2014-02-03 12:05:25 +0000
+++ openerp/osv/expression.py 2014-03-31 12:31:12 +0000
@@ -1020,6 +1020,7 @@
1020 push(create_substitution_leaf(leaf, (left, operator, right), working_model))1020 push(create_substitution_leaf(leaf, (left, operator, right), working_model))
10211021
1022 elif field.translate and right:1022 elif field.translate and right:
1023 field = left
1023 need_wildcard = operator in ('like', 'ilike', 'not like', 'not ilike')1024 need_wildcard = operator in ('like', 'ilike', 'not like', 'not ilike')
1024 sql_operator = {'=like': 'like', '=ilike': 'ilike'}.get(operator, operator)1025 sql_operator = {'=like': 'like', '=ilike': 'ilike'}.get(operator, operator)
1025 if need_wildcard:1026 if need_wildcard:
@@ -1031,33 +1032,38 @@
1031 sql_operator = sql_operator[4:] if sql_operator[:3] == 'not' else '='1032 sql_operator = sql_operator[4:] if sql_operator[:3] == 'not' else '='
1032 inselect_operator = 'not inselect'1033 inselect_operator = 'not inselect'
10331034
1034 subselect = '( SELECT res_id' \
1035 ' FROM ir_translation' \
1036 ' WHERE name = %s' \
1037 ' AND lang = %s' \
1038 ' AND type = %s'
1039 instr = ' %s'
1040 #Covering in,not in operators with operands (%s,%s) ,etc.
1041 if sql_operator == 'in':1035 if sql_operator == 'in':
1042 instr = ','.join(['%s'] * len(right))1036 right = tuple(right)
1043 subselect += ' AND value ' + sql_operator + ' ' + " (" + instr + ")" \1037
1044 ') UNION (' \1038 if self.has_unaccent and sql_operator.endswith('like'):
1045 ' SELECT id' \1039 trans_left = 'unaccent(value)'
1046 ' FROM "' + working_model._table + '"' \1040 left = 'unaccent("%s")' % (left,)
1047 ' WHERE "' + left + '" ' + sql_operator + ' ' + " (" + instr + "))"1041 instr = 'unaccent(%s)'
1048 else:1042 else:
1049 subselect += ' AND value ' + sql_operator + instr + \1043 trans_left = 'value'
1050 ') UNION (' \1044 left = '"%s"' % (left,)
1051 ' SELECT id' \1045 instr = '%s'
1052 ' FROM "' + working_model._table + '"' \1046
1053 ' WHERE "' + left + '" ' + sql_operator + instr + ")"1047 subselect = """(SELECT res_id
10541048 FROM ir_translation
1055 params = [working_model._name + ',' + left,1049 WHERE name = %s
1050 AND lang = %s
1051 AND type = %s
1052 AND {trans_left} {operator} {right}
1053 ) UNION (
1054 SELECT id
1055 FROM "{table}"
1056 WHERE {left} {operator} {right}
1057 )
1058 """.format(trans_left=trans_left, operator=sql_operator,
1059 right=instr, table=working_model._table, left=left)
1060
1061 params = [working_model._name + ',' + field,
1056 context.get('lang', False) or 'en_US',1062 context.get('lang', False) or 'en_US',
1057 'model',1063 'model',
1058 right,1064 right,
1059 right,1065 right,
1060 ]1066 ]
1061 push(create_substitution_leaf(leaf, ('id', inselect_operator, (subselect, params)), working_model))1067 push(create_substitution_leaf(leaf, ('id', inselect_operator, (subselect, params)), working_model))
10621068
1063 else:1069 else:
@@ -1176,7 +1182,7 @@
11761182
1177 if left in model._columns:1183 if left in model._columns:
1178 format = need_wildcard and '%s' or model._columns[left]._symbol_set[0]1184 format = need_wildcard and '%s' or model._columns[left]._symbol_set[0]
1179 if self.has_unaccent and sql_operator in ('ilike', 'not ilike'):1185 if self.has_unaccent and sql_operator.endswith('like'):
1180 query = '(unaccent(%s."%s") %s unaccent(%s))' % (table_alias, left, sql_operator, format)1186 query = '(unaccent(%s."%s") %s unaccent(%s))' % (table_alias, left, sql_operator, format)
1181 else:1187 else:
1182 query = '(%s."%s" %s %s)' % (table_alias, left, sql_operator, format)1188 query = '(%s."%s" %s %s)' % (table_alias, left, sql_operator, format)