You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2009/07/30 16:36:53 UTC

svn commit: r799289 - in /openjpa/trunk: openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java

Author: mikedd
Date: Thu Jul 30 14:36:53 2009
New Revision: 799289

URL: http://svn.apache.org/viewvc?rev=799289&view=rev
Log:
OPENJPA-1211: 
Add getPath method to FromImpl.
Remove @allowFailure annotation from passing testcases in TestStringCriteria. 

Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java?rev=799289&r1=799288&r2=799289&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java Thu Jul 30 14:36:53 2009
@@ -19,13 +19,16 @@
 package org.apache.openjpa.persistence.criteria;
 
 import java.math.BigDecimal;
+import java.util.Set;
 
 import javax.persistence.Parameter;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
 import javax.persistence.criteria.Join;
 import javax.persistence.criteria.JoinType;
 import javax.persistence.criteria.ListJoin;
 import javax.persistence.criteria.MapJoin;
+import javax.persistence.criteria.Path;
 import javax.persistence.criteria.Root;
 import javax.persistence.criteria.SetJoin;
 import javax.persistence.criteria.Subquery;
@@ -60,7 +63,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testJoins2() {
         String jpql = "SELECT c FROM Customer c LEFT JOIN c.orders o WHERE "
                 + "c.status = 1";
@@ -101,7 +103,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testKey() {
         String jpql = "SELECT i.name, p FROM Item i JOIN i.photos p "
                 + "WHERE KEY(p) LIKE '%egret%'";
@@ -115,7 +116,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testRestrictQueryResult() {
         String jpql = "SELECT t FROM CreditCard c JOIN c.transactionHistory t "
                 + "WHERE c.customer.accountNum = 321987 AND INDEX(t) BETWEEN 0 "
@@ -204,19 +204,30 @@
         String jpql = "SELECT e.name, CASE WHEN e.rating = 1 THEN e.salary * 1.1 "
                 + "WHEN e.rating = 2 THEN e.salary * 1.2 ELSE e.salary * 1.01 END "
                 + "FROM Employee e WHERE e.department.name = 'Engineering'";
-        CriteriaQuery q = cb.createQuery();
+        CriteriaQuery<Employee> q = cb.createQuery(Employee.class);
         Root<Employee> e = q.from(Employee.class);
         q.where(cb.equal(e.get("department").get("name"), "Engineering"));
         q.multiselect(e.get("name"), cb.selectCase().when(
-                cb.equal(e.get("rating"), 1), 1.1) // cb.prod(e.get("salary"),
-                                                   // 1.1))
-                .when(cb.equal(e.get("rating"), 2), 1.2) // cb.prod(e.get("salary"),
-                                                         // 1.2))
-                .otherwise(1.01)); // cb.prod(e.get("salary"), 1.01)));
-
-        assertEquivalence(q, jpql);
-    }
-
+                cb.equal(e.get("rating"), 1), 1.1)       // cb.prod(e.get("salary"), 1.1))
+                .when(cb.equal(e.get("rating"), 2), 1.2) // cb.prod(e.get("salary"), 1.2))
+                .otherwise(1.01));                       // cb.prod(e.get("salary"), 1.01)));
+        assertEquivalence(q, jpql);
+    }
+//    
+//    public void testABCDEFG() {
+//        String jpql = "SELECT e.name, CASE WHEN e.rating = 1 THEN e.salary * 1.1 "
+//                + "WHEN e.rating = 2 THEN e.salary * 1.2 ELSE e.salary * 1.01 END "
+//                + "FROM Employee e WHERE e.department.name = 'Engineering'";
+//        CriteriaQuery<Employee> q = cb.createQuery(Employee.class);
+//        Root<Employee> e = q.from(Employee.class);
+//        q.where(cb.equal(e.get(Employee_.department).get(Department_.name), "Engineering"));
+//        q.multiselect(e.get(Employee_.name), cb.selectCase().when(
+//                cb.equal(e.get(Employee_.rating), 1), 1.1)       // cb.prod(e.get("salary"), 1.1))
+//                .when(cb.equal(e.get(Employee_.rating), 2), 1.2) // cb.prod(e.get("salary"), 1.2))
+//                .otherwise(1.01));                       // cb.prod(e.get("salary"), 1.01)));
+//        assertEquivalence(q, jpql);
+//    }
+    
     /*
      * @AllowFailure public void testLiterals() { String jpql =
      * "SELECT p FROM Person p where 'Joe' MEMBER OF " + "p.nickNames";
@@ -230,7 +241,7 @@
     @AllowFailure
     public void testParameters() {
         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
-        CriteriaQuery q = cb.createQuery();
+        CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
         Root<Customer> c = q.from(Customer.class);
         Parameter<Integer> param = cb.parameter(Integer.class);
         q.select(c).where(cb.equal(c.get("status"), param));
@@ -284,7 +295,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testSubquery2() {
         String jpql = "SELECT DISTINCT emp FROM Employee emp WHERE EXISTS ("
                 + "SELECT spouseEmp FROM Employee spouseEmp WHERE spouseEmp = "
@@ -319,7 +329,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testSubquery4() {
         String jpql = "SELECT c FROM Customer c WHERE "
                 + "(SELECT COUNT(o) FROM c.orders o) > 10";

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java?rev=799289&r1=799288&r2=799289&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/FromImpl.java Thu Jul 30 14:36:53 2009
@@ -28,7 +28,9 @@
 import javax.persistence.criteria.JoinType;
 import javax.persistence.criteria.ListJoin;
 import javax.persistence.criteria.MapJoin;
+import javax.persistence.criteria.Path;
 import javax.persistence.criteria.SetJoin;
+import javax.persistence.metamodel.Attribute;
 import javax.persistence.metamodel.CollectionAttribute;
 import javax.persistence.metamodel.ListAttribute;
 import javax.persistence.metamodel.MapAttribute;
@@ -38,6 +40,7 @@
 
 import org.apache.openjpa.persistence.meta.AbstractManagedType;
 import org.apache.openjpa.persistence.meta.Members;
+import org.apache.openjpa.persistence.meta.Members.Member;
 
 /**
  * Represents a bound type, usually an entity that appears in the from clause, 
@@ -249,5 +252,22 @@
         _fetches.add(fetch);
         return fetch;
     }
+    
+    /**
+     * Return a path to the specified field.  
+     */
+    public <Y> Path<Y> get(String attName) {
+        Member<? super X, ?> member = null;
+        for (Attribute<? super X, ?> a : type.getAttributes()) { 
+            if(a instanceof Member<?, ?>){ 
+                if(a.getName().equals(attName)) { 
+                    member = ((Member<? super X,?>)a);
+                    break;
+                }
+            }
+        }
+        // TODO check for null member
+        return new PathImpl(this, member, (Class<X>) member.getJavaType());
+    }        
 
 }