olingo-odata2 git commit: [OLINGO-1098]Incorrect handling of SQL wildcards '_' and '%'

2018-01-01 Thread archanarai
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 Rai 
Authored: 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

2017-04-24 Thread chrisam
Repository: olingo-odata2
Updated Branches:
  refs/heads/master ff4ab9956 -> 474d8f3e7


[OLINGO-1098] Incorrect handling of SQL wildcards

'_' and '%' on filtering
Signed-off-by: Christian Amend 


Project: 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