Repository: olingo-odata2
Updated Branches:
  refs/heads/master 04a45ec92 -> 1f9dbe462


[OLINGO-1297] JPA NE Handling with special character


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/1f9dbe46
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/1f9dbe46
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/1f9dbe46

Branch: refs/heads/master
Commit: 1f9dbe4623cdb9e7a6a6b98bf79ac8f3f5da7b30
Parents: 04a45ec
Author: Archana Rai <archana....@sap.com>
Authored: Wed Sep 26 15:38:14 2018 +0530
Committer: Archana Rai <archana....@sap.com>
Committed: Wed Sep 26 15:38:14 2018 +0530

----------------------------------------------------------------------
 .../jpa/processor/core/ODataExpressionParser.java | 11 ++++++++++-
 .../core/ODataFilterExpressionParserTest.java     | 18 +++++++++++++-----
 2 files changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1f9dbe46/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 b417627..182a2da 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
@@ -171,11 +171,20 @@ public class ODataExpressionParser {
             + (!"null".equals(right) ? JPQLStatement.Operator.EQ : "IS") + 
JPQLStatement.DELIMITER.SPACE + right
             + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
       case NE:
+        EdmSimpleType edmType = 
(EdmSimpleType)((BinaryExpression)whereExpression).getLeftOperand().getEdmType();
+        
if(EdmSimpleTypeKind.String.getEdmSimpleTypeInstance().isCompatible(edmType)){
+          return  JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE
+              + (!"null".equals(right) ?
+                  JPQLStatement.Operator.NOT +JPQLStatement.DELIMITER.SPACE +  
JPQLStatement.Operator.LIKE :
+                  "IS" + JPQLStatement.DELIMITER.SPACE + 
JPQLStatement.Operator.NOT)
+              + JPQLStatement.DELIMITER.SPACE + right + ("null".equals(right) 
? "" :" ESCAPE '\\'")
+              + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
+        }
         return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE
             + (!"null".equals(right) ?
                 JPQLStatement.Operator.NE :
                 "IS" + JPQLStatement.DELIMITER.SPACE + 
JPQLStatement.Operator.NOT)
-            + JPQLStatement.DELIMITER.SPACE + right
+            + JPQLStatement.DELIMITER.SPACE + right 
             + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
       case LT:
         return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/1f9dbe46/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 87bda2f..a268778 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,9 +49,10 @@ public class ODataFilterExpressionParserTest {
   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 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 =
+  private static final String[] EXPRESSION_NE = { "id ne '123'", "(E1.id NOT 
LIKE '123' ESCAPE '\\')" };
+  private static final String[] EXPRESSION_NE_SPECIAL = { "id ne '1_3'", 
"(E1.id NOT LIKE '1_3' ESCAPE '\\')" };
+  private static final String[] EXPRESSION_ESCAPE = { "id ne '123''22'", 
"(E1.id NOT LIKE '123''22' ESCAPE '\\')" };
+   private static final String[] EXPRESSION_BINARY_AND =
   {
       "id le '123' and soId eq 123L and not (substringof(id,'123') eq false) 
eq true",
       "(((E1.id <= '123') AND (E1.soId = 123)) AND (NOT(((CASE WHEN ('123' 
LIKE CONCAT('%',CONCAT(E1.id,'%')"
@@ -97,8 +98,8 @@ public class ODataFilterExpressionParserTest {
       "(E1.id LIKE CONCAT('%','Str''eet') ESCAPE '\\' )" };
   private static final String[] EXPRESSION_PRECEDENCE = {
       "id eq '123' and id ne '123' or (id eq '123' and id ne '123')",
-      "(((E1.id LIKE '123' ESCAPE '\\') AND (E1.id <> '123')) OR ((E1.id LIKE 
'123' ESCAPE '\\') "
-      + "AND (E1.id <> '123')))" };
+      "(((E1.id LIKE '123' ESCAPE '\\') AND (E1.id NOT LIKE '123' ESCAPE 
'\\')) OR ((E1.id LIKE '123' ESCAPE '\\') "
+      + "AND (E1.id NOT LIKE '123' ESCAPE '\\')))" };
   private static final String[] EXPRESSION_DATETIME = { "date eq 
datetime'2000-01-01T00:00:00'",
       "(E1.date = 2000-01-01 00:00:00.000)" };
   
@@ -276,6 +277,13 @@ public class ODataFilterExpressionParserTest {
     whereExpression = replacePositionalParameters(whereExpression);
     assertEquals(EXPRESSION_NE[OUTPUT], whereExpression);
   }
+  
+  @Test
+  public void testNeSpecialRelation() {
+    String whereExpression = 
parseWhereExpression(EXPRESSION_NE_SPECIAL[INPUT], false);
+    whereExpression = replacePositionalParameters(whereExpression);
+    assertEquals(EXPRESSION_NE_SPECIAL[OUTPUT], whereExpression);
+  }
 
   @Test
   public void testBinaryAnd() {

Reply via email to