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]