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)