From 1f6b0f9f8c1ae3cb05184ed9bdfd5eade56e3c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 2 Feb 2016 19:09:55 +0100 Subject: [PATCH] Fix domain parser when value is an operator issue5266 review24751002 --- src/common.js | 22 +++++++++++++++------- tests/sao.js | 5 +++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/common.js b/src/common.js index 3372fe3b37..b5d511741b 100644 --- a/src/common.js +++ b/src/common.js @@ -1033,10 +1033,16 @@ } } var def_operator = this.default_operator(field); - if ((def_operator == operator.trim()) || - (operator.contains(def_operator) && - (operator.contains('not') || - operator.contains('!')))) { + if (def_operator == operator.trim()) { + operator = ''; + if (~this.OPERATORS.indexOf(value)) { + // As the value could be interpreted as an operator + // the default operator must be forced + operator = '"" '; + } + } else if ((operator.contains(def_operator) && + (operator.contains('not') || + operator.contains('!')))) { operator = operator.replace(def_operator, '') .replace('not', '!').trim(); } @@ -1192,7 +1198,7 @@ } else { field = this.strings[name.toLowerCase()]; } - if (operator === null) { + if (!operator) { operator = this.default_operator(field); value = ''; if ((operator == 'ilike') || (operator == 'not ilike')) { @@ -1416,8 +1422,10 @@ push_result(null); } name = [name]; + // empty string is also the default operator + var operators = [''].concat(this.OPERATORS); if (((i + 1) < parts.length) && - (~this.OPERATORS.indexOf(parts[i + 1]))) { + (~operators.indexOf(parts[i + 1]))) { name = name.concat([parts[i + 1]]); i += 1; } else { @@ -1566,7 +1574,7 @@ value = split[1]; } - if (operator === null) { + if (!operator) { operator = this.default_operator(field); } if (value instanceof Array) { diff --git a/tests/sao.js b/tests/sao.js index 2608be0878..963358193c 100644 --- a/tests/sao.js +++ b/tests/sao.js @@ -965,6 +965,9 @@ ]], ['Name: \\"foo\\"', [ c(['Name', null, '"foo"']) + ]], + ['Name: "" <', [ + c(['Name', '', '<']) ]] ].forEach(function(test) { var value = test[0]; @@ -1259,6 +1262,7 @@ [ [[c(['John'])], [['rec_name', 'ilike', '%John%']]], [[c(['Name', null, null])], [['name', 'ilike', '%']]], + [[c(['Name', '', null])], [['name', 'ilike', '%']]], [[c(['Name', '=', null])], [['name', '=', null]]], [[c(['Name', '=', ''])], [['name', '=', '']]], [[c(['Name', null, 'Doe'])], [['name', 'ilike', '%Doe%']]], @@ -1469,6 +1473,7 @@ [[['name', '=', '']], 'Name: =""'], [[['name', 'ilike', '%']], 'Name: '], [[['name', 'ilike', '%Doe%']], 'Name: Doe'], + [[['name', 'ilike', '%<%']], 'Name: "" "<"'], [[['name', 'ilike', 'Doe']], 'Name: =Doe'], [[['name', 'ilike', 'Doe%']], 'Name: Doe%'], [[['name', 'ilike', 'Doe%%']], 'Name: =Doe%'],