You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2009/05/30 06:22:24 UTC
svn commit: r780172 - in
/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel:
exps/AbstractExpressionBuilder.java jpql/JPQLExpressionBuilder.java
Author: faywang
Date: Sat May 30 04:22:22 2009
New Revision: 780172
URL: http://svn.apache.org/viewvc?rev=780172&view=rev
Log:
OPENJPA-1013: make setImplicitTypes static so that it can be called by critieria query
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/AbstractExpressionBuilder.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/AbstractExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/AbstractExpressionBuilder.java?rev=780172&r1=780171&r2=780172&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/AbstractExpressionBuilder.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/AbstractExpressionBuilder.java Sat May 30 04:22:22 2009
@@ -337,6 +337,10 @@
*/
protected void setImplicitTypes(Value val1, Value val2,
Class<?> expected) {
+ setImplicitTypes(val1, val2, expected, resolver);
+ }
+ protected static void setImplicitTypes(Value val1, Value val2,
+ Class<?> expected, Resolver resolver) {
Class<?> c1 = val1.getType();
Class<?> c2 = val2.getType();
boolean o1 = c1 == TYPE_OBJECT;
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=780172&r1=780171&r2=780172&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Sat May 30 04:22:22 2009
@@ -43,9 +43,11 @@
import org.apache.openjpa.kernel.exps.Parameter;
import org.apache.openjpa.kernel.exps.Path;
import org.apache.openjpa.kernel.exps.QueryExpressions;
+import org.apache.openjpa.kernel.exps.Resolver;
import org.apache.openjpa.kernel.exps.Subquery;
import org.apache.openjpa.kernel.exps.Value;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.Localizer.Message;
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
@@ -778,6 +780,10 @@
}
private void checkEmbeddable(Value val) {
+ checkEmbeddable(val, currentQuery());
+ }
+
+ public static void checkEmbeddable(Value val, String currentQuery) {
Path path = val instanceof Path ? (Path) val : null;
if (path == null)
return;
@@ -788,9 +794,14 @@
ValueMetaData vm = fmd.isElementCollection() ? fmd.getElement()
: fmd.getValue();
- if (vm.getEmbeddedMetaData() != null)
- throw parseException(EX_USER, "bad-predicate",
- new Object[]{ currentQuery() }, null);
+ if (vm.getEmbeddedMetaData() != null) {
+ //throw parseException(EX_USER, "bad-predicate",
+ // new Object[]{ currentQuery() }, null);
+ String argStr = _loc.get("bad-predicate",
+ new Object[] {fmd.getName()}).getMessage();
+ Message msg = _loc.get("parse-error", argStr, currentQuery);
+ throw new UserException(msg, null);
+ }
}
/**
@@ -1315,8 +1326,19 @@
}
}
- protected void setImplicitTypes(Value val1, Value val2, Class<?> expected) {
- super.setImplicitTypes(val1, val2, expected);
+ public void setImplicitTypes(Value val1, Value val2,
+ Class<?> expected) {
+ String currQuery = currentQuery();
+ setImplicitTypes(val1, val2, expected, resolver, parameterTypes,
+ currQuery);
+ }
+
+
+ public static void setImplicitTypes(Value val1, Value val2,
+ Class<?> expected, Resolver resolver, LinkedMap parameterTypes,
+ String currentQuery) {
+ AbstractExpressionBuilder.setImplicitTypes(val1, val2, expected,
+ resolver);
// as well as setting the types for conversions, we also need to
// ensure that any parameters are declared with the correct type,
@@ -1335,7 +1357,7 @@
return;
if (expected == null)
- checkEmbeddable(path);
+ checkEmbeddable(path, currentQuery);
Class<?> type = path.getType();
if (type == null)