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

yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new 3aa19673d8e branch-4.1: [fix](user_var)fix integer typing and prefer 
Variable.realExpression for argument/type resolution#62524 (#63452)
3aa19673d8e is described below

commit 3aa19673d8eeee2042c5759b0e92c798f5078a7a
Author: starocean999 <[email protected]>
AuthorDate: Thu May 21 15:10:18 2026 +0800

    branch-4.1: [fix](user_var)fix integer typing and prefer 
Variable.realExpression for argument/type resolution#62524 (#63452)
    
    pick https://github.com/apache/doris/pull/62524
    
    Issue Number: close #xxx
    
    Related PR: #xxx
    
    Problem Summary:
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test <!-- At least one of them must be included. -->
        - [ ] Regression test
        - [ ] Unit Test
        - [ ] Manual test (add detailed scripts or steps below)
        - [ ] No need to test or manual test. Explain why:
    - [ ] This is a refactor/code format and no logic has been changed.
            - [ ] Previous test can cover this change.
            - [ ] No code files have been changed.
            - [ ] Other reason <!-- Add your reason?  -->
    
    - Behavior changed:
        - [ ] No.
        - [ ] Yes. <!-- Explain the behavior change -->
    
    - Does this need documentation?
        - [ ] No.
    - [ ] Yes. <!-- Add document PR link here. eg:
    https://github.com/apache/doris-website/pull/1214 -->
    
    ### Check List (For Reviewer who merge this PR)
    
    - [ ] Confirm the release note
    - [ ] Confirm test cases
    - [ ] Confirm document
    - [ ] Add branch pick label <!-- Add branch pick label that this PR
    should merge into -->
---
 .../doris/nereids/trees/expressions/AGENTS.md      |  5 ++
 .../nereids/trees/expressions/InPredicate.java     | 19 ++---
 .../doris/nereids/trees/expressions/Like.java      |  5 +-
 .../expressions/functions/ExpressionTrait.java     | 35 ++++++++-
 .../trees/expressions/functions/agg/BoolAnd.java   |  2 +-
 .../trees/expressions/functions/agg/BoolOr.java    |  2 +-
 .../trees/expressions/functions/agg/BoolXor.java   |  2 +-
 .../trees/expressions/functions/agg/Histogram.java |  2 +-
 .../expressions/functions/agg/LinearHistogram.java |  2 +-
 .../trees/expressions/functions/agg/Median.java    |  2 +-
 .../functions/agg/MultiDistinctSum.java            |  2 +-
 .../functions/agg/MultiDistinctSum0.java           |  2 +-
 .../functions/agg/PercentileReservoir.java         |  7 +-
 .../trees/expressions/functions/agg/Sum0.java      |  2 +-
 .../functions/generator/ExplodeMap.java            |  5 +-
 .../functions/generator/ExplodeMapOuter.java       |  5 +-
 .../trees/expressions/functions/scalar/Array.java  |  2 +-
 .../expressions/functions/scalar/ArrayApply.java   |  7 +-
 .../expressions/functions/scalar/ArrayAvg.java     |  7 +-
 .../expressions/functions/scalar/ArrayCompact.java |  2 +-
 .../expressions/functions/scalar/ArrayCumSum.java  |  7 +-
 .../functions/scalar/ArrayDifference.java          |  7 +-
 .../functions/scalar/ArrayDistinct.java            |  2 +-
 .../functions/scalar/ArrayEnumerateUniq.java       |  2 +-
 .../functions/scalar/ArrayIntersect.java           |  2 +-
 .../expressions/functions/scalar/ArrayMax.java     |  2 +-
 .../expressions/functions/scalar/ArrayMin.java     |  2 +-
 .../functions/scalar/ArrayPosition.java            |  2 +-
 .../expressions/functions/scalar/ArrayProduct.java |  2 +-
 .../expressions/functions/scalar/ArrayRemove.java  |  2 +-
 .../functions/scalar/ArrayReverseSort.java         |  4 +-
 .../expressions/functions/scalar/ArraySort.java    |  4 +-
 .../expressions/functions/scalar/ArraySortBy.java  |  4 +-
 .../expressions/functions/scalar/ArraySum.java     |  2 +-
 .../expressions/functions/scalar/ArrayUnion.java   |  2 +-
 .../functions/scalar/ArraysOverlap.java            |  2 +-
 .../trees/expressions/functions/scalar/Char.java   |  9 ++-
 .../expressions/functions/scalar/CountEqual.java   |  2 +-
 .../trees/expressions/functions/scalar/Random.java |  6 +-
 .../functions/scalar/RegexpReplace.java            |  7 +-
 .../functions/scalar/RegexpReplaceOne.java         |  7 +-
 .../functions/scalar/SplitByRegexp.java            |  8 +-
 .../functions/scalar/StructElement.java            | 20 ++---
 .../expressions/functions/scalar/Tokenize.java     |  6 +-
 .../expressions/functions/scalar/Uniform.java      |  6 +-
 .../expressions/functions/scalar/WidthBucket.java  |  2 +-
 .../java/org/apache/doris/qe/ConnectContext.java   | 21 +++++-
 .../rules/analysis/UserVariableAnalysisTest.java   | 56 ++++++++++++++
 .../expressions/functions/ExpressionTraitTest.java | 86 ++++++++++++++++++++++
 .../data/query_p0/set/test_user_var.out            |  3 +
 .../suites/query_p0/set/test_user_var.groovy       | 81 ++++++++++++++++++++
 51 files changed, 388 insertions(+), 97 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AGENTS.md 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AGENTS.md
