Index: src/java/org/apache/jdo/tck/query/result/DefaultUnique.java =================================================================== --- src/java/org/apache/jdo/tck/query/result/DefaultUnique.java (Revision 409605) +++ src/java/org/apache/jdo/tck/query/result/DefaultUnique.java (Arbeitskopie) @@ -16,15 +16,21 @@ package org.apache.jdo.tck.query.result; +import java.math.BigDecimal; import java.util.Arrays; import org.apache.jdo.tck.JDO_Test; import org.apache.jdo.tck.pc.company.CompanyModelReader; +import org.apache.jdo.tck.pc.company.DentalInsurance; import org.apache.jdo.tck.pc.company.Employee; +import org.apache.jdo.tck.pc.company.Project; import org.apache.jdo.tck.query.QueryElementHolder; import org.apache.jdo.tck.query.QueryTest; import org.apache.jdo.tck.util.BatchTestRunner; +import javax.jdo.Query; +import javax.jdo.Transaction; + /** *Title: Default Unique. *
@@ -61,6 +67,9 @@ /*ORDER BY*/ null, /*FROM*/ null, /*TO*/ null), + + // aggregate queries + new QueryElementHolder( /*UNIQUE*/ null, /*RESULT*/ "COUNT(department)", @@ -77,8 +86,67 @@ /*TO*/ null), new QueryElementHolder( /*UNIQUE*/ null, - /*RESULT*/ "COUNT(department)", + /*RESULT*/ "avg(lifetimeOrthoBenefit)", /*INTO*/ null, + /*FROM*/ DentalInsurance.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ null, + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "MIN(budget)", + /*INTO*/ null, + /*FROM*/ Project.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ null, + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "max (budget)", + /*INTO*/ null, + /*FROM*/ Project.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ null, + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "SUM (budget)", + /*INTO*/ null, + /*FROM*/ Project.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ null, + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + + // aggregate queries with grouping + + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "count(department)", + /*INTO*/ null, /*FROM*/ Employee.class, /*EXCLUDE*/ null, /*WHERE*/ null, @@ -88,6 +156,62 @@ /*GROUP BY*/ "department", /*ORDER BY*/ null, /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "AVG(lifetimeOrthoBenefit)", + /*INTO*/ null, + /*FROM*/ DentalInsurance.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ "employee.department", + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "min(lifetimeOrthoBenefit)", + /*INTO*/ null, + /*FROM*/ DentalInsurance.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ "employee.department", + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "MAX(lifetimeOrthoBenefit)", + /*INTO*/ null, + /*FROM*/ DentalInsurance.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ "employee.department", + /*ORDER BY*/ null, + /*FROM*/ null, + /*TO*/ null), + new QueryElementHolder( + /*UNIQUE*/ null, + /*RESULT*/ "sum(lifetimeOrthoBenefit)", + /*INTO*/ null, + /*FROM*/ DentalInsurance.class, + /*EXCLUDE*/ null, + /*WHERE*/ null, + /*VARIABLES*/ null, + /*PARAMETERS*/ null, + /*IMPORTS*/ null, + /*GROUP BY*/ "employee.department", + /*ORDER BY*/ null, + /*FROM*/ null, /*TO*/ null) }; @@ -97,8 +221,18 @@ private Object[] expectedResult = { getTransientCompanyModelInstancesAsList(new String[]{ "emp1", "emp2", "emp3", "emp4", "emp5"}), + // results for aggregate queries new Long(5), - Arrays.asList(new Object[]{new Long(3), new Long(2)}) + new BigDecimal("99.999"), + new BigDecimal("2000.99"), + new BigDecimal("2500000.99"), + new BigDecimal("2552001.98"), + // results for aggregate queries with grouping + Arrays.asList(new Object[]{new Long(3), new Long(2)}), + Arrays.asList(new Object[]{new BigDecimal("99.999"), new BigDecimal("99.999")}), + Arrays.asList(new Object[]{new BigDecimal("99.999"), new BigDecimal("99.999")}), + Arrays.asList(new Object[]{new BigDecimal("99.999"), new BigDecimal("99.999")}), + Arrays.asList(new Object[]{new BigDecimal("299.997"), new BigDecimal("199.998")}) }; /** @@ -109,7 +243,7 @@ public static void main(String[] args) { BatchTestRunner.run(DefaultUnique.class); } - + /** */ public void testThis() { int index = 0; @@ -121,20 +255,26 @@ /** */ public void testAggregateNoGrouping() { - int index = 1; - executeAPIQuery(ASSERTION_FAILED, VALID_QUERIES[index], - expectedResult[index]); - executeSingleStringQuery(ASSERTION_FAILED, VALID_QUERIES[index], - expectedResult[index]); + final int firstIndex = 1; + final int lastIndex = 5; + for (int index = firstIndex; index <= lastIndex; index++) { + executeAPIQuery(ASSERTION_FAILED, VALID_QUERIES[index], + expectedResult[index]); + executeSingleStringQuery(ASSERTION_FAILED, VALID_QUERIES[index], + expectedResult[index]); + } } /** */ public void testAggregateGrouping() { - int index = 2; - executeAPIQuery(ASSERTION_FAILED, VALID_QUERIES[index], - expectedResult[index]); - executeSingleStringQuery(ASSERTION_FAILED, VALID_QUERIES[index], - expectedResult[index]); + final int firstIndex = 6; + final int lastIndex = 10; + for (int index = firstIndex; index <= lastIndex; index++) { + executeAPIQuery(ASSERTION_FAILED, VALID_QUERIES[index], + expectedResult[index]); + executeSingleStringQuery(ASSERTION_FAILED, VALID_QUERIES[index], + expectedResult[index]); + } } /**