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/15 07:27:38 UTC

svn commit: r775009 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/ openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/

Author: faywang
Date: Fri May 15 05:27:38 2009
New Revision: 775009

URL: http://svn.apache.org/viewvc?rev=775009&view=rev
Log:
OPENJPA-1013: MEMBER OF support for criteria query

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java?rev=775009&r1=775008&r2=775009&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java Fri May 15 05:27:38 2009
@@ -403,7 +403,6 @@
         assertEquivalence(q, jpql);
     }    
     
-    @AllowFailure
     public void testLiterals() {
         String jpql = "SELECT p FROM Person p where 'Joe' MEMBER OF p.nickNames";
         CriteriaQuery q = cb.create();

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java?rev=775009&r1=775008&r2=775009&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java Fri May 15 05:27:38 2009
@@ -177,11 +177,11 @@
 	    	   exps.accessPath[i++] = ((Types.Managed<?>)r.getModel()).meta;
 	    }
 	//    exps.alias = null;      // String   
-	    exps.ascending = new boolean[]{false};
-	    exps.distinct = _distinct == null ? QueryExpressions.DISTINCT_AUTO :
-	    	_distinct ? QueryExpressions.DISTINCT_TRUE 
-	    			  : QueryExpressions.DISTINCT_FALSE;
-	//    exps.fetchInnerPaths = null; // String[]
+        exps.distinct = _distinct == null ? QueryExpressions.DISTINCT_FALSE :
+            _distinct ?
+            QueryExpressions.DISTINCT_TRUE | QueryExpressions.DISTINCT_AUTO : 
+            QueryExpressions.DISTINCT_FALSE;
+    //    exps.fetchInnerPaths = null; // String[]
 	//    exps.fetchPaths = null;      // String[]
 	    exps.filter = _where == null ? factory.emptyExpression() 
 	    		: _where.toKernelExpression(factory, _model);

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java?rev=775009&r1=775008&r2=775009&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/Expressions.java Fri May 15 05:27:38 2009
@@ -39,8 +39,6 @@
 	static Value toValue(ExpressionImpl<?> e, ExpressionFactory factory, 
 		MetamodelImpl model) {
 		Value v = e.toValue(factory, model);
-		v.setImplicitType(e.getJavaType());
-		v.setAlias(e.getAlias());
 		return v;
 	}
 	
@@ -618,8 +616,9 @@
         @Override
         public org.apache.openjpa.kernel.exps.Expression toKernelExpression(
         	ExpressionFactory factory, MetamodelImpl model) {
-            return factory.contains(factory.getThis(),
-            	Expressions.toValue(collection, factory, model));
+            return factory.contains(
+                Expressions.toValue(collection, factory, model), 
+                Expressions.toValue(element, factory, model));
         }
     }
     

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java?rev=775009&r1=775008&r2=775009&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/PathImpl.java Fri May 15 05:27:38 2009
@@ -28,6 +28,7 @@
 
 import org.apache.openjpa.kernel.exps.ExpressionFactory;
 import org.apache.openjpa.kernel.exps.Value;
+import org.apache.openjpa.meta.JavaTypes;
 import org.apache.openjpa.persistence.meta.Members;
 import org.apache.openjpa.persistence.meta.MetamodelImpl;
 
@@ -75,6 +76,13 @@
             var = factory.newPath();//getJavaType());
             var.setMetaData(model.repos.getMetaData(getJavaType(), null, true));
         }
+        if (member != null) {
+            int typeCode = member.fmd.getDeclaredTypeCode();
+            if (typeCode != JavaTypes.COLLECTION && typeCode != JavaTypes.MAP)
+                var.setImplicitType(getJavaType());
+        }
+        var.setAlias(getAlias());
+        
         return var;
     }