Author: mikedd
Date: Thu May 28 00:22:33 2009
New Revision: 779361

URL: http://svn.apache.org/viewvc?rev=779361&view=rev
Log:
OPENJPA-1015. Enforce column width for testcases

Modified:
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/xml/XMLDefPropMixedFieldAccess2.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
    
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/Customer_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Employee_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Transaction_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/delimited/identifiers/EntityF.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestFieldRange.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ArrayMember_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed0_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/Embed1_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccessMixed_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitFieldAccess_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccessMixed_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ExplicitPropertyAccess_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessBase.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessBase_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessMappedSuperclass_.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessSubclass.java
    
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/meta/ImplicitFieldAccessSubclass_.java
    
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQuery.java
    
openjpa/trunk/openjpa-slice/src/test/java/org/apache/openjpa/slice/TestQueryMultiThreaded.java
    openjpa/trunk/pom.xml

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/xml/XMLDefPropMixedFieldAccess2.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/xml/XMLDefPropMixedFieldAccess2.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/xml/XMLDefPropMixedFieldAccess2.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/xml/XMLDefPropMixedFieldAccess2.java
 Thu May 28 00:22:33 2009
@@ -52,9 +52,10 @@
     
     public boolean equals(Object obj) {
         if (obj instanceof XMLDefPropMixedFieldAccess2) {
-            XMLDefPropMixedFieldAccess2 dpmfa = 
(XMLDefPropMixedFieldAccess2)obj;
-            return getId() == dpmfa.getId() &&
-                getStrField().equals(dpmfa.getStrProp());
+            XMLDefPropMixedFieldAccess2 dpmfa =
+                (XMLDefPropMixedFieldAccess2) obj;
+            return getId() == dpmfa.getId()
+                && getStrField().equals(dpmfa.getStrProp());
         }
         return false;
     }

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CompUser_.java
 Thu May 28 00:22:33 2009
@@ -7,12 +7,14 @@
 import javax.persistence.metamodel.Attribute;
 import javax.persistence.metamodel.List;
 
[email protected](value=org.apache.openjpa.persistence.criteria.CompUser.class)
[email protected](
+    value=org.apache.openjpa.persistence.criteria.CompUser.class)
 public class CompUser_ {
     public static volatile Attribute<CompUser,Address> address;
     public static volatile Attribute<CompUser,Integer> age;
     public static volatile Attribute<CompUser,String> computerName;
-    public static volatile Attribute<CompUser,CompUser.CreditRating> 
creditRating;
+    public static volatile Attribute<CompUser,
+        CompUser.CreditRating> creditRating;
     public static volatile Attribute<CompUser,String> name;
     public static volatile List<CompUser,String> nicknames;
     public static volatile Attribute<CompUser,Integer> userid;

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=779361&r1=779360&r2=779361&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
 Thu May 28 00:22:33 2009
@@ -50,7 +50,8 @@
         return transactionHistory;
     }
     
-    public void setTransactionHistory(List<TransactionHistory> 
transactionHistory) {
+    public void setTransactionHistory(List<TransactionHistory> 
+        transactionHistory) {
         this.transactionHistory = transactionHistory;
     }
     

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Customer_.java
 Thu May 28 00:22:33 2009
@@ -22,5 +22,6 @@
     public static volatile Attribute<Customer,String> name;
     public static volatile Set<Customer,Order> orders;
     public static volatile Attribute<Customer,Integer> status;
-    public static volatile Attribute<Customer,Customer.CreditRating> 
creditRating;
+    public static volatile Attribute<Customer,Customer.CreditRating> 
+        creditRating;
 }

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Employee_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Employee_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Employee_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/Employee_.java
 Thu May 28 00:22:33 2009
@@ -12,7 +12,8 @@
     public static volatile Attribute<Employee,Contact> contactInfo;
     public static volatile Attribute<Employee,Department> department;
     public static volatile Attribute<Employee,Integer> empId;
-    public static volatile Attribute<Employee,FrequentFlierPlan> 
frequentFlierPlan;
+    public static volatile Attribute<Employee,FrequentFlierPlan>
+        frequentFlierPlan;
     public static volatile Attribute<Employee,Manager> manager;
     public static volatile Attribute<Employee,String> name;
     public static volatile Attribute<Employee,Integer> rating;

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FemaleUser_.java
 Thu May 28 00:22:33 2009
@@ -5,6 +5,7 @@
 package org.apache.openjpa.persistence.criteria;
 
 
[email protected](value=org.apache.openjpa.persistence.criteria.FemaleUser.class)
[email protected](
+    value=org.apache.openjpa.persistence.criteria.FemaleUser.class)
 public class FemaleUser_ extends CompUser_  {
 }

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/FrequentFlierPlan_.java
 Thu May 28 00:22:33 2009
@@ -6,7 +6,8 @@
 
 import javax.persistence.metamodel.Attribute;
 
