From 376df5f088db751e01f8b1a693bd7b6ab9c6d022 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 17:46:12 +0800 Subject: [PATCH 01/19] fix-bug --- .../doris/catalog/FunctionSignature.java | 31 +++++++++++++ .../functions/scalar/RegexpExtractAll.java | 9 ++-- .../functions/scalar/RunningDifference.java | 44 +++++++++---------- .../functions/scalar/SplitByString.java | 11 +++++ .../visitor/ScalarFunctionVisitor.java | 1 + 5 files changed, 68 insertions(+), 28 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java index 1abab8744691bd..4c685c55b6a768 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java @@ -24,6 +24,7 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Lists; import java.util.Arrays; @@ -149,6 +150,36 @@ public FunctionSignature varArgs(AbstractDataType...argTypes) { } } + public static class MultiFuncSigBuilder { + public static MultiFuncSigBuilder INSTANCE = new MultiFuncSigBuilder(); + private DataType returnType; + private Builder builder = ImmutableList.builder(); + + private MultiFuncSigBuilder clear() { + builder = ImmutableList.builder(); + return this; + } + + public MultiFuncSigBuilder ret(DataType returnType) { + this.returnType = returnType; + return this; + } + + public MultiFuncSigBuilder args(AbstractDataType...argTypes) { + builder.add(FunctionSignature.of(returnType, false, argTypes)); + return this; + } + + public MultiFuncSigBuilder varArgs(AbstractDataType...argTypes) { + builder.add(FunctionSignature.of(returnType, true, argTypes)); + return this; + } + + public List build() { + return builder.build(); + } + } + public interface TripleFunction { R apply(P1 p1, P2 p2, P3 p3); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java index 4276d0ffa8f04a..92f94e857161a7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java @@ -37,11 +37,10 @@ public class RegexpExtractAll extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { - public 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) - ); + public static final List SIGNATURES = FunctionSignature.multi() + .ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) + .ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE) + .build(); /** * constructor with 2 arguments. diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index ed3263ad0541fc..d492a79da10bb3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -38,36 +38,34 @@ import org.apache.doris.nereids.types.TinyIntType; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import java.util.List; /** - * ScalarFunction 'running_difference'. This class is generated by GenerateFunction. + * running_difference */ -public class RunningDifference extends ScalarFunction - implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { - - public static final List SIGNATURES = ImmutableList.of( - FunctionSignature.ret(SmallIntType.INSTANCE).args(TinyIntType.INSTANCE), - FunctionSignature.ret(IntegerType.INSTANCE).args(SmallIntType.INSTANCE), - FunctionSignature.ret(BigIntType.INSTANCE).args(IntegerType.INSTANCE), - FunctionSignature.ret(LargeIntType.INSTANCE).args(BigIntType.INSTANCE), - FunctionSignature.ret(LargeIntType.INSTANCE).args(LargeIntType.INSTANCE), - FunctionSignature.ret(DoubleType.INSTANCE).args(FloatType.INSTANCE), - FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE), - FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT), - FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32), - FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64), - FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128), - FunctionSignature.ret(IntegerType.INSTANCE).args(DateType.INSTANCE), - FunctionSignature.ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE), - FunctionSignature.ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE), - FunctionSignature.ret(DoubleType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT) - ); +public class RunningDifference extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, + PropagateNullable { + public static final List SIGNATURES = FunctionSignature.multi() + .ret(SmallIntType.INSTANCE).args(TinyIntType.INSTANCE) + .ret(IntegerType.INSTANCE).args(SmallIntType.INSTANCE) + .ret(BigIntType.INSTANCE).args(IntegerType.INSTANCE) + .ret(LargeIntType.INSTANCE).args(BigIntType.INSTANCE) + .ret(LargeIntType.INSTANCE).args(LargeIntType.INSTANCE) + .ret(DoubleType.INSTANCE).args(FloatType.INSTANCE) + .ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE) + .ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT) + .ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32) + .ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64) + .ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128) + .ret(IntegerType.INSTANCE).args(DateType.INSTANCE) + .ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE) + .ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE) + .ret(DoubleType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT) + .build(); /** - * constructor with 1 argument. + * constructor with 1 or more arguments. */ public RunningDifference(Expression arg) { super("running_difference", arg); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java index a6cdf778cf934b..39c545c30435d3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -19,6 +19,10 @@ import org.apache.doris.catalog.FunctionSignature; import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; 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.BinaryExpression; @@ -33,6 +37,13 @@ import java.util.List; /** + * split_by_string + */ +public class SplitByString extends ScalarFunction + implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { + public static final List SIGNATURES = FunctionSignature.multi() + .ret(VarcharType.SYSTEM_DEFAULT).args(StringType.INSTANCE, StringType.INSTANCE) + .build(); * ScalarFunction 'split_by_string'. This class is generated by GenerateFunction. */ public class SplitByString extends ScalarFunction 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 0b8fb96d20872c..b54c2fa524158e 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 @@ -263,6 +263,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Decrypt; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Encrypt; import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; +import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitPart; From 36f29e55c0fa0a853f9a217263a99f003cfb9a5d Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 18:09:16 +0800 Subject: [PATCH 02/19] fix-bug --- .../trees/expressions/functions/scalar/SplitByString.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java index 39c545c30435d3..8b7cd2beff15c2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -19,8 +19,8 @@ import org.apache.doris.catalog.FunctionSignature; import org.apache.doris.nereids.trees.expressions.Expression; -import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; 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.BinaryExpression; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; @@ -40,7 +40,7 @@ * split_by_string */ public class SplitByString extends ScalarFunction - implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { + implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { public static final List SIGNATURES = FunctionSignature.multi() .ret(VarcharType.SYSTEM_DEFAULT).args(StringType.INSTANCE, StringType.INSTANCE) .build(); From 8444f8d004b5c271708bc3ac8c5db61cc6542108 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 18:56:52 +0800 Subject: [PATCH 03/19] fix-bugs --- .../data/nereids_syntax_p0/function.out | 19 ++++++ .../suites/nereids_syntax_p0/function.groovy | 58 +++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/regression-test/data/nereids_syntax_p0/function.out b/regression-test/data/nereids_syntax_p0/function.out index 3172837dc85745..14a7f1d615d1ac 100644 --- a/regression-test/data/nereids_syntax_p0/function.out +++ b/regression-test/data/nereids_syntax_p0/function.out @@ -53,6 +53,25 @@ -- !ceil -- 3 +-- !fn -- +2 2022-10-27 2022-03-12T10:41:02 2.6 0 0 00:00:00 0.0 +4 2022-09-29 2022-03-12T10:41:03 \N 2 -28 00:00:01 \N +5 2022-10-31 2022-03-12T10:42:01 3.3 1 32 00:00:58 \N +6 2022-11-08 2022-03-12T11:05:04 4.7 1 8 00:23:03 1.4000000000000004 +1 2022-10-28 2022-03-12T10:41 \N -5 -11 00:24:04 \N +3 2022-10-28 2022-03-12T10:41:03 2.5 2 0 00:00:03 \N + +-- !fn_2 -- + + +-- !fn_3 -- +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '09', '29'] +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '31'] +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '11', '08'] +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '27'] +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '28'] +['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '28'] + -- !window_funnel -- 1 diff --git a/regression-test/suites/nereids_syntax_p0/function.groovy b/regression-test/suites/nereids_syntax_p0/function.groovy index a5398e200e48a3..829498bc159fce 100644 --- a/regression-test/suites/nereids_syntax_p0/function.groovy +++ b/regression-test/suites/nereids_syntax_p0/function.groovy @@ -168,5 +168,63 @@ suite("nereids_function") { ) AS level from window_funnel_test t; """ + + // scalar function + sql """ + DROP TABLE IF EXISTS running_difference_test + """ + + sql """ + CREATE TABLE running_difference_test ( + `id` int NOT NULL COMMENT 'id' , + `day` date COMMENT 'day', + `time_val` datetime COMMENT 'time_val', + `double_num` double NULL COMMENT 'doublenum' + ) + DUPLICATE KEY(id) + DISTRIBUTED BY HASH(id) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ); + """ + + sql """ + INSERT into running_difference_test values + ('1', '2022-10-28', '2022-03-12 10:41:00', null), + ('2','2022-10-27', '2022-03-12 10:41:02', 2.6), + ('3','2022-10-28', '2022-03-12 10:41:03', 2.5), + ('4','2022-9-29', '2022-03-12 10:41:03', null), + ('5','2022-10-31', '2022-03-12 10:42:01', 3.3), + ('6', '2022-11-08', '2022-03-12 11:05:04', 4.7); + """ + + qt_fn """ + SELECT + id, + day, + time_val, + double_num, + running_difference(id) AS delta1, + running_difference(day) AS delta2, + running_difference(time_val) AS delta3, + running_difference(double_num) AS delta4 + FROM ( + SELECT + id, + day, + time_val, + double_num + FROM running_difference_test + ORDER BY id ASC + ) as runningDifference + """ + + qt_fn_2 """ + SELECT regexp_extract_all('abc=111, def=222, ghi=333','("[^"]+"|\\w+)=("[^"]+"|\\w+)') + """ + + qt_fn_3 """ + select split_by_string('a1b1c1d','1'), split_by_string(',,a,b,c,',','), split_by_string(NULL,','), split_by_string(CAST(day as STRING), '-') from running_difference_test; + """ } From 9ed305fc7c8716ff8676478708f1c4ad20ac1423 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 19:00:21 +0800 Subject: [PATCH 04/19] fix-bug --- .../java/org/apache/doris/catalog/BuiltinScalarFunctions.java | 1 + 1 file changed, 1 insertion(+) 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 c1e840078cc30a..8ba09c9d7e1ece 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 @@ -256,6 +256,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; +import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitPart; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sqrt; import org.apache.doris.nereids.trees.expressions.functions.scalar.StAstext; From d3a2aae04b439642bacfc4f483ccdc2e6fefc8f0 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 19:34:21 +0800 Subject: [PATCH 05/19] fix-bug --- .../trees/expressions/functions/scalar/SplitByString.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java index 8b7cd2beff15c2..f2f4e5ae8468dd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -42,7 +42,8 @@ public class SplitByString extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { public static final List SIGNATURES = FunctionSignature.multi() - .ret(VarcharType.SYSTEM_DEFAULT).args(StringType.INSTANCE, StringType.INSTANCE) + .ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE) + .ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) .build(); * ScalarFunction 'split_by_string'. This class is generated by GenerateFunction. */ From 84e538a35091cb6717ac248be49e3cd4c7a250f7 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 22:27:47 +0800 Subject: [PATCH 06/19] fix-bug --- .../functions/scalar/SplitByString.java | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java index f2f4e5ae8468dd..5fe5e102adcfd2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -23,16 +23,11 @@ import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable; import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; -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.BinaryExpression; -import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.types.ArrayType; 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; @@ -42,18 +37,9 @@ public class SplitByString extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { public static final List SIGNATURES = FunctionSignature.multi() - .ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE) - .ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) + .ret(ArrayType.of(StringType.INSTANCE)).args(StringType.INSTANCE, StringType.INSTANCE) + .ret(ArrayType.of(VarcharType.SYSTEM_DEFAULT)).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) .build(); - * ScalarFunction 'split_by_string'. This class is generated by GenerateFunction. - */ -public class SplitByString extends ScalarFunction - implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { - - public static final List SIGNATURES = ImmutableList.of( - FunctionSignature.ret(ArrayType.of(VarcharType.SYSTEM_DEFAULT)) - .args(StringType.INSTANCE, StringType.INSTANCE) - ); /** * constructor with 2 arguments. @@ -72,12 +58,12 @@ public SplitByString withChildren(List children) { } @Override - public R accept(ExpressionVisitor visitor, C context) { - return visitor.visitSplitByString(this, context); + public List getSignatures() { + return SIGNATURES; } @Override - public List getSignatures() { - return SIGNATURES; + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitSplitByString(this, context); } } From bb1b25b1b1463769a9edd282e3bbf386e7810b3b Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 22:44:58 +0800 Subject: [PATCH 07/19] fix-bug --- .../trees/expressions/functions/scalar/SplitByString.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java index 5fe5e102adcfd2..8dabbafa7a1de0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -37,8 +37,8 @@ public class SplitByString extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { public static final List SIGNATURES = FunctionSignature.multi() - .ret(ArrayType.of(StringType.INSTANCE)).args(StringType.INSTANCE, StringType.INSTANCE) - .ret(ArrayType.of(VarcharType.SYSTEM_DEFAULT)).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) + .ret(ArrayType.SYSTEM_DEFAULT).args(StringType.INSTANCE, StringType.INSTANCE) + .ret(ArrayType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) .build(); /** From ed27de1a43d0a97cc0435e0c9cf0eb2afbbbe952 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 22:55:34 +0800 Subject: [PATCH 08/19] fix-bug --- .../functions/scalar/SplitByString.java | 69 ------------------- 1 file changed, 69 deletions(-) delete mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java deleted file mode 100644 index 8dabbafa7a1de0..00000000000000 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java +++ /dev/null @@ -1,69 +0,0 @@ -// 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.BinaryExpression; -import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; -import org.apache.doris.nereids.types.ArrayType; -import org.apache.doris.nereids.types.StringType; -import org.apache.doris.nereids.types.VarcharType; - -import com.google.common.base.Preconditions; - -import java.util.List; - -/** - * split_by_string - */ -public class SplitByString extends ScalarFunction - implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { - public static final List SIGNATURES = FunctionSignature.multi() - .ret(ArrayType.SYSTEM_DEFAULT).args(StringType.INSTANCE, StringType.INSTANCE) - .ret(ArrayType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) - .build(); - - /** - * constructor with 2 arguments. - */ - public SplitByString(Expression arg0, Expression arg1) { - super("split_by_string", arg0, arg1); - } - - /** - * withChildren. - */ - @Override - public SplitByString withChildren(List children) { - Preconditions.checkArgument(children.size() == 2); - return new SplitByString(children.get(0), children.get(1)); - } - - @Override - public List getSignatures() { - return SIGNATURES; - } - - @Override - public R accept(ExpressionVisitor visitor, C context) { - return visitor.visitSplitByString(this, context); - } -} From 3cb8adfe70aa4843e4adff27c0bacb1fef28b4f7 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 22:56:53 +0800 Subject: [PATCH 09/19] fix-bugs --- regression-test/data/nereids_syntax_p0/function.out | 10 +--------- .../suites/nereids_syntax_p0/function.groovy | 4 ---- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/regression-test/data/nereids_syntax_p0/function.out b/regression-test/data/nereids_syntax_p0/function.out index 14a7f1d615d1ac..73633e834b578f 100644 --- a/regression-test/data/nereids_syntax_p0/function.out +++ b/regression-test/data/nereids_syntax_p0/function.out @@ -62,15 +62,7 @@ 3 2022-10-28 2022-03-12T10:41:03 2.5 2 0 00:00:03 \N -- !fn_2 -- - - --- !fn_3 -- -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '09', '29'] -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '31'] -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '11', '08'] -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '27'] -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '28'] -['a', 'b', 'c', 'd'] ['', '', 'a', 'b', 'c', ''] \N ['2022', '10', '28'] +['abc', 'def', 'ghi'] -- !window_funnel -- diff --git a/regression-test/suites/nereids_syntax_p0/function.groovy b/regression-test/suites/nereids_syntax_p0/function.groovy index 829498bc159fce..d24623708d17bb 100644 --- a/regression-test/suites/nereids_syntax_p0/function.groovy +++ b/regression-test/suites/nereids_syntax_p0/function.groovy @@ -222,9 +222,5 @@ suite("nereids_function") { qt_fn_2 """ SELECT regexp_extract_all('abc=111, def=222, ghi=333','("[^"]+"|\\w+)=("[^"]+"|\\w+)') """ - - qt_fn_3 """ - select split_by_string('a1b1c1d','1'), split_by_string(',,a,b,c,',','), split_by_string(NULL,','), split_by_string(CAST(day as STRING), '-') from running_difference_test; - """ } From 03e0f197015400dfa03785496f8b708544b4833f Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Wed, 4 Jan 2023 23:01:30 +0800 Subject: [PATCH 10/19] fix-bugs --- .../data/nereids_syntax_p0/function.out | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/regression-test/data/nereids_syntax_p0/function.out b/regression-test/data/nereids_syntax_p0/function.out index 73633e834b578f..ecfffa53137a22 100644 --- a/regression-test/data/nereids_syntax_p0/function.out +++ b/regression-test/data/nereids_syntax_p0/function.out @@ -54,15 +54,15 @@ -- !ceil -- 3 -- !fn -- -2 2022-10-27 2022-03-12T10:41:02 2.6 0 0 00:00:00 0.0 -4 2022-09-29 2022-03-12T10:41:03 \N 2 -28 00:00:01 \N -5 2022-10-31 2022-03-12T10:42:01 3.3 1 32 00:00:58 \N -6 2022-11-08 2022-03-12T11:05:04 4.7 1 8 00:23:03 1.4000000000000004 -1 2022-10-28 2022-03-12T10:41 \N -5 -11 00:24:04 \N -3 2022-10-28 2022-03-12T10:41:03 2.5 2 0 00:00:03 \N +1 2022-10-28 2022-03-12T10:41 \N 0 0 0.0 \N +2 2022-10-27 2022-03-12T10:41:02 2.6 1 -1 2.0 \N +3 2022-10-28 2022-03-12T10:41:03 2.5 1 1 1.0 -0.10000000000000009 +4 2022-09-29 2022-03-12T10:41:03 \N 1 -29 0.0 \N +5 2022-10-31 2022-03-12T10:42:01 3.3 1 32 58.0 \N +6 2022-11-08 2022-03-12T11:05:04 4.7 1 8 1383.0 1.4000000000000004 -- !fn_2 -- -['abc', 'def', 'ghi'] +['b'] -- !window_funnel -- From 67e152425255c60643253a29297d035ea89a1182 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Thu, 5 Jan 2023 16:43:24 +0800 Subject: [PATCH 11/19] fix-bug --- .../functions/FunctionSignatureBuilder.java | 54 +++++++++++++++++++ .../functions/scalar/RegexpExtractAll.java | 3 +- .../functions/scalar/RunningDifference.java | 7 +-- 3 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionSignatureBuilder.java diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionSignatureBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionSignatureBuilder.java new file mode 100644 index 00000000000000..a4066870f73f4e --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/FunctionSignatureBuilder.java @@ -0,0 +1,54 @@ +// 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.catalog.FunctionSignature; +import org.apache.doris.nereids.types.DataType; +import org.apache.doris.nereids.types.coercion.AbstractDataType; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; + +import java.util.List; + +/** + * function signature builder + */ +public class FunctionSignatureBuilder { + private DataType returnType; + private Builder builder = ImmutableList.builder(); + + public FunctionSignatureBuilder ret(DataType returnType) { + this.returnType = returnType; + return this; + } + + public FunctionSignatureBuilder args(AbstractDataType...argTypes) { + builder.add(FunctionSignature.of(returnType, false, argTypes)); + return this; + } + + public FunctionSignatureBuilder varArgs(AbstractDataType...argTypes) { + builder.add(FunctionSignature.of(returnType, true, argTypes)); + return this; + } + + public List build() { + return builder.build(); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java index 92f94e857161a7..45183da7056f2e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java @@ -21,6 +21,7 @@ import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.functions.FunctionSignatureBuilder; import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.types.StringType; @@ -37,7 +38,7 @@ public class RegexpExtractAll extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { - public static final List SIGNATURES = FunctionSignature.multi() + public static final List SIGNATURES = new FunctionSignatureBuilder() .ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) .ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE) .build(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index d492a79da10bb3..ea98e60dae6f47 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -20,6 +20,7 @@ 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.FunctionSignatureBuilder; import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable; import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -29,7 +30,6 @@ import org.apache.doris.nereids.types.DateType; import org.apache.doris.nereids.types.DateV2Type; import org.apache.doris.nereids.types.DecimalV2Type; -import org.apache.doris.nereids.types.DecimalV3Type; import org.apache.doris.nereids.types.DoubleType; import org.apache.doris.nereids.types.FloatType; import org.apache.doris.nereids.types.IntegerType; @@ -46,7 +46,7 @@ */ public class RunningDifference extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { - public static final List SIGNATURES = FunctionSignature.multi() + public static final List SIGNATURES = new FunctionSignatureBuilder() .ret(SmallIntType.INSTANCE).args(TinyIntType.INSTANCE) .ret(IntegerType.INSTANCE).args(SmallIntType.INSTANCE) .ret(BigIntType.INSTANCE).args(IntegerType.INSTANCE) @@ -55,9 +55,6 @@ public class RunningDifference extends ScalarFunction implements UnaryExpression .ret(DoubleType.INSTANCE).args(FloatType.INSTANCE) .ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE) .ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT) - .ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32) - .ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64) - .ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128) .ret(IntegerType.INSTANCE).args(DateType.INSTANCE) .ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE) .ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE) From 1ce9b2b77b4f473c49c2d734545f1e5d890a8a73 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Fri, 6 Jan 2023 13:36:37 +0800 Subject: [PATCH 12/19] fix-bugs --- regression-test/suites/nereids_syntax_p0/function.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression-test/suites/nereids_syntax_p0/function.groovy b/regression-test/suites/nereids_syntax_p0/function.groovy index d24623708d17bb..6f606194a9ee19 100644 --- a/regression-test/suites/nereids_syntax_p0/function.groovy +++ b/regression-test/suites/nereids_syntax_p0/function.groovy @@ -220,7 +220,7 @@ suite("nereids_function") { """ qt_fn_2 """ - SELECT regexp_extract_all('abc=111, def=222, ghi=333','("[^"]+"|\\w+)=("[^"]+"|\\w+)') + SELECT regexp_extract_all('AbCdE', '([[:lower:]]+)C([[:lower:]]+)') """ } From 911e2c98bb5c0c4aea20a3af202f52c3a97b9443 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Tue, 10 Jan 2023 15:23:58 +0800 Subject: [PATCH 13/19] fix-bugs --- .../doris/catalog/BuiltinScalarFunctions.java | 8 +-- .../functions/scalar/RegexpExtractAll.java | 1 - .../functions/scalar/SplitByString.java | 71 +++++++++++++++++++ .../visitor/ScalarFunctionVisitor.java | 1 - 4 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java 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 8ba09c9d7e1ece..0e3537960bf6e8 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 @@ -256,7 +256,6 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; -import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitPart; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sqrt; import org.apache.doris.nereids.trees.expressions.functions.scalar.StAstext; @@ -298,9 +297,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Unhex; import org.apache.doris.nereids.trees.expressions.functions.scalar.UnixTimestamp; import org.apache.doris.nereids.trees.expressions.functions.scalar.Upper; -import org.apache.doris.nereids.trees.expressions.functions.scalar.User; import org.apache.doris.nereids.trees.expressions.functions.scalar.UtcTimestamp; -import org.apache.doris.nereids.trees.expressions.functions.scalar.Uuid; import org.apache.doris.nereids.trees.expressions.functions.scalar.Version; import org.apache.doris.nereids.trees.expressions.functions.scalar.Week; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekCeil; @@ -606,9 +603,7 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Unhex.class, "unhex"), scalar(UnixTimestamp.class, "unix_timestamp"), scalar(Upper.class, "ucase", "upper"), - scalar(User.class, "user"), scalar(UtcTimestamp.class, "utc_timestamp"), - scalar(Uuid.class, "uuid"), scalar(Version.class, "version"), scalar(Week.class, "week"), scalar(WeekCeil.class, "week_ceil"), @@ -626,5 +621,6 @@ public class BuiltinScalarFunctions implements FunctionHelper { public static final BuiltinScalarFunctions INSTANCE = new BuiltinScalarFunctions(); // Note: Do not add any code here! - private BuiltinScalarFunctions() {} + private BuiltinScalarFunctions() { + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java index 45183da7056f2e..8f82d0a4a202aa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java @@ -28,7 +28,6 @@ import org.apache.doris.nereids.types.VarcharType; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; import java.util.List; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java new file mode 100644 index 00000000000000..a6cdf778cf934b --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/SplitByString.java @@ -0,0 +1,71 @@ +// 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.BinaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.ArrayType; +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 'split_by_string'. This class is generated by GenerateFunction. + */ +public class SplitByString extends ScalarFunction + implements BinaryExpression, ExplicitlyCastableSignature, PropagateNullable { + + public static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(ArrayType.of(VarcharType.SYSTEM_DEFAULT)) + .args(StringType.INSTANCE, StringType.INSTANCE) + ); + + /** + * constructor with 2 arguments. + */ + public SplitByString(Expression arg0, Expression arg1) { + super("split_by_string", arg0, arg1); + } + + /** + * withChildren. + */ + @Override + public SplitByString withChildren(List children) { + Preconditions.checkArgument(children.size() == 2); + return new SplitByString(children.get(0), children.get(1)); + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitSplitByString(this, context); + } + + @Override + public List getSignatures() { + return SIGNATURES; + } +} 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 b54c2fa524158e..0b8fb96d20872c 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 @@ -263,7 +263,6 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Decrypt; import org.apache.doris.nereids.trees.expressions.functions.scalar.Sm4Encrypt; import org.apache.doris.nereids.trees.expressions.functions.scalar.Space; -import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByChar; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitByString; import org.apache.doris.nereids.trees.expressions.functions.scalar.SplitPart; From 82cf38161530a6aeddfffccb9f6fc55fdf9ebde4 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Tue, 10 Jan 2023 15:31:24 +0800 Subject: [PATCH 14/19] fix-bug --- .../doris/catalog/BuiltinScalarFunctions.java | 7 +++-- .../doris/catalog/FunctionSignature.java | 31 ------------------- .../functions/scalar/RunningDifference.java | 2 +- 3 files changed, 6 insertions(+), 34 deletions(-) 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 0e3537960bf6e8..c1e840078cc30a 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 @@ -297,7 +297,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Unhex; import org.apache.doris.nereids.trees.expressions.functions.scalar.UnixTimestamp; import org.apache.doris.nereids.trees.expressions.functions.scalar.Upper; +import org.apache.doris.nereids.trees.expressions.functions.scalar.User; import org.apache.doris.nereids.trees.expressions.functions.scalar.UtcTimestamp; +import org.apache.doris.nereids.trees.expressions.functions.scalar.Uuid; import org.apache.doris.nereids.trees.expressions.functions.scalar.Version; import org.apache.doris.nereids.trees.expressions.functions.scalar.Week; import org.apache.doris.nereids.trees.expressions.functions.scalar.WeekCeil; @@ -603,7 +605,9 @@ public class BuiltinScalarFunctions implements FunctionHelper { scalar(Unhex.class, "unhex"), scalar(UnixTimestamp.class, "unix_timestamp"), scalar(Upper.class, "ucase", "upper"), + scalar(User.class, "user"), scalar(UtcTimestamp.class, "utc_timestamp"), + scalar(Uuid.class, "uuid"), scalar(Version.class, "version"), scalar(Week.class, "week"), scalar(WeekCeil.class, "week_ceil"), @@ -621,6 +625,5 @@ public class BuiltinScalarFunctions implements FunctionHelper { public static final BuiltinScalarFunctions INSTANCE = new BuiltinScalarFunctions(); // Note: Do not add any code here! - private BuiltinScalarFunctions() { - } + private BuiltinScalarFunctions() {} } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java index 4c685c55b6a768..1abab8744691bd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSignature.java @@ -24,7 +24,6 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Lists; import java.util.Arrays; @@ -150,36 +149,6 @@ public FunctionSignature varArgs(AbstractDataType...argTypes) { } } - public static class MultiFuncSigBuilder { - public static MultiFuncSigBuilder INSTANCE = new MultiFuncSigBuilder(); - private DataType returnType; - private Builder builder = ImmutableList.builder(); - - private MultiFuncSigBuilder clear() { - builder = ImmutableList.builder(); - return this; - } - - public MultiFuncSigBuilder ret(DataType returnType) { - this.returnType = returnType; - return this; - } - - public MultiFuncSigBuilder args(AbstractDataType...argTypes) { - builder.add(FunctionSignature.of(returnType, false, argTypes)); - return this; - } - - public MultiFuncSigBuilder varArgs(AbstractDataType...argTypes) { - builder.add(FunctionSignature.of(returnType, true, argTypes)); - return this; - } - - public List build() { - return builder.build(); - } - } - public interface TripleFunction { R apply(P1 p1, P2 p2, P3 p3); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index ea98e60dae6f47..5f948889e4d5e3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -62,7 +62,7 @@ public class RunningDifference extends ScalarFunction implements UnaryExpression .build(); /** - * constructor with 1 or more arguments. + * constructor with 1 arguments. */ public RunningDifference(Expression arg) { super("running_difference", arg); From 012874c6dfdfde3dcaeef30d5b136a0f1192ba0a Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Tue, 10 Jan 2023 15:37:14 +0800 Subject: [PATCH 15/19] fix-bug --- .../trees/expressions/functions/scalar/RunningDifference.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index 5f948889e4d5e3..abcd2050f75125 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -30,6 +30,7 @@ import org.apache.doris.nereids.types.DateType; import org.apache.doris.nereids.types.DateV2Type; import org.apache.doris.nereids.types.DecimalV2Type; +import org.apache.doris.nereids.types.DecimalV3Type; import org.apache.doris.nereids.types.DoubleType; import org.apache.doris.nereids.types.FloatType; import org.apache.doris.nereids.types.IntegerType; @@ -55,6 +56,9 @@ public class RunningDifference extends ScalarFunction implements UnaryExpression .ret(DoubleType.INSTANCE).args(FloatType.INSTANCE) .ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE) .ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT) + .ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32) + .ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64) + .ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128) .ret(IntegerType.INSTANCE).args(DateType.INSTANCE) .ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE) .ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE) From 0e48132a6c95dd0895588ce065b26fc970504cd7 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Tue, 10 Jan 2023 15:42:03 +0800 Subject: [PATCH 16/19] fix-bugs --- .../trees/expressions/functions/scalar/RunningDifference.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index abcd2050f75125..bad0c658c005d8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -66,7 +66,7 @@ public class RunningDifference extends ScalarFunction implements UnaryExpression .build(); /** - * constructor with 1 arguments. + * constructor with 1 argument. */ public RunningDifference(Expression arg) { super("running_difference", arg); From d8368976dfba30935982dc9e3d334492a38c809f Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Tue, 10 Jan 2023 23:44:58 +0800 Subject: [PATCH 17/19] fix-bugs --- .../data/nereids_syntax_p0/function.out | 12 +++++------ .../suites/nereids_syntax_p0/function.groovy | 21 +++++++++++-------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/regression-test/data/nereids_syntax_p0/function.out b/regression-test/data/nereids_syntax_p0/function.out index ecfffa53137a22..1d3824c15aa049 100644 --- a/regression-test/data/nereids_syntax_p0/function.out +++ b/regression-test/data/nereids_syntax_p0/function.out @@ -54,12 +54,12 @@ -- !ceil -- 3 -- !fn -- -1 2022-10-28 2022-03-12T10:41 \N 0 0 0.0 \N -2 2022-10-27 2022-03-12T10:41:02 2.6 1 -1 2.0 \N -3 2022-10-28 2022-03-12T10:41:03 2.5 1 1 1.0 -0.10000000000000009 -4 2022-09-29 2022-03-12T10:41:03 \N 1 -29 0.0 \N -5 2022-10-31 2022-03-12T10:42:01 3.3 1 32 58.0 \N -6 2022-11-08 2022-03-12T11:05:04 4.7 1 8 1383.0 1.4000000000000004 +1 2022-10-28 2022-03-12T10:41 \N 0 0 0.0 \N 0E-9 +2 2022-10-27 2022-03-12T10:41:02 2.6 1 -1 2.0 \N 0.010000000 +3 2022-10-28 2022-03-12T10:41:03 2.5 1 1 1.0 -0.10000000000000009 0.090000000 +4 2022-09-29 2022-03-12T10:41:03 \N 1 -29 0.0 \N 3.996000000 +5 2022-10-31 2022-03-12T10:42:01 3.3 1 32 58.0 \N 0.789000000 +6 2022-11-08 2022-03-12T11:05:04 4.7 1 8 1383.0 1.4000000000000004 -3.998600000 -- !fn_2 -- ['b'] diff --git a/regression-test/suites/nereids_syntax_p0/function.groovy b/regression-test/suites/nereids_syntax_p0/function.groovy index 6f606194a9ee19..fd87454fc5d6f0 100644 --- a/regression-test/suites/nereids_syntax_p0/function.groovy +++ b/regression-test/suites/nereids_syntax_p0/function.groovy @@ -179,7 +179,8 @@ suite("nereids_function") { `id` int NOT NULL COMMENT 'id' , `day` date COMMENT 'day', `time_val` datetime COMMENT 'time_val', - `double_num` double NULL COMMENT 'doublenum' + `double_num` double NULL COMMENT 'double_num', + `decimal_num` decimal(9, 6) NULL COMMENT 'decimal_num' ) DUPLICATE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 3 @@ -190,12 +191,12 @@ suite("nereids_function") { sql """ INSERT into running_difference_test values - ('1', '2022-10-28', '2022-03-12 10:41:00', null), - ('2','2022-10-27', '2022-03-12 10:41:02', 2.6), - ('3','2022-10-28', '2022-03-12 10:41:03', 2.5), - ('4','2022-9-29', '2022-03-12 10:41:03', null), - ('5','2022-10-31', '2022-03-12 10:42:01', 3.3), - ('6', '2022-11-08', '2022-03-12 11:05:04', 4.7); + ('1', '2022-10-28', '2022-03-12 10:41:00', null, 2.66), + ('2','2022-10-27', '2022-03-12 10:41:02', 2.6, 2.67), + ('3','2022-10-28', '2022-03-12 10:41:03', 2.5, 2.76), + ('4','2022-9-29', '2022-03-12 10:41:03', null, 6.756), + ('5','2022-10-31', '2022-03-12 10:42:01', 3.3, 7.545), + ('6', '2022-11-08', '2022-03-12 11:05:04', 4.7, 3.5464); """ qt_fn """ @@ -207,13 +208,15 @@ suite("nereids_function") { running_difference(id) AS delta1, running_difference(day) AS delta2, running_difference(time_val) AS delta3, - running_difference(double_num) AS delta4 + running_difference(double_num) AS delta4, + running_difference(decimal_num) AS delta5 FROM ( SELECT id, day, time_val, - double_num + double_num, + decimal_num FROM running_difference_test ORDER BY id ASC ) as runningDifference From 9927b56b3ed8ec9e346efe34a43742ab876e8b31 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Thu, 12 Jan 2023 16:32:38 +0800 Subject: [PATCH 18/19] fix-bugs --- .../data/nereids_syntax_p0/function.out | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/regression-test/data/nereids_syntax_p0/function.out b/regression-test/data/nereids_syntax_p0/function.out index 1d3824c15aa049..9b4f0a37a7006c 100644 --- a/regression-test/data/nereids_syntax_p0/function.out +++ b/regression-test/data/nereids_syntax_p0/function.out @@ -53,6 +53,13 @@ -- !ceil -- 3 + +-- !window_funnel -- +1 + +-- !window_funnel -- +2 + -- !fn -- 1 2022-10-28 2022-03-12T10:41 \N 0 0 0.0 \N 0E-9 2 2022-10-27 2022-03-12T10:41:02 2.6 1 -1 2.0 \N 0.010000000 @@ -63,11 +70,3 @@ -- !fn_2 -- ['b'] - - --- !window_funnel -- -1 - --- !window_funnel -- -2 - From 12e48705db09b8083e930cdc88c8c498482a9ef9 Mon Sep 17 00:00:00 2001 From: sohardforaname Date: Mon, 16 Jan 2023 20:24:30 +0800 Subject: [PATCH 19/19] 'fix-bugs' --- .../functions/scalar/RegexpExtractAll.java | 11 ++--- .../functions/scalar/RunningDifference.java | 43 ++++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java index 8f82d0a4a202aa..4276d0ffa8f04a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RegexpExtractAll.java @@ -21,13 +21,13 @@ import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; -import org.apache.doris.nereids.trees.expressions.functions.FunctionSignatureBuilder; import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression; 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; @@ -37,10 +37,11 @@ public class RegexpExtractAll extends ScalarFunction implements BinaryExpression, ExplicitlyCastableSignature, AlwaysNullable { - public static final List SIGNATURES = new FunctionSignatureBuilder() - .ret(VarcharType.SYSTEM_DEFAULT).args(VarcharType.SYSTEM_DEFAULT, VarcharType.SYSTEM_DEFAULT) - .ret(StringType.INSTANCE).args(StringType.INSTANCE, StringType.INSTANCE) - .build(); + public 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) + ); /** * constructor with 2 arguments. diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java index bad0c658c005d8..ed3263ad0541fc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/RunningDifference.java @@ -20,7 +20,6 @@ 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.FunctionSignatureBuilder; import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable; import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; @@ -39,31 +38,33 @@ import org.apache.doris.nereids.types.TinyIntType; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import java.util.List; /** - * running_difference + * ScalarFunction 'running_difference'. This class is generated by GenerateFunction. */ -public class RunningDifference extends ScalarFunction implements UnaryExpression, ExplicitlyCastableSignature, - PropagateNullable { - public static final List SIGNATURES = new FunctionSignatureBuilder() - .ret(SmallIntType.INSTANCE).args(TinyIntType.INSTANCE) - .ret(IntegerType.INSTANCE).args(SmallIntType.INSTANCE) - .ret(BigIntType.INSTANCE).args(IntegerType.INSTANCE) - .ret(LargeIntType.INSTANCE).args(BigIntType.INSTANCE) - .ret(LargeIntType.INSTANCE).args(LargeIntType.INSTANCE) - .ret(DoubleType.INSTANCE).args(FloatType.INSTANCE) - .ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE) - .ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT) - .ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32) - .ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64) - .ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128) - .ret(IntegerType.INSTANCE).args(DateType.INSTANCE) - .ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE) - .ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE) - .ret(DoubleType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT) - .build(); +public class RunningDifference extends ScalarFunction + implements UnaryExpression, ExplicitlyCastableSignature, PropagateNullable { + + public static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(SmallIntType.INSTANCE).args(TinyIntType.INSTANCE), + FunctionSignature.ret(IntegerType.INSTANCE).args(SmallIntType.INSTANCE), + FunctionSignature.ret(BigIntType.INSTANCE).args(IntegerType.INSTANCE), + FunctionSignature.ret(LargeIntType.INSTANCE).args(BigIntType.INSTANCE), + FunctionSignature.ret(LargeIntType.INSTANCE).args(LargeIntType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(FloatType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE), + FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT), + FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL32).args(DecimalV3Type.DEFAULT_DECIMAL32), + FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL64).args(DecimalV3Type.DEFAULT_DECIMAL64), + FunctionSignature.ret(DecimalV3Type.DEFAULT_DECIMAL128).args(DecimalV3Type.DEFAULT_DECIMAL128), + FunctionSignature.ret(IntegerType.INSTANCE).args(DateType.INSTANCE), + FunctionSignature.ret(IntegerType.INSTANCE).args(DateV2Type.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(DateTimeType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(DateTimeV2Type.SYSTEM_DEFAULT) + ); /** * constructor with 1 argument.