You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2014/11/01 08:25:17 UTC
git commit: [OLINGO-478] Fix for operator precedence bug in
ODataExpression parser for JPA
Repository: olingo-odata2
Updated Branches:
refs/heads/master 95a11bc74 -> a92b4e826
[OLINGO-478] Fix for operator precedence bug in ODataExpression parser
for JPA
Signed-off-by: Chandan V A <ch...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/a92b4e82
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/a92b4e82
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/a92b4e82
Branch: refs/heads/master
Commit: a92b4e826865215ad929398d1c76db6b2995996d
Parents: 95a11bc
Author: Chandan V A <ch...@sap.com>
Authored: Sat Nov 1 12:54:54 2014 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Sat Nov 1 12:54:54 2014 +0530
----------------------------------------------------------------------
.../processor/core/ODataExpressionParser.java | 36 ++++++++++++++------
.../core/ODataExpressionParserTest.java | 22 ++++++------
2 files changed, 37 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a92b4e82/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 7da1e90..0e765be 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
@@ -80,7 +80,8 @@ public class ODataExpressionParser {
switch (unaryExpression.getOperator()) {
case NOT:
- return JPQLStatement.Operator.NOT + "(" + operand + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ return JPQLStatement.Operator.NOT + JPQLStatement.DELIMITER.PARENTHESIS_LEFT + operand
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT; //$NON-NLS-1$ //$NON-NLS-2$
case MINUS:
if (operand.startsWith("-")) {
return operand.substring(1);
@@ -106,22 +107,37 @@ public class ODataExpressionParser {
switch (binaryExpression.getOperator()) {
case AND:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.AND + JPQLStatement.DELIMITER.SPACE
- + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.AND + JPQLStatement.DELIMITER.SPACE
+ + right + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case OR:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.OR + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.OR + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case EQ:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.EQ + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.EQ + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case NE:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.NE + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.NE + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case LT:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.LT + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.LT + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case LE:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.LE + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.LE + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case GT:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.GT + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.GT + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case GE:
- return left + JPQLStatement.DELIMITER.SPACE + JPQLStatement.Operator.GE + JPQLStatement.DELIMITER.SPACE + right;
+ return JPQLStatement.DELIMITER.PARENTHESIS_LEFT + left + JPQLStatement.DELIMITER.SPACE
+ + JPQLStatement.Operator.GE + JPQLStatement.DELIMITER.SPACE + right
+ + JPQLStatement.DELIMITER.PARENTHESIS_RIGHT;
case PROPERTY_ACCESS:
throw new ODataNotImplementedException();
default:
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/a92b4e82/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParserTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParserTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParserTest.java
index 422b5ab..3ca93c5 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParserTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/ODataExpressionParserTest.java
@@ -54,23 +54,23 @@ import org.junit.Test;
public class ODataExpressionParserTest {
- private static final String EXPECTED_STR_1 = "gwt1.SalesOrder = 1234";
- private static final String EXPECTED_STR_2 = "gwt1.SalesOrder >= 1234 AND gwt1.SalesABC <> XYZ";
- private static final String EXPECTED_STR_3 = "gwt1.SalesOrder >= 1234 OR gwt1.SalesABC <> XYZ";
- private static final String EXPECTED_STR_4 = "gwt1.SalesOrder < 1234 AND gwt1.SalesABC <= XYZ";
- private static final String EXPECTED_STR_5 = "gwt1.LineItems > 2345 AND gwt1.SalesOrder >= Amazon";
- private static final String EXPECTED_STR_6 = "gwt1.Address.city = \'City_3\'";
- private static final String EXPECTED_STR_7 = "gwt1.Address.city.area = \'BTM\'";
+ private static final String EXPECTED_STR_1 = "(gwt1.SalesOrder = 1234)";
+ private static final String EXPECTED_STR_2 = "((gwt1.SalesOrder >= 1234) AND (gwt1.SalesABC <> XYZ))";
+ private static final String EXPECTED_STR_3 = "((gwt1.SalesOrder >= 1234) OR (gwt1.SalesABC <> XYZ))";
+ private static final String EXPECTED_STR_4 = "((gwt1.SalesOrder < 1234) AND (gwt1.SalesABC <= XYZ))";
+ private static final String EXPECTED_STR_5 = "((gwt1.LineItems > 2345) AND (gwt1.SalesOrder >= Amazon))";
+ private static final String EXPECTED_STR_6 = "(gwt1.Address.city = \'City_3\')";
+ private static final String EXPECTED_STR_7 = "(gwt1.Address.city.area = \'BTM\')";
private static final String EXPECTED_STR_8 = "gwt1.field1 = 1 AND gwt1.field2 = 'abc'";
private static final String EXPECTED_STR_9 = "gwt1.BuyerAddress, gwt1.BuyerName, gwt1.BuyerId";
private static final String EXPECTED_STR_10 = "gwt1.SalesOrder";
private static final String EXPECTED_STR_11 = "NOT(gwt1.deliveryStatus)";
private static final String EXPECTED_STR_12 =
- "(CASE WHEN (gwt1.currencyCode LIKE '%Ru%') THEN TRUE ELSE FALSE END) = true";
- private static final String EXPECTED_STR_13 = "SUBSTRING(gwt1.currencyCode, 1 + 1 , 2) = 'NR'";
- private static final String EXPECTED_STR_14 = "LOWER(gwt1.currencyCode) = 'inr rupees'";
+ "((CASE WHEN (gwt1.currencyCode LIKE '%Ru%') THEN TRUE ELSE FALSE END) = true)";
+ private static final String EXPECTED_STR_13 = "(SUBSTRING(gwt1.currencyCode, 1 + 1 , 2) = 'NR')";
+ private static final String EXPECTED_STR_14 = "(LOWER(gwt1.currencyCode) = 'inr rupees')";
private static final String EXPECTED_STR_15 =
- "(CASE WHEN (LOWER(gwt1.currencyCode) LIKE '%nr rupees%') THEN TRUE ELSE FALSE END) = true";
+ "((CASE WHEN (LOWER(gwt1.currencyCode) LIKE '%nr rupees%') THEN TRUE ELSE FALSE END) = true)";
private static final String EXPECTED_STR_16 =
"(CASE WHEN (gwt1.currencyCode LIKE '%INR%') THEN TRUE ELSE FALSE END) = true";
private static final String EXPECTED_STR_17 =