This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 16d05dc2f9d [fix](array-funcs)fix array agg func with decimal type (#40839) 16d05dc2f9d is described below commit 16d05dc2f9ddacce88f40acf32b31c2586c779fa Author: amory <wangqian...@selectdb.com> AuthorDate: Thu Sep 26 09:38:50 2024 +0800 [fix](array-funcs)fix array agg func with decimal type (#40839) --- .../functions/array/function_array_aggregation.cpp | 13 + .../functions/ComputePrecisionForArrayItemAgg.java | 10 +- .../functions/scalar/ArraysOverlap.java | 3 +- .../nereids_function_p0/scalar_function/Array.out | 816 +++++++++++++++++++++ .../test_array_large_decimal.csv | 100 +++ .../suites/nereids_function_p0/load.groovy | 22 + .../scalar_function/Array.groovy | 33 + 7 files changed, 994 insertions(+), 3 deletions(-) diff --git a/be/src/vec/functions/array/function_array_aggregation.cpp b/be/src/vec/functions/array/function_array_aggregation.cpp index d2edfe34fb6..18367816bc8 100644 --- a/be/src/vec/functions/array/function_array_aggregation.cpp +++ b/be/src/vec/functions/array/function_array_aggregation.cpp @@ -146,6 +146,18 @@ struct ArrayAggregateImpl { using Function = AggregateFunction<AggregateFunctionImpl<operation>>; const DataTypeArray* data_type_array = static_cast<const DataTypeArray*>(remove_nullable(arguments[0]).get()); + if constexpr (operation != AggregateOperation::MIN && + operation != AggregateOperation::MAX) { + // only array_min and array_max support decimal256 type + if (is_decimal(remove_nullable(data_type_array->get_nested_type()))) { + const auto decimal_type = remove_nullable(data_type_array->get_nested_type()); + if (check_decimal<Decimal256>(*decimal_type)) { + throw doris::Exception( + ErrorCode::INVALID_ARGUMENT, "Unexpected type {} for aggregation {}", + data_type_array->get_nested_type()->get_name(), operation); + } + } + } auto function = Function::create(data_type_array->get_nested_type()); if (function) { return function->get_return_type(); @@ -175,6 +187,7 @@ struct ArrayAggregateImpl { execute_type<Decimal64>(res, type, data, offsets) || execute_type<Decimal128V2>(res, type, data, offsets) || execute_type<Decimal128V3>(res, type, data, offsets) || + execute_type<Decimal256>(res, type, data, offsets) || execute_type<Date>(res, type, data, offsets) || execute_type<DateTime>(res, type, data, offsets) || execute_type<DateV2>(res, type, data, offsets) || diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ComputePrecisionForArrayItemAgg.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ComputePrecisionForArrayItemAgg.java index 50c9f1adfdb..05efb92222b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ComputePrecisionForArrayItemAgg.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/ComputePrecisionForArrayItemAgg.java @@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature; import org.apache.doris.nereids.types.ArrayType; import org.apache.doris.nereids.types.DataType; import org.apache.doris.nereids.types.DecimalV3Type; +import org.apache.doris.qe.ConnectContext; /** ComputePrecisionForSum */ public interface ComputePrecisionForArrayItemAgg extends ComputePrecision { @@ -29,8 +30,15 @@ public interface ComputePrecisionForArrayItemAgg extends ComputePrecision { if (getArgumentType(0) instanceof ArrayType) { DataType itemType = ((ArrayType) getArgument(0).getDataType()).getItemType(); if (itemType instanceof DecimalV3Type) { + boolean enableDecimal256 = false; + ConnectContext connectContext = ConnectContext.get(); + if (connectContext != null) { + enableDecimal256 = connectContext.getSessionVariable().isEnableDecimal256(); + } DecimalV3Type returnType = DecimalV3Type.createDecimalV3Type( - DecimalV3Type.MAX_DECIMAL128_PRECISION, ((DecimalV3Type) itemType).getScale()); + enableDecimal256 ? DecimalV3Type.MAX_DECIMAL256_PRECISION + : DecimalV3Type.MAX_DECIMAL128_PRECISION, + ((DecimalV3Type) itemType).getScale()); if (signature.returnType instanceof ArrayType) { signature = signature.withReturnType(ArrayType.of(returnType)); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java index 9e40d732644..d3c200cb92e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArraysOverlap.java @@ -26,7 +26,6 @@ import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; import org.apache.doris.nereids.types.ArrayType; import org.apache.doris.nereids.types.BooleanType; import org.apache.doris.nereids.types.coercion.AnyDataType; -import org.apache.doris.nereids.types.coercion.FollowToAnyDataType; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -41,7 +40,7 @@ public class ArraysOverlap extends ScalarFunction implements ExplicitlyCastableS public static final List<FunctionSignature> SIGNATURES = ImmutableList.of( FunctionSignature.ret(BooleanType.INSTANCE) - .args(ArrayType.of(new AnyDataType(0)), ArrayType.of(new FollowToAnyDataType(0))) + .args(ArrayType.of(new AnyDataType(0)), ArrayType.of(new AnyDataType(0))) ); /** diff --git a/regression-test/data/nereids_function_p0/scalar_function/Array.out b/regression-test/data/nereids_function_p0/scalar_function/Array.out index dc519c96ad3..cbfbf3a9519 100644 --- a/regression-test/data/nereids_function_p0/scalar_function/Array.out +++ b/regression-test/data/nereids_function_p0/scalar_function/Array.out @@ -14454,6 +14454,822 @@ true -- !sql_array_map -- [1, 1, 1, 1] +-- !sql_array_min_decimal256 -- +1.12345678901234567890123456789012345600000000000000000000 +1234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567.43210987654321098765432109876543210900000000000000000000 +123456789012345678.23456789012345678901234567890123456700000000000000000000 +123456789012345678.23456789012345678901234567890123456700000000000000000000 +1234567890123456789.09876543210987654321098765432109876500000000000000000000 +1234567890123456789.09876543210987654321098765432109876500000000000000000000 +1234567890123456789.34567890123456789012345678901234567800000000000000000000 +1234567890123456789.43210987654321098765432109876543210900000000000000000000 +1234567890123456789.54321098765432109876543210987654321000000000000000000000 +1234567890123456789.54321098765432109876543210987654321000000000000000000000 +1234567890123456789.65432109876543210987654321098765432100000000000000000000 +1234567890123456789.65432109876543210987654321098765432100000000000000000000 +1234567890123456789.98765432109876543210987654321098765400000000000000000000 +1234567890123456789.98765432109876543210987654321098765400000000000000000000 +12345678901234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567890.23456789012345678901234567890123456700000000000000000000 +12345678901234567890.54321098765432109876543210987654321000000000000000000000 +12345678901234567890.65432109876543210987654321098765432100000000000000000000 +12345678901234567890.65432109876543210987654321098765432100000000000000000000 +12345678901234567890.98765432109876543210987654321098765400000000000000000000 +2345678901234567.56789012345678901234567890123456789000000000000000000000 +234567890123456789.54321098765432109876543210987654321000000000000000000000 +234567890123456789.65432109876543210987654321098765432100000000000000000000 +2345678901234567890.09876543210987654321098765432109876500000000000000000000 +2345678901234567890.23456789012345678901234567890123456700000000000000000000 +2345678901234567890.54321098765432109876543210987654321000000000000000000000 +2345678901234567890.98765432109876543210987654321098765400000000000000000000 +23456789012345678901.65432109876543210987654321098765432100000000000000000000 +23456789012345678901.65432109876543210987654321098765432100000000000000000000 +23456789012345678901.87654321098765432109876543210987654321000000000000000000 +345678901234567890.23456789012345678901234567890123456700000000000000000000 +345678901234567890.34567890123456789012345678901234567800000000000000000000 +345678901234567890.65432109876543210987654321098765432100000000000000000000 +345678901234567890.98765432109876543210987654321098765400000000000000000000 +3456789012345678901.09876543210987654321098765432109876500000000000000000000 +3456789012345678901.23456789012345678901234567890123456700000000000000000000 +3456789012345678901.34567890123456789012345678901234567800000000000000000000 +3456789012345678901.87654321098765432109876543210987654321000000000000000000 +3456789012345678901.98765432109876543210987654321098765400000000000000000000 +34567890123456789012.09876543210987654321098765432109876500000000000000000000 +34567890123456789012.43210987654321098765432109876543210900000000000000000000 +4567890123456789.09876543210987654321098765432109876500000000000000000000 +4567890123456789012.12345678901234567890123456789012345600000000000000000000 +4567890123456789012.12345678901234567890123456789012345600000000000000000000 +4567890123456789012.23456789012345678901234567890123456700000000000000000000 +4567890123456789012.65432109876543210987654321098765432100000000000000000000 +4567890123456789012.98765432109876543210987654321098765400000000000000000000 +45678901234567890123.12345678901234567890123456789012345600000000000000000000 +567890123456789012.34567890123456789012345678901234567800000000000000000000 +567890123456789012.54321098765432109876543210987654321000000000000000000000 +5678901234567890123.23456789012345678901234567890123456700000000000000000000 +5678901234567890123.43210987654321098765432109876543210900000000000000000000 +5678901234567890123.65432109876543210987654321098765432100000000000000000000 +5678901234567890123.87654321098765432109876543210987654321000000000000000000 +5678901234567890123.98765432109876543210987654321098765400000000000000000000 +56789012345678901234.34567890123456789012345678901234567800000000000000000000 +56789012345678901234.43210987654321098765432109876543210900000000000000000000 +56789012345678901234.54321098765432109876543210987654321000000000000000000000 +67890123456789012.34567890123456789012345678901234567800000000000000000000 +67890123456789012.98765432109876543210987654321098765400000000000000000000 +678901234567890123.09876543210987654321098765432109876500000000000000000000 +678901234567890123.43210987654321098765432109876543210900000000000000000000 +678901234567890123.43210987654321098765432109876543210900000000000000000000 +678901234567890123.54321098765432109876543210987654321000000000000000000000 +6789012345678901234.12345678901234567890123456789012345600000000000000000000 +6789012345678901234.98765432109876543210987654321098765400000000000000000000 +67890123456789012345.12345678901234567890123456789012345600000000000000000000 +67890123456789012345.67890123456789012345678901234567890100000000000000000000 +789012345678901234.12345678901234567890123456789012345600000000000000000000 +789012345678901234.34567890123456789012345678901234567800000000000000000000 +789012345678901234.65432109876543210987654321098765432100000000000000000000 +789012345678901234.87654321098765432109876543210987654321000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.54321098765432109876543210987654321000000000000000000000 +7890123456789012345.98765432109876543210987654321098765400000000000000000000 +78901234567890123456.09876543210987654321098765432109876500000000000000000000 +78901234567890123456.23456789012345678901234567890123456700000000000000000000 +78901234567890123456.65432109876543210987654321098765432100000000000000000000 +89012345678901234.34567890123456789012345678901234567800000000000000000000 +89012345678901234.98765432109876543210987654321098765400000000000000000000 +890123456789012345.09876543210987654321098765432109876500000000000000000000 +890123456789012345.12345678901234567890123456789012345600000000000000000000 +890123456789012345.54321098765432109876543210987654321000000000000000000000 +8901234567890123456.23456789012345678901234567890123456700000000000000000000 +8901234567890123456.34567890123456789012345678901234567800000000000000000000 +8901234567890123456.43210987654321098765432109876543210900000000000000000000 +8901234567890123456.87654321098765432109876543210987654321000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +89012345678901234567.09876543210987654321098765432109876500000000000000000000 +89012345678901234567.43210987654321098765432109876543210900000000000000000000 +89012345678901234567.54321098765432109876543210987654321000000000000000000000 +89012345678901234567.87654321098765432109876543210987654321000000000000000000 +9876543210.54321098765432109876543210987654321000000000000000000000 +98765432109876543210.65432109876543210987654321098765432100000000000000000000 + +-- !sql_array_max_decimal256 -- +1.12345678901234567890123456789012345600000000000000000000 +1234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567.43210987654321098765432109876543210900000000000000000000 +123456789012345678.23456789012345678901234567890123456700000000000000000000 +123456789012345678.23456789012345678901234567890123456700000000000000000000 +1234567890123456789.09876543210987654321098765432109876500000000000000000000 +1234567890123456789.09876543210987654321098765432109876500000000000000000000 +1234567890123456789.34567890123456789012345678901234567800000000000000000000 +1234567890123456789.43210987654321098765432109876543210900000000000000000000 +1234567890123456789.54321098765432109876543210987654321000000000000000000000 +1234567890123456789.54321098765432109876543210987654321000000000000000000000 +1234567890123456789.65432109876543210987654321098765432100000000000000000000 +1234567890123456789.65432109876543210987654321098765432100000000000000000000 +1234567890123456789.98765432109876543210987654321098765400000000000000000000 +1234567890123456789.98765432109876543210987654321098765400000000000000000000 +12345678901234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567890.09876543210987654321098765432109876500000000000000000000 +12345678901234567890.23456789012345678901234567890123456700000000000000000000 +12345678901234567890.54321098765432109876543210987654321000000000000000000000 +12345678901234567890.65432109876543210987654321098765432100000000000000000000 +12345678901234567890.65432109876543210987654321098765432100000000000000000000 +12345678901234567890.98765432109876543210987654321098765400000000000000000000 +2345678901234567.56789012345678901234567890123456789000000000000000000000 +234567890123456789.54321098765432109876543210987654321000000000000000000000 +234567890123456789.65432109876543210987654321098765432100000000000000000000 +2345678901234567890.09876543210987654321098765432109876500000000000000000000 +2345678901234567890.23456789012345678901234567890123456700000000000000000000 +2345678901234567890.54321098765432109876543210987654321000000000000000000000 +2345678901234567890.98765432109876543210987654321098765400000000000000000000 +23456789012345678901.65432109876543210987654321098765432100000000000000000000 +23456789012345678901.65432109876543210987654321098765432100000000000000000000 +23456789012345678901.87654321098765432109876543210987654321000000000000000000 +345678901234567890.23456789012345678901234567890123456700000000000000000000 +345678901234567890.34567890123456789012345678901234567800000000000000000000 +345678901234567890.65432109876543210987654321098765432100000000000000000000 +345678901234567890.98765432109876543210987654321098765400000000000000000000 +3456789012345678901.09876543210987654321098765432109876500000000000000000000 +3456789012345678901.23456789012345678901234567890123456700000000000000000000 +3456789012345678901.34567890123456789012345678901234567800000000000000000000 +3456789012345678901.87654321098765432109876543210987654321000000000000000000 +3456789012345678901.98765432109876543210987654321098765400000000000000000000 +34567890123456789012.09876543210987654321098765432109876500000000000000000000 +34567890123456789012.43210987654321098765432109876543210900000000000000000000 +4567890123456789.09876543210987654321098765432109876500000000000000000000 +4567890123456789012.12345678901234567890123456789012345600000000000000000000 +4567890123456789012.12345678901234567890123456789012345600000000000000000000 +4567890123456789012.23456789012345678901234567890123456700000000000000000000 +4567890123456789012.65432109876543210987654321098765432100000000000000000000 +4567890123456789012.98765432109876543210987654321098765400000000000000000000 +45678901234567890123.12345678901234567890123456789012345600000000000000000000 +567890123456789012.34567890123456789012345678901234567800000000000000000000 +567890123456789012.54321098765432109876543210987654321000000000000000000000 +5678901234567890123.23456789012345678901234567890123456700000000000000000000 +5678901234567890123.43210987654321098765432109876543210900000000000000000000 +5678901234567890123.65432109876543210987654321098765432100000000000000000000 +5678901234567890123.87654321098765432109876543210987654321000000000000000000 +5678901234567890123.98765432109876543210987654321098765400000000000000000000 +56789012345678901234.34567890123456789012345678901234567800000000000000000000 +56789012345678901234.43210987654321098765432109876543210900000000000000000000 +56789012345678901234.54321098765432109876543210987654321000000000000000000000 +67890123456789012.34567890123456789012345678901234567800000000000000000000 +67890123456789012.98765432109876543210987654321098765400000000000000000000 +678901234567890123.09876543210987654321098765432109876500000000000000000000 +678901234567890123.43210987654321098765432109876543210900000000000000000000 +678901234567890123.43210987654321098765432109876543210900000000000000000000 +678901234567890123.54321098765432109876543210987654321000000000000000000000 +6789012345678901234.12345678901234567890123456789012345600000000000000000000 +6789012345678901234.98765432109876543210987654321098765400000000000000000000 +67890123456789012345.12345678901234567890123456789012345600000000000000000000 +67890123456789012345.67890123456789012345678901234567890100000000000000000000 +789012345678901234.12345678901234567890123456789012345600000000000000000000 +789012345678901234.34567890123456789012345678901234567800000000000000000000 +789012345678901234.65432109876543210987654321098765432100000000000000000000 +789012345678901234.87654321098765432109876543210987654321000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.09876543210987654321098765432109876500000000000000000000 +7890123456789012345.54321098765432109876543210987654321000000000000000000000 +7890123456789012345.98765432109876543210987654321098765400000000000000000000 +78901234567890123456.09876543210987654321098765432109876500000000000000000000 +78901234567890123456.23456789012345678901234567890123456700000000000000000000 +78901234567890123456.65432109876543210987654321098765432100000000000000000000 +89012345678901234.34567890123456789012345678901234567800000000000000000000 +89012345678901234.98765432109876543210987654321098765400000000000000000000 +890123456789012345.09876543210987654321098765432109876500000000000000000000 +890123456789012345.12345678901234567890123456789012345600000000000000000000 +890123456789012345.54321098765432109876543210987654321000000000000000000000 +8901234567890123456.23456789012345678901234567890123456700000000000000000000 +8901234567890123456.34567890123456789012345678901234567800000000000000000000 +8901234567890123456.43210987654321098765432109876543210900000000000000000000 +8901234567890123456.87654321098765432109876543210987654321000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +8901234567890123456.98765432109876543210987654321098765400000000000000000000 +89012345678901234567.09876543210987654321098765432109876500000000000000000000 +89012345678901234567.43210987654321098765432109876543210900000000000000000000 +89012345678901234567.54321098765432109876543210987654321000000000000000000000 +89012345678901234567.87654321098765432109876543210987654321000000000000000000 +9876543210.54321098765432109876543210987654321000000000000000000000 +98765432109876543210.65432109876543210987654321098765432100000000000000000000 + +-- !sql_array_overlaps_1 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false + +-- !sql_array_overlaps_2 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false +false + +-- !sql_array_overlaps_3 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N + +-- !sql_array_overlaps_4 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N + +-- !sql_array_overlaps_5 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N + +-- !sql_array_overlaps_6 -- +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N +\N + -- !sql_array_match_any_1 -- ["a", "b", "c"] true ["a", null, "c"] true diff --git a/regression-test/data/nereids_function_p0/test_array_large_decimal.csv b/regression-test/data/nereids_function_p0/test_array_large_decimal.csv new file mode 100644 index 00000000000..1c770088269 --- /dev/null +++ b/regression-test/data/nereids_function_p0/test_array_large_decimal.csv @@ -0,0 +1,100 @@ +1;[1, null];[100];[1.123456789012345678901234567890123456, null] +2;[2, 3];[200, 300];[1234567890.098765432109876543210987654321098765, null] +3;[4, null];[400];[45678901234567890123.123456789012345678901234567890123456, null] +4;[5];[500];[9876543210.543210987654321098765432109876543210, null] +5;[6, 7];[600, 700];[12345678901234567890.234567890123456789012345678901234567, null] +6;[8];[800];[3456789012345678901.876543210987654321098765432109876543210, null] +7;[9, null];[900];[6789012345678901234.123456789012345678901234567890123456, null] +8;[10, 11];[1000, 1100];[89012345678901234567.543210987654321098765432109876543210, null] +9;[12];[1200];[123456789012345678.234567890123456789012345678901234567, null] +10;[13, null];[1300];[4567890123456789.098765432109876543210987654321098765, null] +11;[14, 15];[1400, 1500];[98765432109876543210.654321098765432109876543210987654321, null] +12;[16, null];[1600];[1234567890123456789.987654321098765432109876543210987654, null] +13;[17];[1700];[2345678901234567890.543210987654321098765432109876543210, null] +14;[18, 19];[1800, 1900];[34567890123456789012.432109876543210987654321098765432109, null] +15;[20];[2000];[67890123456789012345.678901234567890123456789012345678901, null] +16;[21, null];[2100];[8901234567890123456.345678901234567890123456789012345678, null] +17;[22, 23];[2200, 2300];[12345678901234567890.987654321098765432109876543210987654, null] +18;[24];[2400];[345678901234567890.234567890123456789012345678901234567, null] +19;[25, null];[2500];[4567890123456789012.654321098765432109876543210987654321, null] +20;[26, 27];[2600, 2700];[67890123456789012.345678901234567890123456789012345678, null] +21;[28, null];[2800];[789012345678901234.876543210987654321098765432109876543210, null] +22;[29, 30];[2900, 3000];[12345678901234567.432109876543210987654321098765432109, null] +23;[31];[3100];[2345678901234567.567890123456789012345678901234567890, null] +24;[32, null];[3200];[89012345678901234567.098765432109876543210987654321098765, null] +25;[33];[3300];[4567890123456789012.234567890123456789012345678901234567, null] +26;[34, 35];[3400, 3500];[6789012345678901234.987654321098765432109876543210987654, null] +27;[36];[3600];[7890123456789012345.543210987654321098765432109876543210, null] +28;[37, 38];[3700, 3800];[1234567890123456789.345678901234567890123456789012345678, null] +29;[39];[3900];[89012345678901234567.432109876543210987654321098765432109, null] +30;[40, 41];[4000, 4100];[234567890123456789.543210987654321098765432109876543210, null] +31;[42];[4200];[123456789012345678.234567890123456789012345678901234567, null] +32;[43, null];[4300];[5678901234567890123.987654321098765432109876543210987654, null] +33;[44];[4400];[3456789012345678901.345678901234567890123456789012345678, null] +34;[45, 46];[4500, 4600];[789012345678901234.123456789012345678901234567890123456, null] +35;[47];[4700];[89012345678901234567.876543210987654321098765432109876543210, null] +36;[48, null];[4800];[12345678901234567890.543210987654321098765432109876543210, null] +37;[49];[4900];[56789012345678901234.345678901234567890123456789012345678, null] +38;[50, 51];[5000, 5100];[678901234567890123.432109876543210987654321098765432109, null] +39;[52];[5200];[7890123456789012345.098765432109876543210987654321098765, null] +40;[53, null];[5300];[1234567890123456789.654321098765432109876543210987654321, null] +41;[54, 55];[5400, 5500];[3456789012345678901.987654321098765432109876543210987654, null] +42;[56];[5600];[2345678901234567890.234567890123456789012345678901234567, null] +43;[57, 58];[5700, 5800];[12345678901234567890.098765432109876543210987654321098765, null] +44;[59];[5900];[67890123456789012.987654321098765432109876543210987654, null] +45;[60, null];[6000];[8901234567890123456.876543210987654321098765432109876543210, null] +46;[61];[6100];[1234567890123456789.654321098765432109876543210987654321, null] +47;[62, 63];[6200, 6300];[5678901234567890123.234567890123456789012345678901234567, null] +48;[64];[6400];[23456789012345678901.654321098765432109876543210987654321, null] +49;[65, null];[6500];[345678901234567890.987654321098765432109876543210987654, null] +50;[66, 67];[6600, 6700];[5678901234567890123.432109876543210987654321098765432109, null] +51;[68];[6800];[789012345678901234.654321098765432109876543210987654321, null] +52;[69, 70];[6900, 7000];[890123456789012345.123456789012345678901234567890123456, null] +53;[71];[7100];[1234567890123456789.098765432109876543210987654321098765, null] +54;[72, null];[7200];[5678901234567890123.654321098765432109876543210987654321, null] +55;[73];[7300];[789012345678901234.345678901234567890123456789012345678, null] +56;[74, 75];[7400, 7500];[8901234567890123456.987654321098765432109876543210987654, null] +57;[76];[7600];[2345678901234567890.098765432109876543210987654321098765, null] +58;[77, 78];[7700, 7800];[12345678901234567890.654321098765432109876543210987654321, null] +59;[79];[7900];[89012345678901234.345678901234567890123456789012345678, null] +60;[80, null];[8000];[34567890123456789012.098765432109876543210987654321098765, null] +61;[81];[8100];[567890123456789012.543210987654321098765432109876543210, null] +62;[82, 83];[8200, 8300];[67890123456789012345.123456789012345678901234567890123456, null] +63;[84];[8400];[1234567890123456789.098765432109876543210987654321098765, null] +64;[85, null];[8500];[23456789012345678901.654321098765432109876543210987654321, null] +65;[86, 87];[8600, 8700];[345678901234567890.345678901234567890123456789012345678, null] +66;[88];[8800];[4567890123456789012.987654321098765432109876543210987654, null] +67;[89, null];[8900];[678901234567890123.432109876543210987654321098765432109, null] +68;[90, 91];[9000, 9100];[7890123456789012345.098765432109876543210987654321098765, null] +69;[92];[9200];[89012345678901234.987654321098765432109876543210987654, null] +70;[93, null];[9300];[234567890123456789.654321098765432109876543210987654321, null] +71;[94, 95];[9400, 9500];[12345678901234567890.098765432109876543210987654321098765, null] +72;[96];[9600];[4567890123456789012.123456789012345678901234567890123456, null] +73;[97, null];[9700];[56789012345678901234.543210987654321098765432109876543210, null] +74;[98, 99];[9800, 9900];[678901234567890123.098765432109876543210987654321098765, null] +75;[100];[10000];[78901234567890123456.234567890123456789012345678901234567, null] +76;[101, null];[10100];[8901234567890123456.987654321098765432109876543210987654, null] +77;[102, 103];[10200, 10300];[1234567890123456789.543210987654321098765432109876543210, null] +78;[104];[10400];[23456789012345678901.876543210987654321098765432109876543210, null] +79;[105, null];[10500];[56789012345678901234.432109876543210987654321098765432109, null] +80;[106, 107];[10600, 10700];[8901234567890123456.234567890123456789012345678901234567, null] +81;[108];[10800];[1234567890123456789.987654321098765432109876543210987654, null] +82;[109, null];[10900];[78901234567890123456.654321098765432109876543210987654321, null] +83;[110, 111];[11000, 11100];[4567890123456789012.123456789012345678901234567890123456, null] +84;[112];[11200];[678901234567890123.543210987654321098765432109876543210, null] +85;[113, null];[11300];[890123456789012345.098765432109876543210987654321098765, null] +86;[114, 115];[11400, 11500];[2345678901234567890.987654321098765432109876543210987654, null] +87;[116];[11600];[1234567890123456789.432109876543210987654321098765432109, null] +88;[117, null];[11700];[7890123456789012345.098765432109876543210987654321098765, null] +89;[118, 119];[11800, 11900];[345678901234567890.654321098765432109876543210987654321, null] +90;[120];[12000];[8901234567890123456.432109876543210987654321098765432109, null] +91;[121, null];[12100];[567890123456789012.345678901234567890123456789012345678, null] +92;[122, 123];[12200, 12300];[12345678901234567890.654321098765432109876543210987654321, null] +93;[124];[12400];[3456789012345678901.098765432109876543210987654321098765, null] +94;[125, null];[12500];[7890123456789012345.987654321098765432109876543210987654, null] +95;[126, 127];[12600, 12700];[890123456789012345.543210987654321098765432109876543210, null] +96;[128];[12800];[5678901234567890123.876543210987654321098765432109876543210, null] +97;[129, null];[12900];[3456789012345678901.234567890123456789012345678901234567, null] +98;[130, 131];[13000, 13100];[78901234567890123456.098765432109876543210987654321098765, null] +99;[132];[13200];[8901234567890123456.987654321098765432109876543210987654, null] +100;[133, null];[13300];[1234567890123456789.543210987654321098765432109876543210, null] diff --git a/regression-test/suites/nereids_function_p0/load.groovy b/regression-test/suites/nereids_function_p0/load.groovy index 8a54b3bc250..105767843bd 100644 --- a/regression-test/suites/nereids_function_p0/load.groovy +++ b/regression-test/suites/nereids_function_p0/load.groovy @@ -265,6 +265,28 @@ suite("load") { insert into fn_test_bitmap_not_nullable select * from fn_test_bitmap where id is not null """ + sql """ set enable_decimal256 = true """ + sql """ drop table if exists fn_test_array_with_large_decimal """ + sql """ + create table IF NOT EXISTS fn_test_array_with_large_decimal(id int, a array<tinyint>, b array<decimal(10,0)>, c array<decimal(76,56)>) properties('replication_num' = '1'); + """ + streamLoad { + table "fn_test_array_with_large_decimal" + db "regression_test_nereids_function_p0" + set 'column_separator', ';' + file "test_array_large_decimal.csv" + time 60000 + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals(100, json.NumberTotalRows) + assertEquals(100, json.NumberLoadedRows) + } + } // array_match_any && array_match_all sql """ drop table if exists fn_test_am """ sql """ CREATE TABLE IF NOT EXISTS fn_test_am (id int, kastr array<string>, kaint array<int>) engine=olap diff --git a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy index 9b2fb931d74..8a7f08a883a 100644 --- a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy +++ b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy @@ -1350,6 +1350,39 @@ suite("nereids_scalar_fn_Array") { exception("errCode = 2") } + // agg for array types add decimal256 cases array_min/array_max/array_product/array_avg/array_sum with decimal256 + sql """ set enable_decimal256=true; """ + order_qt_sql_array_min_decimal256 "select array_min(c) from fn_test_array_with_large_decimal order by id" + order_qt_sql_array_max_decimal256 "select array_max(c) from fn_test_array_with_large_decimal order by id" + test { + sql "select array_product(c) from fn_test_array_with_large_decimal order by id" + check{result, exception, startTime, endTime -> + assertTrue(exception != null) + logger.info(exception.message) + } + } + test { + sql "select array_avg(c) from fn_test_array_with_large_decimal order by id" + check{result, exception, startTime, endTime -> + assertTrue(exception != null) + logger.info(exception.message) + } + } + test { + sql "select array_sum(c) from fn_test_array_with_large_decimal order by id" + check{result, exception, startTime, endTime -> + assertTrue(exception != null) + logger.info(exception.message) + } + } + // array_overlap for type correctness + order_qt_sql_array_overlaps_1 """select arrays_overlap(a, b) from fn_test_array_with_large_decimal order by id""" + order_qt_sql_array_overlaps_2 """select arrays_overlap(b, a) from fn_test_array_with_large_decimal order by id""" + order_qt_sql_array_overlaps_3 """select arrays_overlap(a, c) from fn_test_array_with_large_decimal order by id""" + order_qt_sql_array_overlaps_4 """select arrays_overlap(c, a) from fn_test_array_with_large_decimal order by id""" + order_qt_sql_array_overlaps_5 """select arrays_overlap(b, c) from fn_test_array_with_large_decimal order by id""" + order_qt_sql_array_overlaps_6 """select arrays_overlap(c, b) from fn_test_array_with_large_decimal order by id""" + // array_match_any && array_match_all // for table --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org