From 495c34fa293e688cd02211efe12f5fdf5215f08f Mon Sep 17 00:00:00 2001 From: Pxl Date: Fri, 10 Jun 2022 15:02:14 +0800 Subject: [PATCH] [Bug] [Vectorized] code dump on aggregate node over union node (#10040) * miss check passthrough on vectorized * format and add test * update --- .../java/org/apache/doris/planner/SetOperationNode.java | 7 +++++++ regression-test/data/query/union/test_union.out | 9 +++++++++ regression-test/suites/query/union/test_union.groovy | 1 + 3 files changed, 17 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java index 12b3a93fe9..257ff517cc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SetOperationNode.java @@ -284,9 +284,16 @@ public abstract class SetOperationNode extends PlanNode { return false; } if (VectorizedUtil.isVectorized()) { + // On vectorized engine, we have more chance to do passthrough. if (childSlotRef.getDesc().getSlotOffset() != setOpSlotRef.getDesc().getSlotOffset()) { return false; } + if (childSlotRef.isNullable() != setOpSlotRef.isNullable()) { + return false; + } + if (childSlotRef.getDesc().getType() != setOpSlotRef.getDesc().getType()) { + return false; + } } else { if (!childSlotRef.getDesc().layoutEquals(setOpSlotRef.getDesc())) { return false; diff --git a/regression-test/data/query/union/test_union.out b/regression-test/data/query/union/test_union.out index 56538122b0..9dd5905feb 100644 --- a/regression-test/data/query/union/test_union.out +++ b/regression-test/data/query/union/test_union.out @@ -20,3 +20,12 @@ 8 255 9 1991 +-- !select -- +1985 1 +1986 2 +1989 2 +1991 1 +1992 1 +255 1 +32767 1 + diff --git a/regression-test/suites/query/union/test_union.groovy b/regression-test/suites/query/union/test_union.groovy index 52ea4c3127..300f3a484b 100644 --- a/regression-test/suites/query/union/test_union.groovy +++ b/regression-test/suites/query/union/test_union.groovy @@ -17,4 +17,5 @@ suite("test_union", "query") { order_qt_select "select k1, k2 from test_query_db.baseall union select k2, k3 from test_query_db.test" + order_qt_select "select k2, count(k1) from ((select k2, avg(k1) k1 from test_query_db.baseall group by k2) union all (select k2, count(k1) k1 from test_query_db.test group by k2) )b group by k2 having k2 > 0 order by k2;" }