This is an automated email from the ASF dual-hosted git repository.

panxiaolei 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 83e0e6a5692 [Chore](function) add checkLegalityBeforeTypeCoercion for 
function combinators (#55363)
83e0e6a5692 is described below

commit 83e0e6a5692f1f3749884a5e67a28d919ef23ae5
Author: Pxl <[email protected]>
AuthorDate: Mon Sep 1 22:05:47 2025 +0800

    [Chore](function) add checkLegalityBeforeTypeCoercion for function 
combinators (#55363)
    
    add checkLegalityBeforeTypeCoercion for function combinators
---
 .../functions/AggCombinerFunctionBuilder.java        |   9 +++++++--
 .../functions/combinator/ForEachCombinator.java      |   5 +++++
 .../functions/combinator/MergeCombinator.java        |   5 +++++
 .../functions/combinator/StateCombinator.java        |   5 +++++
 .../functions/combinator/UnionCombinator.java        |   5 +++++
 .../data/function_p0/test_agg_foreach.out            | Bin 1273 -> 1113 bytes
 .../data/function_p0/test_agg_foreach_notnull.out    | Bin 1161 -> 1001 bytes
 .../suites/function_p0/test_agg_foreach.groovy       |  19 ++++++++++++++++---
 .../function_p0/test_agg_foreach_notnull.groovy      |   4 ----
 9 files changed, 43 insertions(+), 9 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggCombinerFunctionBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggCombinerFunctionBuilder.java
index 4306697bdc0..bf7ba61039d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggCombinerFunctionBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggCombinerFunctionBuilder.java
@@ -117,9 +117,14 @@ public class AggCombinerFunctionBuilder extends 
FunctionBuilder {
         }
 
         Expression arg = (Expression) arguments.get(0);
-        AggStateType type = (AggStateType) arg.getDataType();
+        List<Expression> nestedArguments;
+        if (arg instanceof StateCombinator) {
+            nestedArguments = arg.children();
+        } else {
+            nestedArguments = ((AggStateType) 
arg.getDataType()).getMockedExpressions();
+        }
 
-        return (AggregateFunction) nestedBuilder.build(nestedName, 
type.getMockedExpressions()).first;
+        return (AggregateFunction) nestedBuilder.build(nestedName, 
nestedArguments).first;
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/ForEachCombinator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/ForEachCombinator.java
index 3cf70236968..be52d59b62c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/ForEachCombinator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/ForEachCombinator.java
@@ -136,4 +136,9 @@ public class ForEachCombinator extends 
NullableAggregateFunction
     public NullableAggregateFunction withAlwaysNullable(boolean 
alwaysNullable) {
         return new 
ForEachCombinator(getAlwaysNullableFunctionParams(alwaysNullable), nested);
     }
+
+    @Override
+    public void checkLegalityBeforeTypeCoercion() {
+        nested.checkLegalityBeforeTypeCoercion();
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
index 6ea63789c12..0ac2a6a8f3f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
@@ -114,4 +114,9 @@ public class MergeCombinator extends AggregateFunction
     public boolean canRollUp() {
         return false;
     }
+
+    @Override
+    public void checkLegalityBeforeTypeCoercion() {
+        nested.checkLegalityBeforeTypeCoercion();
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
index cb1e18dd434..1209e53e73b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
@@ -137,4 +137,9 @@ public class StateCombinator extends ScalarFunction
     public boolean canRollUp() {
         return true;
     }
+
+    @Override
+    public void checkLegalityBeforeTypeCoercion() {
+        nested.checkLegalityBeforeTypeCoercion();
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
index 5a2dff890b0..5e4a701a4b7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
@@ -109,4 +109,9 @@ public class UnionCombinator extends AggregateFunction
     public boolean canRollUp() {
         return true;
     }
+
+    @Override
+    public void checkLegalityBeforeTypeCoercion() {
+        nested.checkLegalityBeforeTypeCoercion();
+    }
 }
diff --git a/regression-test/data/function_p0/test_agg_foreach.out 
b/regression-test/data/function_p0/test_agg_foreach.out
index 7d03631e712..9a6c77d1383 100644
Binary files a/regression-test/data/function_p0/test_agg_foreach.out and 
b/regression-test/data/function_p0/test_agg_foreach.out differ
diff --git a/regression-test/data/function_p0/test_agg_foreach_notnull.out 
b/regression-test/data/function_p0/test_agg_foreach_notnull.out
index dfbe71da514..5bd1bf2fef0 100644
Binary files a/regression-test/data/function_p0/test_agg_foreach_notnull.out 
and b/regression-test/data/function_p0/test_agg_foreach_notnull.out differ
diff --git a/regression-test/suites/function_p0/test_agg_foreach.groovy 
b/regression-test/suites/function_p0/test_agg_foreach.groovy
index 07002d9ee66..f3a7494c2fb 100644
--- a/regression-test/suites/function_p0/test_agg_foreach.groovy
+++ b/regression-test/suites/function_p0/test_agg_foreach.groovy
@@ -73,11 +73,24 @@ suite("test_agg_foreach") {
 
        qt_sql """
    select covar_foreach(a,a)  , covar_samp_foreach(a,a) , corr_foreach(a,a) 
from foreach_table ; 
-   """
-    qt_sql """
-   select topn_foreach(a,a) ,topn_foreach(a,a,a)  , topn_array_foreach(a,a) 
,topn_array_foreach(a,a,a)from foreach_table ;
    """
 
+    test {
+       sql """select topn_foreach(a,a) from foreach_table;"""
+       exception "errCode"
+       }
+    test {
+       sql """select topn_foreach(a,a,a) from foreach_table;"""
+       exception "errCode"
+       }
+    test {
+       sql """select topn_array_foreach(a,a) from foreach_table;"""
+       exception "errCode"
+       }
+    test {
+       sql """select topn_array_foreach(a,a,a) from foreach_table;"""
+       exception "errCode"
+       }
 
        qt_sql """
        select count_foreach(a)  , count_by_enum_foreach(a)  , 
approx_count_distinct_foreach(a) from foreach_table;
diff --git a/regression-test/suites/function_p0/test_agg_foreach_notnull.groovy 
b/regression-test/suites/function_p0/test_agg_foreach_notnull.groovy
index 7a49667aba7..80c7fe3f180 100644
--- a/regression-test/suites/function_p0/test_agg_foreach_notnull.groovy
+++ b/regression-test/suites/function_p0/test_agg_foreach_notnull.groovy
@@ -73,10 +73,6 @@ suite("test_agg_foreach_not_null") {
    qt_sql """
    select covar_foreach(a,a)  , covar_samp_foreach(a,a) , corr_foreach(a,a) 
from foreach_table_not_null ; 
    """
-    qt_sql """
-   select topn_foreach(a,a) ,topn_foreach(a,a,a)  , topn_array_foreach(a,a) 
,topn_array_foreach(a,a,a)from foreach_table_not_null ;
-   """
-
 
    qt_sql """
    select count_foreach(a)  , count_by_enum_foreach(a)  , 
approx_count_distinct_foreach(a) from foreach_table_not_null;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to