From 69eb0570639b753b04a0b20480fe4c59fcc67998 Mon Sep 17 00:00:00 2001 From: Vo Minh Thu Date: Tue, 26 Jul 2011 20:48:06 +0200 Subject: [PATCH] [REF] expression: cosmetic changes. bzr revid: vmt@openerp.com-20110726184806-j3nejlzo9ez5epb7 --- openerp/osv/expression.py | 97 ++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 46 deletions(-) diff --git a/openerp/osv/expression.py b/openerp/osv/expression.py index f3be51c7b50..a75c826b3d8 100644 --- a/openerp/osv/expression.py +++ b/openerp/osv/expression.py @@ -502,58 +502,63 @@ class expression(object): if check_nulls: query = '(%s OR %s.%s IS NULL)' % (query, table._table, left) - else: + elif right == False and (left in table._columns) and table._columns[left]._type=="boolean" and (operator == '='): + query = '(%s.%s IS NULL or %s.%s = false )' % (table._table, left, table._table, left) params = [] - if right == False and (left in table._columns) and table._columns[left]._type=="boolean" and (operator == '='): - query = '(%s.%s IS NULL or %s.%s = false )' % (table._table, left, table._table, left) - elif (((right == False) and (type(right)==bool)) or (right is None)) and (operator == '='): - query = '%s.%s IS NULL ' % (table._table, left) - elif right == False and (left in table._columns) and table._columns[left]._type=="boolean" and (operator in ['<>', '!=']): - query = '(%s.%s IS NOT NULL and %s.%s != false)' % (table._table, left, table._table, left) - elif (((right == False) and (type(right)==bool)) or right is None) and (operator in ['<>', '!=']): - query = '%s.%s IS NOT NULL' % (table._table, left) - elif (operator == '=?'): - op = '=' - if (right is False or right is None): - return ('TRUE', []) - if left in table._columns: - format = table._columns[left]._symbol_set[0] - query = '(%s.%s %s %s)' % (table._table, left, op, format) - params = table._columns[left]._symbol_set[1](right) - else: - query = "(%s.%s %s '%%s')" % (table._table, left, op) - params = right + elif (((right == False) and (type(right)==bool)) or (right is None)) and (operator == '='): + query = '%s.%s IS NULL ' % (table._table, left) + params = [] + elif right == False and (left in table._columns) and table._columns[left]._type=="boolean" and (operator in ['<>', '!=']): + query = '(%s.%s IS NOT NULL and %s.%s != false)' % (table._table, left, table._table, left) + params = [] + + elif (((right == False) and (type(right)==bool)) or right is None) and (operator in ['<>', '!=']): + query = '%s.%s IS NOT NULL' % (table._table, left) + params = [] + + elif (operator == '=?'): + if (right is False or right is None): + query = 'TRUE' + params = [] + elif left in table._columns: + format = table._columns[left]._symbol_set[0] + query = '(%s.%s = %s)' % (table._table, left, format) + params = table._columns[left]._symbol_set[1](right) else: - if left == 'id': - query = '%s.id %s %%s' % (table._table, operator) - params = right + query = "(%s.%s = '%%s')" % (table._table, left) + params = right + + elif left == 'id': + query = '%s.id %s %%s' % (table._table, operator) + params = right + + else: + like = operator in ('like', 'ilike', 'not like', 'not ilike') + + op = {'=like':'like','=ilike':'ilike'}.get(operator, operator) + if left in table._columns: + format = like and '%s' or table._columns[left]._symbol_set[0] + query = '(%s.%s %s %s)' % (table._table, left, op, format) + else: + query = "(%s.%s %s '%s')" % (table._table, left, op, right) + + add_null = False + if like: + if isinstance(right, str): + str_utf8 = right + elif isinstance(right, unicode): + str_utf8 = right.encode('utf-8') else: - like = operator in ('like', 'ilike', 'not like', 'not ilike') + str_utf8 = str(right) + params = '%%%s%%' % str_utf8 + add_null = not str_utf8 + elif left in table._columns: + params = table._columns[left]._symbol_set[1](right) - op = {'=like':'like','=ilike':'ilike'}.get(operator, operator) - if left in table._columns: - format = like and '%s' or table._columns[left]._symbol_set[0] - query = '(%s.%s %s %s)' % (table._table, left, op, format) - else: - query = "(%s.%s %s '%s')" % (table._table, left, op, right) - - add_null = False - if like: - if isinstance(right, str): - str_utf8 = right - elif isinstance(right, unicode): - str_utf8 = right.encode('utf-8') - else: - str_utf8 = str(right) - params = '%%%s%%' % str_utf8 - add_null = not str_utf8 - elif left in table._columns: - params = table._columns[left]._symbol_set[1](right) - - if add_null: - query = '(%s OR %s.%s IS NULL)' % (query, table._table, left) + if add_null: + query = '(%s OR %s.%s IS NULL)' % (query, table._table, left) if isinstance(params, basestring): params = [params]