new file mode 100644
index 00000000000..8fcf8cbce1e
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AGENTS.md
@@ -0,0 +1,5 @@
+# Nereids expressions — Review Guide
+
+## checkLegalityBeforeTypeCoercion
+
+- [ ] For all overloaded checkLegalityBeforeTypeCoercion methods, ensure child 
nodes are obtained via getArguments() or getArgument() instead of children() or 
child().
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java
index df972af1832..533f1aa4594 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java
@@ -135,29 +135,30 @@ public class InPredicate extends Expression {
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children().get(0).getDataType().isStructType()) {
+        List<Expression> arguments = getArguments();
+        if (arguments.get(0).getDataType().isStructType()) {
             // we should check in value list is all struct type
-            for (int i = 1; i < children().size(); i++) {
-                if (!children().get(i).getDataType().isStructType() && 
!children().get(i).getDataType().isNullType()) {
+            for (int i = 1; i < arguments.size(); i++) {
+                if (!arguments.get(i).getDataType().isStructType() && 
!arguments.get(i).getDataType().isNullType()) {
                     throw new AnalysisException("in predicate struct should 
compare with struct type list, but got : "
-                            + children().get(i).getDataType().toSql());
+                            + arguments.get(i).getDataType().toSql());
                 }
             }
             return;
         }
 
-        if (children().get(0).getDataType().isArrayType()) {
+        if (arguments.get(0).getDataType().isArrayType()) {
             // we should check in value list is all list type
-            for (int i = 1; i < children().size(); i++) {
-                if (!children().get(i).getDataType().isArrayType() && 
!children().get(i).getDataType().isNullType()) {
+            for (int i = 1; i < arguments.size(); i++) {
+                if (!arguments.get(i).getDataType().isArrayType() && 
!arguments.get(i).getDataType().isNullType()) {
                     throw new AnalysisException("in predicate list should 
compare with struct type list, but got : "
-                            + children().get(i).getDataType().toSql());
+                            + arguments.get(i).getDataType().toSql());
                 }
             }
             return;
         }
 
-        children().forEach(c -> {
+        arguments.forEach(c -> {
             if (c.getDataType().isObjectType()) {
                 throw new AnalysisException("in predicate could not contains 
object type: " + this.toSql());
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java
index 10f25fb0ebc..f979d719f85 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Like.java
@@ -96,8 +96,9 @@ public class Like extends StringRegexPredicate {
     @Override
     public void checkLegalityBeforeTypeCoercion() {
         if (arity() == 3) {
-            if (child(2) instanceof StringLikeLiteral) {
-                String escapeChar = ((StringLikeLiteral) 
child(2)).getStringValue();
+            Expression escapeArgument = getArgument(2);
+            if (escapeArgument instanceof StringLikeLiteral) {
+                String escapeChar = ((StringLikeLiteral) 
escapeArgument).getStringValue();
                 if (escapeChar.getBytes().length != 1) {
                     throw new AnalysisException(
                             "like escape character must be a single ascii 
character: " + escapeChar);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTrait.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTrait.java
index 7ad16a5d77c..8c788faa9d9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTrait.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTrait.java
@@ -21,6 +21,7 @@ import org.apache.doris.nereids.annotation.Developing;
 import org.apache.doris.nereids.exceptions.UnboundException;
 import org.apache.doris.nereids.trees.TreeNode;
 import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.Variable;
 import org.apache.doris.nereids.types.DataType;
 
 import com.google.common.collect.ImmutableList;
@@ -46,12 +47,42 @@ public interface ExpressionTrait extends 
TreeNode<Expression> {
     @Developing
     default void checkLegalityAfterRewrite() {}
 
+    /**
+     * getArguments.
+     */
     default List<Expression> getArguments() {
-        return children();
+        boolean hasVariableArg = false;
+        for (Expression arg : children()) {
+            if (arg instanceof Variable) {
+                hasVariableArg = true;
+                break;
+            }
+        }
+        if (hasVariableArg) {
+            ImmutableList.Builder<Expression> arguments = 
ImmutableList.builder();
+            for (Expression arg : children()) {
+                if (arg instanceof Variable) {
+                    arguments.add(((Variable) arg).getRealExpression());
+                } else {
+                    arguments.add(arg);
+                }
+            }
+            return arguments.build();
+        } else {
+            return children();
+        }
     }
 
+    /**
+     * getArgument.
+     */
     default Expression getArgument(int index) {
-        return child(index);
+        Expression arg = child(index);
+        if (arg instanceof Variable) {
+            return ((Variable) arg).getRealExpression();
+        } else {
+            return arg;
+        }
     }
 
     default List<DataType> getArgumentsTypes() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolAnd.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolAnd.java
index b686d165203..02f8dbec79a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolAnd.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolAnd.java
@@ -67,7 +67,7 @@ public class BoolAnd extends NullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (!(argType.isBooleanType() || argType.isNumericType())) {
             throw new AnalysisException("bool_and requires a boolean or 
numeric argument");
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolOr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolOr.java
index 3e4f393b226..3eefb907d68 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolOr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolOr.java
@@ -63,7 +63,7 @@ public class BoolOr extends NullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (!(argType.isBooleanType() || argType.isNumericType())) {
             throw new AnalysisException("bool_or requires a boolean or numeric 
argument");
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolXor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolXor.java
index 4bdee9c22cb..6e84899ec91 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolXor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/BoolXor.java
@@ -63,7 +63,7 @@ public class BoolXor extends NullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (!(argType.isBooleanType() || argType.isNumericType())) {
             throw new AnalysisException("bool_xor requires a boolean or 
numeric argument");
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Histogram.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Histogram.java
index 748cf69608b..26e02959243 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Histogram.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Histogram.java
@@ -82,7 +82,7 @@ public class Histogram extends NotNullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child(0).getDataType() instanceof PrimitiveType)) {
+        if (!(getArgument(0).getDataType() instanceof PrimitiveType)) {
             SearchSignature.throwCanNotFoundFunctionException(this.getName(), 
getArguments());
         }
         if (arity() == 2 && !getArgument(1).isConstant()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
index 97b42c73464..ace99ad65f9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
@@ -72,7 +72,7 @@ public class LinearHistogram extends 
NotNullableAggregateFunction implements Exp
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child(0).getDataType() instanceof PrimitiveType)) {
+        if (!(getArgument(0).getDataType() instanceof PrimitiveType)) {
             SearchSignature.throwCanNotFoundFunctionException(this.getName(), 
getArguments());
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Median.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Median.java
index 4604c94982f..f91af0352de 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Median.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Median.java
@@ -79,7 +79,7 @@ public class Median extends NullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (((!argType.isNumericType() && !argType.isNullType()) || 
argType.isOnlyMetricType())) {
             throw new AnalysisException("median requires a numeric parameter: 
" + toSql());
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java
index baf609cbb28..0e34ea50ba5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum.java
@@ -53,7 +53,7 @@ public class MultiDistinctSum extends 
NullableAggregateFunction implements Unary
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if ((!argType.isNumericType() && !argType.isBooleanType() && 
!argType.isNullType())
                 || argType.isOnlyMetricType()) {
             throw new AnalysisException("sum requires a numeric or boolean 
parameter: " + this.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum0.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum0.java
index fb0244e3d26..f47adeac7d3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum0.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/MultiDistinctSum0.java
@@ -56,7 +56,7 @@ public class MultiDistinctSum0 extends 
NotNullableAggregateFunction implements U
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if ((!argType.isNumericType() && !argType.isBooleanType() && 
!argType.isNullType())
                 || argType.isOnlyMetricType()) {
             throw new AnalysisException("sum0 requires a numeric or boolean 
parameter: " + this.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/PercentileReservoir.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/PercentileReservoir.java
index 35826e93f3d..7c6f7bb6652 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/PercentileReservoir.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/PercentileReservoir.java
@@ -67,12 +67,13 @@ public class PercentileReservoir extends 
NullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!getArgument(1).isConstant()) {
+        Expression levelArgument = getArgument(1);
+        if (!levelArgument.isConstant()) {
             throw new AnalysisException(
                     "percentile_reservoir requires second parameter must be a 
constant : " + this.toSql());
         }
-        if (child(1) instanceof Literal) {
-            double value = ((Literal) child(1)).getDouble();
+        if (levelArgument instanceof Literal) {
+            double value = ((Literal) levelArgument).getDouble();
             if (value < 0 || value > 1) {
                 throw new AnalysisException(
                         "percentile_reservoir level must be in [0, 1], but got 
" + value + ": " + this.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Sum0.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Sum0.java
index f9a47fcae4d..c2514426226 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Sum0.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Sum0.java
@@ -102,7 +102,7 @@ public class Sum0 extends NotNullableAggregateFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (!argType.isNumericType() && !argType.isBooleanType()
                 && !argType.isNullType() && !argType.isStringLikeType()) {
             throw new AnalysisException("sum0 requires a numeric, boolean or 
string parameter: " + this.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMap.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMap.java
index 68d9559e75a..674ba58274b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMap.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMap.java
@@ -63,9 +63,10 @@ public class ExplodeMap extends TableGeneratingFunction 
implements UnaryExpressi
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child().getDataType() instanceof MapType)) {
+        Expression argument = getArgument(0);
+        if (!(argument.getDataType() instanceof MapType)) {
             throw new AnalysisException("only support map type for explode_map 
function but got "
-                    + child().getDataType());
+                    + argument.getDataType());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMapOuter.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMapOuter.java
index e2564d080dd..05512876da4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMapOuter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/generator/ExplodeMapOuter.java
@@ -61,9 +61,10 @@ public class ExplodeMapOuter extends TableGeneratingFunction 
implements UnaryExp
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child().getDataType() instanceof MapType)) {
+        Expression argument = getArgument(0);
+        if (!(argument.getDataType() instanceof MapType)) {
             throw new AnalysisException("only support map type for explode_map 
function but got "
-                    + child().getDataType());
+                    + argument.getDataType());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Array.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Array.java
index 11257ef87de..8da0b6f3b45 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Array.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Array.java
@@ -69,7 +69,7 @@ public class Array extends ScalarFunction
         if (children.isEmpty()) {
             return;
         }
-        DataType firstChildType = children.get(0).getDataType();
+        DataType firstChildType = getArgument(0).getDataType();
         if (firstChildType.isJsonType() || firstChildType.isVariantType()) {
             throw new AnalysisException("array does not support jsonb/variant 
type");
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayApply.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayApply.java
index 8a052911ed6..3f7ebf12332 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayApply.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayApply.java
@@ -87,11 +87,12 @@ public class ArrayApply extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!child(0).getDataType().isArrayType()) {
+        Expression argument = getArgument(0);
+        if (!argument.getDataType().isArrayType()) {
             throw new AnalysisException("array_apply does not support type "
-            + child(0).getDataType() + ", expression is " + toSql());
+            + argument.getDataType() + ", expression is " + toSql());
         }
-        DataType argType = ((ArrayType) child(0).getDataType()).getItemType();
+        DataType argType = ((ArrayType) argument.getDataType()).getItemType();
         if (!(argType.isIntegralType() || argType.isFloatLikeType() || 
argType.isDecimalLikeType()
                 || argType.isDateLikeType() || argType.isBooleanType())) {
             throw new AnalysisException("array_apply does not support type " + 
argType + ", expression is " + toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayAvg.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayAvg.java
index 04d1568c043..d6c09b901fb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayAvg.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayAvg.java
@@ -79,10 +79,11 @@ public class ArrayAvg extends ScalarFunction implements 
ExplicitlyCastableSignat
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (child(0).getDataType().isArrayType()
-                && !((ArrayType) 
child(0).getDataType()).getItemType().canBeCalculatedInArray()) {
+        Expression argument = getArgument(0);
+        if (argument.getDataType().isArrayType()
+                && !((ArrayType) 
argument.getDataType()).getItemType().canBeCalculatedInArray()) {
             throw new AnalysisException("array_avg does not support type "
-                    + child(0).getDataType().toString() + ", expression is " + 
toSql());
+                    + argument.getDataType().toString() + ", expression is " + 
toSql());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCompact.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCompact.java
index fa22977f717..2b8e0678073 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCompact.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCompact.java
@@ -61,7 +61,7 @@ public class ArrayCompact extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = ((ArrayType) child(0).getDataType()).getItemType();
+        DataType argType = ((ArrayType) 
getArgument(0).getDataType()).getItemType();
         if (argType.isMapType() || argType.isStructType()) {
             throw new AnalysisException("array_compact does not support type "
             + argType.toString() + ", expression is " + toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCumSum.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCumSum.java
index 83fcabda5e3..00a5046719b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCumSum.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayCumSum.java
@@ -80,10 +80,11 @@ public class ArrayCumSum extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (child(0).getDataType().isArrayType()
-                && !((ArrayType) 
child(0).getDataType()).getItemType().canBeCalculatedInArray()) {
+        Expression argument = getArgument(0);
+        if (argument.getDataType().isArrayType()
+                && !((ArrayType) 
argument.getDataType()).getItemType().canBeCalculatedInArray()) {
             throw new AnalysisException("array_cum_sum does not support type "
-            + child(0).getDataType().toString()
+            + argument.getDataType().toString()
             + ", expression is " + toSql());
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDifference.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDifference.java
index 82103fa5748..9bd49e61d90 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDifference.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDifference.java
@@ -76,10 +76,11 @@ public class ArrayDifference extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (child(0).getDataType().isArrayType()
-                && !((ArrayType) 
child(0).getDataType()).getItemType().canBeCalculatedInArray()) {
+        Expression argument = getArgument(0);
+        if (argument.getDataType().isArrayType()
+                && !((ArrayType) 
argument.getDataType()).getItemType().canBeCalculatedInArray()) {
             throw new AnalysisException("array_difference does not support 
type "
-                    + child(0).getDataType().toString() + ", expression is " + 
toSql());
+                    + argument.getDataType().toString() + ", expression is " + 
toSql());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDistinct.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDistinct.java
index d9297dcff6a..9d957b137a2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDistinct.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayDistinct.java
@@ -61,7 +61,7 @@ public class ArrayDistinct extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType()) {
             DataType itemType = ((ArrayType) argType).getItemType();
             if (itemType.isMapType() || itemType.isStructType()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayEnumerateUniq.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayEnumerateUniq.java
index 2c327ae6198..beac5aaf0ab 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayEnumerateUniq.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayEnumerateUniq.java
@@ -65,7 +65,7 @@ public class ArrayEnumerateUniq extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        for (Expression arg : children()) {
+        for (Expression arg : getArguments()) {
             DataType argType = arg.getDataType();
             if (argType.isArrayType()) {
                 DataType itemType = ((ArrayType) argType).getItemType();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayIntersect.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayIntersect.java
index 6f8eda85b79..c48b54305ed 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayIntersect.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayIntersect.java
@@ -63,7 +63,7 @@ public class ArrayIntersect extends ScalarFunction implements 
ExplicitlyCastable
     @Override
     public void checkLegalityBeforeTypeCoercion() {
         DataType itemType = NullType.INSTANCE;
-        for (Expression child : children()) {
+        for (Expression child : getArguments()) {
             DataType argType = child.getDataType();
             // nullsafe
             if (argType == NullType.INSTANCE) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMax.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMax.java
index 9dbae0cd847..d471ad30a5e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMax.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMax.java
@@ -59,7 +59,7 @@ public class ArrayMax extends ScalarFunction implements 
ExplicitlyCastableSignat
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && ((ArrayType) 
argType).getItemType().isComplexType()) {
             throw new AnalysisException("array_max does not support complex 
types: " + toSql());
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMin.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMin.java
index 21de64ec97d..5913fa31772 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMin.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMin.java
@@ -59,7 +59,7 @@ public class ArrayMin extends ScalarFunction implements 
ExplicitlyCastableSignat
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && ((ArrayType) 
argType).getItemType().isComplexType()) {
             throw new AnalysisException("array_min does not support complex 
types: " + toSql());
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayPosition.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayPosition.java
index 07387d1867c..490b428b062 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayPosition.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayPosition.java
@@ -77,7 +77,7 @@ public class ArrayPosition extends ScalarFunction
      */
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && ((ArrayType) 
argType).getItemType().isComplexType()) {
             throw new AnalysisException("array_position does not support 
complex types: " + toSql());
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayProduct.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayProduct.java
index 842f200e08a..fcd9b385215 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayProduct.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayProduct.java
@@ -69,7 +69,7 @@ public class ArrayProduct extends ScalarFunction implements 
ExplicitlyCastableSi
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child().getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType instanceof ArrayType && ((ArrayType) 
argType).getItemType().isComplexType()) {
             throw new AnalysisException(toSql() + " does not support type: "
                                                     + ((ArrayType) 
argType).getItemType().toString());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayRemove.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayRemove.java
index 33b3a517edc..2610f84c8f7 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayRemove.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayRemove.java
@@ -72,7 +72,7 @@ public class ArrayRemove extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && (((ArrayType) 
argType).getItemType().isComplexType()
                     || ((ArrayType) argType).getItemType().isVariantType()
                     || ((ArrayType) argType).getItemType().isJsonType())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayReverseSort.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayReverseSort.java
index 9a3f28499d5..4def17eda8f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayReverseSort.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayReverseSort.java
@@ -57,8 +57,8 @@ public class ArrayReverseSort extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children.get(0).getDataType() instanceof ArrayType) {
-            DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
+        if (argType instanceof ArrayType) {
             // Find the innermost element type for nested arrays
             DataType itemType = ((ArrayType) argType).getItemType();
             while (itemType.isArrayType()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySort.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySort.java
index 2e8b738237a..983d3038152 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySort.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySort.java
@@ -60,8 +60,8 @@ public class ArraySort extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children.get(0).getDataType() instanceof ArrayType) {
-            DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
+        if (argType instanceof ArrayType) {
             // Find the innermost element type for nested arrays
             DataType itemType = ((ArrayType) argType).getItemType();
             while (itemType.isArrayType()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySortBy.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySortBy.java
index 43e1c25aa97..1d0fe2b15f3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySortBy.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySortBy.java
@@ -68,8 +68,8 @@ public class ArraySortBy extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children.get(0).getDataType() instanceof ArrayType) {
-            DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
+        if (argType instanceof ArrayType) {
             // Find the innermost element type for nested arrays
             DataType itemType = ((ArrayType) argType).getItemType();
             while (itemType.isArrayType()) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySum.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySum.java
index 26ef6af72da..38766e320b9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySum.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraySum.java
@@ -73,7 +73,7 @@ public class ArraySum extends ScalarFunction implements 
ExplicitlyCastableSignat
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && !((((ArrayType) 
argType).getItemType().isNumericType())
                                         || ((ArrayType) 
argType).getItemType().isNullType())) {
             throw new AnalysisException("array_sum does not support types: " + 
argType.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayUnion.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayUnion.java
index bc9b6ef1da1..fb4fc04e2cd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayUnion.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayUnion.java
@@ -68,7 +68,7 @@ public class ArrayUnion extends ScalarFunction implements 
ExplicitlyCastableSign
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && (((ArrayType) 
argType).getItemType().isComplexType()
                     || ((ArrayType) argType).getItemType().isVariantType()
                     || ((ArrayType) argType).getItemType().isJsonType())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java
index c5c2e1e4ba0..2f9402f5444 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java
@@ -68,7 +68,7 @@ public class ArraysOverlap extends ScalarFunction implements 
ExplicitlyCastableS
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && (((ArrayType) 
argType).getItemType().isComplexType()
                     || ((ArrayType) argType).getItemType().isVariantType()
                     || ((ArrayType) argType).getItemType().isJsonType())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Char.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Char.java
index 2171f279b22..3a8b4fe82a1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Char.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Char.java
@@ -54,13 +54,14 @@ public class Char extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child(0) instanceof StringLikeLiteral)) {
-            throw new AnalysisException("char charset name must be a constant: 
" + child(0).toSql());
+        Expression charsetArgument = getArgument(0);
+        if (!(charsetArgument instanceof StringLikeLiteral)) {
+            throw new AnalysisException("char charset name must be a constant: 
" + charsetArgument.toSql());
         }
-        StringLikeLiteral stringLiteral = (StringLikeLiteral) child(0);
+        StringLikeLiteral stringLiteral = (StringLikeLiteral) charsetArgument;
         if (!"utf8".equalsIgnoreCase(stringLiteral.getStringValue())) {
             throw new AnalysisException(
-                    "char function currently only support charset name 'utf8': 
" + child(0).toSql());
+                    "char function currently only support charset name 'utf8': 
" + charsetArgument.toSql());
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/CountEqual.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/CountEqual.java
index 51610f0a573..20c6a9c208a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/CountEqual.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/CountEqual.java
@@ -64,7 +64,7 @@ public class CountEqual extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        DataType argType = child(0).getDataType();
+        DataType argType = getArgument(0).getDataType();
         if (argType.isArrayType() && (((ArrayType) 
argType).getItemType().isComplexType()
                     || ((ArrayType) argType).getItemType().isVariantType()
                     || ((ArrayType) argType).getItemType().isJsonType())) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Random.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Random.java
index 625a06ce52b..d35b1dd9ef8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Random.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Random.java
@@ -23,12 +23,10 @@ import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
 import 
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
-import org.apache.doris.nereids.trees.expressions.literal.Literal;
 import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
 import org.apache.doris.nereids.types.BigIntType;
 import org.apache.doris.nereids.types.DoubleType;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 import java.util.List;
@@ -76,8 +74,6 @@ public class Random extends UniqueFunction
 
     public Random(ExprId uniqueId, boolean ignoreUniqueId, Expression arg) {
         super("random", uniqueId, ignoreUniqueId, arg);
-        // align with original planner behavior, refer to: 
org/apache/doris/analysis/Expr.getBuiltinFunction()
-        Preconditions.checkState(arg instanceof Literal, "The param of rand 
function must be literal");
     }
 
     public Random(ExprId uniqueId, boolean ignoreUniqueId, Expression lchild, 
Expression rchild) {
@@ -97,7 +93,7 @@ public class Random extends UniqueFunction
     public void checkLegalityBeforeTypeCoercion() {
         // align with original planner behavior, refer to:
         // org/apache/doris/analysis/Expr.getBuiltinFunction()
-        for (Expression child : children()) {
+        for (Expression child : getArguments()) {
             if (!child.isLiteral()) {
                 throw new AnalysisException("The param of rand function must 
be literal ");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplace.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplace.java
index 4e7f1299d71..0bf01b44c2e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplace.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplace.java
@@ -84,11 +84,12 @@ public class RegexpReplace extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children().size() == 3) {
+        List<Expression> arguments = getArguments();
+        if (arguments.size() == 3) {
             return;
         }
-        if (children().size() == 4) {
-            Expression value = child(3);
+        if (arguments.size() == 4) {
+            Expression value = getArgument(3);
             DataType type = value.getDataType();
             if (!type.isStringLikeType()) {
                 throw new AnalysisException(
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplaceOne.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplaceOne.java
index a86d17e6123..a3a0b8045a3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplaceOne.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpReplaceOne.java
@@ -84,11 +84,12 @@ public class RegexpReplaceOne extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children().size() == 3) {
+        List<Expression> arguments = getArguments();
+        if (arguments.size() == 3) {
             return;
         }
-        if (children().size() == 4) {
-            Expression value = child(3);
+        if (arguments.size() == 4) {
+            Expression value = getArgument(3);
             DataType type = value.getDataType();
             if (!type.isStringLikeType()) {
                 throw new AnalysisException(
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByRegexp.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByRegexp.java
index f7afb7d262f..c689ca644c4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByRegexp.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByRegexp.java
@@ -77,9 +77,11 @@ public class SplitByRegexp extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (children().size() == 3) {
-            if (!child(2).isConstant() || !(child(2) instanceof 
IntegerLikeLiteral)
-                    || (((IntegerLikeLiteral) child(2)).getIntValue() < 0)) {
+        List<Expression> arguments = getArguments();
+        if (arguments.size() == 3) {
+            Expression thirdArgument = getArgument(2);
+            if (!thirdArgument.isConstant() || !(thirdArgument instanceof 
IntegerLikeLiteral)
+                    || (((IntegerLikeLiteral) thirdArgument).getIntValue() < 
0)) {
                 throw new AnalysisException("the third parameter of "
                         + getName() + " function must be a positive constant: 
" + toSql());
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/StructElement.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/StructElement.java
index ed29818b688..0b4b9a8b1bf 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/StructElement.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/StructElement.java
@@ -58,11 +58,13 @@ public class StructElement extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!(child(0).getDataType() instanceof StructType
-                || child(0).getDataType() instanceof NullType)) {
+        Expression structArgument = getArgument(0);
+        Expression fieldArgument = getArgument(1);
+        if (!(structArgument.getDataType() instanceof StructType
+                || structArgument.getDataType() instanceof NullType)) {
             SearchSignature.throwCanNotFoundFunctionException(this.getName(), 
this.getArguments());
         }
-        if (!(child(1) instanceof StringLikeLiteral || child(1) instanceof 
IntegerLikeLiteral)) {
+        if (!(fieldArgument instanceof StringLikeLiteral || fieldArgument 
instanceof IntegerLikeLiteral)) {
             throw new AnalysisException("struct_element only allows"
                     + " constant int or string second parameter: " + 
this.toSql());
         }
@@ -84,22 +86,22 @@ public class StructElement extends ScalarFunction
 
     @Override
     public List<FunctionSignature> getSignatures() {
-        if (child(0).getDataType() instanceof NullType) {
+        if (getArgument(0).getDataType() instanceof NullType) {
             return ImmutableList.of(
                     
FunctionSignature.ret(NullType.INSTANCE).args(NullType.INSTANCE, 
child(1).getDataType())
             );
         }
-        StructType structArgType = (StructType) child(0).getDataType();
+        StructType structArgType = (StructType) getArgument(0).getDataType();
         DataType retType;
-        if (child(1) instanceof IntegerLikeLiteral) {
-            int offset = ((IntegerLikeLiteral) child(1)).getIntValue();
+        if (getArgument(1) instanceof IntegerLikeLiteral) {
+            int offset = ((IntegerLikeLiteral) getArgument(1)).getIntValue();
             if (offset <= 0 || offset > structArgType.getFields().size()) {
                 throw new AnalysisException("the specified field index out of 
bound: " + this.toSql());
             } else {
                 retType = structArgType.getFields().get(offset - 
1).getDataType();
             }
-        } else if (child(1) instanceof StringLikeLiteral) {
-            String name = ((StringLikeLiteral) child(1)).getStringValue();
+        } else if (getArgument(1) instanceof StringLikeLiteral) {
+            String name = ((StringLikeLiteral) 
getArgument(1)).getStringValue();
             StructField field = structArgType.getField(name);
             if (field == null) {
                 throw new AnalysisException("the specified field name " + name 
+ " was not found: " + this.toSql());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Tokenize.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Tokenize.java
index 19c8cc2453d..634e8606710 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Tokenize.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Tokenize.java
@@ -59,7 +59,7 @@ public class Tokenize extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        Expression rightChild = child(1);
+        Expression rightChild = getArgument(1);
         // tokenize(k7, null) could return NULL
         if (rightChild instanceof NullLiteral) {
             return;
@@ -67,12 +67,12 @@ public class Tokenize extends ScalarFunction
         if (!(rightChild instanceof StringLikeLiteral)) {
             throw new AnalysisException("tokenize second argument must be 
string literal");
         }
-        String properties = ((StringLikeLiteral) child(1)).value;
+        String properties = ((StringLikeLiteral) rightChild).value;
         if (properties == null || properties.isEmpty()) {
             return;
         }
         try {
-            new NereidsParser().parseProperties(((StringLikeLiteral) 
child(1)).value);
+            new NereidsParser().parseProperties(properties);
         } catch (Throwable e) {
             throw new AnalysisException("tokenize second argument must be 
properties format");
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Uniform.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Uniform.java
index fbae666c55f..ee2016bbb5e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Uniform.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Uniform.java
@@ -60,10 +60,10 @@ public class Uniform extends ScalarFunction
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!child(0).isLiteral()) {
+        if (!getArgument(0).isLiteral()) {
             throw new AnalysisException("The first parameter (min) of uniform 
function must be literal");
         }
-        if (!child(1).isLiteral()) {
+        if (!getArgument(1).isLiteral()) {
             throw new AnalysisException("The second parameter (max) of uniform 
function must be literal");
         }
         // if do folding on BE, will before checkLegalityAfterRewrite, so we 
need it here too.
@@ -72,7 +72,7 @@ public class Uniform extends ScalarFunction
 
     @Override
     public void checkLegalityAfterRewrite() {
-        if (child(2).isLiteral()) {
+        if (getArgument(2).isLiteral()) {
             throw new AnalysisException("The third parameter (gen) of uniform 
function must not be literal");
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WidthBucket.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WidthBucket.java
index 090a850a8b8..f789955b72a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WidthBucket.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/WidthBucket.java
@@ -77,7 +77,7 @@ public class WidthBucket extends ScalarFunction implements 
ExplicitlyCastableSig
 
     @Override
     public void checkLegalityBeforeTypeCoercion() {
-        if (!child(3).isLiteral()) {
+        if (!getArgument(3).isLiteral()) {
             throw new AnalysisException("The fourth argument of WidthBucket 
must be a constant.");
         }
     }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
index b9b92c620a2..8821951adf1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectContext.java
@@ -21,6 +21,7 @@ import org.apache.doris.analysis.BoolLiteral;
 import org.apache.doris.analysis.DecimalLiteral;
 import org.apache.doris.analysis.FloatLiteral;
 import org.apache.doris.analysis.IntLiteral;
+import org.apache.doris.analysis.LargeIntLiteral;
 import org.apache.doris.analysis.LiteralExpr;
 import org.apache.doris.analysis.NullLiteral;
 import org.apache.doris.analysis.RedirectStatus;
@@ -91,6 +92,7 @@ import org.json.JSONObject;
 import org.xnio.StreamConnection;
 
 import java.io.IOException;
+import java.math.BigInteger;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -590,8 +592,23 @@ public class ConnectContext {
             LiteralExpr literalExpr = userVars.get(varName);
             if (literalExpr instanceof BoolLiteral) {
                 return Literal.of(((BoolLiteral) literalExpr).getValue());
-            } else if (literalExpr instanceof IntLiteral) {
-                return Literal.of(((IntLiteral) literalExpr).getValue());
+            } else if (literalExpr instanceof IntLiteral || literalExpr 
instanceof LargeIntLiteral) {
+                // the value in the IntLiteral should be int, but now is long 
in old planner literalExpr
+                // so type coercion to generate right new planner int Literal
+                switch (literalExpr.getType().getPrimitiveType()) {
+                    case LARGEINT:
+                        return Literal.of(new 
BigInteger(literalExpr.getStringValue()));
+                    case BIGINT:
+                        return Literal.of(((IntLiteral) 
literalExpr).getValue());
+                    case INT:
+                        return Literal.of((int) ((IntLiteral) 
literalExpr).getValue());
+                    case SMALLINT:
+                        return Literal.of((short) ((IntLiteral) 
literalExpr).getValue());
+                    case TINYINT:
+                        return Literal.of((byte) ((IntLiteral) 
literalExpr).getValue());
+                    default:
+                        return Literal.of((int) ((IntLiteral) 
literalExpr).getValue());
+                }
             } else if (literalExpr instanceof FloatLiteral) {
                 return Literal.of(((FloatLiteral) literalExpr).getValue());
             } else if (literalExpr instanceof DecimalLiteral) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/UserVariableAnalysisTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/UserVariableAnalysisTest.java
new file mode 100644
index 00000000000..e7ea8b491ea
--- /dev/null
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/UserVariableAnalysisTest.java
@@ -0,0 +1,56 @@
+// 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.
+
+package org.apache.doris.nereids.rules.analysis;
+
+import org.apache.doris.analysis.IntLiteral;
+import org.apache.doris.analysis.LargeIntLiteral;
+import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.IntegerType;
+import org.apache.doris.nereids.types.LargeIntType;
+import org.apache.doris.nereids.types.SmallIntType;
+import org.apache.doris.nereids.types.TinyIntType;
+import org.apache.doris.nereids.util.MemoTestUtils;
+import org.apache.doris.qe.ConnectContext;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/** Tests for user variable handling in expression analysis. */
+public class UserVariableAnalysisTest {
+
+    @Test
+    public void testUserVarIntegerType() {
+        ConnectContext ctx = MemoTestUtils.createConnectContext();
+        // set user var @a = TINY_INT_MAX (tiny int)
+        ctx.setUserVar("a", new IntLiteral(Byte.MAX_VALUE));
+        // set user var @a = SMALL_INT_MAX (small int)
+        ctx.setUserVar("b", new IntLiteral(Short.MAX_VALUE));
+        // set user var @b = Long.MAX_VALUE (bigint)
+        ctx.setUserVar("c", new IntLiteral(Integer.MAX_VALUE));
+        // set user var @b = Long.MAX_VALUE (bigint)
+        ctx.setUserVar("d", new IntLiteral(Long.MAX_VALUE));
+        // set user var @b = Long.MAX_VALUE (bigint)
+        ctx.setUserVar("e", new 
LargeIntLiteral(LargeIntLiteral.LARGE_INT_MAX));
+
+        Assertions.assertEquals(TinyIntType.INSTANCE, 
ConnectContext.get().getLiteralForUserVar("a").getDataType());
+        Assertions.assertEquals(SmallIntType.INSTANCE, 
ConnectContext.get().getLiteralForUserVar("b").getDataType());
+        Assertions.assertEquals(IntegerType.INSTANCE, 
ConnectContext.get().getLiteralForUserVar("c").getDataType());
+        Assertions.assertEquals(BigIntType.INSTANCE, 
ConnectContext.get().getLiteralForUserVar("d").getDataType());
+        Assertions.assertEquals(LargeIntType.INSTANCE, 
ConnectContext.get().getLiteralForUserVar("e").getDataType());
+    }
+}
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTraitTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTraitTest.java
new file mode 100644
index 00000000000..03a36c2c927
--- /dev/null
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/functions/ExpressionTraitTest.java
@@ -0,0 +1,86 @@
+// 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.
+
+package org.apache.doris.nereids.trees.expressions.functions;
+
+import org.apache.doris.nereids.analyzer.UnboundVariable.VariableType;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.Variable;
+import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.DataType;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+/**
+ * Tests for ExpressionTrait behaviors when children are `Variable`.
+ */
+public class ExpressionTraitTest {
+
+    static class DummyFunction extends Expression {
+        protected DummyFunction(List<Expression> children) {
+            super(children);
+        }
+
+        protected DummyFunction(Expression... children) {
+            super(children);
+        }
+
+        @Override
+        public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+            return null;
+        }
+
+        @Override
+        public Expression withChildren(List<Expression> children) {
+            return new DummyFunction(children);
+        }
+
+        @Override
+        protected String computeToSql() {
+            return "dummy";
+        }
+
+        @Override
+        public boolean nullable() {
+            return false;
+        }
+    }
+
+    @Test
+    public void testVariable() {
+        IntegerLiteral lit = new IntegerLiteral(42);
+        Variable var = new Variable("v", VariableType.USER, lit);
+
+        DummyFunction func = new DummyFunction(var);
+
+        List<Expression> args = func.getArguments();
+        Assertions.assertEquals(1, args.size());
+        Assertions.assertEquals(lit, args.get(0));
+
+        Assertions.assertEquals(lit, func.getArgument(0));
+
+        List<DataType> types = func.getArgumentsTypes();
+        Assertions.assertEquals(1, types.size());
+        Assertions.assertEquals(lit.getDataType(), types.get(0));
+
+        Assertions.assertEquals(lit.getDataType(), func.getArgumentType(0));
+    }
+}
diff --git a/regression-test/data/query_p0/set/test_user_var.out 
b/regression-test/data/query_p0/set/test_user_var.out
index 3a1c1760567..c5f8658aac2 100644
--- a/regression-test/data/query_p0/set/test_user_var.out
+++ b/regression-test/data/query_p0/set/test_user_var.out
@@ -20,3 +20,6 @@ true  false
 -- !select7 --
 1
 
+-- !select_user_var --
+2
+
diff --git a/regression-test/suites/query_p0/set/test_user_var.groovy 
b/regression-test/suites/query_p0/set/test_user_var.groovy
index e653fe3e801..a717441113a 100644
--- a/regression-test/suites/query_p0/set/test_user_var.groovy
+++ b/regression-test/suites/query_p0/set/test_user_var.groovy
@@ -32,4 +32,85 @@ suite("test_user_var") {
     qt_select6 'select @a1'
     sql "SET @a1 = 1"
     qt_select7 'select @A1'
+
+    sql """drop table if exists orders"""
+
+    sql """
+    CREATE TABLE IF NOT EXISTS orders  (
+      o_orderkey       INTEGER NOT NULL,
+      o_custkey        INTEGER NOT NULL,
+      o_orderstatus    CHAR(1) NOT NULL,
+      o_totalprice     DECIMALV3(15,2) NOT NULL,
+      o_orderdate      DATE NOT NULL,
+      o_orderpriority  CHAR(15) NOT NULL,  
+      o_clerk          CHAR(15) NOT NULL, 
+      o_shippriority   INTEGER NOT NULL,
+      O_COMMENT        VARCHAR(79) NOT NULL
+    )
+    DUPLICATE KEY(o_orderkey, o_custkey)
+    DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3
+    PROPERTIES (
+      "replication_num" = "1"
+    );
+    """
+
+    sql """
+    insert into orders values
+    (1, 1, 'o', 9.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+    (1, 1, 'o', 10.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+    (1, 1, 'o', 10.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+    (1, 1, 'o', 10.5, '2023-12-08', 'a', 'b', 1, 'yy'),
+    (2, 1, 'o', 11.5, '2023-12-09', 'a', 'b', 1, 'yy'),
+    (2, 1, 'o', 11.5, '2023-12-09', 'a', 'b', 1, 'yy'),
+    (2, 1, 'o', 11.5, '2023-12-09', 'a', 'b', 1, 'yy'),
+    (3, 1, 'o', 12.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+    (3, 1, 'o', 12.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+    (3, 1, 'o', 12.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+    (3, 1, 'o', 33.5, '2023-12-10', 'a', 'b', 1, 'yy'),
+    (4, 2, 'o', 43.2, '2023-12-11', 'c','d',2, 'mm'),
+    (4, 2, 'o', 43.2, '2023-12-11', 'c','d',2, 'mm'),
+    (4, 2, 'o', 43.2, '2023-12-11', 'c','d',2, 'mm'),
+    (5, 2, 'o', 56.2, '2023-12-12', 'c','d',2, 'mi'),
+    (5, 2, 'o', 56.2, '2023-12-12', 'c','d',2, 'mi'),
+    (5, 2, 'o', 56.2, '2023-12-12', 'c','d',2, 'mi'),
+    (5, 2, 'o', 1.2, '2023-12-12', 'c','d',2, 'mi'); 
+    """
+
+    sql """set @ship_no = 1; """
+
+    // o_shippriority AND @ship_no type should be int, should not add cast to 
type coercion
+    explain {
+        sql """select * from orders where o_shippriority = @ship_no;"""
+        notContains "cast"
+        notContains "CAST"
+    }
+
+    multi_sql """
+    drop table if exists 
table_50_undef_partitions2_keys3_properties4_distributed_by54;
+    create table table_50_undef_partitions2_keys3_properties4_distributed_by54 
(
+    col_date_undef_signed date  null  ,
+    col_int_undef_signed int  null  ,
+    col_datetime_undef_signed datetime  null  ,
+    pk int
+    ) engine=olap
+    DUPLICATE KEY(col_date_undef_signed)
+    PARTITION BY             RANGE(col_date_undef_signed) (
+                    PARTITION p0 VALUES LESS THAN ('2023-12-11'),
+                    PARTITION p1 VALUES LESS THAN ('2023-12-15'),
+                    PARTITION p2 VALUES LESS THAN ('2023-12-16'),
+                    PARTITION p3 VALUES LESS THAN ('2023-12-17'),
+                    PARTITION p4 VALUES LESS THAN ('2024-01-18'),
+                    PARTITION p5 VALUES LESS THAN ('2026-02-18'),
+                    PARTITION p100 VALUES LESS THAN ('9999-12-31')
+                )
+            
+    distributed by hash(pk) buckets 10
+    properties("replication_num" = "1");
+    insert into 
table_50_undef_partitions2_keys3_properties4_distributed_by54(pk,col_int_undef_signed,col_date_undef_signed,col_datetime_undef_signed)
 values (0,3,'2023-12-09','2004-12-17 
12:35:40'),(1,null,'2023-12-15','2007-03-09 
11:14:00'),(2,9,'2023-12-15','2005-01-10 12:14:20'),(3,1,null,'2012-08-13 
07:51:37'),(4,5,'2023-12-12','2008-06-09 05:14:31'),(5,5,null,'2003-12-12 
03:46:03'),(6,4,'2012-11-08','2013-05-17 
19:32:15'),(7,5,'2023-12-15','2013-11-11 05:02:08'),(8,7,'2023-12-15',' [...]
+    SET @v0 = 2502512601;
+    SET @v1 = 'default';
+    SET @v2 = '2025-06-18';
+    SET @v3 = '2023-12-17';
+    """
+    qt_select_user_var """SELECT WINDOW_FUNNEL(@v0, @v1, 
col_datetime_undef_signed, col_date_undef_signed  !=  @v2, 
col_date_undef_signed  >  @v3) FROM 
table_50_undef_partitions2_keys3_properties4_distributed_by54 ;"""
 }
\ No newline at end of file


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

Reply via email to