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 2008/09/06 05:47:41 UTC
svn commit: r692609 - in /openjpa/trunk:
openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persiste...
Author: fancy
Date: Fri Sep 5 20:47:40 2008
New Revision: 692609
URL: http://svn.apache.org/viewvc?rev=692609&view=rev
Log:
OPENJPA-712 Not correctly parsing the "having" clause with aggregate functions (ie. max, min, etc)
Committing patch provided by Fay Wang
Modified:
openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestMultipleEntityProjection.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/domain/Magazine.java
Modified: openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt?rev=692609&r1=692608&r2=692609&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt (original)
+++ openjpa/trunk/openjpa-kernel/src/main/jjtree/org/apache/openjpa/kernel/jpql/JPQL.jjt Fri Sep 5 20:47:40 2008
@@ -729,7 +729,7 @@
void null_comparison_expression() #ISNULL : { }
{
- (input_parameter() | path())
+ (input_parameter() | path() | aggregate_select_expression())
<IS> [<NOT> { jjtThis.not = true; }] <NULL>
}
@@ -931,7 +931,7 @@
void datetime_primary() : { }
{
- path() | functions_returning_datetime() | input_parameter()
+ path() | functions_returning_datetime() | input_parameter() | aggregate_select_expression()
}
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestMultipleEntityProjection.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestMultipleEntityProjection.java?rev=692609&r1=692608&r2=692609&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestMultipleEntityProjection.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestMultipleEntityProjection.java Fri Sep 5 20:47:40 2008
@@ -18,6 +18,11 @@
*/
package org.apache.openjpa.persistence.jdbc.query;
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
@@ -72,6 +77,15 @@
Publisher pub = new Publisher();
pub.setName(pubName);
mag.setPublisher(pub);
+ try {
+ DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");
+ Date date = df.parse("2001-01-01");
+ mag.setDatePublished(date);
+ } catch (ParseException e) {
+ mag.setDatePublished(null);
+ }
+ mag.setTsPublished(new Timestamp(System.currentTimeMillis()));
+
em.persist(pub);
}
em.persist(mag);
@@ -134,6 +148,24 @@
}
}
+ public void testAggregateExpressionInHavingExpression() {
+ String jpql = "select m.publisher, max(m.datePublished) " +
+ "from Magazine m group by m.publisher " +
+ "having max(m.datePublished) is null";
+
+ EntityManager em = emf.createEntityManager();
+ Query query = em.createQuery(jpql);
+ List result = query.getResultList();
+ assertTrue(result.isEmpty());
+
+ jpql = "select m.publisher, max(m.datePublished) " +
+ "from Magazine m group by m.publisher " +
+ "having max(m.tsPublished) = CURRENT_TIMESTAMP";
+ query = em.createQuery(jpql);
+ result = query.getResultList();
+ assertTrue(result.isEmpty());
+ }
+
/**
* Count number of expected result based on inner/outer join condition and
* the name of the Magazine.
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/domain/Magazine.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/domain/Magazine.java?rev=692609&r1=692608&r2=692609&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/domain/Magazine.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/domain/Magazine.java Fri Sep 5 20:47:40 2008
@@ -18,6 +18,9 @@
*/
package org.apache.openjpa.persistence.jdbc.query.domain;
+import java.sql.Timestamp;
+import java.util.Date;
+
import javax.persistence.*;
/**
@@ -38,6 +41,10 @@
@OneToOne
private Publisher publisher;
+ private Date datePublished;
+
+ private Timestamp tsPublished;
+
public String getName() {
return name;
}
@@ -58,4 +65,20 @@
this.publisher = publisher;
}
+ public Date getDatePublished() {
+ return datePublished;
+ }
+
+ public void setDatePublished(Date datePublished) {
+ this.datePublished = datePublished;
+ }
+
+ public Date getTsPublished() {
+ return tsPublished;
+ }
+
+ public void setTsPublished(Timestamp tsPublished) {
+ this.tsPublished = tsPublished;
+ }
+
}