From 256221a574d0061f0da0662968eeb63512c3f4b5 Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Fri, 5 Jul 2024 09:33:57 +0800 Subject: [PATCH] [fix](Nereids) normalize aggregate should not push down lambda's param (#37109) (#37285) pick from master #37109 ArrayItemSlot should not be inputSlot --- .../apache/doris/nereids/trees/expressions/Expression.java | 4 +++- .../normalize_aggregate/normalize_aggregate_test.out | 3 +++ .../normalize_aggregate/normalize_aggregate_test.groovy | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java index f6c7cbdb66a85a..d7f400955c022c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java @@ -23,6 +23,7 @@ import org.apache.doris.nereids.analyzer.UnboundVariable; import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.trees.AbstractTreeNode; +import org.apache.doris.nereids.trees.expressions.ArrayItemReference.ArrayItemSlot; import org.apache.doris.nereids.trees.expressions.functions.ExpressionTrait; import org.apache.doris.nereids.trees.expressions.functions.Nondeterministic; import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction; @@ -67,7 +68,8 @@ public abstract class Expression extends AbstractTreeNode implements private final boolean inferred; private final boolean hasUnbound; private final boolean compareWidthAndDepth; - private final Supplier> inputSlots = Suppliers.memoize(() -> collect(Slot.class::isInstance)); + private final Supplier> inputSlots = Suppliers.memoize( + () -> collect(e -> e instanceof Slot && !(e instanceof ArrayItemSlot))); protected Expression(Expression... children) { super(children); diff --git a/regression-test/data/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.out b/regression-test/data/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.out index 50c132b2f72ebe..76173253ac0e17 100644 --- a/regression-test/data/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.out +++ b/regression-test/data/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.out @@ -1,3 +1,6 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !test_upper_project_projections_rewrite2 -- +-- !test_lambda -- +1 + diff --git a/regression-test/suites/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.groovy b/regression-test/suites/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.groovy index f3c732c0671fbe..49ebb198a059aa 100644 --- a/regression-test/suites/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.groovy +++ b/regression-test/suites/nereids_rules_p0/normalize_aggregate/normalize_aggregate_test.groovy @@ -23,4 +23,8 @@ suite("normalize_aggregate") { qt_test_upper_project_projections_rewrite2 """ SELECT - + AVG ( DISTINCT - col0 ) * - col0 FROM normalize_aggregate_tab WHERE + - col0 IS NULL GROUP BY col0 HAVING NULL IS NULL;""" + + qt_test_lambda """ + select count(array_filter(i -> (i > 0.99), array(1, 2, 3))) + """ } \ No newline at end of file