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 2010/10/01 00:07:12 UTC

svn commit: r1003317 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java

Author: faywang
Date: Thu Sep 30 22:07:11 2010
New Revision: 1003317

URL: http://svn.apache.org/viewvc?rev=1003317&view=rev
Log:
OPENJPA-1819: if there is a group-by clause, orderby_item must be in the group-by list

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java?rev=1003317&r1=1003316&r2=1003317&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/SelectConstructor.java Thu Sep 30 22:07:11 2010
@@ -280,12 +280,25 @@ public class SelectConstructor
             Val orderVal;
             for (int i = 0; i < exps.ordering.length; i++) {
                 orderVal = (Val) exps.ordering[i];
-                state.ordering[i] = orderVal.initialize(sel, ctx, 0);
+                if (contains(orderVal, exps.grouping)) 
+                    state.ordering[i] = orderVal.initialize(sel, ctx, Val.JOIN_REL);
+                else
+                    state.ordering[i] = orderVal.initialize(sel, ctx, 0);
+                    
                 joins = sel.and(joins, state.ordering[i].joins);
             }
         }
         sel.where(joins);
     }
+    
+    private boolean contains(Val orderVal, Value[] grouping) {
+        for (int i = 0; i < grouping.length; i++) {
+            Val groupVal = (Val) grouping[i];
+            if (orderVal.equals(groupVal))
+                return true;
+        }
+        return false;
+    }
 
     /**
      * Create the where sql.

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java?rev=1003317&r1=1003316&r2=1003317&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/TestEJBQueryInterface.java Thu Sep 30 22:07:11 2010
@@ -33,7 +33,7 @@ public class TestEJBQueryInterface exten
     }
 
     public void setUp() throws Exception {
-        super.setUp(Entity1.class, Entity2.class);
+        super.setUp(Entity1.class, Entity2.class, Order.class, OrderItem.class);
 
         int instNum = 10;
 
@@ -147,5 +147,16 @@ public class TestEJBQueryInterface exten
         endEm(em);
     }
 
+    public void testOrderBy() {
+        EntityManager em = currentEntityManager();
+        startTx(em);
+        String jpql = "SELECT o.oid FROM OrderItem l LEFT JOIN l.order o GROUP BY o.oid ORDER BY o.oid ";
+        try {
+            List ret = em.createQuery(jpql).getResultList();
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail(e.getMessage());
+        }
+    }
     //rest of the interface is tested by the CTS
 }