This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 0cff5398102 [feature](function) support new function replace_empty (#36283) (#36656) 0cff5398102 is described below commit 0cff5398102d7a14f0d63a56d2782f3f58ee4101 Author: Mingyu Chen <morning...@163.com> AuthorDate: Fri Jun 21 16:46:22 2024 +0800 [feature](function) support new function replace_empty (#36283) (#36656) #36283 --- be/src/vec/functions/function_string.cpp | 3 +- be/src/vec/functions/function_string.h | 46 +++-- be/test/vec/function/function_string_test.cpp | 18 ++ .../doris/catalog/BuiltinScalarFunctions.java | 2 + .../expressions/functions/scalar/ReplaceEmpty.java | 72 ++++++++ .../expressions/visitor/ScalarFunctionVisitor.java | 5 + .../data/nereids_function_p0/scalar_function/R.out | 24 +++ .../nereids_function_p0/scalar_function/R.groovy | 186 +++++++++++---------- 8 files changed, 256 insertions(+), 100 deletions(-) diff --git a/be/src/vec/functions/function_string.cpp b/be/src/vec/functions/function_string.cpp index bfbd57f4747..841b6561bf7 100644 --- a/be/src/vec/functions/function_string.cpp +++ b/be/src/vec/functions/function_string.cpp @@ -1153,7 +1153,8 @@ void register_function_string(SimpleFunctionFactory& factory) { factory.register_function<FunctionStringDigestOneArg<MD5Sum>>(); factory.register_function<FunctionStringDigestSHA1>(); factory.register_function<FunctionStringDigestSHA2>(); - factory.register_function<FunctionReplace>(); + factory.register_function<FunctionReplace<ReplaceImpl, true>>(); + factory.register_function<FunctionReplace<ReplaceEmptyImpl, false>>(); factory.register_function<FunctionMask>(); factory.register_function<FunctionMaskPartial<true>>(); factory.register_function<FunctionMaskPartial<false>>(); diff --git a/be/src/vec/functions/function_string.h b/be/src/vec/functions/function_string.h index 31c6cbb5ecb..51e1d624062 100644 --- a/be/src/vec/functions/function_string.h +++ b/be/src/vec/functions/function_string.h @@ -3376,10 +3376,19 @@ private: } }; +struct ReplaceImpl { + static constexpr auto name = "replace"; +}; + +struct ReplaceEmptyImpl { + static constexpr auto name = "replace_empty"; +}; + +template <typename Impl, bool empty> class FunctionReplace : public IFunction { public: - static constexpr auto name = "replace"; - static FunctionPtr create() { return std::make_shared<FunctionReplace>(); } + static constexpr auto name = Impl::name; + static FunctionPtr create() { return std::make_shared<FunctionReplace<Impl, empty>>(); } String get_name() const override { return name; } size_t get_number_of_arguments() const override { return 3; } @@ -3421,16 +3430,33 @@ public: private: std::string replace(std::string str, std::string_view old_str, std::string_view new_str) const { if (old_str.empty()) { + if constexpr (empty) { + return str; + } else { + // Different from "Replace" only when the search string is empty. + // it will insert `new_str` in front of every character and at the end of the old str. + if (new_str.empty()) { + return str; + } + std::string result; + result.reserve(str.length() * (new_str.length() + 1) + new_str.length()); + for (char c : str) { + result += new_str; + result += c; + } + result += new_str; + return result; + } + } else { + std::string::size_type pos = 0; + std::string::size_type oldLen = old_str.size(); + std::string::size_type newLen = new_str.size(); + while ((pos = str.find(old_str, pos)) != std::string::npos) { + str.replace(pos, oldLen, new_str); + pos += newLen; + } return str; } - std::string::size_type pos = 0; - std::string::size_type oldLen = old_str.size(); - std::string::size_type newLen = new_str.size(); - while ((pos = str.find(old_str, pos)) != std::string::npos) { - str.replace(pos, oldLen, new_str); - pos += newLen; - } - return str; } }; diff --git a/be/test/vec/function/function_string_test.cpp b/be/test/vec/function/function_string_test.cpp index 0e5d0e1e038..6d1f085f2eb 100644 --- a/be/test/vec/function/function_string_test.cpp +++ b/be/test/vec/function/function_string_test.cpp @@ -1155,6 +1155,24 @@ TEST(function_string_test, function_replace) { static_cast<void>(check_function<DataTypeString, true>(func_name, input_types, data_set)); } +TEST(function_string_test, function_replace_empty) { + std::string func_name = "replace_empty"; + InputTypeSet input_types = { + TypeIndex::String, + TypeIndex::String, + TypeIndex::String, + }; + DataSet data_set = { + {{Null(), VARCHAR("9090"), VARCHAR("")}, {Null()}}, + {{VARCHAR("http://www.baidu.com:9090"), VARCHAR("9090"), VARCHAR("")}, + {VARCHAR("http://www.baidu.com:")}}, + {{VARCHAR("aaaaa"), VARCHAR("a"), VARCHAR("")}, {VARCHAR("")}}, + {{VARCHAR("abc"), VARCHAR(""), VARCHAR("xyz")}, {VARCHAR("xyzaxyzbxyzcxyz")}}, + {{VARCHAR("aaaaa"), VARCHAR("aa"), VARCHAR("")}, {VARCHAR("a")}}, + {{VARCHAR("aaaaa"), VARCHAR("aa"), VARCHAR("a")}, {VARCHAR("aaa")}}}; + static_cast<void>(check_function<DataTypeString, true>(func_name, input_types, data_set)); +} + TEST(function_string_test, function_bit_length_test) { std::string func_name = "bit_length"; InputTypeSet input_types = {TypeIndex::String}; diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java index eb7a2c6050c..7dea900b3cf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java @@ -329,6 +329,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.RegexpReplace import org.apache.doris.nereids.trees.expressions.functions.scalar.RegexpReplaceOne; import org.apache.doris.nereids.trees.expressions.functions.scalar.Repeat; import org.apache.doris.nereids.trees.expressions.functions.scalar.Replace; +import org.apache.doris.nereids.trees.expressions.functions.scalar.ReplaceEmpty; import org.apache.doris.nereids.trees.expressions.functions.scalar.Reverse; import org.apache.doris.nereids.trees.expressions.functions.scalar.Right; import org.apache.doris.nereids.trees.expressions.functions.scalar.Round; @@ -787,6 +788,7 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(RegexpReplaceOne.class, "regexp_replace_one"), scalar(Repeat.class, "repeat"), scalar(Replace.class, "replace"), + scalar(ReplaceEmpty.class, "replace_empty"), scalar(Reverse.class, "reverse"), scalar(Right.class, "right"), scalar(Round.class, "round"), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ReplaceEmpty.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ReplaceEmpty.java new file mode 100644 index 00000000000..f237777e67f --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ReplaceEmpty.java @@ -0,0 +1,72 @@ +// 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.scalar; + +import org.apache.doris.catalog.FunctionSignature; +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.shape.TernaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.StringType; +import org.apache.doris.nereids.types.VarcharType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * ScalarFunction 'replace_empty'. + */ +public class ReplaceEmpty extends ScalarFunction + implements TernaryExpression, ExplicitlyCastableSignature, PropagateNullable { + + public static final List<FunctionSignature> SIGNATURES = ImmutableList.of( + FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT) + .args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT), + FunctionSignature.ret(StringType.INSTANCE) + .args(StringType.INSTANCE, StringType.INSTANCE, StringType.INSTANCE) + ); + + /** + * constructor with 3 arguments. + */ + public ReplaceEmpty(Expression arg0, Expression arg1, Expression arg2) { + super("replace_empty", arg0, arg1, arg2); + } + + /** + * withChildren. + */ + @Override + public ReplaceEmpty withChildren(List<Expression> children) { + Preconditions.checkArgument(children.size() == 3); + return new ReplaceEmpty(children.get(0), children.get(1), children.get(2)); + } + + @Override + public List<FunctionSignature> getSignatures() { + return SIGNATURES; + } + + @Override + public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) { + return visitor.visitReplaceEmpty(this, context); + } +} 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 b8d2ccfbf4f..b2530b28b01 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 @@ -328,6 +328,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.RegexpReplace import org.apache.doris.nereids.trees.expressions.functions.scalar.RegexpReplaceOne; import org.apache.doris.nereids.trees.expressions.functions.scalar.Repeat; import org.apache.doris.nereids.trees.expressions.functions.scalar.Replace; +import org.apache.doris.nereids.trees.expressions.functions.scalar.ReplaceEmpty; import org.apache.doris.nereids.trees.expressions.functions.scalar.Reverse; import org.apache.doris.nereids.trees.expressions.functions.scalar.Right; import org.apache.doris.nereids.trees.expressions.functions.scalar.Round; @@ -1687,6 +1688,10 @@ public interface ScalarFunctionVisitor<R, C> { return visitScalarFunction(replace, context); } + default R visitReplaceEmpty(ReplaceEmpty replaceEmpty, C context) { + return visitScalarFunction(replaceEmpty, context); + } + default R visitReverse(Reverse reverse, C context) { return visitScalarFunction(reverse, context); } diff --git a/regression-test/data/nereids_function_p0/scalar_function/R.out b/regression-test/data/nereids_function_p0/scalar_function/R.out index df1e89de714..df315a2624e 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/R.out +++ b/regression-test/data/nereids_function_p0/scalar_function/R.out @@ -405,6 +405,30 @@ string3 string3 string3 +-- !sql_relace_empty01 -- +abcxabcyabczabc + +-- !sql_relace_empty02 -- +\N + +-- !sql_relace_empty03 -- +\N + +-- !sql_relace_empty04 -- +\N + +-- !sql_relace_empty05 -- +abcyz + +-- !sql_relace_empty06 -- +yz + +-- !sql_relace_empty07 -- +xyz + +-- !sql_relace_empty08 -- +abc + -- !sql_right_Varchar_Integer -- \N 1 diff --git a/regression-test/suites/nereids_function_p0/scalar_function/R.groovy b/regression-test/suites/nereids_function_p0/scalar_function/R.groovy index 1110ed3a47a..2a00feeafdf 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/R.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/R.groovy @@ -16,93 +16,101 @@ // under the License. suite("nereids_scalar_fn_R") { - sql 'use regression_test_nereids_function_p0' - sql 'set enable_nereids_planner=true' - sql 'set enable_fallback_to_original_planner=false' - qt_sql_radians_Double "select radians(kdbl) from fn_test order by kdbl" - qt_sql_radians_Double_notnull "select radians(kdbl) from fn_test_not_nullable order by kdbl" - sql "select random() from fn_test" - sql "select random() from fn_test_not_nullable" - sql "select random(1000) from fn_test order by kbint" - sql "select random(1000) from fn_test_not_nullable order by kbint" - qt_sql_regexp_Varchar_Varchar "select regexp(kvchrs1, kvchrs2) from fn_test order by kvchrs1" - qt_sql_regexp_Varchar_Varchar_not_null "select regexp(kvchrs1, kvchrs2) from fn_test_not_nullable order by kvchrs1" - qt_sql_regexp_extract_Varchar_Varchar_BigInt "select regexp_extract(kvchrs1, kvchrs1, kbint) from fn_test order by kvchrs1, kvchrs1, kbint" - qt_sql_regexp_extract_Varchar_Varchar_BigInt_notnull "select regexp_extract(kvchrs1, kvchrs1, kbint) from fn_test_not_nullable order by kvchrs1, kvchrs1, kbint" - qt_sql_regexp_extract_String_String_BigInt "select regexp_extract(kstr, kstr, kbint) from fn_test order by kstr, kstr, kbint" - qt_sql_regexp_extract_String_String_BigInt_notnull "select regexp_extract(kstr, kstr, kbint) from fn_test_not_nullable order by kstr, kstr, kbint" - qt_sql_regexp_extract_all_Varchar_Varchar "select regexp_extract_all(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" - qt_sql_regexp_extract_all_Varchar_Varchar_notnull "select regexp_extract_all(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" - qt_sql_regexp_extract_all_String_String "select regexp_extract_all(kstr, kstr) from fn_test order by kstr, kstr" - qt_sql_regexp_extract_all_String_String_notnull "select regexp_extract_all(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" - qt_sql_regexp_replace_Varchar_Varchar_Varchar "select regexp_replace(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_regexp_replace_Varchar_Varchar_Varchar_notnull "select regexp_replace(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_regexp_replace_String_String_String "select regexp_replace(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" - qt_sql_regexp_replace_String_String_String_notnull "select regexp_replace(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" - qt_sql_regexp_replace_one_Varchar_Varchar_Varchar "select regexp_replace_one(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_regexp_replace_one_Varchar_Varchar_Varchar_notnull "select regexp_replace_one(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_regexp_replace_one_String_String_String "select regexp_replace_one(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" - qt_sql_regexp_replace_one_String_String_String_notnull "select regexp_replace_one(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" - qt_sql_repeat_Varchar_Integer "select repeat(kvchrs1, kint) from fn_test order by kvchrs1, kint" - qt_sql_repeat_Varchar_Integer_notnull "select repeat(kvchrs1, kint) from fn_test_not_nullable order by kvchrs1, kint" - qt_sql_repeat_String_Integer "select repeat(kstr, kint) from fn_test order by kstr, kint" - qt_sql_repeat_String_Integer_notnull "select repeat(kstr, kint) from fn_test_not_nullable order by kstr, kint" - qt_sql_replace_Varchar_Varchar_Varchar "select replace(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_replace_Varchar_Varchar_Varchar_notnull "select replace(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" - qt_sql_replace_String_String_String "select replace(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" - qt_sql_replace_String_String_String_notnull "select replace(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" - qt_sql_right_Varchar_Integer "select right(kvchrs1, kint) from fn_test order by kvchrs1, kint" - qt_sql_right_Varchar_Integer_notnull "select right(kvchrs1, kint) from fn_test_not_nullable order by kvchrs1, kint" - qt_sql_right_String_Integer "select right(kstr, kint) from fn_test order by kstr, kint" - qt_sql_right_String_Integer_notnull "select right(kstr, kint) from fn_test_not_nullable order by kstr, kint" - qt_sql_round_Double "select round(kdbl) from fn_test order by kdbl" - qt_sql_round_Double_notnull "select round(kdbl) from fn_test_not_nullable order by kdbl" - qt_sql_round_Double_Integer "select round(kdbl, 2) from fn_test order by kdbl" - qt_sql_round_Double_Integer_notnull "select round(kdbl, 2) from fn_test_not_nullable order by kdbl" - qt_sql_round_DecimalV3S1 "select round(kdcmlv3s1) from fn_test order by kdcmlv3s1" - qt_sql_round_DecimalV3S1_notnull "select round(kdcmlv3s1) from fn_test_not_nullable order by kdcmlv3s1" - qt_sql_round_DecimalV3S2 "select round(kdcmlv3s2) from fn_test order by kdcmlv3s2" - qt_sql_round_DecimalV3S2_notnull "select round(kdcmlv3s2) from fn_test_not_nullable order by kdcmlv3s2" - qt_sql_round_DecimalV3S3 "select round(kdcmlv3s3) from fn_test order by kdcmlv3s3" - qt_sql_round_DecimalV3S3_notnull "select round(kdcmlv3s3) from fn_test_not_nullable order by kdcmlv3s3" - qt_sql_round_DecimalV3S1_Int "select round(kdcmlv3s1, 1) from fn_test order by kdcmlv3s1" - qt_sql_round_DecimalV3S1_Int_notnull "select round(kdcmlv3s1, 1) from fn_test_not_nullable order by kdcmlv3s1" - qt_sql_round_DecimalV3S2_Int "select round(kdcmlv3s2, 1) from fn_test order by kdcmlv3s2" - qt_sql_round_DecimalV3S2_Int_notnull "select round(kdcmlv3s2, 1) from fn_test_not_nullable order by kdcmlv3s2" - qt_sql_round_DecimalV3S3_Int "select round(kdcmlv3s3, 1) from fn_test order by kdcmlv3s3" - qt_sql_round_DecimalV3S3_Int_notnull "select round(kdcmlv3s3, 1) from fn_test_not_nullable order by kdcmlv3s3" - qt_sql_round_bankers_Double "select round_bankers(kdbl) from fn_test order by kdbl" - qt_sql_round_bankers_Double_notnull "select round_bankers(kdbl) from fn_test_not_nullable order by kdbl" - qt_sql_round_bankers_Double_Integer "select round_bankers(kdbl, 2) from fn_test order by kdbl" - qt_sql_round_bankers_Double_Integer_notnull "select round_bankers(kdbl, 2) from fn_test_not_nullable order by kdbl" - qt_sql_round_bankers_DecimalV3S1 "select round_bankers(kdcmlv3s1) from fn_test order by kdcmlv3s1" - qt_sql_round_bankers_DecimalV3S1_notnull "select round_bankers(kdcmlv3s1) from fn_test_not_nullable order by kdcmlv3s1" - qt_sql_round_bankers_DecimalV3S2 "select round_bankers(kdcmlv3s2) from fn_test order by kdcmlv3s2" - qt_sql_round_bankers_DecimalV3S2_notnull "select round_bankers(kdcmlv3s2) from fn_test_not_nullable order by kdcmlv3s2" - qt_sql_round_bankers_DecimalV3S3 "select round_bankers(kdcmlv3s3) from fn_test order by kdcmlv3s3" - qt_sql_round_bankers_DecimalV3S3_notnull "select round_bankers(kdcmlv3s3) from fn_test_not_nullable order by kdcmlv3s3" - qt_sql_round_bankers_DecimalV3S1_Int "select round_bankers(kdcmlv3s1, 1) from fn_test order by kdcmlv3s1" - qt_sql_round_bankers_DecimalV3S1_Int_notnull "select round_bankers(kdcmlv3s1, 1) from fn_test_not_nullable order by kdcmlv3s1" - qt_sql_round_bankers_DecimalV3S2_Int "select round_bankers(kdcmlv3s2, 1) from fn_test order by kdcmlv3s2" - qt_sql_round_bankers_DecimalV3S2_Int_notnull "select round_bankers(kdcmlv3s2, 1) from fn_test_not_nullable order by kdcmlv3s2" - qt_sql_round_bankers_DecimalV3S3_Int "select round_bankers(kdcmlv3s3, 1) from fn_test order by kdcmlv3s3" - qt_sql_round_bankers_DecimalV3S3_Int_notnull "select round_bankers(kdcmlv3s3, 1) from fn_test_not_nullable order by kdcmlv3s3" - qt_sql_rpad_Varchar_Integer_Varchar "select rpad(kvchrs1, kint, kvchrs1) from fn_test order by kvchrs1, kint, kvchrs1" - qt_sql_rpad_Varchar_Integer_Varchar_notnull "select rpad(kvchrs1, kint, kvchrs1) from fn_test_not_nullable order by kvchrs1, kint, kvchrs1" - qt_sql_rpad_String_Integer_String "select rpad(kstr, kint, kstr) from fn_test order by kstr, kint, kstr" - qt_sql_rpad_String_Integer_String_notnull "select rpad(kstr, kint, kstr) from fn_test_not_nullable order by kstr, kint, kstr" - qt_sql_rtrim_Varchar "select rtrim(kvchrs1) from fn_test order by kvchrs1" - qt_sql_rtrim_Varchar_notnull "select rtrim(kvchrs1) from fn_test_not_nullable order by kvchrs1" - qt_sql_rtrim_String "select rtrim(kstr) from fn_test order by kstr" - qt_sql_rtrim_String_notnull "select rtrim(kstr) from fn_test_not_nullable order by kstr" - qt_sql_rtrim_Varchar_Varchar "select rtrim(kvchrs1, '1') from fn_test order by kvchrs1" - qt_sql_rtrim_Varchar_Varchar_notnull "select rtrim(kvchrs1, '1') from fn_test_not_nullable order by kvchrs1" - qt_sql_rtrim_String_String "select rtrim(kstr, '1') from fn_test order by kstr" - qt_sql_rtrim_String_String_notnull "select rtrim(kstr, '1') from fn_test_not_nullable order by kstr" - sql "SELECT random_bytes(7);" - qt_sql_random_bytes "SELECT random_bytes(null);" - test { - sql " select random_bytes(-1); " - exception "argument -1 of function random_bytes at row 0 was invalid" - } + sql 'use regression_test_nereids_function_p0' + sql 'set enable_nereids_planner=true' + sql 'set enable_fallback_to_original_planner=false' + qt_sql_radians_Double "select radians(kdbl) from fn_test order by kdbl" + qt_sql_radians_Double_notnull "select radians(kdbl) from fn_test_not_nullable order by kdbl" + sql "select random() from fn_test" + sql "select random() from fn_test_not_nullable" + sql "select random(1000) from fn_test order by kbint" + sql "select random(1000) from fn_test_not_nullable order by kbint" + qt_sql_regexp_Varchar_Varchar "select regexp(kvchrs1, kvchrs2) from fn_test order by kvchrs1" + qt_sql_regexp_Varchar_Varchar_not_null "select regexp(kvchrs1, kvchrs2) from fn_test_not_nullable order by kvchrs1" + qt_sql_regexp_extract_Varchar_Varchar_BigInt "select regexp_extract(kvchrs1, kvchrs1, kbint) from fn_test order by kvchrs1, kvchrs1, kbint" + qt_sql_regexp_extract_Varchar_Varchar_BigInt_notnull "select regexp_extract(kvchrs1, kvchrs1, kbint) from fn_test_not_nullable order by kvchrs1, kvchrs1, kbint" + qt_sql_regexp_extract_String_String_BigInt "select regexp_extract(kstr, kstr, kbint) from fn_test order by kstr, kstr, kbint" + qt_sql_regexp_extract_String_String_BigInt_notnull "select regexp_extract(kstr, kstr, kbint) from fn_test_not_nullable order by kstr, kstr, kbint" + qt_sql_regexp_extract_all_Varchar_Varchar "select regexp_extract_all(kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1" + qt_sql_regexp_extract_all_Varchar_Varchar_notnull "select regexp_extract_all(kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1" + qt_sql_regexp_extract_all_String_String "select regexp_extract_all(kstr, kstr) from fn_test order by kstr, kstr" + qt_sql_regexp_extract_all_String_String_notnull "select regexp_extract_all(kstr, kstr) from fn_test_not_nullable order by kstr, kstr" + qt_sql_regexp_replace_Varchar_Varchar_Varchar "select regexp_replace(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_regexp_replace_Varchar_Varchar_Varchar_notnull "select regexp_replace(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_regexp_replace_String_String_String "select regexp_replace(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" + qt_sql_regexp_replace_String_String_String_notnull "select regexp_replace(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" + qt_sql_regexp_replace_one_Varchar_Varchar_Varchar "select regexp_replace_one(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_regexp_replace_one_Varchar_Varchar_Varchar_notnull "select regexp_replace_one(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_regexp_replace_one_String_String_String "select regexp_replace_one(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" + qt_sql_regexp_replace_one_String_String_String_notnull "select regexp_replace_one(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" + qt_sql_repeat_Varchar_Integer "select repeat(kvchrs1, kint) from fn_test order by kvchrs1, kint" + qt_sql_repeat_Varchar_Integer_notnull "select repeat(kvchrs1, kint) from fn_test_not_nullable order by kvchrs1, kint" + qt_sql_repeat_String_Integer "select repeat(kstr, kint) from fn_test order by kstr, kint" + qt_sql_repeat_String_Integer_notnull "select repeat(kstr, kint) from fn_test_not_nullable order by kstr, kint" + qt_sql_replace_Varchar_Varchar_Varchar "select replace(kvchrs1, kvchrs1, kvchrs1) from fn_test order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_replace_Varchar_Varchar_Varchar_notnull "select replace(kvchrs1, kvchrs1, kvchrs1) from fn_test_not_nullable order by kvchrs1, kvchrs1, kvchrs1" + qt_sql_replace_String_String_String "select replace(kstr, kstr, kstr) from fn_test order by kstr, kstr, kstr" + qt_sql_replace_String_String_String_notnull "select replace(kstr, kstr, kstr) from fn_test_not_nullable order by kstr, kstr, kstr" + qt_sql_relace_empty01 "select replace_empty('xyz', '', 'abc');" + qt_sql_relace_empty02 "select replace_empty(null, '', 'abc');" + qt_sql_relace_empty03 "select replace_empty('xyz', null, 'abc');" + qt_sql_relace_empty04 "select replace_empty('xyz', '', null);" + qt_sql_relace_empty05 "select replace_empty('xyz', 'x', 'abc');" + qt_sql_relace_empty06 "select replace_empty('xyz', 'x', '');" + qt_sql_relace_empty07 "select replace_empty('xyz', '', '');" + qt_sql_relace_empty08 "select replace_empty('', '', 'abc');" + qt_sql_right_Varchar_Integer "select right(kvchrs1, kint) from fn_test order by kvchrs1, kint" + qt_sql_right_Varchar_Integer_notnull "select right(kvchrs1, kint) from fn_test_not_nullable order by kvchrs1, kint" + qt_sql_right_String_Integer "select right(kstr, kint) from fn_test order by kstr, kint" + qt_sql_right_String_Integer_notnull "select right(kstr, kint) from fn_test_not_nullable order by kstr, kint" + qt_sql_round_Double "select round(kdbl) from fn_test order by kdbl" + qt_sql_round_Double_notnull "select round(kdbl) from fn_test_not_nullable order by kdbl" + qt_sql_round_Double_Integer "select round(kdbl, 2) from fn_test order by kdbl" + qt_sql_round_Double_Integer_notnull "select round(kdbl, 2) from fn_test_not_nullable order by kdbl" + qt_sql_round_DecimalV3S1 "select round(kdcmlv3s1) from fn_test order by kdcmlv3s1" + qt_sql_round_DecimalV3S1_notnull "select round(kdcmlv3s1) from fn_test_not_nullable order by kdcmlv3s1" + qt_sql_round_DecimalV3S2 "select round(kdcmlv3s2) from fn_test order by kdcmlv3s2" + qt_sql_round_DecimalV3S2_notnull "select round(kdcmlv3s2) from fn_test_not_nullable order by kdcmlv3s2" + qt_sql_round_DecimalV3S3 "select round(kdcmlv3s3) from fn_test order by kdcmlv3s3" + qt_sql_round_DecimalV3S3_notnull "select round(kdcmlv3s3) from fn_test_not_nullable order by kdcmlv3s3" + qt_sql_round_DecimalV3S1_Int "select round(kdcmlv3s1, 1) from fn_test order by kdcmlv3s1" + qt_sql_round_DecimalV3S1_Int_notnull "select round(kdcmlv3s1, 1) from fn_test_not_nullable order by kdcmlv3s1" + qt_sql_round_DecimalV3S2_Int "select round(kdcmlv3s2, 1) from fn_test order by kdcmlv3s2" + qt_sql_round_DecimalV3S2_Int_notnull "select round(kdcmlv3s2, 1) from fn_test_not_nullable order by kdcmlv3s2" + qt_sql_round_DecimalV3S3_Int "select round(kdcmlv3s3, 1) from fn_test order by kdcmlv3s3" + qt_sql_round_DecimalV3S3_Int_notnull "select round(kdcmlv3s3, 1) from fn_test_not_nullable order by kdcmlv3s3" + qt_sql_round_bankers_Double "select round_bankers(kdbl) from fn_test order by kdbl" + qt_sql_round_bankers_Double_notnull "select round_bankers(kdbl) from fn_test_not_nullable order by kdbl" + qt_sql_round_bankers_Double_Integer "select round_bankers(kdbl, 2) from fn_test order by kdbl" + qt_sql_round_bankers_Double_Integer_notnull "select round_bankers(kdbl, 2) from fn_test_not_nullable order by kdbl" + qt_sql_round_bankers_DecimalV3S1 "select round_bankers(kdcmlv3s1) from fn_test order by kdcmlv3s1" + qt_sql_round_bankers_DecimalV3S1_notnull "select round_bankers(kdcmlv3s1) from fn_test_not_nullable order by kdcmlv3s1" + qt_sql_round_bankers_DecimalV3S2 "select round_bankers(kdcmlv3s2) from fn_test order by kdcmlv3s2" + qt_sql_round_bankers_DecimalV3S2_notnull "select round_bankers(kdcmlv3s2) from fn_test_not_nullable order by kdcmlv3s2" + qt_sql_round_bankers_DecimalV3S3 "select round_bankers(kdcmlv3s3) from fn_test order by kdcmlv3s3" + qt_sql_round_bankers_DecimalV3S3_notnull "select round_bankers(kdcmlv3s3) from fn_test_not_nullable order by kdcmlv3s3" + qt_sql_round_bankers_DecimalV3S1_Int "select round_bankers(kdcmlv3s1, 1) from fn_test order by kdcmlv3s1" + qt_sql_round_bankers_DecimalV3S1_Int_notnull "select round_bankers(kdcmlv3s1, 1) from fn_test_not_nullable order by kdcmlv3s1" + qt_sql_round_bankers_DecimalV3S2_Int "select round_bankers(kdcmlv3s2, 1) from fn_test order by kdcmlv3s2" + qt_sql_round_bankers_DecimalV3S2_Int_notnull "select round_bankers(kdcmlv3s2, 1) from fn_test_not_nullable order by kdcmlv3s2" + qt_sql_round_bankers_DecimalV3S3_Int "select round_bankers(kdcmlv3s3, 1) from fn_test order by kdcmlv3s3" + qt_sql_round_bankers_DecimalV3S3_Int_notnull "select round_bankers(kdcmlv3s3, 1) from fn_test_not_nullable order by kdcmlv3s3" + qt_sql_rpad_Varchar_Integer_Varchar "select rpad(kvchrs1, kint, kvchrs1) from fn_test order by kvchrs1, kint, kvchrs1" + qt_sql_rpad_Varchar_Integer_Varchar_notnull "select rpad(kvchrs1, kint, kvchrs1) from fn_test_not_nullable order by kvchrs1, kint, kvchrs1" + qt_sql_rpad_String_Integer_String "select rpad(kstr, kint, kstr) from fn_test order by kstr, kint, kstr" + qt_sql_rpad_String_Integer_String_notnull "select rpad(kstr, kint, kstr) from fn_test_not_nullable order by kstr, kint, kstr" + qt_sql_rtrim_Varchar "select rtrim(kvchrs1) from fn_test order by kvchrs1" + qt_sql_rtrim_Varchar_notnull "select rtrim(kvchrs1) from fn_test_not_nullable order by kvchrs1" + qt_sql_rtrim_String "select rtrim(kstr) from fn_test order by kstr" + qt_sql_rtrim_String_notnull "select rtrim(kstr) from fn_test_not_nullable order by kstr" + qt_sql_rtrim_Varchar_Varchar "select rtrim(kvchrs1, '1') from fn_test order by kvchrs1" + qt_sql_rtrim_Varchar_Varchar_notnull "select rtrim(kvchrs1, '1') from fn_test_not_nullable order by kvchrs1" + qt_sql_rtrim_String_String "select rtrim(kstr, '1') from fn_test order by kstr" + qt_sql_rtrim_String_String_notnull "select rtrim(kstr, '1') from fn_test_not_nullable order by kstr" + sql "SELECT random_bytes(7);" + qt_sql_random_bytes "SELECT random_bytes(null);" + test { + sql " select random_bytes(-1); " + exception "argument -1 of function random_bytes at row 0 was invalid" + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org