This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openjpa.git
commit bb5503b1471b5ce5a2969d12451eced8c0c65b19 Author: Mark Struberg <strub...@apache.org> AuthorDate: Tue Apr 6 20:01:59 2021 +0200 OPENJPA-2861 add unit tests for select sum(case..) --- .../openjpa/jira1794/TestAggregateFunctions.java | 35 ++++++++++++++++++++++ .../jdbc/query/TestAggregateQueryWithNoResult.java | 8 ++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira1794/TestAggregateFunctions.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira1794/TestAggregateFunctions.java index 13a6b0d..b1cb054 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira1794/TestAggregateFunctions.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira1794/TestAggregateFunctions.java @@ -22,6 +22,7 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; +import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Expression; @@ -92,6 +93,40 @@ public class TestAggregateFunctions extends SingleEMFTestCase { em.close(); } + /** + * if a SUM(CASE statement is used, then the effective type might be different + */ + public void testAggregateWithCase() { + EntityManager em = emf.createEntityManager(); + + // Add a row to the table and re-test + em.getTransaction().begin(); + AggEntity ae = new AggEntity(); + ae.init(); + ae.setStringVal("bare"); + em.persist(ae); + AggEntity ae2 = new AggEntity(); + ae2.init(); + ae2.setStringVal("foot"); + em.persist(ae2); + em.getTransaction().commit(); + +/*X + em.getTransaction().begin(); + final TypedQuery<Long> q2 = em.createQuery("select SUM(ae.intVal) from AggEntity AS ae", Long.class); + final Long sum = q2.getSingleResult(); + assertEquals(2L, (long) sum); +*/ + + final TypedQuery<Long> q = em.createQuery("select SUM(CASE ae.stringVal WHEN 'bare' THEN 1 ELSE 0 END) from AggEntity AS ae", Long.class); + final Long sumC = q.getSingleResult(); + assertEquals(1L, (long) sumC); + + em.getTransaction().commit(); + + em.close(); + } + public void testAggregateCriteria() { EntityManager em = emf.createEntityManager(); Metamodel mm = emf.getMetamodel(); diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestAggregateQueryWithNoResult.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestAggregateQueryWithNoResult.java index 104a32f..febefb0 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestAggregateQueryWithNoResult.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/query/TestAggregateQueryWithNoResult.java @@ -37,15 +37,15 @@ import org.apache.openjpa.persistence.test.SingleEMFTestCase; */ public class TestAggregateQueryWithNoResult extends SingleEMFTestCase { EntityManager em; - @Override + + @Override public void setUp() { super.setUp(CLEAR_TABLES, "openjpa.Compatibility", "ReturnNullOnAggregateResult=false", //OPENJPA-1794 - Game.class, IndoorGame.class, Scrabble.class, - Chess.class); + Game.class, IndoorGame.class, Scrabble.class, Chess.class); em = emf.createEntityManager(); assertTrue(em.createQuery("select p from Scrabble p").getResultList().isEmpty()); - } + } public void testSumWithNoResult() {