From d2afcae7aa6929e74ff7a564d1498502a5b7b1c2 Mon Sep 17 00:00:00 2001 From: shizhiqiang03 Date: Fri, 18 Nov 2022 11:23:42 +0800 Subject: [PATCH 1/2] [Bug] fix bug for grouping set query which where condition is false --- .../doris/planner/SingleNodePlanner.java | 5 ++ .../grouping_sets/test_grouping_sets.out | 51 +++++++++++++++ .../grouping_sets/test_grouping_sets.groovy | 63 +++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 regression-test/data/query_p0/grouping_sets/test_grouping_sets.out create mode 100644 regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java index 30dc5eb27e8df2..3f6c569d68fb5d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java @@ -78,6 +78,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -960,6 +961,10 @@ private PlanNode createSelectPlan(SelectStmt selectStmt, Analyzer analyzer, long } if (analyzer.hasEmptySpjResultSet() && selectStmt.getAggInfo() != null) { + GroupByClause groupByClause = selectStmt.getGroupByClause(); + if (Objects.nonNull(groupByClause) && groupByClause.isGroupByExtension()) { + rowTuples.add(selectStmt.getGroupingInfo().getVirtualTuple().getId()); + } final PlanNode emptySetNode = new EmptySetNode(ctx.getNextNodeId(), rowTuples); emptySetNode.init(analyzer); emptySetNode.setOutputSmap(selectStmt.getBaseTblSmap()); diff --git a/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out b/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out new file mode 100644 index 00000000000000..f2da1d2f6736a6 --- /dev/null +++ b/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out @@ -0,0 +1,51 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- +\N \N 3004 +\N 1986 1001 +\N 1989 2003 +1 \N 1001 +1 1989 1001 +2 \N 1001 +2 1986 1001 +3 \N 1002 +3 1989 1002 + +-- !select2 -- +\N \N 3004 +2 \N 1001 +2 1989 1001 +3 \N 1001 +3 1986 1001 +4 \N 1002 +4 1989 1002 + +-- !select3 -- +\N \N 6 +\N 1001 3 +\N 1002 3 +1 \N 6 +1 1001 3 +1 1002 3 + +-- !select4 -- +\N \N 6 +1986 wangynnsfstring12345 2 +1989 wangjuoo4string12345 1 +1989 yunlj8@nkstring12345 3 + +-- !select5 -- +\N 1986 1001 +\N 1989 2003 +2 1989 1001 +3 1986 1001 +4 1989 1002 + +-- !select6 -- +\N \N \N +\N \N 5973 +0 4 1991 +2 9 1991 +2 10 1991 + +-- !select7 -- + diff --git a/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy new file mode 100644 index 00000000000000..83e517de53c157 --- /dev/null +++ b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy @@ -0,0 +1,63 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_grouping_sets") { + qt_select """ + SELECT k1, k2, SUM(k3) FROM test_query_db.test + GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ) ) order by k1, k2 + """ + + qt_select2 """ + select (k1 + 1) k1_, k2, sum(k3) from test_query_db.test group by + rollup(k1_, k2) order by k1_, k2 + """ + + qt_select3 "select 1 as k, k3, sum(k1) from test_query_db.test group by cube(k, k3) order by k, k3" + + qt_select4 """ + select k2, concat(k7, k12) as k_concat, sum(k1) from test_query_db.test group by + grouping sets((k2, k_concat),()) order by k2, k_concat + """ + + qt_select5 """ + select k1_, k2_, sum(k3_) from (select (k1 + 1) k1_, k2 k2_, k3 k3_ from test_query_db.test) as test + group by grouping sets((k1_, k2_), (k2_)) order by k1_, k2_ + """ + + qt_select6 """ + select if(k0 = 1, 2, k0) k_if, k1, sum(k2) k2_sum from test_query_db.baseall where k0 is null or k2 = 1991 + group by grouping sets((k_if, k1),()) order by k_if, k1, k2_sum + """ + + test { + sql """ + SELECT k1, k2, SUM(k3) FROM test_query_db.test + GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ), (k3) ) order by k1, k2 + """ + exception "errCode = 2, detailMessage = column: `k3` cannot both in select list and aggregate functions" + } + + test { + sql """ + SELECT k1, k2, SUM(k3)/(SUM(k3)+1) FROM test_query_db.test + GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ), (k3) ) order by k1, k2 + """ + exception "errCode = 2, detailMessage = column: `k3` cannot both in select list and aggregate functions" + } + + qt_select7 """ select k1,k2,sum(k3) from test_query_db.test where 1 = 2 group by grouping sets((k1), (k1,k2)) """ +} From 02a4008ceceb9636a620858609ae2145adf6ae70 Mon Sep 17 00:00:00 2001 From: shizhiqiang03 Date: Mon, 28 Nov 2022 16:44:09 +0800 Subject: [PATCH 2/2] 1 --- .../grouping_sets/test_grouping_sets.out | 48 ------------------- .../grouping_sets/test_grouping_sets.groovy | 45 +---------------- 2 files changed, 1 insertion(+), 92 deletions(-) diff --git a/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out b/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out index f2da1d2f6736a6..f958424e65c626 100644 --- a/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out +++ b/regression-test/data/query_p0/grouping_sets/test_grouping_sets.out @@ -1,51 +1,3 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -\N \N 3004 -\N 1986 1001 -\N 1989 2003 -1 \N 1001 -1 1989 1001 -2 \N 1001 -2 1986 1001 -3 \N 1002 -3 1989 1002 - --- !select2 -- -\N \N 3004 -2 \N 1001 -2 1989 1001 -3 \N 1001 -3 1986 1001 -4 \N 1002 -4 1989 1002 - --- !select3 -- -\N \N 6 -\N 1001 3 -\N 1002 3 -1 \N 6 -1 1001 3 -1 1002 3 - --- !select4 -- -\N \N 6 -1986 wangynnsfstring12345 2 -1989 wangjuoo4string12345 1 -1989 yunlj8@nkstring12345 3 - --- !select5 -- -\N 1986 1001 -\N 1989 2003 -2 1989 1001 -3 1986 1001 -4 1989 1002 - --- !select6 -- -\N \N \N -\N \N 5973 -0 4 1991 -2 9 1991 -2 10 1991 - --- !select7 -- diff --git a/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy index 83e517de53c157..de5c8c7f3e151b 100644 --- a/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy +++ b/regression-test/suites/query_p0/grouping_sets/test_grouping_sets.groovy @@ -16,48 +16,5 @@ // under the License. suite("test_grouping_sets") { - qt_select """ - SELECT k1, k2, SUM(k3) FROM test_query_db.test - GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ) ) order by k1, k2 - """ - - qt_select2 """ - select (k1 + 1) k1_, k2, sum(k3) from test_query_db.test group by - rollup(k1_, k2) order by k1_, k2 - """ - - qt_select3 "select 1 as k, k3, sum(k1) from test_query_db.test group by cube(k, k3) order by k, k3" - - qt_select4 """ - select k2, concat(k7, k12) as k_concat, sum(k1) from test_query_db.test group by - grouping sets((k2, k_concat),()) order by k2, k_concat - """ - - qt_select5 """ - select k1_, k2_, sum(k3_) from (select (k1 + 1) k1_, k2 k2_, k3 k3_ from test_query_db.test) as test - group by grouping sets((k1_, k2_), (k2_)) order by k1_, k2_ - """ - - qt_select6 """ - select if(k0 = 1, 2, k0) k_if, k1, sum(k2) k2_sum from test_query_db.baseall where k0 is null or k2 = 1991 - group by grouping sets((k_if, k1),()) order by k_if, k1, k2_sum - """ - - test { - sql """ - SELECT k1, k2, SUM(k3) FROM test_query_db.test - GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ), (k3) ) order by k1, k2 - """ - exception "errCode = 2, detailMessage = column: `k3` cannot both in select list and aggregate functions" - } - - test { - sql """ - SELECT k1, k2, SUM(k3)/(SUM(k3)+1) FROM test_query_db.test - GROUP BY GROUPING SETS ((k1, k2), (k1), (k2), ( ), (k3) ) order by k1, k2 - """ - exception "errCode = 2, detailMessage = column: `k3` cannot both in select list and aggregate functions" - } - - qt_select7 """ select k1,k2,sum(k3) from test_query_db.test where 1 = 2 group by grouping sets((k1), (k1,k2)) """ + qt_select """ select k1,k2,sum(k3) from test_query_db.test where 1 = 2 group by grouping sets((k1), (k1,k2)) """ }