From 37247ac449690a89b8390e4383481430e744ffc3 Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Mon, 9 Oct 2023 20:17:52 +0800 Subject: [PATCH] [opt](Nereids) add two args signature to trim family functions (#25169) --- .../expressions/functions/scalar/Ltrim.java | 20 ++++- .../expressions/functions/scalar/Rtrim.java | 20 ++++- .../expressions/functions/scalar/Trim.java | 20 ++++- .../nereids_function_p0/scalar_function/L.out | 58 ++++++++++++ .../nereids_function_p0/scalar_function/R.out | 58 ++++++++++++ .../nereids_function_p0/scalar_function/T.out | 90 +++++++++++++++---- .../scalar_function/L.groovy | 4 + .../scalar_function/R.groovy | 4 + .../scalar_function/T.groovy | 4 + 9 files changed, 253 insertions(+), 25 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ltrim.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ltrim.java index a3c86fe8d1..86088eed55 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ltrim.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Ltrim.java @@ -37,11 +37,18 @@ import java.util.List; public class Ltrim extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { - public static final List SIGNATURES = ImmutableList.of( + private static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT) + .args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT), + FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE), FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT), FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE) ); + private Ltrim(List args) { + super("ltrim", args); + } + /** * constructor with 1 argument. */ @@ -49,13 +56,20 @@ public class Ltrim extends ScalarFunction super("ltrim", arg); } + /** + * constructor with 2 argument. + */ + public Ltrim(Expression arg0, Expression arg1) { + super("ltrim", arg0, arg1); + } + /** * withChildren. */ @Override public Ltrim withChildren(List children) { - Preconditions.checkArgument(children.size() == 1); - return new Ltrim(children.get(0)); + Preconditions.checkArgument(children.size() == 1 || children.size() == 2); + return new Ltrim(children); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Rtrim.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Rtrim.java index 904380c33b..766f408e84 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Rtrim.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Rtrim.java @@ -37,11 +37,18 @@ import java.util.List; public class Rtrim extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { - public static final List SIGNATURES = ImmutableList.of( + private static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT) + .args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT), + FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE), FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT), FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE) ); + private Rtrim(List args) { + super("rtrim", args); + } + /** * constructor with 1 argument. */ @@ -49,13 +56,20 @@ public class Rtrim extends ScalarFunction super("rtrim", arg); } + /** + * constructor with 2 argument. + */ + public Rtrim(Expression arg0, Expression arg1) { + super("rtrim", arg0, arg1); + } + /** * withChildren. */ @Override public Rtrim withChildren(List children) { - Preconditions.checkArgument(children.size() == 1); - return new Rtrim(children.get(0)); + Preconditions.checkArgument(children.size() == 1 || children.size() == 2); + return new Rtrim(children); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Trim.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Trim.java index 2e43a4d02d..b0e286fd25 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Trim.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/Trim.java @@ -37,11 +37,18 @@ import java.util.List; public class Trim extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { - public static final List SIGNATURES = ImmutableList.of( + private static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT) + .args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT), + FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE), FunctionSignature.ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT), FunctionSignature.ret(StringType.INSTANCE).args(StringType.INSTANCE) ); + private Trim(List args) { + super("trim", args); + } + /** * constructor with 1 argument. */ @@ -49,13 +56,20 @@ public class Trim extends ScalarFunction super("trim", arg); } + /** + * constructor with 2 argument. + */ + public Trim(Expression arg0, Expression arg1) { + super("trim", arg0, arg1); + } + /** * withChildren. */ @Override public Trim withChildren(List children) { - Preconditions.checkArgument(children.size() == 1); - return new Trim(children.get(0)); + Preconditions.checkArgument(children.size() == 1 || children.size() == 2); + return new Trim(children); } @Override diff --git a/regression-test/data/nereids_function_p0/scalar_function/L.out b/regression-test/data/nereids_function_p0/scalar_function/L.out index 195173d8f5..b2d7ee134d 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/L.out +++ b/regression-test/data/nereids_function_p0/scalar_function/L.out @@ -1072,3 +1072,61 @@ string3 string3 string3 +-- !sql_ltrim_Varchar_Varchar -- +null +char11 +char11 +char11 +char11 +char12 +char12 +char12 +char12 +char13 +char13 +char13 +char13 + +-- !sql_ltrim_Varchar_Varchar_notnull -- +char11 +char11 +char11 +char11 +char12 +char12 +char12 +char12 +char13 +char13 +char13 +char13 + +-- !sql_ltrim_String_String -- +null +ing1 +ing1 +ing1 +ing1 +ing2 +ing2 +ing2 +ing2 +ing3 +ing3 +ing3 +ing3 + +-- !sql_ltrim_String_String_notnull -- +ing1 +ing1 +ing1 +ing1 +ing2 +ing2 +ing2 +ing2 +ing3 +ing3 +ing3 +ing3 + 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 44c73657f5..34c2514e14 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/R.out +++ b/regression-test/data/nereids_function_p0/scalar_function/R.out @@ -1043,3 +1043,61 @@ string3 string3 string3 +-- !sql_rtrim_Varchar_Varchar -- +null +varchar +varchar +varchar +varchar +varchar12 +varchar12 +varchar12 +varchar12 +varchar13 +varchar13 +varchar13 +varchar13 + +-- !sql_rtrim_Varchar_Varchar_notnull -- +varchar +varchar +varchar +varchar +varchar12 +varchar12 +varchar12 +varchar12 +varchar13 +varchar13 +varchar13 +varchar13 + +-- !sql_rtrim_String_String -- +null +string +string +string +string +string2 +string2 +string2 +string2 +string3 +string3 +string3 +string3 + +-- !sql_rtrim_String_String_notnull -- +string +string +string +string +string2 +string2 +string2 +string2 +string3 +string3 +string3 +string3 + diff --git a/regression-test/data/nereids_function_p0/scalar_function/T.out b/regression-test/data/nereids_function_p0/scalar_function/T.out index 028d20a7d9..9daa179d73 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/T.out +++ b/regression-test/data/nereids_function_p0/scalar_function/T.out @@ -1,32 +1,32 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql_tan_Double -- \N -0.10033467208545055 -0.2027100355086725 -0.30933624960962325 +0.10033467208545054 +0.20271003550867248 +0.3093362496096232 0.4227932187381618 0.5463024898437905 0.6841368083416923 -0.8422883804630794 +0.8422883804630793 1.0296385570503641 -1.2601582175503392 -1.5574077246549023 -1.9647596572486523 -2.5721516221263188 +1.260158217550339 +1.557407724654902 +1.9647596572486525 +2.5721516221263183 -- !sql_tan_Double_notnull -- -0.10033467208545055 -0.2027100355086725 -0.30933624960962325 +0.10033467208545054 +0.20271003550867248 +0.3093362496096232 0.4227932187381618 0.5463024898437905 0.6841368083416923 -0.8422883804630794 +0.8422883804630793 1.0296385570503641 -1.2601582175503392 -1.5574077246549023 -1.9647596572486523 -2.5721516221263188 +1.260158217550339 +1.557407724654902 +1.9647596572486525 +2.5721516221263183 -- !sql_timediff_DateTime_DateTime -- \N @@ -782,6 +782,64 @@ string3 string3 string3 +-- !sql_trim_Varchar_Varchar -- +null +char11 +char11 +char11 +char11 +char12 +char12 +char12 +char12 +char13 +char13 +char13 +char13 + +-- !sql_trim_Varchar_Varchar_notnull -- +char11 +char11 +char11 +char11 +char12 +char12 +char12 +char12 +char13 +char13 +char13 +char13 + +-- !sql_trim_String_String -- +null +ing1 +ing1 +ing1 +ing1 +ing2 +ing2 +ing2 +ing2 +ing3 +ing3 +ing3 +ing3 + +-- !sql_trim_String_String_notnull -- +ing1 +ing1 +ing1 +ing1 +ing2 +ing2 +ing2 +ing2 +ing3 +ing3 +ing3 +ing3 + -- !sql_truncate_Double_Integer -- \N 0.1 diff --git a/regression-test/suites/nereids_function_p0/scalar_function/L.groovy b/regression-test/suites/nereids_function_p0/scalar_function/L.groovy index 41df5c511a..2a49844ee1 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/L.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/L.groovy @@ -93,4 +93,8 @@ suite("nereids_scalar_fn_L") { qt_sql_ltrim_Varchar_notnull "select ltrim(kvchrs1) from fn_test_not_nullable order by kvchrs1" qt_sql_ltrim_String "select ltrim(kstr) from fn_test order by kstr" qt_sql_ltrim_String_notnull "select ltrim(kstr) from fn_test_not_nullable order by kstr" + qt_sql_ltrim_Varchar_Varchar "select ltrim(kvchrs1, 'var') from fn_test order by kvchrs1" + qt_sql_ltrim_Varchar_Varchar_notnull "select ltrim(kvchrs1, 'var') from fn_test_not_nullable order by kvchrs1" + qt_sql_ltrim_String_String "select ltrim(kstr, 'str') from fn_test order by kstr" + qt_sql_ltrim_String_String_notnull "select ltrim(kstr, 'str') from fn_test_not_nullable order by kstr" } \ No newline at end of file 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 8f624490f5..597841acde 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/R.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/R.groovy @@ -95,4 +95,8 @@ suite("nereids_scalar_fn_R") { 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" } diff --git a/regression-test/suites/nereids_function_p0/scalar_function/T.groovy b/regression-test/suites/nereids_function_p0/scalar_function/T.groovy index e47878b442..638a467236 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/T.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/T.groovy @@ -73,6 +73,10 @@ suite("nereids_scalar_fn_T") { qt_sql_trim_Varchar_notnull "select trim(kvchrs1) from fn_test_not_nullable order by kvchrs1" qt_sql_trim_String "select trim(kstr) from fn_test order by kstr" qt_sql_trim_String_notnull "select trim(kstr) from fn_test_not_nullable order by kstr" + qt_sql_trim_Varchar_Varchar "select trim(kvchrs1, 'var') from fn_test order by kvchrs1" + qt_sql_trim_Varchar_Varchar_notnull "select trim(kvchrs1, 'var') from fn_test_not_nullable order by kvchrs1" + qt_sql_trim_String_String "select trim(kstr, 'str') from fn_test order by kstr" + qt_sql_trim_String_String_notnull "select trim(kstr, 'str') from fn_test_not_nullable order by kstr" qt_sql_truncate_Double_Integer "select truncate(kdbl, 2) from fn_test order by kdbl" qt_sql_truncate_Double_Integer_notnull "select truncate(kdbl, 2) from fn_test_not_nullable order by kdbl" qt_sql_truncate_DecimalV3S1_Int "select truncate(kdcmlv3s1, 1) from fn_test order by kdcmlv3s1"