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

Reply via email to