Author: faywang
Date: Wed May 20 05:09:38 2009
New Revision: 776551

URL: http://svn.apache.org/viewvc?rev=776551&view=rev
Log:
OPENJPA-1013: OrderBy support

Modified:
    
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/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
    
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/OrderImpl.java

Modified: 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java?rev=776551&r1=776550&r2=776551&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
 Wed May 20 05:09:38 2009
@@ -445,97 +445,238 @@
                     cb.literal(4)
                  )
              )
-         );
+        );
+        q.where(cb.equal(e.get(CompUser_.name), "Seetha"));
         assertEquivalence(q, query);
-    
         em.clear();
     }
-/*    
+    
+    @AllowFailure
     public void testConcatSubStringFunc2() {
-        String query = "select e.name From CompUser e where e.firstName = " +
+        String query = "select e.address From CompUser e where e.computerName 
= " +
             "CONCAT('Ablahum', SUBSTRING(e.name, LOCATE('e', e.name), 4)) ";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(e.get(CompUser_.address));
+        q.where(cb.equal(
+            e.get(CompUser_.computerName),
+            cb.concat("Ablahum", 
+                cb.substring(
+                    e.get(CompUser_.name), 
+                    cb.locate(e.get(CompUser_.name), "e"), 
+                    cb.literal(4)
+                 )
+            ))
+         );
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testConcatSubStringFunc3() {
         String query = "select " +
             "CONCAT('XYZ', SUBSTRING(e.name, LOCATE('e', e.name))) " +
             "From CompUser e WHERE e.name='Ablahumeeth'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(
+            cb.concat("XYZ", 
+                cb.substring(
+                    e.get(CompUser_.name), 
+                    cb.locate(e.get(CompUser_.name), "e") 
+                )
+            )
+        );
+        q.where(cb.equal(e.get(CompUser_.name), "Ablahumeeth"));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testConcatSubStringFunc4() {
-        String query = "select e.name from CompUser e where e.firstName = " +
+        String query = "select e.nicknames from CompUser e where e.name = " +
             "CONCAT('XYZ', SUBSTRING(e.name, LOCATE('e', e.name))) ";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(e.get(CompUser_.nicknames));
+        q.where(cb.equal(
+            e.get(CompUser_.name),
+            cb.concat("XYZ", 
+                cb.substring(
+                    e.get(CompUser_.name), 
+                    cb.locate(e.get(CompUser_.name), "e") 
+                )
+            ))
+        );
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testConcatFunc() {
         String query = "select " +
             "CONCAT('', '') From CompUser WHERE e.name='Seetha'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.concat("", cb.literal("")));
+        q.where(cb.equal(e.get(CompUser_.name), "Seetha"));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testTrimFunc1() {
-        String query = "select Trim(e.name) From CompUser e WHERE 
e.name='Shannon '";
+        String query = "select Trim(e.computerName) From CompUser e WHERE 
e.name='Shannon '";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.trim(e.get(CompUser_.computerName)));
+        q.where(cb.equal(e.get(CompUser_.name), "Shannon "));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testTrimFunc2() {
         String query = "select e.name From CompUser e where Trim(e.name) 
='Shannon'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.where(cb.equal(cb.trim(e.get(CompUser_.computerName)), "Shannon"));
+        q.select(e.get(CompUser_.name));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testLowerFunc1() {
-        String query = "select LOWER(e.name) From CompUser e WHERE 
e.name='Ugo'";
+        String query = "select LOWER(e.name) From CompUser e WHERE 
e.computerName='UNIX'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.lower(e.get(CompUser_.name)));
+        q.where(cb.equal(e.get(CompUser_.computerName), "UNIX"));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testLowerFunc2() {
-        String query = "select e.name From CompUser e where LOWER(e.name) 
='ugo'";
+        String query = "select e.age From CompUser e where LOWER(e.name) 
='ugo'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.where(cb.equal(cb.lower(e.get(CompUser_.name)), "ugo"));
+        q.select(e.get(CompUser_.age));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testUpperFunc1() {
-        String query = "select UPPER(e.name) From CompUser e WHERE 
e.name='Ugo'";
+        String query = "select UPPER(e.name) From CompUser e WHERE 
e.computerName='PC'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.upper(e.get(CompUser_.name)));
+        q.where(cb.equal(e.get(CompUser_.computerName), "PC"));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testUpperFunc2() {
-        String query = "select e.name from CompUser e where 
UPPER(e.name)='UGO'";
+        String query = "select e.nicknames from CompUser e where 
UPPER(e.name)='UGO'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.where(cb.equal(cb.upper(e.get(CompUser_.name)), "UGO"));
+        q.select(e.get(CompUser_.nicknames));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testLengthFunc() {
-        String query = "SELECT o.name FROM CompUser o " +
+        String query = "SELECT o.name FROM CompUser o " + 
             "WHERE LENGTH(o.address.country) = 3";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.where(cb.equal(cb.length(e.get(CompUser_.name)), 3));
+        q.select(e.get(CompUser_.name));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testArithmFunc1() {
         String query =
             "select ABS(e.age) From CompUser e WHERE e.name='Seetha'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.abs(e.get(CompUser_.age)));
+        q.where(cb.equal(e.get(CompUser_.name), "Seetha"));
+        assertEquivalence(q, query);
+        em.clear();
     }
     
+    @AllowFailure
     public void testArithmFunc2() {
         String query =
             "select SQRT(e.age) From CompUser e WHERE e.name='Seetha'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.sqrt(e.get(CompUser_.age)));
+        q.where(cb.equal(e.get(CompUser_.name), "Seetha"));
+        assertEquivalence(q, query);
+        em.clear();
     }
     
+    @AllowFailure
     public void testArithmFunc3() {
         String query =
             "select MOD(e.age, 4) From CompUser e WHERE e.name='Seetha'";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.mod(e.get(CompUser_.age), 4));
+        q.where(cb.equal(e.get(CompUser_.name), "Seetha"));
+        assertEquivalence(q, query);
+        em.clear();
     }
     
+    // size method can not be applied to an array field
+    @AllowFailure
     public void testArithmFunc4() {
         String query = "SELECT e.name FROM CompUser e WHERE SIZE(e.nicknames) 
= 6";
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        //q.where(cb.equal(cb.size(e.get(CompUser_.nicknames)), 6));
+        q.select(e.get(CompUser_.name));
+        assertEquivalence(q, query);
         em.clear();
     }
 
+    @AllowFailure
     public void testGroupByHavingClause() {
         String query =
             "SELECT c.name FROM CompUser c GROUP BY c.name HAVING c.name LIKE 
'S%'";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.groupBy(e.get(CompUser_.name));
+        q.having(cb.like(e.get(CompUser_.name), "S%"));
+        q.select(e.get(CompUser_.name));
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -547,10 +688,18 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testOrderByClause() {
         String query =
             "SELECT c.name FROM CompUser c WHERE c.name LIKE 'S%' ORDER BY 
c.name";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.where(cb.like(e.get(CompUser_.name), "S%"));
+        q.select(e.get(CompUser_.name));
+        q.orderBy(cb.asc(e.get(CompUser_.name)));
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -562,10 +711,15 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testAVGAggregFunc() {
         //To be Tested: AVG, COUNT, MAX, MIN, SUM
         String query = "SELECT AVG(e.age) FROM CompUser e";
-
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.avg(e.get(CompUser_.age)));
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -575,9 +729,15 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testCOUNTAggregFunc() {
         String query = "SELECT COUNT(c.name) FROM CompUser c";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.count(e.get(CompUser_.name)));
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -587,9 +747,15 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testMAXAggregFunc() {
         String query = "SELECT DISTINCT MAX(c.age) FROM CompUser c";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.max(e.get(CompUser_.age))).distinct(true);
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -599,9 +765,15 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testMINAggregFunc() {
         String query = "SELECT DISTINCT MIN(c.age) FROM CompUser c";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.min(e.get(CompUser_.age))).distinct(true);
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -611,9 +783,15 @@
         em.clear();
     }
 
+    @AllowFailure
     public void testSUMAggregFunc() {
         String query = "SELECT SUM(c.age) FROM CompUser c";
 
+        CriteriaQuery q = cb.create();
+        q = cb.create();
+        Root<CompUser> e = q.from(CompUser.class);
+        q.select(cb.sum(e.get(CompUser_.age)));
+        assertEquivalence(q, query);
         List result = em.createQuery(query).getResultList();
 
         assertNotNull(result);
@@ -622,7 +800,6 @@
 
         em.clear();
     }
-*/
 
     void startTx(EntityManager em) {
         em.getTransaction().begin();

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=776551&r1=776550&r2=776551&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
 Wed May 20 05:09:38 2009
@@ -692,7 +692,6 @@
         assertEquivalence(q, jpql);
     }
     
