From ad8709dc41498f6988e1b9a75efd7deed0dbd1fb Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Wed, 24 Jul 2024 10:40:40 +0800 Subject: [PATCH] update about positive constant --- .../trees/expressions/functions/scalar/SplitByRegexp.java | 7 ++++--- .../trees/expressions/visitor/ScalarFunctionVisitor.java | 8 ++++---- .../string_functions/test_split_by_regexp.groovy | 6 +++++- 3 files changed, 13 insertions(+), 8 deletions(-) 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 297ccb0fb939cd..102cc90102aa96 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 @@ -22,6 +22,7 @@ import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable; +import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.types.ArrayType; import org.apache.doris.nereids.types.IntegerType; @@ -75,10 +76,10 @@ public SplitByRegexp withChildren(List children) { @Override public void checkLegalityBeforeTypeCoercion() { - if (getArguments().size() == 3) { - if (!getArgument(2).isConstant()) { + if (children().size() == 3) { + if (!child(2).isConstant() || ((Literal) child(2)).getDouble() < 0) { throw new AnalysisException("the third parameter of " - + getName() + " function must be a constant: " + toSql()); + + getName() + " function must be a positive constant: " + toSql()); } } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java index 5a38e6c0212e8d..3562e5d7347cc1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java @@ -1831,14 +1831,14 @@ default R visitSplitByChar(SplitByChar splitByChar, C context) { return visitScalarFunction(splitByChar, context); } - default R visitSplitByString(SplitByString splitByString, C context) { - return visitScalarFunction(splitByString, context); - } - default R visitSplitByRegexp(SplitByRegexp splitByRegexp, C context) { return visitScalarFunction(splitByRegexp, context); } + default R visitSplitByString(SplitByString splitByString, C context) { + return visitScalarFunction(splitByString, context); + } + default R visitSplitPart(SplitPart splitPart, C context) { return visitScalarFunction(splitPart, context); } diff --git a/regression-test/suites/query_p0/sql_functions/string_functions/test_split_by_regexp.groovy b/regression-test/suites/query_p0/sql_functions/string_functions/test_split_by_regexp.groovy index c1306817db4628..f3371199d0f28e 100644 --- a/regression-test/suites/query_p0/sql_functions/string_functions/test_split_by_regexp.groovy +++ b/regression-test/suites/query_p0/sql_functions/string_functions/test_split_by_regexp.groovy @@ -51,7 +51,11 @@ suite("test_split_by_regexp") { test { sql " select split_by_regexp(NULL, 'a12bc23de345f', k1) from test_split_by_regexp" - exception "function must be a constant" + exception "function must be a positive constant" + } + test { + sql " select split_by_regexp(NULL, 'a12bc23de345f', -10) from test_split_by_regexp" + exception "function must be a positive constant" } qt_select5 "select split_by_regexp(v1, ',') from test_split_by_regexp order by k1;" qt_select6 "select split_by_regexp('do,ris', v2) from test_split_by_regexp order by k1;"