================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tldev/source/essentials/oracle/toplink/essentials/queryframework/ReportQuery.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.28 Report generated at Fri Aug 11 12:38:13 2006 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.28 Thu Aug 10 15:33:51 2006 --- /ade/cdelahun_toplinkmain/tldev/source/essentials/oracle/toplink/essentials/queryframework/ReportQuery.java Fri Aug 11 12:38:12 2006 *************** *** 960,972 **** subSelect.setSelectionCriteria(countExp.equal(outerBuilder)); } setSelectionCriteria(outerBuilder.exists(subSelect)); ! getItems().setElementAt(new ReportItem(countItem.getName(), outerBuilder.count()), i); setReferenceClass(newDescriptor.getJavaClass()); changeDescriptor(getSession()); } else { // Here everything worked fine, save an empty COUNT() was being generated. ! Expression newCount = countExp.prefixSQL("*").count(); ! getItems().setElementAt(new ReportItem(countItem.getName(), newCount), i); } } } --- 960,975 ---- subSelect.setSelectionCriteria(countExp.equal(outerBuilder)); } setSelectionCriteria(outerBuilder.exists(subSelect)); ! count.setBaseExpression(outerBuilder); ! count.getChildren().setElementAt( outerBuilder, 0); setReferenceClass(newDescriptor.getJavaClass()); changeDescriptor(getSession()); } else { // Here everything worked fine, save an empty COUNT() was being generated. ! Expression newCountEx = countExp.prefixSQL("*"); ! // modify the original count expression incase it is used elsewhere - such as in a having clause ! count.setBaseExpression(newCountEx); ! count.getChildren().setElementAt( newCountEx, 0); } } } ================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tltest/source/entity-persistence-tests/src/java/oracle/toplink/essentials/testing/tests/ejb/ejbqltesting/JUnitEJBQLComplexAggregateTestSuite.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.10 Report generated at Fri Aug 11 12:38:13 2006 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.10 Thu Aug 10 15:34:37 2006 --- /ade/cdelahun_toplinkmain/tltest/source/entity-persistence-tests/src/java/oracle/toplink/essentials/testing/tests/ejb/ejbqltesting/JUnitEJBQLComplexAggregateTestSuite.java Fri Aug 11 12:38:13 2006 *************** *** 111,117 **** suite.setName("JUnitEJBQLComplexAggregateTestSuite"); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexAVGTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByAndHavingTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexDistinctCountTest")); --- 111,118 ---- suite.setName("JUnitEJBQLComplexAggregateTestSuite"); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexAVGTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByAndHavingTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByTest2")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexDistinctCountTest")); *************** *** 119,125 **** suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexMinTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexSumTest")); - return new TestSetup(suite) { //This method is run at the end of the SUITE only --- 120,125 ---- *************** *** 240,245 **** --- 240,274 ---- Assert.assertTrue("Complex COUNT(Distinct) with Group By test failed", comparer.compareObjects(result, expectedResult)); } + /* + * test for gf675, using count, group by and having fails. This test is specific for a a use case + * where DISTINCT is used with Count and group by + */ + public void complexCountDistinctWithGroupByTest2() + { + oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager(); + + //need to set the class in the expressionbuilder, as the Count(Distinct) will cause the + // query to change and be built around the Employee class instead of the Address class. + ExpressionBuilder expbldr = new ExpressionBuilder(Address.class); + + ReportQuery rq = new ReportQuery(Address.class, expbldr); + Expression exp = expbldr.anyOf("employees"); + + Expression exp2 = expbldr.get("city"); + rq.addAttribute("city", exp2); + rq.addCount("COUNT1",exp, Long.class); + rq.addCount("COUNT2",exp.get("lastName").distinct(),Long.class ); + rq.addGrouping(exp2); + Vector expectedResult = (Vector) em.getActiveSession().executeQuery(rq); + + String ejbqlString3 = "SELECT a.city, COUNT( e ), COUNT( DISTINCT e.lastName ) FROM Address a JOIN a.employees e GROUP BY a.city"; + Query q = em.createQuery(ejbqlString3); + List result = (List) q.getResultList(); + + Assert.assertTrue("Complex COUNT(Distinct) with Group By test failed", comparer.compareObjects(result, expectedResult)); + } + public void complexCountTest() { oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager(); ================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tldev/source/essentials/oracle/toplink/essentials/queryframework/ReportQuery.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.28 Report generated at Fri Aug 11 12:44:18 2006 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000001/AB0952363AC40CBFE034080020E8C54E.28 Thu Aug 10 15:33:51 2006 --- /ade/cdelahun_toplinkmain/tldev/source/essentials/oracle/toplink/essentials/queryframework/ReportQuery.java Fri Aug 11 12:38:12 2006 *************** *** 960,972 **** subSelect.setSelectionCriteria(countExp.equal(outerBuilder)); } setSelectionCriteria(outerBuilder.exists(subSelect)); ! getItems().setElementAt(new ReportItem(countItem.getName(), outerBuilder.count()), i); setReferenceClass(newDescriptor.getJavaClass()); changeDescriptor(getSession()); } else { // Here everything worked fine, save an empty COUNT() was being generated. ! Expression newCount = countExp.prefixSQL("*").count(); ! getItems().setElementAt(new ReportItem(countItem.getName(), newCount), i); } } } --- 960,975 ---- subSelect.setSelectionCriteria(countExp.equal(outerBuilder)); } setSelectionCriteria(outerBuilder.exists(subSelect)); ! count.setBaseExpression(outerBuilder); ! count.getChildren().setElementAt( outerBuilder, 0); setReferenceClass(newDescriptor.getJavaClass()); changeDescriptor(getSession()); } else { // Here everything worked fine, save an empty COUNT() was being generated. ! Expression newCountEx = countExp.prefixSQL("*"); ! // modify the original count expression incase it is used elsewhere - such as in a having clause ! count.setBaseExpression(newCountEx); ! count.getChildren().setElementAt( newCountEx, 0); } } } ================================================================================ Merge Diffs: /ade/cdelahun_toplinkmain/tltest/source/entity-persistence-tests/src/java/oracle/toplink/essentials/testing/tests/ejb/ejbqltesting/JUnitEJBQLComplexAggregateTestSuite.java vs. /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.10 Report generated at Fri Aug 11 12:44:18 2006 -------------------------------------------------------------------------------- *** /net/stottnfs2.ca.oracle.com/vol/vol1/ade_ottawa_txn/cdelahun/cdelahun_ri_gf675_5236954_060810/ade_storage/000002/AB0952363AC40CBFE034080020E8C54E.10 Thu Aug 10 15:34:37 2006 --- /ade/cdelahun_toplinkmain/tltest/source/entity-persistence-tests/src/java/oracle/toplink/essentials/testing/tests/ejb/ejbqltesting/JUnitEJBQLComplexAggregateTestSuite.java Fri Aug 11 12:38:13 2006 *************** *** 111,117 **** suite.setName("JUnitEJBQLComplexAggregateTestSuite"); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexAVGTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByAndHavingTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexDistinctCountTest")); --- 111,118 ---- suite.setName("JUnitEJBQLComplexAggregateTestSuite"); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexAVGTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByAndHavingTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByTest")); ! suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountDistinctWithGroupByTest2")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexCountWithGroupByTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexDistinctCountTest")); *************** *** 119,125 **** suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexMinTest")); suite.addTest(new JUnitEJBQLComplexAggregateTestSuite("complexSumTest")); - return new TestSetup(suite) { //This method is run at the end of the SUITE only --- 120,125 ---- *************** *** 240,245 **** --- 240,274 ---- Assert.assertTrue("Complex COUNT(Distinct) with Group By test failed", comparer.compareObjects(result, expectedResult)); } + /* + * test for gf675, using count, group by and having fails. This test is specific for a a use case + * where DISTINCT is used with Count and group by + */ + public void complexCountDistinctWithGroupByTest2() + { + oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager(); + + //need to set the class in the expressionbuilder, as the Count(Distinct) will cause the + // query to change and be built around the Employee class instead of the Address class. + ExpressionBuilder expbldr = new ExpressionBuilder(Address.class); + + ReportQuery rq = new ReportQuery(Address.class, expbldr); + Expression exp = expbldr.anyOf("employees"); + + Expression exp2 = expbldr.get("city"); + rq.addAttribute("city", exp2); + rq.addCount("COUNT1",exp, Long.class); + rq.addCount("COUNT2",exp.get("lastName").distinct(),Long.class ); + rq.addGrouping(exp2); + Vector expectedResult = (Vector) em.getActiveSession().executeQuery(rq); + + String ejbqlString3 = "SELECT a.city, COUNT( e ), COUNT( DISTINCT e.lastName ) FROM Address a JOIN a.employees e GROUP BY a.city"; + Query q = em.createQuery(ejbqlString3); + List result = (List) q.getResultList(); + + Assert.assertTrue("Complex COUNT(Distinct) with Group By test failed", comparer.compareObjects(result, expectedResult)); + } + public void complexCountTest() { oracle.toplink.essentials.ejb.cmp3.EntityManager em = (oracle.toplink.essentials.ejb.cmp3.EntityManager) createEntityManager();