[email protected](value=org.apache.openjpa.persistence.criteria.FrequentFlierPlan.class)
[email protected](
+    value=org.apache.openjpa.persistence.criteria.FrequentFlierPlan.class)
 public class FrequentFlierPlan_ {
     public static volatile Attribute<FrequentFlierPlan,Integer> annualMiles;
     public static volatile Attribute<FrequentFlierPlan,String> id;

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/MaleUser_.java
 Thu May 28 00:22:33 2009
@@ -5,6 +5,7 @@
 package org.apache.openjpa.persistence.criteria;
 
 
[email protected](value=org.apache.openjpa.persistence.criteria.MaleUser.class)
[email protected](
+        value=org.apache.openjpa.persistence.criteria.MaleUser.class)
 public class MaleUser_ extends CompUser_  {
 }

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestCriteria.java
 Thu May 28 00:22:33 2009
@@ -51,550 +51,558 @@
  *
  */
 public class TestCriteria extends SingleEMFTestCase {
-       protected OpenJPAQueryBuilder qb; 
-       protected StringComparison comparator = new StringComparison();
-       
-       public void setUp() {
-                   super.setUp(CLEAR_TABLES,
-                       Account.class,
-                               Address.class, 
-                               CompUser.class,
-                               Contact.class,
-                               Contractor.class, 
-                               Course.class, 
-                               CreditCard.class, 
-                               Customer.class, 
-                               Department.class, 
-                               Employee.class, 
-                               Exempt.class, 
-                               FrequentFlierPlan.class,
-                               Item.class,
-                               LineItem.class,
-                               Manager.class, 
-                               Person.class, 
-                               Order.class, 
-                               Phone.class,
-                               Photo.class,
-                               Student.class, 
-                               Transaction.class,
-                               VideoStore.class);
-               qb = (QueryBuilderImpl)emf.getDynamicQueryBuilder();
-               emf.createEntityManager();
-       }
-       
-       public void tearDown() {
-               // do nothing as we may not have a database connection
-       }
-       
-       public void testLogicalPredicateAssociativity() {
-               DomainObject e = qb.createQueryDefinition(Employee.class);
-               Predicate p1 = e.get("salary").greaterThan(100);
-               Predicate p2 = e.get("rating").equal(5);
-               Predicate p3 = e.get("name").like("John");
-               Predicate w1 = p1.and(p2.or(p3));
-               Predicate w2 = (p1.and(p2)).or(p3);
-               QueryDefinition q1 = e.select(e).where(w1);
-               String jpql1 = qb.toJPQL(q1);
-               
emf.createEntityManager().createDynamicQuery(q1).getResultList();
-               
-               QueryDefinition q2 = e.select(e).where(w2);
-               String jpql2 = qb.toJPQL(q2);
-               System.err.println(jpql1);
-               System.err.println(jpql2);
-               assertNotEquals(jpql1, jpql2);
-               
emf.createEntityManager().createDynamicQuery(q2).getResultList();
-       }
-       
-       public void testMultipleDomainOfSameClass() {
-               DomainObject o1 = qb.createQueryDefinition(Order.class);
-               DomainObject o2 = o1.addRoot(Order.class);
-               o1.select(o1)
-                 .where(o1.get("quantity").greaterThan(o2.get("quantity"))
-                   .and(o2.get("customer").get("lastName").equal("Smith"))
-                   .and(o2.get("customer").get("firstName").equal("John")));
-               
-               String jpql = "select o from Order o, Order o2" +
-                             " where o.quantity > o2.quantity" +
-                             " and o2.customer.lastName = 'Smith'" +
-                             " and o2.customer.firstName = 'John'";
-               compare(jpql, o1);
-       }
+    protected OpenJPAQueryBuilder qb; 
+    protected StringComparison comparator = new StringComparison();
+    
+    public void setUp() {
+            super.setUp(CLEAR_TABLES,
+                Account.class,
+                Address.class, 
+                CompUser.class,
+                Contact.class,
+                Contractor.class, 
+                Course.class, 
+                CreditCard.class, 
+                Customer.class, 
+                Department.class, 
+                Employee.class, 
+                Exempt.class, 
+                FrequentFlierPlan.class,
+                Item.class,
+                LineItem.class,
+                Manager.class, 
+                Person.class, 
+                Order.class, 
+                Phone.class,
+                Photo.class,
+                Student.class, 
+                Transaction.class,
+                VideoStore.class);
+        qb = (QueryBuilderImpl)emf.getDynamicQueryBuilder();
+        emf.createEntityManager();
+    }
+    
+    public void tearDown() {
+        // do nothing as we may not have a database connection
+    }
+    
+    public void testLogicalPredicateAssociativity() {
+        DomainObject e = qb.createQueryDefinition(Employee.class);
+        Predicate p1 = e.get("salary").greaterThan(100);
+        Predicate p2 = e.get("rating").equal(5);
+        Predicate p3 = e.get("name").like("John");
+        Predicate w1 = p1.and(p2.or(p3));
+        Predicate w2 = (p1.and(p2)).or(p3);
+        QueryDefinition q1 = e.select(e).where(w1);
+        String jpql1 = qb.toJPQL(q1);
+        emf.createEntityManager().createDynamicQuery(q1).getResultList();
+        
+        QueryDefinition q2 = e.select(e).where(w2);
+        String jpql2 = qb.toJPQL(q2);
+        System.err.println(jpql1);
+        System.err.println(jpql2);
+        assertNotEquals(jpql1, jpql2);
+        emf.createEntityManager().createDynamicQuery(q2).getResultList();
+    }
+    
+    public void testMultipleDomainOfSameClass() {
+        DomainObject o1 = qb.createQueryDefinition(Order.class);
+        DomainObject o2 = o1.addRoot(Order.class);
+        o1.select(o1)
+          .where(o1.get("quantity").greaterThan(o2.get("quantity"))
+            .and(o2.get("customer").get("lastName").equal("Smith"))
+            .and(o2.get("customer").get("firstName").equal("John")));
+        
+        String jpql = "select o from Order o, Order o2" +
+                      " where o.quantity > o2.quantity" +
+                      " and o2.customer.lastName = 'Smith'" +
+                      " and o2.customer.firstName = 'John'";
+        compare(jpql, o1);
+    }
 
-       public void testFetchJoin() {
-               DomainObject d = qb.createQueryDefinition(Department.class);
-               d.leftJoinFetch("employees");
-               d.where(d.get("deptNo").equal(1));
-               
-               
-               String jpql = "select d from Department d" +
-                             " LEFT JOIN FETCH d.employees" +
-                             " where d.deptNo = 1";
-               compare(jpql, d);
-       }
-       
-       public void testMultipartNavigation() {
-               DomainObject e = qb.createQueryDefinition(Employee.class);
-               DomainObject p = e.join("contactInfo").join("phones");
-               e.where(e.get("contactInfo").get("address").get("zipCode")
-                               .equal("95094")).select(p.get("vendor"));
-                               
-               
-               String jpql = "select p.vendor from Employee e" +
-                             " JOIN e.contactInfo c JOIN c.phones p" +
-                             " where e.contactInfo.address.zipCode = '95094'";
-               compare(jpql, e);
-       }
-       
-       public void testOperatorPath() {
-               QueryDefinition qdef = qb.createQueryDefinition();
-               DomainObject item = qdef.addRoot(Item.class);
-               DomainObject photo = item.join("photos");
-               qdef.select(item.get("name"), photo.value())
-                   .where(photo.key().like("egret"));
-               
-               
-               String jpql = "select i.name, VALUE(p)"
-                               + " from Item i join i.photos p"
-                               + " where KEY(p) like 'egret'";
-               compare(jpql, qdef);
-       }
-       
-       public void testLiteral() {
-               DomainObject c = qb.createQueryDefinition(Customer.class);
-               DomainObject o = c.join("orders");
-               DomainObject a = c.join("address");
-               
o.where(a.get("state").equal("CA").and(a.get("county").equal("Santa Clara")));
-               o.select(o.get("quantity"), o.get("cost").times(1.08), 
a.get("zipCode"));
-               
-               String jpql = "select o.quantity, o.cost*1.08, a.zipCode" +
-                             " from Customer c join c.orders o join c.address 
a" +
-                             " where a.state = 'CA' and a.county = 'Santa 
Clara'";
-               compare(jpql, c);
-       }
-       
-       public void testTypeExpression() {
-               DomainObject e = qb.createQueryDefinition(Employee.class);
-               e.select(e.type())
-                .where(e.type().equal(Exempt.class).not());
-               
-               String jpql = "select TYPE(e)" +
-                             " from Employee e" +
-                             " where TYPE(e) <> Exempt";
-               compare(jpql, e);
-       }
+    public void testFetchJoin() {
+        DomainObject d = qb.createQueryDefinition(Department.class);
+        d.leftJoinFetch("employees");
+        d.where(d.get("deptNo").equal(1));
+        
+        
+        String jpql = "select d from Department d" +
+                      " LEFT JOIN FETCH d.employees" +
+                      " where d.deptNo = 1";
+        compare(jpql, d);
+    }
+    
+    public void testMultipartNavigation() {
+        DomainObject e = qb.createQueryDefinition(Employee.class);
+        DomainObject p = e.join("contactInfo").join("phones");
+        e.where(e.get("contactInfo").get("address").get("zipCode")
+                .equal("95094")).select(p.get("vendor"));
+                
+        
+        String jpql = "select p.vendor from Employee e" +
+                      " JOIN e.contactInfo c JOIN c.phones p" +
+                      " where e.contactInfo.address.zipCode = '95094'";
+        compare(jpql, e);
+    }
+    
+    public void testOperatorPath() {
+        QueryDefinition qdef = qb.createQueryDefinition();
+        DomainObject item = qdef.addRoot(Item.class);
+        DomainObject photo = item.join("photos");
+        qdef.select(item.get("name"), photo.value())
+            .where(photo.key().like("egret"));
+        
+        
+        String jpql = "select i.name, VALUE(p)"
+                    + " from Item i join i.photos p"
+                    + " where KEY(p) like 'egret'";
+        compare(jpql, qdef);
+    }
+    
+    public void testLiteral() {
+        DomainObject c = qb.createQueryDefinition(Customer.class);
+        DomainObject o = c.join("orders");
+        DomainObject a = c.join("address");
+        o.where(a.get("state").equal("CA").and(
+            a.get("county").equal("Santa Clara")));
+        o
+            .select(o.get("quantity"), o.get("cost").times(1.08), a
+                .get("zipCode"));
+        
+        String jpql = "select o.quantity, o.cost*1.08, a.zipCode" +
+                      " from Customer c join c.orders o join c.address a" +
+                      " where a.state = 'CA' and a.county = 'Santa Clara'";
+        compare(jpql, c);
+    }
+    
+    public void testTypeExpression() {
+        DomainObject e = qb.createQueryDefinition(Employee.class);
+        e.select(e.type())
+         .where(e.type().equal(Exempt.class).not());
+        
+        String jpql = "select TYPE(e)" +
+                      " from Employee e" +
+                      " where TYPE(e) <> Exempt";
+        compare(jpql, e);
+    }
 
-       public void testIndex() {
-               DomainObject c = qb.createQueryDefinition(Course.class);
-               DomainObject w = c.join("studentWaitList");
-               c.where(c.get("name").equal("Calculus").and(w.index().equal(0)))
-                .select(w.get("name"));
-               
-               String jpql = "select s.name" +
-                             " from Course c join c.studentWaitList s" +
-                             " where c.name = 'Calculus' and INDEX(s) = 0";
-               compare(jpql, c);
-       }
-       
-       public void testSum() {
-               DomainObject o = qb.createQueryDefinition(Order.class);
-               DomainObject l = o.join("lineItems");
-               DomainObject c = o.join("customer");
-               
c.where(c.get("lastName").equal("Smith").and(c.get("firstName").equal("John")))
-                .select(l.get("price").sum());
-               
-               String jpql = "select SUM(l.price)" +
-                             " from Order o join o.lineItems l JOIN o.customer 
c" +
-                             " where c.lastName = 'Smith' and c.firstName = 
'John'";
-               compare(jpql, c);
-       }
-       
-       public void testSize() {
-               DomainObject d = qb.createQueryDefinition(Department.class);
-               d.where(d.get("name").equal("Sales"))
-                .select(d.get("employees").size());
-               
-               String jpql = "select SIZE(d.employees)" +
-                             " from Department d " +
-                             " where d.name = 'Sales'";
-               compare(jpql, d);
-       }
-       
-       public void testGeneralCase() {
-               DomainObject e = qb.createQueryDefinition(Employee.class);
-               e.where(e.get("department").get("name").equal("Engineering"));
-               e.select(e.get("name"),
-               e.generalCase()
-               .when(e.get("rating").equal(1))
-               .then(e.get("salary").times(1.1))
-               .when(e.get("rating").equal(2))
-               .then(e.get("salary").times(1.2))
-               .elseCase(e.get("salary").times(1.01)));
-               
-               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'";
-               
-               compare(jpql, e);
-       }
-       
-       public void testMemberOf() {
-               DomainObject p = qb.createQueryDefinition(Person.class);
-               p.where(p.literal("Joe").member(p.get("nicknames")));
-               
-               String jpql = "select p from Person p " +
-                             " where 'Joe' MEMBER OF p.nicknames";
-               compare(jpql, p);
-       }
-       
-       public void testParamater() {
-               QueryDefinition qdef = qb.createQueryDefinition();
-               DomainObject customer = qdef.addRoot(Customer.class);
-               qdef.where(customer.get("status").equal(qdef.param("status")));
-               
-               String jpql = "select c from Customer c " +
-                             " where c.status = :status";
-               compare(jpql, qdef, "status", 1);
-       }
-       
-       public void testBetween() {
-               DomainObject c = qb.createQueryDefinition(CreditCard.class);
-               DomainObject t = c.join("transactionHistory");
-               c.select(t).where(c.get("holder").get("name").equal("John Doe")
-                               .and(t.index().between(0, 9)));
-               
-               
-               String jpql = "select t from CreditCard c JOIN 
c.transactionHistory t" +
-                             " where c.holder.name = 'John Doe' AND INDEX(t) " 
+
-                             " BETWEEN 0 AND 9";
-               
-               compare(jpql, c);
-       }
-       
-       public void testIsEmpty() {
-               DomainObject o = qb.createQueryDefinition(Order.class);
-               o.where(o.get("lineItems").isEmpty());
-               
-               
-               String jpql = "select o from Order o " +
-                             " where o.lineItems IS EMPTY";
-               compare(jpql, o);
-       }
+    public void testIndex() {
+        DomainObject c = qb.createQueryDefinition(Course.class);
+        DomainObject w = c.join("studentWaitList");
+        c.where(c.get("name").equal("Calculus").and(w.index().equal(0)))
+         .select(w.get("name"));
+        
+        String jpql = "select s.name" +
+                      " from Course c join c.studentWaitList s" +
+                      " where c.name = 'Calculus' and INDEX(s) = 0";
+        compare(jpql, c);
+    }
+    
+    public void testSum() {
+        DomainObject o = qb.createQueryDefinition(Order.class);
+        DomainObject l = o.join("lineItems");
+        DomainObject c = o.join("customer");
+        c.where(c.get("lastName").equal("Smith").and(c.get("firstName").
+            equal("John"))).select(l.get("price").sum());
+        
+        String jpql = "select SUM(l.price)" +
+                      " from Order o join o.lineItems l JOIN o.customer c" +
+                      " where c.lastName = 'Smith' and c.firstName = 'John'";
+        compare(jpql, c);
+    }
+    
+    public void testSize() {
+        DomainObject d = qb.createQueryDefinition(Department.class);
+        d.where(d.get("name").equal("Sales"))
+         .select(d.get("employees").size());
+        
+        String jpql = "select SIZE(d.employees)" +
+                      " from Department d " +
+                      " where d.name = 'Sales'";
+        compare(jpql, d);
+    }
+    
+    public void testGeneralCase() {
+        DomainObject e = qb.createQueryDefinition(Employee.class);
+        e.where(e.get("department").get("name").equal("Engineering"));
+        e.select(e.get("name"),
+        e.generalCase()
+        .when(e.get("rating").equal(1))
+        .then(e.get("salary").times(1.1))
+        .when(e.get("rating").equal(2))
+        .then(e.get("salary").times(1.2))
+        .elseCase(e.get("salary").times(1.01)));
+        
+        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'";
+        
+        compare(jpql, e);
+    }
+    
+    public void testMemberOf() {
+        DomainObject p = qb.createQueryDefinition(Person.class);
+        p.where(p.literal("Joe").member(p.get("nicknames")));
+        
+        String jpql = "select p from Person p " +
+                      " where 'Joe' MEMBER OF p.nicknames";
+        compare(jpql, p);
+    }
+    
+    public void testParamater() {
+        QueryDefinition qdef = qb.createQueryDefinition();
+        DomainObject customer = qdef.addRoot(Customer.class);
+        qdef.where(customer.get("status").equal(qdef.param("status")));
+        
+        String jpql = "select c from Customer c " +
+                      " where c.status = :status";
+        compare(jpql, qdef, "status", 1);
+    }
+    
+    public void testBetween() {
+        DomainObject c = qb.createQueryDefinition(CreditCard.class);
+        DomainObject t = c.join("transactionHistory");
+        c.select(t).where(c.get("holder").get("name").equal("John Doe")
+                .and(t.index().between(0, 9)));
+        
+        
+        String jpql = "select t from CreditCard c JOIN c.transactionHistory t" 
+
+                      " where c.holder.name = 'John Doe' AND INDEX(t) " +
+                      " BETWEEN 0 AND 9";
+        
+        compare(jpql, c);
+    }
+    
+    public void testIsEmpty() {
+        DomainObject o = qb.createQueryDefinition(Order.class);
+        o.where(o.get("lineItems").isEmpty());
+        
+        
+        String jpql = "select o from Order o " +
+                      " where o.lineItems IS EMPTY";
+        compare(jpql, o);
+    }
 
-       public void testNonCorrelatedSubQuery() {
-               QueryDefinition q1 = qb.createQueryDefinition();
-               DomainObject goodCustomer = q1.addRoot(Customer.class);
-               
-               QueryDefinition q2 = qb.createQueryDefinition();
-               DomainObject customer = q2.addRoot(Customer.class);
-               
-               q1.where(goodCustomer.get("balanceOwned")
-                               
.lessThan(q2.select(customer.get("balanceOwned").avg())));
-               
-               String jpql = "select c from Customer c "
-                                       + " where c.balanceOwned < " 
-                                       + "(select AVG(c2.balanceOwned) from 
Customer c2)";
-               compare(jpql, q1);
-       }
+    public void testNonCorrelatedSubQuery() {
+        QueryDefinition q1 = qb.createQueryDefinition();
+        DomainObject goodCustomer = q1.addRoot(Customer.class);
+        
+        QueryDefinition q2 = qb.createQueryDefinition();
+        DomainObject customer = q2.addRoot(Customer.class);
+        
+        q1.where(goodCustomer.get("balanceOwned")
+                .lessThan(q2.select(customer.get("balanceOwned").avg())));
+        
+        String jpql = "select c from Customer c "
+                    + " where c.balanceOwned < " 
+                    + "(select AVG(c2.balanceOwned) from Customer c2)";
+        compare(jpql, q1);
+    }
 
-       public void testNew() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject customer = q.addRoot(Customer.class);
-               DomainObject order = customer.join("orders");
-               q.where(order.get("count").greaterThan(100))
-                .select(q.newInstance(Customer.class, customer.get("id"),
-                                                      customer.get("status"),
-                                                      order.get("count")));
-               
-               
-               String jpql = "SELECT NEW 
org.apache.openjpa.persistence.criteria.Customer" 
-                                       + "(c.id, c.status, o.count)"
-                                       + " FROM Customer c JOIN c.orders o" 
-                                       + " WHERE o.count > 100";
-               compare(jpql, q);
-       }
-       
-       public void testKeyValueOperatorPath() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject v = q.addRoot(VideoStore.class);
-               DomainObject i = v.join("videoInventory");
-               q.where(v.get("location").get("zipCode").equal("94301")
-                .and(i.value().greaterThan(0)));
-               q.select(v.get("location").get("street"), i.key().get("title"), 
i.value());
-               
-               String jpql = "SELECT v.location.street, KEY(v2).title, 
VALUE(v2)" 
-                                       + " FROM VideoStore v JOIN 
v.videoInventory v2"
-                                       + " WHERE v.location.zipCode = '94301' 
AND VALUE(v2) > 0";
-               
-               compare(jpql, q);
-       }
-       
-       public void testGroupByHaving() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject customer = q.addRoot(Customer.class);
-               q.select(customer.get("status"), 
customer.get("filledOrderCount").avg(),
-                        customer.count())
-                .groupBy(customer.get("status"))
-                .having(customer.get("status").in(1, 2));
-               
-               String jpql = "SELECT c.status, AVG(c.filledOrderCount), 
COUNT(c)"
-                                       + " FROM Customer c"
-                                       + " GROUP BY c.status"
-                                       + " HAVING c.status IN (1, 2)";
-               
-               compare(jpql, q);
-       }
-       
-       public void testGroupByHaving2() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject customer = q.addRoot(Customer.class);
-               q.select(customer.get("country"), customer.count())
-                .groupBy(customer.get("country"))
-                .having(customer.count().greaterThan(30));
-               
-               String jpql = "SELECT c.country, COUNT(c)" 
-                                       + " FROM Customer c"
-                                       + " GROUP BY c.country"
-                                       + " HAVING COUNT(c) > 30";
-               compare(jpql, q);
-       }
-       
-       public void testOrderBy() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject customer = q.addRoot(Customer.class);
-               DomainObject order = customer.join("orders");
-               DomainObject address = customer.join("address");
-               q.where(address.get("state").equal("CA"))
-               .select(order)
-               .orderBy(order.get("quantity").desc(), order.get("totalcost"));
-               String jpql = "SELECT o"
-                                       + " FROM Customer c JOIN c.orders o 
JOIN c.address a"
-                                       + " WHERE a.state = 'CA'"
-                                       + " ORDER BY o.quantity DESC, 
o.totalcost";             
-               compare(jpql, q);
-       }
-       
-       public void testOrderBy2() {
-               QueryDefinition q = qb.createQueryDefinition();
-               DomainObject customer = q.addRoot(Customer.class);
-               DomainObject order = customer.join("orders");
-               DomainObject address = customer.join("address");
-               q.where(address.get("state").equal("CA"))
-               .select(order.get("quantity"), address.get("zipCode"))
-               .orderBy(order.get("quantity").desc(), address.get("zipCode"));
-               String jpql = "SELECT o.quantity, a.zipCode"
-                                       + " FROM Customer c JOIN c.orders o 
JOIN c.address a"
-                                       + " WHERE a.state = 'CA'"
-                                       + " ORDER BY o.quantity DESC, 
a.zipCode";
-               compare(jpql, q);
-       }
-       
-       public void testOrderByExpression() {
-               DomainObject o = qb.createQueryDefinition(Order.class);
-               DomainObject a = o.join("customer").join("address");
-               SelectItem taxedCost = o.get("cost").times(1.08);
-               o.select(o.get("quantity"), taxedCost, a.get("zipCode"))
-               .where(a.get("state").equal("CA")
-               .and(a.get("county").equal("Santa Clara")))
-               .orderBy(o.get("quantity"), taxedCost, a.get("zipCode"));
-               
-               String jpql = "SELECT o.quantity, o.cost*1.08 as o2, a.zipCode" 
-                                       + " FROM Order o JOIN o.customer c JOIN 
c.address a"
-                                       + " WHERE a.state = 'CA' AND a.county = 
'Santa Clara'"
-                                       + " ORDER BY o.quantity, o2, a.zipCode";
-               
-               compare(jpql, o);
-       }
-       
-       public void testCorrelatedSubquery() {
-               QueryDefinition q1 = qb.createQueryDefinition();
-               DomainObject emp = q1.addRoot(Employee.class);
-               
-               QueryDefinition q2 = qb.createQueryDefinition();
-               DomainObject spouseEmp = q2.addRoot(Employee.class);
-               
-               q2.where(spouseEmp.equal(emp.get("spouse"))).select(spouseEmp);
-               q1.selectDistinct(emp).where(q2.exists());
-               
-               String jpql = "SELECT DISTINCT e "
-                                       + " FROM Employee e"
-                                       + " WHERE EXISTS ("
-                                               + " SELECT e2 " 
-                                               + " FROM Employee e2"
-                                               + " WHERE e2 = e.spouse)";
-               
-               compare(jpql, q1);
-       }
-       
-       public void testCreateSubquery() {
-               DomainObject customer = 
qb.createQueryDefinition(Customer.class);
-               DomainObject order = 
qb.createSubqueryDefinition(customer.get("orders"));
-               
customer.where(order.select(order.get("cost").avg()).greaterThan(100));
-               
-               String jpql = "SELECT c "
-                                       + " FROM Customer c"
-                                       + " WHERE (SELECT AVG(o.cost) FROM 
c.orders o) > 100";
-               
-               compare(jpql, customer);
-       }
-       
-       public void testTypeList() {
-               DomainObject q = qb.createQueryDefinition(Employee.class);
-               q.where(q.type().in(Exempt.class, Contractor.class));
-               
-               String jpql = "SELECT e "
-                       + " FROM Employee e"
-                       + " WHERE TYPE(e) IN (Exempt, Contractor)";
-               
-               compare(jpql, q);
-       }
-       
-       public void testStringList() {
-               DomainObject q = qb.createQueryDefinition(Customer.class);
-               q.where(q.get("country").in("USA", "UK", "France"));
-               
-               String jpql = "SELECT c "
-                       + " FROM Customer c"
-                       + " WHERE c.country IN ('USA', 'UK', 'France')";
-               compare(jpql, q);
-       }
-       
-       public void testConcat() {
-               DomainObject e = qb.createQueryDefinition(Employee.class);
-               DomainObject f = e.join("frequentFlierPlan");
-               Expression c = 
-               
e.generalCase().when(f.get("annualMiles").greaterThan(50000)).then("Platinum")
-                              
.when(f.get("annualMiles").greaterThan(25000)).then("Gold")
-                              .elseCase("XYZ");
-               e.select(e.get("name"), f.get("name"), 
e.concat(c,e.literal("Frequent Flyer")));
-               
-               String jpql = "SELECT e.name, f.name, CONCAT(" 
-                       + " CASE WHEN f.annualMiles > 50000 THEN 'Platinum'" 
-                       + " WHEN f.annualMiles > 25000 THEN 'Gold'" 
-                       + " ELSE 'XYZ' END, 'Frequent Flyer')" 
-                       + " FROM Employee e JOIN e.frequentFlierPlan f";
-                       
-               compare(jpql, e);
-       }
-       
-       public void testCorrelatedSubquerySpecialCase1() {
-               DomainObject o = qb.createQueryDefinition(Order.class);
-               DomainObject a = 
qb.createSubqueryDefinition(o.get("customer").get("accounts"));
-               o.select(o)
-                
.where(o.literal(10000).lessThan(a.select(a.get("balance")).all()));
-               
-               String jpql = "select o from Order o"
-                               + " where 10000 < ALL "
-                               + " (select a.balance from o.customer c join 
o.customer.accounts a)";
-               
-               compare(jpql, o);
-       }
-       
-       public void testCorrelatedSubquerySpecialCase2() {
-               DomainObject o = qb.createQueryDefinition(Order.class);
-               DomainObject c = o.join("customer");
-               DomainObject a = qb.createSubqueryDefinition(c.get("accounts"));
-               o.select(o)
-                
.where(o.literal(10000).lessThan(a.select(a.get("balance")).all()));
-               
-               String jpql = "select o from Order o JOIN o.customer c"
-                               + " where 10000 < ALL "
-                               + " (select a.balance from c.accounts a)";
-               
-               compare(jpql, o);
-       }
-       
-       public void testRecursiveDefinitionIsNotAllowed() {
-               DomainObject q = qb.createQueryDefinition(Customer.class);
-               q.where(q.exists().and(q.get("name").equal("wrong")));
-               
-               try {
-                       qb.toJPQL(q);
-                       fail();
-               } catch (RuntimeException e) {
-                       // good
-               }
-       }
-       
-       // ---------------------------------------------------------------------
-       // verification methods
-       // ---------------------------------------------------------------------
-       
-       /**
-        * Compare by executing the queries generated from the given JPQL and 
-        * QueryDefinition. 
-        */
-       void compare(String jpql, QueryDefinition q) {
-               compare(jpql, q, (Object[])null);
-       }
-       
-       /**
-        * Compare hand crafted JPQL and QueryDefinition.
-        * If skip is null then execute both queries against the database, 
otherwise
-        * compare them literally. 
-        */
-       void compare(String jpql, QueryDefinition q, Object...p) {
-               executeActually(jpql, q, p);
-       }
-       
-       /**
-        * Compare the string version of QueryDefinition and given JPQL string 
with
-        * some flexibility of case-insensitive reserved words.
-        */
-       private void compareLiterally(String jpql, QueryDefinition q) {
-               String actual = qb.toJPQL(q);
-               if (!comparator.compare(jpql,actual)) 
-                       fail("\r\nExpected: [" + jpql + "]\r\nActual  : [" + 
actual + "]");
-       }
-       
-       /**
-        * Executes the given JPQL and QueryDefinition independently and 
compare 
-        * their results.
-        */
-       private void executeActually(String jpql, QueryDefinition q, 
Object...p) {
-               OpenJPAEntityManager em = emf.createEntityManager();
-               List<?> criteriaResult = null;
-               List<?> jpqlResult = null;
-               Throwable criteriaError = null;
-               Throwable jpqlError = null;
-               
-               try {
-                       Query cq = em.createDynamicQuery(q);
-                       setParameters(cq, p);
-                       criteriaResult = cq.getResultList();
-               } catch (Exception e) {
-                       criteriaError = e;      
-               }
-               try {
-                       Query nq = em.createQuery(jpql);
-                       setParameters(nq, p);
-                       jpqlResult = nq.getResultList();
-               } catch (Exception e) {
-                       jpqlError = e;
-               }
-               
-               if (criteriaError == null && jpqlError == null) {
-                       assertEquals(criteriaResult.size(), jpqlResult.size());
-               } else if (criteriaError != null && jpqlError == null) {
-                       fail("QueryDefinition generated invalid JPQL\r\n" 
-                               + "Criteria [" + qb.toJPQL(q) + "]\r\n"
-                               + "error : " + criteriaError.getMessage());
-               } else if (criteriaError == null && jpqlError != null) {
-                       fail("Handcrafted JPQL is invalid \r\n" 
-                                       + "JPQL [" + jpql + "]\r\n"
-                                       + "error : " + jpqlError.getMessage());
-               } else {
-                       compareLiterally(jpql, q);
-               }
-       }
-       
    void setParameters(Query q, Object...p) {
-               if (p == null)
-                       return;
-               for (int i = 0; i < p.length; i += 2) {
-                       q.setParameter(p[i].toString(), p[i+1]);
-               }
+    public void testNew() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject customer = q.addRoot(Customer.class);
+        DomainObject order = customer.join("orders");
+        q.where(order.get("count").greaterThan(100))
+         .select(q.newInstance(Customer.class, customer.get("id"),
+                                               customer.get("status"),
+                                               order.get("count")));
+        
+        
+        String jpql =
+            "SELECT NEW org.apache.openjpa.persistence.criteria.Customer"
+                + "(c.id, c.status, o.count)"
+                + " FROM Customer c JOIN c.orders o" + " WHERE o.count > 100";
+        compare(jpql, q);
+    }
+    
+    public void testKeyValueOperatorPath() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject v = q.addRoot(VideoStore.class);
+        DomainObject i = v.join("videoInventory");
+        q.where(v.get("location").get("zipCode").equal("94301").and(
+            i.value().greaterThan(0)));
+        q.select(v.get("location").get("street"), i.key().get("title"), i
+            .value());
+        
+        String jpql = "SELECT v.location.street, KEY(v2).title, VALUE(v2)" 
+                    + " FROM VideoStore v JOIN v.videoInventory v2"
+                    + " WHERE v.location.zipCode = '94301' AND VALUE(v2) > 0";
+        
+        compare(jpql, q);
+    }
+    
+    public void testGroupByHaving() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject customer = q.addRoot(Customer.class);
+        q.select(customer.get("status"), 
customer.get("filledOrderCount").avg(),
+                 customer.count())
+         .groupBy(customer.get("status"))
+         .having(customer.get("status").in(1, 2));
+        
+        String jpql = "SELECT c.status, AVG(c.filledOrderCount), COUNT(c)"
+                    + " FROM Customer c"
+                    + " GROUP BY c.status"
+                    + " HAVING c.status IN (1, 2)";
+        
+        compare(jpql, q);
+    }
+    
+    public void testGroupByHaving2() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject customer = q.addRoot(Customer.class);
+        q.select(customer.get("country"), customer.count())
+         .groupBy(customer.get("country"))
+         .having(customer.count().greaterThan(30));
+        
+        String jpql = "SELECT c.country, COUNT(c)" 
+                    + " FROM Customer c"
+                    + " GROUP BY c.country"
+                    + " HAVING COUNT(c) > 30";
+        compare(jpql, q);
+    }
+    
+    public void testOrderBy() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject customer = q.addRoot(Customer.class);
+        DomainObject order = customer.join("orders");
+        DomainObject address = customer.join("address");
+        q.where(address.get("state").equal("CA"))
+        .select(order)
+        .orderBy(order.get("quantity").desc(), order.get("totalcost"));
+        String jpql = "SELECT o"
+                    + " FROM Customer c JOIN c.orders o JOIN c.address a"
+                    + " WHERE a.state = 'CA'"
+                    + " ORDER BY o.quantity DESC, o.totalcost";        
+        compare(jpql, q);
+    }
+    
+    public void testOrderBy2() {
+        QueryDefinition q = qb.createQueryDefinition();
+        DomainObject customer = q.addRoot(Customer.class);
+        DomainObject order = customer.join("orders");
+        DomainObject address = customer.join("address");
+        q.where(address.get("state").equal("CA"))
+        .select(order.get("quantity"), address.get("zipCode"))
+        .orderBy(order.get("quantity").desc(), address.get("zipCode"));
+        String jpql = "SELECT o.quantity, a.zipCode"
+                    + " FROM Customer c JOIN c.orders o JOIN c.address a"
+                    + " WHERE a.state = 'CA'"
+                    + " ORDER BY o.quantity DESC, a.zipCode";
+        compare(jpql, q);
+    }
+    
+    public void testOrderByExpression() {
+        DomainObject o = qb.createQueryDefinition(Order.class);
+        DomainObject a = o.join("customer").join("address");
+        SelectItem taxedCost = o.get("cost").times(1.08);
+        o.select(o.get("quantity"), taxedCost, a.get("zipCode"))
+        .where(a.get("state").equal("CA")
+        .and(a.get("county").equal("Santa Clara")))
+        .orderBy(o.get("quantity"), taxedCost, a.get("zipCode"));
+        
+        String jpql = "SELECT o.quantity, o.cost*1.08 as o2, a.zipCode" 
+                    + " FROM Order o JOIN o.customer c JOIN c.address a"
+                    + " WHERE a.state = 'CA' AND a.county = 'Santa Clara'"
+                    + " ORDER BY o.quantity, o2, a.zipCode";
+        
+        compare(jpql, o);
+    }
+    
+    public void testCorrelatedSubquery() {
+        QueryDefinition q1 = qb.createQueryDefinition();
+        DomainObject emp = q1.addRoot(Employee.class);
+        
+        QueryDefinition q2 = qb.createQueryDefinition();
+        DomainObject spouseEmp = q2.addRoot(Employee.class);
+        
+        q2.where(spouseEmp.equal(emp.get("spouse"))).select(spouseEmp);
+        q1.selectDistinct(emp).where(q2.exists());
+        
+        String jpql = "SELECT DISTINCT e "
+                    + " FROM Employee e"
+                    + " WHERE EXISTS ("
+                            + " SELECT e2 " 
+                            + " FROM Employee e2"
+                            + " WHERE e2 = e.spouse)";
+        
+        compare(jpql, q1);
+    }
+    
+    public void testCreateSubquery() {
+        DomainObject customer = qb.createQueryDefinition(Customer.class);
+        DomainObject order =
+            qb.createSubqueryDefinition(customer.get("orders"));
+        customer.where(order.select(order.get("cost").avg()).greaterThan(100));
+        
+        String jpql = "SELECT c "
+                    + " FROM Customer c"
+                    + " WHERE (SELECT AVG(o.cost) FROM c.orders o) > 100";
+        
+        compare(jpql, customer);
+    }
+    
+    public void testTypeList() {
+        DomainObject q = qb.createQueryDefinition(Employee.class);
+        q.where(q.type().in(Exempt.class, Contractor.class));
+        
+        String jpql = "SELECT e "
+            + " FROM Employee e"
+            + " WHERE TYPE(e) IN (Exempt, Contractor)";
+        
+        compare(jpql, q);
+    }
+    
+    public void testStringList() {
+        DomainObject q = qb.createQueryDefinition(Customer.class);
+        q.where(q.get("country").in("USA", "UK", "France"));
+        
+        String jpql = "SELECT c "
+            + " FROM Customer c"
+            + " WHERE c.country IN ('USA', 'UK', 'France')";
+        compare(jpql, q);
+    }
+    
+    public void testConcat() {
+        DomainObject e = qb.createQueryDefinition(Employee.class);
+        DomainObject f = e.join("frequentFlierPlan");
+        Expression c = 
+        e.generalCase().when(f.get("annualMiles").greaterThan(50000)).then(
+                "Platinum").when(f.get("annualMiles").greaterThan(25000)).then(
+                "Gold").elseCase("XYZ");
+        e.select(e.get("name"), f.get("name"), e.concat(c, e
+            .literal("Frequent Flyer")));
+        
+        String jpql = "SELECT e.name, f.name, CONCAT(" 
+            + " CASE WHEN f.annualMiles > 50000 THEN 'Platinum'" 
+            + " WHEN f.annualMiles > 25000 THEN 'Gold'" 
+            + " ELSE 'XYZ' END, 'Frequent Flyer')" 
+            + " FROM Employee e JOIN e.frequentFlierPlan f";
+            
+        compare(jpql, e);
+    }
+    
+    public void testCorrelatedSubquerySpecialCase1() {
+        DomainObject o = qb.createQueryDefinition(Order.class);
+        DomainObject a = qb.createSubqueryDefinition(o.get("customer").
+            get("accounts"));
+        o.select(o)
+         .where(o.literal(10000).lessThan(a.select(a.get("balance")).all()));
+        
+        String jpql =
+            "select o from Order o" + " where 10000 < ALL "
+                + " (select a.balance from o.customer c "
+                + "join o.customer.accounts a)";
+        
+        compare(jpql, o);
+    }
+    
+    public void testCorrelatedSubquerySpecialCase2() {
+        DomainObject o = qb.createQueryDefinition(Order.class);
+        DomainObject c = o.join("customer");
+        DomainObject a = qb.createSubqueryDefinition(c.get("accounts"));
+        o.select(o)
+         .where(o.literal(10000).lessThan(a.select(a.get("balance")).all()));
+        
+        String jpql = "select o from Order o JOIN o.customer c"
+                    + " where 10000 < ALL "
+                    + " (select a.balance from c.accounts a)";
+        
+        compare(jpql, o);
+    }
+    
+    public void testRecursiveDefinitionIsNotAllowed() {
+        DomainObject q = qb.createQueryDefinition(Customer.class);
+        q.where(q.exists().and(q.get("name").equal("wrong")));
+        
+        try {
+            qb.toJPQL(q);
+            fail();
+        } catch (RuntimeException e) {
+            // good
+        }
+    }
+    
+    // ---------------------------------------------------------------------
+    // verification methods
+    // ---------------------------------------------------------------------
+    
+    /**
+     * Compare by executing the queries generated from the given JPQL and 
+     * QueryDefinition. 
+     */
+    void compare(String jpql, QueryDefinition q) {
+        compare(jpql, q, (Object[])null);
+    }
+    
+    /**
+     * Compare hand crafted JPQL and QueryDefinition.
+     * If skip is null then execute both queries against the database, 
otherwise
+     * compare them literally. 
+     */
+    void compare(String jpql, QueryDefinition q, Object...p) {
+        executeActually(jpql, q, p);
+    }
+    
+    /**
+     * Compare the string version of QueryDefinition and given JPQL string with
+     * some flexibility of case-insensitive reserved words.
+     */
+    private void compareLiterally(String jpql, QueryDefinition q) {
+        String actual = qb.toJPQL(q);
+        if (!comparator.compare(jpql,actual)) 
+            fail("\r\nExpected: [" + jpql + "]\r\nActual  : [" + actual + "]");
+    }
+    
+    /**
+     * Executes the given JPQL and QueryDefinition independently and compare 
+     * their results.
+     */
+    private void executeActually(String jpql, QueryDefinition q, Object...p) {
+        OpenJPAEntityManager em = emf.createEntityManager();
+        List<?> criteriaResult = null;
+        List<?> jpqlResult = null;
+        Throwable criteriaError = null;
+        Throwable jpqlError = null;
+        
+        try {
+            Query cq = em.createDynamicQuery(q);
+            setParameters(cq, p);
+            criteriaResult = cq.getResultList();
+        } catch (Exception e) {
+            criteriaError = e;    
+        }
+        try {
+            Query nq = em.createQuery(jpql);
+            setParameters(nq, p);
+            jpqlResult = nq.getResultList();
+        } catch (Exception e) {
+            jpqlError = e;
+        }
+        
+        if (criteriaError == null && jpqlError == null) {
+            assertEquals(criteriaResult.size(), jpqlResult.size());
+        } else if (criteriaError != null && jpqlError == null) {
+            fail("QueryDefinition generated invalid JPQL\r\n" 
+                + "Criteria [" + qb.toJPQL(q) + "]\r\n"
+                + "error : " + criteriaError.getMessage());
+        } else if (criteriaError == null && jpqlError != null) {
+            fail("Handcrafted JPQL is invalid \r\n" 
+                    + "JPQL [" + jpql + "]\r\n"
+                    + "error : " + jpqlError.getMessage());
+        } else {
+            compareLiterally(jpql, q);
+        }
+    }
+    
    void setParameters(Query q, Object...p) {
+        if (p == null)
+            return;
+        for (int i = 0; i < p.length; i += 2) {
+            q.setParameter(p[i].toString(), p[i+1]);
+        }
     } 
 }

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java?rev=779361&r1=779360&r2=779361&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
 Thu May 28 00:22:33 2009
