Author: faywang
Date: Fri May 15 22:08:32 2009
New Revision: 775367

URL: http://svn.apache.org/viewvc?rev=775367&view=rev
Log:
OPENJPA-1013: add more test scenarios for parameter settting in Criteria Query

Modified:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CreditCard.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CreditCard.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CreditCard.java?rev=775367&r1=775366&r2=775367&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CreditCard.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CreditCard.java
 Fri May 15 22:08:32 2009
@@ -25,7 +25,7 @@
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
-import javax.persistence.OrderBy;
+import javax.persistence.OrderColumn;
 import javax.persistence.Table;
 
 @Entity
@@ -39,7 +39,7 @@
        private Customer customer;
        
        @OneToMany
-       @OrderBy
+       @OrderColumn
        private List<TransactionHistory> transactionHistory;
        
     public long getId() {

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=775367&r1=775366&r2=775367&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 22:08:32 2009
@@ -1,6 +1,7 @@
 package org.apache.openjpa.persistence.criteria;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.persistence.EntityManager;
@@ -413,7 +414,7 @@
     }
     
     @AllowFailure
-    public void testParameters() {
+    public void testParameters1() {
         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
         CriteriaQuery q = cb.create();
         Root<Customer> c = q.from(Customer.class);
@@ -422,6 +423,56 @@
         
         assertEquivalence(q, jpql, new String[]{"stat"}, new Object[] {1});
     }
+
+    @AllowFailure
+    public void testParameters2() {
+        String jpql = "SELECT c FROM Customer c Where c.status = :stat AND 
c.name = :name";
+        CriteriaQuery q = cb.create();
+        Root<Customer> c = q.from(Customer.class);
+        Parameter<Integer> param1 = cb.parameter(Integer.class, "stat");
+        Parameter<String> param2 = cb.parameter(String.class, "name");
+        q.select(c).where(cb.equal(c.get(Customer_.status), param1),
+            cb.equal(c.get(Customer_.name), param2));
+
+        assertEquivalence(q, jpql, new String[] { "stat", "name" }, new 
Object[] { 1, "test" });
+    }
+
+    @AllowFailure
+    public void testParameters3() {
+        String jpql = "SELECT c FROM Customer c Where c.status = :1";
+        CriteriaQuery q = cb.create();
+        Root<Customer> c = q.from(Customer.class);
+        Parameter<Integer> param = cb.parameter(Integer.class);
+        q.select(c).where(cb.equal(c.get(Customer_.status), param));
+        assertEquivalence(q, jpql, new Object[] { 1 });
+    }
+
+    @AllowFailure
+    public void testParameters4() {
+        String jpql = "SELECT c FROM Customer c Where c.status = :1 AND c.name 
= :2";
+        CriteriaQuery q = cb.create();
+        Root<Customer> c = q.from(Customer.class);
+        Parameter<Integer> param1 = cb.parameter(Integer.class);
+        Parameter<Integer> param2 = cb.parameter(Integer.class);
+        q.select(c).where(cb.equal(c.get(Customer_.status), param1),
+            cb.equal(c.get(Customer_.name), param2));    
+        assertEquivalence(q, jpql, new Object[] { 1, "test" });
+    }
+    
+    // collection-valued input parameter
+    @AllowFailure
+    public void testParameters5() {
+        String jpql = "SELECT c FROM Customer c Where c.status IN (:coll)";
+        CriteriaQuery q = cb.create();
+        Root<Customer> c = q.from(Customer.class);
+        Parameter<List> param1 = cb.parameter(List.class);
+        q.select(c).where(cb.equal(c.get(Customer_.status), param1));    
+        List vals = new ArrayList();
+        vals.add(1);
+        vals.add(2);
+        
+        assertEquivalence(q, jpql,  new String[] {"coll"}, new Object[] 
{vals});
+    }
     
     @AllowFailure
     public void testSelectList1() {
@@ -439,7 +490,8 @@
             inv.key().get(Movie_.title), inv.value());
         
         assertEquivalence(q, jpql);
-    }        
+    }
+    
     @AllowFailure
     public void testSelectList2() {
         String jpql = "SELECT NEW CustomerDetails(c.id, c.status, o.quantity) 
FROM " + 
@@ -676,6 +728,28 @@
         assertEquals(jSQL, cSQL);
     }
 
+    void assertEquivalence(CriteriaQuery c, String jpql, 
+        Object[] params) {
+        sql.clear();
+        Query q = em.createQuery(c);
+        for (int i = 0; i < params.length; i++) {
+            q.setParameter(i+1, params[i]);
+        }
+        List cList = q.getResultList();
+        assertEquals(1, sql.size());
+        String cSQL = sql.get(0);
+
+        sql.clear();
+        q = em.createQuery(jpql);
+        for (int i = 0; i < params.length; i++) {
+            q.setParameter(i+1, params[i]);
+        }
+        List jList = q.getResultList();
+        assertEquals(1, sql.size());
+        String jSQL = sql.get(0);
+
+        assertEquals(jSQL, cSQL);
+    }
     
     void assertEquivalence(CriteriaQuery c, String jpql) {
        sql.clear();


Reply via email to