[OLINGO-836] compare to null handling

Signed-off-by: Michael Bolz <[email protected]>


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

Branch: refs/heads/OLINGO-882_EnableContainerManagedPersistence
Commit: 27fced0c26f84852df17d3cd343c0eb7642c95e6
Parents: 2538dcc
Author: tothgya <[email protected]>
Authored: Mon Dec 14 13:38:34 2015 +0100
Committer: Michael Bolz <[email protected]>
Committed: Thu Mar 3 08:26:45 2016 +0100

----------------------------------------------------------------------
 .../jpa/processor/core/ODataExpressionParser.java    |  9 ++++++---
 .../core/ODataFilterExpressionParserTest.java        | 15 +++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/27fced0c/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 a6f7c9b..1141831 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
@@ -135,11 +135,14 @@ public class ODataExpressionParser {
             + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
       case EQ:
         return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE
-            + JPQLStatement.Operator.EQ + JPQLStatement.DELIMITER.SPACE + right
+            + (!"null".equals(right) ? JPQLStatement.Operator.EQ : "IS") + 
JPQLStatement.DELIMITER.SPACE + right
             + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
       case NE:
         return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE
-            + JPQLStatement.Operator.NE + JPQLStatement.DELIMITER.SPACE + right
+            + (!"null".equals(right) ? 
+                 JPQLStatement.Operator.NE :
+                 "IS" + JPQLStatement.DELIMITER.SPACE + 
JPQLStatement.Operator.NOT)
+            + JPQLStatement.DELIMITER.SPACE + right
             + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
       case LT:
         return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + 
JPQLStatement.DELIMITER.SPACE
@@ -428,7 +431,7 @@ public class ODataExpressionParser {
         throw 
ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()),
 e);
       }
 
-    } else if (edmSimpleType.getDefaultType().equals(Long.class)) {
+    } else if (Long.class.equals(edmSimpleType.getDefaultType())) {
       uriLiteral = uriLiteral + JPQLStatement.DELIMITER.LONG; //$NON-NLS-1$
     }
     return uriLiteral;

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/27fced0c/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 24062a2..a29ba5c 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
@@ -93,6 +93,11 @@ public class ODataFilterExpressionParserTest {
       "(((E1.id = '123') AND (E1.id <> '123')) OR ((E1.id = '123') AND (E1.id 
<> '123')))" };
   private static final String[] EXPRESSION_DATETIME = { "date eq 
datetime'2000-01-01T00:00:00'",
       "(E1.date = {ts '2000-01-01 00:00:00.000'})" };
+  
+  private static final String[] EXPRESSION_NULL = { "date eq null", "(E1.date 
IS null)" };
+
+  private static final String[] EXPRESSION_NOT_NULL = { "date ne null", 
"(E1.date IS NOT null)" };
+
   private static Edm edm = null;
 
   @BeforeClass
@@ -205,6 +210,16 @@ public class ODataFilterExpressionParserTest {
     assertEquals(EXPRESSION_MEMBER_OR[OUTPUT], 
parseWhereExpression(EXPRESSION_MEMBER_OR[INPUT], false));
   }
 
+  @Test
+  public void testNull() {
+    assertEquals(EXPRESSION_NULL[OUTPUT], 
parseWhereExpression(EXPRESSION_NULL[INPUT], false));
+  }
+
+  @Test
+  public void testNotNull() {
+    assertEquals(EXPRESSION_NOT_NULL[OUTPUT], 
parseWhereExpression(EXPRESSION_NOT_NULL[INPUT], false));
+  }
+  
   private String parseWhereExpression(final String input, final boolean 
isExceptionExpected) {
     FilterExpression expression;
     try {

Reply via email to