@@ -153,8 +153,9 @@
     
     @AllowFailure
     public void testFetchJoins() {
-        String jpql = "SELECT d FROM Department LEFT JOIN FETCH d.employees " 
+ 
-            "WHERE d.deptNo = 1";
+        String jpql =
+            "SELECT d FROM Department LEFT JOIN FETCH d.employees "
+                + "WHERE d.deptNo = 1";
         CriteriaQuery q = cb.create();
         Root<Department> d = q.from(Department.class);
         d.fetch(department_.getSet("employees", Employee.class), 
JoinType.LEFT);
@@ -174,11 +175,11 @@
         Join<Contact, Phone> phone = emp.join(
             employee_.getAttribute("contactInfo", Contact.class)).
             join(contact_.getList("phones", Phone.class));
-        q.where(cb.equal(emp.get(employee_.getAttribute("contactInfo", 
-            Contact.class)).
-            get(contact_.getAttribute("address", Address.class)).
-            get(address_.getAttribute("zipCode", String.class)), "95054"));    
-        q.select(phone.get(phone_.getAttribute("vendor", String.class)));      
  
+        q.where(cb.equal(emp.get(
+            employee_.getAttribute("contactInfo", Contact.class)).get(
+            contact_.getAttribute("address", Address.class)).get(
+            address_.getAttribute("zipCode", String.class)), "95054"));
+        q.select(phone.get(phone_.getAttribute("vendor", String.class)));
         
         assertEquivalence(q, jpql);
         
@@ -217,7 +218,7 @@
         jpql = "SELECT o FROM Order o WHERE o.lineItems IS EMPTY";
         q = cb.create();
         Root<Order> order = q.from(Order.class);
-        Join<Order,LineItem> lineItems = 
order.join(order_.getList("lineItems", 
+        Join<Order,LineItem> lineItems = order.join(order_.getList("lineItems",
             LineItem.class));
         q.where(cb.isEmpty(lineItems));
         q.select(order);
@@ -348,9 +349,10 @@
     
     @AllowFailure
     public void testSelectList() {
-        String jpql = "SELECT v.location.street, KEY(i).title, VALUE(i) FROM " 
+ 
-            "VideoStore v JOIN v.videoInventory i WHERE v.location.zipCode = " 
+ 
-            "'94301' AND VALUE(i) > 0";
+        String jpql =
+            "SELECT v.location.street, KEY(i).title, VALUE(i) FROM "
+                + "VideoStore v JOIN v.videoInventory i "
+                + "WHERE v.location.zipCode = " + "'94301' AND VALUE(i) > 0";
         CriteriaQuery q = cb.create();
         Root<VideoStore> v = q.from(VideoStore.class);
         MapJoin<VideoStore, Movie, Integer> inv = v.join(videoStore_.getMap(
@@ -370,8 +372,9 @@
             "Customer c JOIN c.orders o WHERE o.quantity > 100";
         q = cb.create();
         Root<Customer> c = q.from(Customer.class);
-        Join<Customer, Order> o = c.join(customer_.getSet("orders", 
Order.class));
-        q.where(cb.gt(o.get(order_.getAttribute("quantity", Integer.class)), 
+        Join<Customer, Order> o =
+            c.join(customer_.getSet("orders", Order.class));
+        q.where(cb.gt(o.get(order_.getAttribute("quantity", Integer.class)),
             100));
         q.select(cb.select(CustomerDetails.class, 
             c.get(customer_.getAttribute("id", Integer.class)),
@@ -413,8 +416,10 @@
         
         assertEquivalence(q, jpql);
         
-        jpql = "SELECT emp FROM Employee emp WHERE emp.salary > ALL (" + 
-            "SELECT m.salary FROM Manager m WHERE m.department = 
emp.department)";
+        jpql =
+            "SELECT emp FROM Employee emp WHERE emp.salary > ALL ("
+                + "SELECT m.salary FROM Manager m WHERE m.department ="
+                + " emp.department)";
         q = cb.create();
         Root<Employee> emp1 = q.from(Employee.class);
         q.select(emp1);
@@ -495,7 +500,7 @@
     @AllowFailure
     public void testOrdering() {
         String jpql = "SELECT o FROM Customer c JOIN c.orders o "  
-            + "JOIN c.address a WHERE a.state = 'CA' ORDER BY o.quantity DESC, 
" 
+            + "JOIN c.address a WHERE a.state = 'CA' ORDER BY o.quantity DESC, 
"
             + "o.totalCost";
         CriteriaQuery q = cb.create();
         Root<Customer> c = q.from(Customer.class);


Reply via email to