From 644c83ee53a059f62ac525945dfa883d6197ec0e Mon Sep 17 00:00:00 2001 From: Hyunsik Choi Date: Mon, 31 Mar 2014 22:19:14 +0900 Subject: [PATCH] TAJO-729: PreLogicalPlanVerifier verifies distinct aggregation functions incorrectly. (hyunsik) --- .../tajo/engine/planner/PreLogicalPlanVerifier.java | 2 +- .../org/apache/tajo/engine/query/TestGroupByQuery.java | 9 +++++++++ .../TestGroupByQuery/testDistinctAggregation6.sql | 9 +++++++++ .../TestGroupByQuery/testDistinctAggregation6.result | 5 +++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation6.sql create mode 100644 tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testDistinctAggregation6.result diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PreLogicalPlanVerifier.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PreLogicalPlanVerifier.java index fef9dc1f0a..cadeff4b4d 100644 --- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PreLogicalPlanVerifier.java +++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PreLogicalPlanVerifier.java @@ -83,7 +83,7 @@ public Expr visitProjection(Context context, Stack stack, Projection expr) for (GeneralSetFunctionExpr setFunction : exprs) { if (distinctValues == null && setFunction.isDistinct()) { distinctValues = setFunction.getParams(); - } else if (distinctValues != null) { + } else if (distinctValues != null && setFunction.isDistinct()) { if (!Arrays.equals(distinctValues, setFunction.getParams())) { Expr [] differences = ObjectArrays.concat(distinctValues, setFunction.getParams(), Expr.class); throw new PlanningException("different DISTINCT columns are not supported yet: " diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java index 250d6f4b98..9e3c375631 100644 --- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java +++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestGroupByQuery.java @@ -176,6 +176,15 @@ public final void testDistinctAggregation5() throws Exception { cleanupQuery(res); } + @Test + public final void testDistinctAggregation6() throws Exception { + // select count(distinct l_orderkey), sum(l_orderkey), sum(l_linenumber), count(*) as v4 from lineitem + // group by l_orderkey; + ResultSet res = executeQuery(); + assertResultSet(res); + cleanupQuery(res); + } + @Test public final void testDistinctAggregationWithHaving1() throws Exception { // select l_linenumber, count(*), count(distinct l_orderkey), sum(distinct l_orderkey) from lineitem diff --git a/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation6.sql b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation6.sql new file mode 100644 index 0000000000..242eb1851d --- /dev/null +++ b/tajo-core/tajo-core-backend/src/test/resources/queries/TestGroupByQuery/testDistinctAggregation6.sql @@ -0,0 +1,9 @@ +select + count(distinct l_orderkey) as v0, + sum(l_orderkey) as v1, + sum(l_linenumber) as v2, + count(*) as v4 +from + lineitem +group by + l_orderkey; \ No newline at end of file diff --git a/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testDistinctAggregation6.result b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testDistinctAggregation6.result new file mode 100644 index 0000000000..cd59b8fd8e --- /dev/null +++ b/tajo-core/tajo-core-backend/src/test/resources/results/TestGroupByQuery/testDistinctAggregation6.result @@ -0,0 +1,5 @@ +v0,v1,v2,v4 +------------------------------- +1,2,3,2 +1,2,1,1 +1,6,3,2 \ No newline at end of file