[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 {
