JPA API PR 362 - Add support for Expressions as conditions in CriteriaBuilder CASE expressions
JPA API PR 317 - Fixed build issues after API dependency update. Expressions are not yet implemented.
Signed-off-by: Tomas Kraus <tomas.kraus@oracle.com>
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
index 42049e1..03dec36 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaBuilderImpl.java
@@ -1430,22 +1430,6 @@
buildList(x, internalLiteral(n)), "round");
}
- // This came with API modifications branch and shall be removed.
- @Override
- public Expression<LocalDate> localDate() {
- return null;
- }
-
- @Override
- public Expression<LocalDateTime> localDateTime() {
- return null;
- }
-
- @Override
- public Expression<LocalTime> localTime() {
- return null;
- }
-
// typecasts:
/**
* Typecast.
@@ -2331,6 +2315,39 @@
}
/**
+ * Create expression to return current local date.
+ *
+ * @return expression for current date
+ */
+ @Override
+ public Expression<java.time.LocalDate> localDate() {
+ // TODO: Implement
+ throw new UnsupportedOperationException("Local date expression is not implemented yet");
+ }
+
+ /**
+ * Create expression to return current local datetime.
+ *
+ * @return expression for current timestamp
+ */
+ @Override
+ public Expression<java.time.LocalDateTime> localDateTime() {
+ // TODO: Implement
+ throw new UnsupportedOperationException("Local datetime expression is not implemented yet");
+ }
+
+ /**
+ * Create expression to return current local time.
+ *
+ * @return expression for current time
+ */
+ @Override
+ public Expression<java.time.LocalTime> localTime() {
+ // TODO: Implement
+ throw new UnsupportedOperationException("Local time expression is not implemented yet");
+ }
+
+ /**
* Create predicate to test whether given expression is contained in a list
* of values.
*
@@ -2741,6 +2758,49 @@
}
/**
+ * Add a when/then clause to the case expression.
+ * @param condition "when" condition
+ * @param result "then" result value
+ * @return simple case expression
+ */
+ @Override
+ public SimpleCase<C, R> when(Expression<? extends C> condition, R result) {
+ org.eclipse.persistence.expressions.Expression conditionExp = org.eclipse.persistence.expressions.Expression.from(condition, new ExpressionBuilder());
+ ((FunctionExpression)currentNode).addChild(conditionExp);
+ this.expressions.add(condition);
+
+ org.eclipse.persistence.expressions.Expression resultExp = ((InternalSelection)result).getCurrentNode();
+ resultExp = org.eclipse.persistence.expressions.Expression.from(resultExp, currentNode);
+ ((FunctionExpression)currentNode).addChild(resultExp);
+ Expression<R> resultLiteral = internalLiteral(result);
+ this.expressions.add(resultLiteral);
+
+ setJavaType((Class<R>) resultLiteral.getJavaType());
+ return this;
+ }
+
+ /**
+ * Add a when/then clause to the case expression.
+ * @param condition "when" condition
+ * @param result "then" result expression
+ * @return simple case expression
+ */
+ @Override
+ public SimpleCase<C, R> when(Expression<? extends C> condition, Expression<? extends R> result) {
+ org.eclipse.persistence.expressions.Expression conditionExp = org.eclipse.persistence.expressions.Expression.from(condition, new ExpressionBuilder());
+ ((FunctionExpression)currentNode).addChild(conditionExp);
+ this.expressions.add(condition);
+
+ org.eclipse.persistence.expressions.Expression resultExp = ((InternalSelection)result).getCurrentNode();
+ resultExp = org.eclipse.persistence.expressions.Expression.from(resultExp, currentNode);
+ ((FunctionExpression)currentNode).addChild(resultExp);
+ this.expressions.add(result);
+
+ setJavaType((Class<R>) result.getJavaType());
+ return this;
+ }
+
+ /**
* Add an "else" clause to the case expression.
* @param result "else" result
* @return expression
diff --git a/pom.xml b/pom.xml
index a864d28..a245dff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -194,7 +194,7 @@
<jersey.version>3.1.0-M2</jersey.version>
<jms.version>3.0.0</jms.version>
<json.version>2.1.0</json.version>
- <jpa.api.version>3.1.0-RC2</jpa.api.version>
+ <jpa.api.version>3.1.0</jpa.api.version>
<mail-api.version>2.1.0</mail-api.version>
<angus-mail.version>1.0.0</angus-mail.version>
<oracle.ddlparser.version>3.0.0</oracle.ddlparser.version>