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
}