-    @AllowFailure
     public void testOrdering4() {
         String jpql = "SELECT c FROM Customer c "
                 + "ORDER BY c.name DESC, c.status";
@@ -705,7 +704,6 @@
         assertEquivalence(q, jpql);
     }
 
-    @AllowFailure
     public void testOrdering5() {
         String jpql = "SELECT c.firstName, c.lastName, c.balanceOwed " + 
             "FROM Customer c ORDER BY c.name DESC, c.status";

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=776551&r1=776550&r2=776551&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
 Wed May 20 05:09:38 2009
@@ -238,8 +238,9 @@
         for (int i = 0; i < ordercount; i++) {
             OrderImpl order = (OrderImpl)_orders.get(i);
             //Expression<? extends Comparable> expr = order.getExpression();
-            //exps.ordering[i] = Expressions.toValue(
-            //    (ExpressionImpl<?>)expr, factory, _model, this);
+            Expression expr = order.getExpression5();
+            exps.ordering[i] = Expressions.toValue(
+                (ExpressionImpl<?>)expr, factory, _model, this);
             
             //exps.orderingClauses[i] = assemble(firstChild);
             //exps.orderingAliases[i] = firstChild.text;

Modified: 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/OrderImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/OrderImpl.java?rev=776551&r1=776550&r2=776551&view=diff
==============================================================================
--- 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/OrderImpl.java
 (original)
+++ 
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/OrderImpl.java
 Wed May 20 05:09:38 2009
@@ -43,6 +43,10 @@
        public <T extends Comparable<T>> Expression<T> getExpression() {
                return (Expression<T>)e;
        }
+       
+       public Expression getExpression5() {
+           return e;
+       }
 
        public boolean isAscending() {
                return _ascending;


Reply via email to