You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/08/03 00:26:51 UTC
svn commit: r562280 - in
/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src:
main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java
Author: aadamchik
Date: Thu Aug 2 15:26:49 2007
New Revision: 562280
URL: http://svn.apache.org/viewvc?view=rev&rev=562280
Log:
CAY-838 EJBQL GROUP BY and HAVING support
initial HAVING support; still no support for aggregate functions in HAVING
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java?view=diff&rev=562280&r1=562279&r2=562280
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLSelectTranslator.java Thu Aug 2 15:26:49 2007
@@ -55,6 +55,12 @@
expression.visit(new EJBQLGroupByTranslator(context));
return false;
}
+
+ public boolean visitHaving(EJBQLExpression expression) {
+ context.append(" HAVING");
+ expression.visit(new EJBQLConditionTranslator(context));
+ return false;
+ }
public boolean visitOrderBy(EJBQLExpression expression) {
context.append(" ORDER BY");
Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java?view=diff&rev=562280&r1=562279&r2=562280
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataContextEJBQLGroupByHavingTest.java Thu Aug 2 15:26:49 2007
@@ -98,4 +98,38 @@
// assertEquals(new Long(1), row[0]);
// }
}
+
+ public void testGroupByHavingOnColumn() throws Exception {
+ createTestData("prepare");
+
+ String ejbql = "SELECT p.estimatedPrice, count(p) FROM Painting p"
+ + " GROUP BY p.estimatedPrice"
+ + " HAVING p.estimatedPrice > 1";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+ List data = createDataContext().performQuery(query);
+ assertEquals(1, data.size());
+ assertTrue(data.get(0) instanceof Object[]);
+
+ Object[] row0 = (Object[]) data.get(0);
+ assertEquals(new BigDecimal(2), row0[0]);
+ assertEquals(new Long(2), row0[1]);
+ }
+
+ public void testGroupByHavingOnAggregate() throws Exception {
+ createTestData("prepare");
+
+ String ejbql = "SELECT p.estimatedPrice, count(p) FROM Painting p"
+ + " GROUP BY p.estimatedPrice"
+ + " HAVING count(p) > 2";
+ EJBQLQuery query = new EJBQLQuery(ejbql);
+
+// List data = createDataContext().performQuery(query);
+// assertEquals(1, data.size());
+// assertTrue(data.get(0) instanceof Object[]);
+//
+// Object[] row0 = (Object[]) data.get(0);
+// assertEquals(new BigDecimal(1), row0[0]);
+// assertEquals(new Long(3), row0[1]);
+ }
}