This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new f209b7ab6e [fix](Nereids) add exchange node check between local and
global agg in plan translator (#12913)
f209b7ab6e is described below
commit f209b7ab6e22ba85a9e12b6affdfa08a6bff5a70
Author: yinzhijian <[email protected]>
AuthorDate: Tue Oct 25 16:55:29 2022 +0800
[fix](Nereids) add exchange node check between local and global agg in plan
translator (#12913)
### table schema
CREATE TABLE `t1` (
`k1` int(11) NULL,
`v1` int(11) NULL
) ENGINE=OLAP
DUPLICATE KEY(`k1`, `v1`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`k1`)
BUCKETS 3
PROPERTIES('replication_num'='1')
### query
select k1,count(distinct v1+1) from t1 group by k1;
### error
java.lang.ClassCastException: org.apache.doris.planner.OlapScanNode cannot
be cast to org.apache.doris.planner.AggregationNode
---
.../doris/nereids/glue/translator/PhysicalPlanTranslator.java | 8 +++++++-
regression-test/data/nereids_syntax_p0/function.out | 5 +++++
regression-test/suites/nereids_syntax_p0/function.groovy | 4 ++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
index 1b973daf47..8fc0ba7f92 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java
@@ -201,7 +201,13 @@ public class PhysicalPlanTranslator extends
DefaultPlanVisitor<PlanFragment, Pla
outputTupleDesc = generateTupleDesc(slotList, null, context);
} else {
// In the distinct agg scenario, global shares local's desc
- AggregationNode localAggNode = (AggregationNode)
inputPlanFragment.getPlanRoot().getChild(0);
+ AggregationNode localAggNode;
+ if (inputPlanFragment.getPlanRoot() instanceof ExchangeNode) {
+ localAggNode = (AggregationNode)
inputPlanFragment.getPlanRoot().getChild(0);
+ } else {
+ // If the group by expr hits the partition key, there may be
no exchange node
+ localAggNode = (AggregationNode)
inputPlanFragment.getPlanRoot();
+ }
outputTupleDesc = localAggNode.getAggInfo().getOutputTupleDesc();
}
diff --git a/regression-test/data/nereids_syntax_p0/function.out
b/regression-test/data/nereids_syntax_p0/function.out
index f8b8fef592..844816f3dd 100644
--- a/regression-test/data/nereids_syntax_p0/function.out
+++ b/regression-test/data/nereids_syntax_p0/function.out
@@ -16,6 +16,11 @@
1
1
+-- !distinct_count_group_by_distributed_key --
+1303 1
+1309 1
+1312 1
+
-- !avg --
5.0 2356811.0
diff --git a/regression-test/suites/nereids_syntax_p0/function.groovy
b/regression-test/suites/nereids_syntax_p0/function.groovy
index a041fc36ab..1ad34fdedf 100644
--- a/regression-test/suites/nereids_syntax_p0/function.groovy
+++ b/regression-test/suites/nereids_syntax_p0/function.groovy
@@ -45,6 +45,10 @@ suite("function") {
SELECT count(distinct c_custkey + 1) AS custdist FROM customer group
by c_city;
"""
+ order_qt_distinct_count_group_by_distributed_key """
+ SELECT c_custkey, count(distinct c_custkey + 1) AS custdist FROM
customer group by c_custkey;
+ """
+
order_qt_avg """
SELECT avg(lo_tax), avg(lo_extendedprice) AS avg_extendedprice FROM
lineorder;
"""
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]