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/06/26 19:29:23 UTC

svn commit: r788779 - in /openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria: CriteriaTest.java TestJPQLSubquery.java

Author: faywang
Date: Fri Jun 26 17:29:23 2009
New Revision: 788779

URL: http://svn.apache.org/viewvc?rev=788779&view=rev
Log:
Subquery test

Added:
    openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java   (with props)
Modified:
    openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java

Modified: openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java?rev=788779&r1=788778&r2=788779&view=diff
==============================================================================
--- openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java (original)
+++ openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java Fri Jun 26 17:29:23 2009
@@ -55,7 +55,7 @@
     protected static OpenJPAEntityManagerFactorySPI emf;
     QueryBuilder cb;
     EntityManager em;
-    protected List<String> sql = new ArrayList<String>();
+    protected static List<String> sql = new ArrayList<String>();
     protected static Class[] CLASSES = {
     Account.class,
     Address.class,
@@ -329,12 +329,11 @@
     
     public class Listener
     extends AbstractJDBCListener {
-
-    @Override
-    public void beforeExecuteStatement(JDBCEvent event) {
-        if (event.getSQL() != null && sql != null) {
-            sql.add(event.getSQL());
+        @Override
+        public void beforeExecuteStatement(JDBCEvent event) {
+            if (event.getSQL() != null && sql != null) {
+                sql.add(event.getSQL());
+            }
         }
     }
 }
-}

Added: openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java
URL: http://svn.apache.org/viewvc/openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java?rev=788779&view=auto
==============================================================================
--- openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java (added)
+++ openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java Fri Jun 26 17:29:23 2009
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria;
+
+import java.util.List;
+
+import javax.persistence.PersistenceException;
+import javax.persistence.Query;
+
+import org.apache.openjpa.persistence.test.AllowFailure;
+
+/**
+ * Tests type-strict version of Criteria API.
+ * 
+ * Most of the tests build Criteria Query and then execute the query as well as
+ * a reference JPQL query supplied as a string. The test is validated by
+ * asserting that the resultant SQL queries for these two alternative form of
+ * executing a query are the same.
+ * 
+ * 
+ */
+public class TestJPQLSubquery extends CriteriaTest {
+    
+    public void testSubqueries1() {
+        String jpql = "SELECT goodCustomer FROM Customer goodCustomer WHERE "
+            + "goodCustomer.balanceOwed < (SELECT AVG(c.balanceOwed) " 
+            + " FROM Customer c)";
+        execute(jpql);
+    }
+
+    public void testSubqueries2() {
+        String jpql = "SELECT DISTINCT emp FROM Employee emp WHERE EXISTS ("
+            + "SELECT spouseEmp FROM Employee spouseEmp WHERE spouseEmp ="
+            + " emp.spouse)";
+        execute(jpql);
+    }
+
+    public void testSubqueries3() {
+        String jpql = "SELECT emp FROM Employee emp WHERE emp.salary > ALL ("
+            + "SELECT m.salary FROM Manager m WHERE m.department = "
+            + "emp.department)";
+        execute(jpql);
+    }
+
+    public void testSubqueries4() {
+        String jpql = "SELECT c FROM Customer c WHERE "
+            + "(SELECT COUNT(o) FROM c.orders o) > 10";
+        execute(jpql);
+    }
+
+    public void testSubqueries4a() {
+        String jpql = "SELECT c FROM Customer c WHERE "
+            + "(SELECT COUNT(o) FROM Customer c1 JOIN c1.orders o WHERE c = c1) > 10";
+        execute(jpql);
+    }    
+    
+    public void testSubqueries4b() {
+        String jpql = "SELECT c FROM Customer c WHERE "
+            + "(SELECT COUNT(o) FROM Customer c1 JOIN c1.orders o WHERE c.id = c1.id) > 10";
+        execute(jpql);
+    }    
+    
+    public void atestSubqueries4c() {
+        String jpql = "SELECT c FROM Customer c WHERE "
+            + "(SELECT COUNT(o) FROM Customer c1 JOIN c1.orders o) > 10";
+        execute(jpql);
+    }
+    
+    public void testSubqueries5() {
+        String jpql = "SELECT o FROM Order o WHERE 10000 < ALL ("
+            + "SELECT a.balance FROM o.customer c JOIN c.accounts a)";
+        execute(jpql);
+    }
+
+    public void atestSubqueries5a() {
+        String jpql = "SELECT o FROM Order o WHERE o.name = SOME ("
+            + "SELECT a.name FROM o.customer c JOIN c.accounts a)";
+        execute(jpql);
+    }
+    
+    public void testSubqueries6() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer c WHERE 10000 < "
+            + "ALL (SELECT a.balance FROM c.accounts a)";
+        execute(jpql);
+    }
+
+    public void atestSubqueries6a() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer c WHERE o.name = "
+            + "SOME (SELECT a.name FROM c.accounts a)";
+        execute(jpql);
+    }
+    
+    public void testSubqueries6b() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer c WHERE 10000 < "
+            + "ALL (SELECT u.age FROM c.address a JOIN a.user u)";
+        execute(jpql);
+    }
+ 
+    public void testSubqueryies6c() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer c JOIN c.address a WHERE 10000 < "
+            + "ALL (SELECT u.age FROM a.user u)";
+        execute(jpql);
+    }
+    
+    public void testSubqueries6d() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer c WHERE 10000 < "
+            + "ALL (SELECT u.age FROM c.address.user u)";
+        execute(jpql);
+    }
+    
+    public void btestSubqueries6e() {
+        String jpql = "SELECT o FROM Order o JOIN o.customer.address a WHERE 10000 < "
+            + "ALL (SELECT u.age FROM a.user u)";
+        execute(jpql);
+    }    
+    
+    void execute(String jpql) {
+        sql.clear();
+        Query jQ = em.createQuery(jpql);
+        try {
+            List jList = jQ.getResultList();
+        } catch (PersistenceException e) {
+            e.printStackTrace();
+            fail("Wrong SQL for JPQL :" + jpql + "\r\nSQL  :" + sql.get(0));
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail("Wrong JPQL :" + jpql);
+        }
+        
+        for (int i = 0; i < sql.size(); i++) {
+            System.out.println("jSQL = " + sql.get(i));
+        }
+    }
+}

Propchange: openjpa/branches/subquery/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJPQLSubquery.java
------------------------------------------------------------------------------
    svn:eol-style = native