olingo-odata2 git commit: [OLINGO-1098]Incorrect handling of SQL wildcards '_' and '%'
Repository: olingo-odata2 Updated Branches: refs/heads/master 18d677b5c -> 1577e4ea1 [OLINGO-1098]Incorrect handling of SQL wildcards '_' and '%' Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/1577e4ea Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/1577e4ea Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/1577e4ea Branch: refs/heads/master Commit: 1577e4ea169f1a859a2c1d5b6b61f393e9576ad9 Parents: 18d677b Author: Archana RaiAuthored: Tue Jan 2 13:11:44 2018 +0530 Committer: Archana Rai Committed: Tue Jan 2 13:11:44 2018 +0530 -- .../jpa/processor/core/ODataExpressionParser.java | 6 ++ .../core/ODataFilterExpressionParserTest.java | 17 + .../core/access/data/JPAQueryBuilderTest.java | 3 +++ 3 files changed, 18 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1577e4ea/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java -- diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java index 4673675..ca4f55d 100644 --- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java +++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java @@ -152,6 +152,12 @@ public class ODataExpressionParser { + JPQLStatement.Operator.OR + JPQLStatement.DELIMITER.SPACE + right + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT; case EQ: +EdmSimpleType type = (EdmSimpleType)((BinaryExpression)whereExpression).getLeftOperand().getEdmType(); + if(EdmSimpleTypeKind.String.getEdmSimpleTypeInstance().isCompatible(type)){ + return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE + + (!"null".equals(right) ? JPQLStatement.Operator.LIKE : "IS") + JPQLStatement.DELIMITER.SPACE + right + + " ESCAPE '\\'" + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT; +} return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE + (!"null".equals(right) ? JPQLStatement.Operator.EQ : "IS") + JPQLStatement.DELIMITER.SPACE + right + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT; http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1577e4ea/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java -- diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java index 02baae6..bd15849 100644 --- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java +++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java @@ -48,7 +48,7 @@ public class ODataFilterExpressionParserTest { private static final String NAMESPACE = "SalesOrderProcessing"; private static final String ENTITY_NOTE = "Note"; // Index 0 - Is test input and Index 1 - Is expected output - private static final String[] EXPRESSION_EQ = { "id eq '123'", "(E1.id = '123')" }; + private static final String[] EXPRESSION_EQ = { "id eq '123'", "(E1.id LIKE '123' ESCAPE '\\')" }; private static final String[] EXPRESSION_NE = { "id ne '123'", "(E1.id <> '123')" }; private static final String[] EXPRESSION_ESCAPE = { "id ne '123''22'", "(E1.id <> '123''22')" }; private static final String[] EXPRESSION_BINARY_AND = @@ -60,7 +60,7 @@ public class ODataFilterExpressionParserTest { private static final String[] EXPRESSION_BINARY_OR = { "id ge '123' or soId gt 123L", "((E1.id >= '123') OR (E1.soId > 123))" }; private static final String[] EXPRESSION_MEMBER_OR = { "id lt '123' or oValue/Currency eq 'INR'", - "((E1.id < '123') OR (E1.oValue.Currency = 'INR'))" }; + "((E1.id < '123') OR (E1.oValue.Currency LIKE 'INR' ESCAPE '\\'))" }; private static final String[] EXPRESSION_STARTS_WITH = { "startswith(oValue/Currency,'INR')", "E1.oValue.Currency LIKE CONCAT('INR','%') ESCAPE '\\'" }; private
olingo-odata2 git commit: [OLINGO-1098] Incorrect handling of SQL wildcards
Repository: olingo-odata2 Updated Branches: refs/heads/master ff4ab9956 -> 474d8f3e7 [OLINGO-1098] Incorrect handling of SQL wildcards '_' and '%' on filtering Signed-off-by: Christian AmendProject: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/474d8f3e Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/474d8f3e Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/474d8f3e Branch: refs/heads/master Commit: 474d8f3e76efa01a2a267d038aaa61a3bb14244f Parents: ff4ab99 Author: i050510 Authored: Fri Mar 31 13:17:20 2017 +0530 Committer: Christian Amend Committed: Mon Apr 24 14:00:14 2017 +0200 -- .../processor/core/ODataExpressionParser.java | 24 .../core/ODataFilterExpressionParserTest.java | 24 +++- .../resources/SQL_Insert_Material.properties| 8 ++- 3 files changed, 40 insertions(+), 16 deletions(-) -- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/474d8f3e/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java -- diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java index 0f4b7ca..66190a4 100644 --- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java +++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParser.java @@ -193,20 +193,26 @@ public class ODataExpressionParser { case SUBSTRINGOF: if (methodFlag.get() != null && methodFlag.get() == 1) { methodFlag.set(null); - return String.format("(CASE WHEN (%s LIKE CONCAT('%%',CONCAT(%s,'%%'))) THEN TRUE ELSE FALSE END)", + updateValueIfWildcards(first); + return String.format("(CASE WHEN (%s LIKE CONCAT('%%',CONCAT(%s,'%%')) ESCAPE '\\') " + + "THEN TRUE ELSE FALSE END)", second, first); } else { - return String.format("(CASE WHEN (%s LIKE CONCAT('%%',CONCAT(%s,'%%'))) THEN TRUE ELSE FALSE END) = true", + first = updateValueIfWildcards(first); + return String.format("(CASE WHEN (%s LIKE CONCAT('%%',CONCAT(%s,'%%')) ESCAPE '\\') " + + "THEN TRUE ELSE FALSE END) = true", second, first); } case TOLOWER: return String.format("LOWER(%s)", first); case STARTSWITH: // second = second.substring(1, second.length() - 1); -return String.format("%s LIKE CONCAT(%s,'%%')", first, second); +second = updateValueIfWildcards(second); +return String.format("%s LIKE CONCAT(%s,'%%') ESCAPE '\\'", first, second); case ENDSWITH: // second = second.substring(1, second.length() - 1); -return String.format("%s LIKE CONCAT('%%',%s)", first, second); +second = updateValueIfWildcards(second); +return String.format("%s LIKE CONCAT('%%',%s) ESCAPE '\\'", first, second); default: throw new ODataNotImplementedException(); } @@ -217,6 +223,16 @@ public class ODataExpressionParser { } /** + * This method escapes the wildcards + * @param first + */ + private static String updateValueIfWildcards(String value) { +value = value.replace("\\", ""); +value = value.replace("%", "\\%"); +value = value.replace("_", "\\_"); +return value; + } + /** * This method parses the select clause * * @param tableAlias http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/474d8f3e/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java -- diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java index a29ba5c..af798fe 100644 --- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java +++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataFilterExpressionParserTest.java @@ -49,45 +49,47 @@ public class ODataFilterExpressionParserTest { private static final String[] EXPRESSION_BINARY_AND = { "id le