From 55c42da511af0f9a4f406cf34602308a678c0933 Mon Sep 17 00:00:00 2001 From: abmdocrt Date: Mon, 13 Mar 2023 10:48:13 +0800 Subject: [PATCH] [Feature](array) Support array data type (#16640) --- be/src/vec/data_types/data_type_factory.hpp | 19 ++ .../array/function_array_aggregation.cpp | 2 + .../array/function_array_difference.h | 3 + .../functions/array/function_array_distinct.h | 9 + .../functions/array/function_array_element.h | 12 ++ .../functions/array/function_array_index.h | 24 +++ .../vec/functions/array/function_array_join.h | 10 ++ .../functions/array/function_array_remove.h | 19 ++ .../vec/functions/array/function_array_set.h | 3 + .../vec/functions/array/function_array_sort.h | 10 ++ .../functions/array/function_arrays_overlap.h | 14 +- be/src/vec/functions/function.cpp | 65 +++++++ be/src/vec/functions/function.h | 42 +---- .../java/org/apache/doris/catalog/Type.java | 3 + .../java/org/apache/doris/analysis/Expr.java | 19 ++ .../doris/analysis/FunctionCallExpr.java | 38 +++- gensrc/script/doris_builtins_functions.py | 12 +- .../test_aggregate_histogram.out | 8 +- .../test_array_aggregation_functions.out | 44 ++--- .../array_functions/test_array_functions.out | 165 ++++++++++++++++++ .../test_array_functions_by_literal.out | 63 +++++++ .../test_array_aggregation_functions.groovy | 24 +-- .../test_array_functions.groovy | 37 ++-- .../test_array_functions_by_literal.groovy | 21 +++ 24 files changed, 576 insertions(+), 90 deletions(-) diff --git a/be/src/vec/data_types/data_type_factory.hpp b/be/src/vec/data_types/data_type_factory.hpp index b2623b06da..ec229980af 100644 --- a/be/src/vec/data_types/data_type_factory.hpp +++ b/be/src/vec/data_types/data_type_factory.hpp @@ -21,6 +21,7 @@ #pragma once #include #include +#include #include "arrow/type.h" #include "common/consts.h" @@ -112,6 +113,24 @@ public: if (is_decimal(type_ptr) && type_ptr->get_type_id() == entity.first->get_type_id()) { return entity.second; } + if (is_array(type_ptr) && is_array(entity.first)) { + auto nested_nullable_type_ptr = + (assert_cast(type_ptr.get()))->get_nested_type(); + auto nested_nullable_entity_ptr = + (assert_cast(entity.first.get()))->get_nested_type(); + // There must be nullable inside array type. + if (nested_nullable_type_ptr->is_nullable() && + nested_nullable_entity_ptr->is_nullable()) { + auto nested_type_ptr = ((DataTypeNullable*)(nested_nullable_type_ptr.get())) + ->get_nested_type(); + auto nested_entity_ptr = ((DataTypeNullable*)(nested_nullable_entity_ptr.get())) + ->get_nested_type(); + if (is_decimal(nested_type_ptr) && + nested_type_ptr->get_type_id() == nested_entity_ptr->get_type_id()) { + return entity.second; + } + } + } } if (type_ptr->get_type_id() == TypeIndex::Struct || type_ptr->get_type_id() == TypeIndex::Map) { diff --git a/be/src/vec/functions/array/function_array_aggregation.cpp b/be/src/vec/functions/array/function_array_aggregation.cpp index bb468c3241..588c15edbe 100644 --- a/be/src/vec/functions/array/function_array_aggregation.cpp +++ b/be/src/vec/functions/array/function_array_aggregation.cpp @@ -154,6 +154,8 @@ struct ArrayAggregateImpl { execute_type(res, type, data, offsets) || execute_type(res, type, data, offsets) || execute_type(res, type, data, offsets) || + execute_type(res, type, data, offsets) || + execute_type(res, type, data, offsets) || execute_type(res, type, data, offsets) || execute_type(res, type, data, offsets) || execute_type(res, type, data, offsets) || diff --git a/be/src/vec/functions/array/function_array_difference.h b/be/src/vec/functions/array/function_array_difference.h index 3fa1792c95..7e6c957a96 100644 --- a/be/src/vec/functions/array/function_array_difference.h +++ b/be/src/vec/functions/array/function_array_difference.h @@ -199,6 +199,9 @@ private: } else if (check_column(*nested_column)) { res = _execute_number_expanded(offsets, *nested_column, nested_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number_expanded(offsets, *nested_column, + nested_null_map); } else if (check_column(*nested_column)) { res = _execute_number_expanded(offsets, *nested_column, nested_null_map); diff --git a/be/src/vec/functions/array/function_array_distinct.h b/be/src/vec/functions/array/function_array_distinct.h index e19368d6df..7707438dce 100644 --- a/be/src/vec/functions/array/function_array_distinct.h +++ b/be/src/vec/functions/array/function_array_distinct.h @@ -265,6 +265,15 @@ private: } else if (which.is_date_time_v2()) { res = _execute_number(src_column, src_offsets, dest_column, dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal32()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal64()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal128i()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); } else if (which.is_decimal128()) { res = _execute_number(src_column, src_offsets, dest_column, dest_offsets, src_null_map, dest_null_map); diff --git a/be/src/vec/functions/array/function_array_element.h b/be/src/vec/functions/array/function_array_element.h index faee04fcb3..094802f886 100644 --- a/be/src/vec/functions/array/function_array_element.h +++ b/be/src/vec/functions/array/function_array_element.h @@ -319,6 +319,18 @@ private: res = _execute_number(offsets, *nested_column, src_null_map, *arguments[1].column, nested_null_map, dst_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number(offsets, *nested_column, src_null_map, + *arguments[1].column, nested_null_map, + dst_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number(offsets, *nested_column, src_null_map, + *arguments[1].column, nested_null_map, + dst_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number(offsets, *nested_column, src_null_map, + *arguments[1].column, nested_null_map, + dst_null_map); } else if (check_column(*nested_column)) { res = _execute_number(offsets, *nested_column, src_null_map, *arguments[1].column, nested_null_map, diff --git a/be/src/vec/functions/array/function_array_index.h b/be/src/vec/functions/array/function_array_index.h index 9818d20d32..93978327d1 100644 --- a/be/src/vec/functions/array/function_array_index.h +++ b/be/src/vec/functions/array/function_array_index.h @@ -241,6 +241,18 @@ private: return _execute_number( offsets, nested_null_map, nested_column, right_column, right_nested_null_map, outer_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_null_map, nested_column, right_column, right_nested_null_map, + outer_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_null_map, nested_column, right_column, right_nested_null_map, + outer_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_null_map, nested_column, right_column, right_nested_null_map, + outer_null_map); } else if (check_column(right_column)) { return _execute_number( offsets, nested_null_map, nested_column, right_column, right_nested_null_map, @@ -329,6 +341,18 @@ private: return_column = _execute_number_expanded( offsets, nested_null_map, *nested_column, *right_column, right_nested_null_map, array_null_map); + } else if (check_column(*nested_column)) { + return_column = _execute_number_expanded( + offsets, nested_null_map, *nested_column, *right_column, + right_nested_null_map, array_null_map); + } else if (check_column(*nested_column)) { + return_column = _execute_number_expanded( + offsets, nested_null_map, *nested_column, *right_column, + right_nested_null_map, array_null_map); + } else if (check_column(*nested_column)) { + return_column = _execute_number_expanded( + offsets, nested_null_map, *nested_column, *right_column, + right_nested_null_map, array_null_map); } else if (check_column(*nested_column)) { return_column = _execute_number_expanded( offsets, nested_null_map, *nested_column, *right_column, diff --git a/be/src/vec/functions/array/function_array_join.h b/be/src/vec/functions/array/function_array_join.h index 05b69901cc..d822c45a41 100644 --- a/be/src/vec/functions/array/function_array_join.h +++ b/be/src/vec/functions/array/function_array_join.h @@ -241,6 +241,16 @@ private: } else if (which.is_date_time_v2()) { res = _execute_number(src_column, src_offsets, src_null_map, sep_str, null_replace_str, nested_type, dest_column_ptr); + } else if (which.is_decimal32()) { + res = _execute_number(src_column, src_offsets, src_null_map, sep_str, + null_replace_str, nested_type, dest_column_ptr); + } else if (which.is_decimal64()) { + res = _execute_number(src_column, src_offsets, src_null_map, sep_str, + null_replace_str, nested_type, dest_column_ptr); + } else if (which.is_decimal128i()) { + res = _execute_number(src_column, src_offsets, src_null_map, sep_str, + null_replace_str, nested_type, + dest_column_ptr); } else if (which.is_decimal128()) { res = _execute_number(src_column, src_offsets, src_null_map, sep_str, null_replace_str, nested_type, dest_column_ptr); diff --git a/be/src/vec/functions/array/function_array_remove.h b/be/src/vec/functions/array/function_array_remove.h index cb8ef46a0a..58566f34cb 100644 --- a/be/src/vec/functions/array/function_array_remove.h +++ b/be/src/vec/functions/array/function_array_remove.h @@ -20,6 +20,7 @@ #include "vec/columns/column.h" #include "vec/columns/column_array.h" #include "vec/columns/column_const.h" +#include "vec/columns/columns_number.h" #include "vec/data_types/data_type.h" #include "vec/data_types/data_type_array.h" #include "vec/data_types/data_type_number.h" @@ -265,6 +266,15 @@ private: } else if (check_column(right_column)) { return _execute_number(offsets, nested_column, right_column, nested_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_column, right_column, nested_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_column, right_column, nested_null_map); + } else if (check_column(right_column)) { + return _execute_number( + offsets, nested_column, right_column, nested_null_map); } else if (check_column(right_column)) { return _execute_number( offsets, nested_column, right_column, nested_null_map); @@ -326,6 +336,15 @@ private: } else if (check_column(*nested_column)) { res = _execute_number_expanded(offsets, *nested_column, *right_column, nested_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number_expanded(offsets, *nested_column, + *right_column, nested_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number_expanded(offsets, *nested_column, + *right_column, nested_null_map); + } else if (check_column(*nested_column)) { + res = _execute_number_expanded(offsets, *nested_column, + *right_column, nested_null_map); } else if (check_column(*nested_column)) { res = _execute_number_expanded(offsets, *nested_column, *right_column, nested_null_map); diff --git a/be/src/vec/functions/array/function_array_set.h b/be/src/vec/functions/array/function_array_set.h index aeb895e07d..fa9a6451e3 100644 --- a/be/src/vec/functions/array/function_array_set.h +++ b/be/src/vec/functions/array/function_array_set.h @@ -171,6 +171,9 @@ public: _execute_internal(dst, left_data, right_data) || _execute_internal(dst, left_data, right_data) || _execute_internal(dst, left_data, right_data) || + _execute_internal(dst, left_data, right_data) || + _execute_internal(dst, left_data, right_data) || + _execute_internal(dst, left_data, right_data) || _execute_internal(dst, left_data, right_data)) { res_column = assemble_column_array(dst); if (res_column) { diff --git a/be/src/vec/functions/array/function_array_sort.h b/be/src/vec/functions/array/function_array_sort.h index 5b1b78fed0..0f72093bd2 100644 --- a/be/src/vec/functions/array/function_array_sort.h +++ b/be/src/vec/functions/array/function_array_sort.h @@ -20,6 +20,7 @@ #pragma once #include "vec/columns/column_array.h" +#include "vec/columns/columns_number.h" #include "vec/data_types/data_type_array.h" #include "vec/functions/function.h" @@ -276,6 +277,15 @@ private: } else if (which.is_date_time_v2()) { res = _execute_number(src_column, src_offsets, dest_column, dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal32()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal64()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); + } else if (which.is_decimal128i()) { + res = _execute_number(src_column, src_offsets, dest_column, + dest_offsets, src_null_map, dest_null_map); } else if (which.is_decimal128()) { res = _execute_number(src_column, src_offsets, dest_column, dest_offsets, src_null_map, dest_null_map); diff --git a/be/src/vec/functions/array/function_arrays_overlap.h b/be/src/vec/functions/array/function_arrays_overlap.h index 21eb10e24e..4256dd3229 100644 --- a/be/src/vec/functions/array/function_arrays_overlap.h +++ b/be/src/vec/functions/array/function_arrays_overlap.h @@ -183,7 +183,19 @@ public: dst_nested_col->get_data().data()); } } else if (left_exec_data.nested_col->is_column_decimal()) { - if (check_column(*left_exec_data.nested_col)) { + if (check_column(*left_exec_data.nested_col)) { + ret = _execute_internal(left_exec_data, right_exec_data, + dst_null_map_data, + dst_nested_col->get_data().data()); + } else if (check_column(*left_exec_data.nested_col)) { + ret = _execute_internal(left_exec_data, right_exec_data, + dst_null_map_data, + dst_nested_col->get_data().data()); + } else if (check_column(*left_exec_data.nested_col)) { + ret = _execute_internal(left_exec_data, right_exec_data, + dst_null_map_data, + dst_nested_col->get_data().data()); + } else if (check_column(*left_exec_data.nested_col)) { ret = _execute_internal(left_exec_data, right_exec_data, dst_null_map_data, dst_nested_col->get_data().data()); diff --git a/be/src/vec/functions/function.cpp b/be/src/vec/functions/function.cpp index e7c6871690..91ab3f71ed 100644 --- a/be/src/vec/functions/function.cpp +++ b/be/src/vec/functions/function.cpp @@ -27,6 +27,7 @@ #include "vec/columns/column_nullable.h" #include "vec/common/assert_cast.h" #include "vec/common/typeid_cast.h" +#include "vec/data_types/data_type_array.h" #include "vec/data_types/data_type_nothing.h" #include "vec/data_types/data_type_nullable.h" #include "vec/functions/function_helpers.h" @@ -338,4 +339,68 @@ DataTypePtr FunctionBuilderImpl::get_return_type(const ColumnsWithTypeAndName& a return get_return_type_without_low_cardinality(arguments); } + +bool FunctionBuilderImpl::is_date_or_datetime_or_decimal( + const DataTypePtr& return_type, const DataTypePtr& func_return_type) const { + return (is_date_or_datetime(return_type->is_nullable() + ? ((DataTypeNullable*)return_type.get())->get_nested_type() + : return_type) && + is_date_or_datetime( + func_return_type->is_nullable() + ? ((DataTypeNullable*)func_return_type.get())->get_nested_type() + : func_return_type)) || + (is_date_v2_or_datetime_v2( + return_type->is_nullable() + ? ((DataTypeNullable*)return_type.get())->get_nested_type() + : return_type) && + is_date_v2_or_datetime_v2( + func_return_type->is_nullable() + ? ((DataTypeNullable*)func_return_type.get())->get_nested_type() + : func_return_type)) || + // For some date functions such as str_to_date(string, string), return_type will + // be datetimev2 if users enable datev2 but get_return_type(arguments) will still + // return datetime. We need keep backward compatibility here. + (is_date_v2_or_datetime_v2( + return_type->is_nullable() + ? ((DataTypeNullable*)return_type.get())->get_nested_type() + : return_type) && + is_date_or_datetime( + func_return_type->is_nullable() + ? ((DataTypeNullable*)func_return_type.get())->get_nested_type() + : func_return_type)) || + (is_decimal(return_type->is_nullable() + ? ((DataTypeNullable*)return_type.get())->get_nested_type() + : return_type) && + is_decimal(func_return_type->is_nullable() + ? ((DataTypeNullable*)func_return_type.get())->get_nested_type() + : func_return_type)); +} + +bool FunctionBuilderImpl::is_array_nested_type_date_or_datetime_or_decimal( + const DataTypePtr& return_type, const DataTypePtr& func_return_type) const { + auto return_type_ptr = return_type->is_nullable() + ? ((DataTypeNullable*)return_type.get())->get_nested_type() + : return_type; + auto func_return_type_ptr = + func_return_type->is_nullable() + ? ((DataTypeNullable*)func_return_type.get())->get_nested_type() + : func_return_type; + if (!(is_array(return_type_ptr) && is_array(func_return_type_ptr))) { + return false; + } + auto nested_nullable_return_type_ptr = + (assert_cast(return_type_ptr.get()))->get_nested_type(); + auto nested_nullable_func_return_type = + (assert_cast(func_return_type_ptr.get()))->get_nested_type(); + // There must be nullable inside array type. + if (nested_nullable_return_type_ptr->is_nullable() && + nested_nullable_func_return_type->is_nullable()) { + auto nested_return_type_ptr = + ((DataTypeNullable*)(nested_nullable_return_type_ptr.get()))->get_nested_type(); + auto nested_func_return_type_ptr = + ((DataTypeNullable*)(nested_nullable_func_return_type.get()))->get_nested_type(); + return is_date_or_datetime_or_decimal(nested_return_type_ptr, nested_func_return_type_ptr); + } + return false; +} } // namespace doris::vectorized diff --git a/be/src/vec/functions/function.h b/be/src/vec/functions/function.h index 9117599edb..a002e90760 100644 --- a/be/src/vec/functions/function.h +++ b/be/src/vec/functions/function.h @@ -298,41 +298,8 @@ public: // Nullable when `use_default_implementation_for_nulls` is true. (return_type->is_nullable() && func_return_type->is_nullable() && is_nothing(((DataTypeNullable*)func_return_type.get())->get_nested_type())) || - (is_date_or_datetime( - return_type->is_nullable() - ? ((DataTypeNullable*)return_type.get())->get_nested_type() - : return_type) && - is_date_or_datetime(get_return_type(arguments)->is_nullable() - ? ((DataTypeNullable*)get_return_type(arguments).get()) - ->get_nested_type() - : get_return_type(arguments))) || - (is_date_v2_or_datetime_v2( - return_type->is_nullable() - ? ((DataTypeNullable*)return_type.get())->get_nested_type() - : return_type) && - is_date_v2_or_datetime_v2( - get_return_type(arguments)->is_nullable() - ? ((DataTypeNullable*)get_return_type(arguments).get()) - ->get_nested_type() - : get_return_type(arguments))) || - // For some date functions such as str_to_date(string, string), return_type will - // be datetimev2 if users enable datev2 but get_return_type(arguments) will still - // return datetime. We need keep backward compatibility here. - (is_date_v2_or_datetime_v2( - return_type->is_nullable() - ? ((DataTypeNullable*)return_type.get())->get_nested_type() - : return_type) && - is_date_or_datetime(get_return_type(arguments)->is_nullable() - ? ((DataTypeNullable*)get_return_type(arguments).get()) - ->get_nested_type() - : get_return_type(arguments))) || - (is_decimal(return_type->is_nullable() - ? ((DataTypeNullable*)return_type.get())->get_nested_type() - : return_type) && - is_decimal(get_return_type(arguments)->is_nullable() - ? ((DataTypeNullable*)get_return_type(arguments).get()) - ->get_nested_type() - : get_return_type(arguments)))) + is_date_or_datetime_or_decimal(return_type, func_return_type) || + is_array_nested_type_date_or_datetime_or_decimal(return_type, func_return_type)) << " for function '" << this->get_name() << "' with " << return_type->get_name() << " and " << func_return_type->get_name(); @@ -400,6 +367,11 @@ protected: private: DataTypePtr get_return_type_without_low_cardinality( const ColumnsWithTypeAndName& arguments) const; + + bool is_date_or_datetime_or_decimal(const DataTypePtr& return_type, + const DataTypePtr& func_return_type) const; + bool is_array_nested_type_date_or_datetime_or_decimal( + const DataTypePtr& return_type, const DataTypePtr& func_return_type) const; }; /// Previous function interface. diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java index bc696c4753..c70a9d91d3 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java +++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java @@ -181,6 +181,9 @@ public abstract class Type { arraySubTypes.add(CHAR); arraySubTypes.add(VARCHAR); arraySubTypes.add(STRING); + arraySubTypes.add(DECIMAL32); + arraySubTypes.add(DECIMAL64); + arraySubTypes.add(DECIMAL128); mapSubTypes = Lists.newArrayList(); mapSubTypes.add(BOOLEAN); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java index dc32900bbc..da71acf8c3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java @@ -21,6 +21,7 @@ package org.apache.doris.analysis; import org.apache.doris.analysis.ArithmeticExpr.Operator; +import org.apache.doris.catalog.ArrayType; import org.apache.doris.catalog.Env; import org.apache.doris.catalog.Function; import org.apache.doris.catalog.FunctionSet; @@ -2201,11 +2202,29 @@ public abstract class Expr extends TreeNode implements ParseNode, Cloneabl return Type.DECIMAL128; } else if (type.getPrimitiveType() == PrimitiveType.DATETIMEV2) { return Type.DATETIMEV2; + } else if (type.getPrimitiveType() == PrimitiveType.ARRAY) { + return getActualArrayType((ArrayType) type); } return type; }).toArray(Type[]::new); } + private ArrayType getActualArrayType(ArrayType originArrayType) { + // Now we only support single-level array nesting. + // Multi-layer array nesting will be supported in the future. + Type type = originArrayType.getItemType(); + if (type.getPrimitiveType() == PrimitiveType.DECIMAL32) { + return new ArrayType(Type.DECIMAL32); + } else if (type.getPrimitiveType() == PrimitiveType.DECIMAL64) { + return new ArrayType(Type.DECIMAL64); + } else if (type.getPrimitiveType() == PrimitiveType.DECIMAL128) { + return new ArrayType(Type.DECIMAL128); + } else if (type.getPrimitiveType() == PrimitiveType.DATETIMEV2) { + return new ArrayType(Type.DATETIMEV2); + } + return originArrayType; + } + public boolean refToCountStar() { if (this instanceof SlotRef) { SlotRef slotRef = (SlotRef) this; diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index f4be4f309b..a54594b50a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -137,6 +137,17 @@ public class FunctionCallExpr extends Expr { return returnType; } }; + java.util.function.BiFunction, Type, Type> arrayDecimal128Rule + = (children, returnType) -> { + Preconditions.checkArgument(children != null && children.size() > 0); + if (children.get(0).getType().isArrayType() && ( + ((ArrayType) children.get(0).getType()).getItemType().isDecimalV3())) { + return ScalarType.createDecimalV3Type(ScalarType.MAX_DECIMAL128_PRECISION, + ((ScalarType) ((ArrayType) children.get(0).getType()).getItemType()).getScalarScale()); + } else { + return returnType; + } + }; PRECISION_INFER_RULE = new HashMap<>(); PRECISION_INFER_RULE.put("sum", sumRule); PRECISION_INFER_RULE.put("multi_distinct_sum", sumRule); @@ -172,7 +183,9 @@ public class FunctionCallExpr extends Expr { PRECISION_INFER_RULE.put("array_max", arrayDateTimeV2OrDecimalV3Rule); PRECISION_INFER_RULE.put("element_at", arrayDateTimeV2OrDecimalV3Rule); PRECISION_INFER_RULE.put("%element_extract%", arrayDateTimeV2OrDecimalV3Rule); - + PRECISION_INFER_RULE.put("array_avg", arrayDecimal128Rule); + PRECISION_INFER_RULE.put("array_sum", arrayDecimal128Rule); + PRECISION_INFER_RULE.put("array_product", arrayDecimal128Rule); PRECISION_INFER_RULE.put("round", roundRule); PRECISION_INFER_RULE.put("round_bankers", roundRule); PRECISION_INFER_RULE.put("ceil", roundRule); @@ -1382,7 +1395,9 @@ public class FunctionCallExpr extends Expr { for (int i = 0; i < argTypes.length - orderByElements.size(); ++i) { // For varargs, we must compare with the last type in callArgs.argTypes. int ix = Math.min(args.length - 1, i); - if (fnName.getFunction().equalsIgnoreCase("money_format") + if ((fnName.getFunction().equalsIgnoreCase("money_format") || fnName.getFunction() + .equalsIgnoreCase("histogram") + || fnName.getFunction().equalsIgnoreCase("hist")) && children.get(0).getType().isDecimalV3() && args[ix].isDecimalV3()) { continue; } else if (fnName.getFunction().equalsIgnoreCase("array") @@ -1399,6 +1414,25 @@ public class FunctionCallExpr extends Expr { || (children.get(0).getType().isDecimalV2() && ((ArrayType) args[ix]).getItemType().isDecimalV2()))) { continue; + } else if ((fnName.getFunction().equalsIgnoreCase("array_distinct") || fnName.getFunction() + .equalsIgnoreCase("array_remove") || fnName.getFunction().equalsIgnoreCase("array_sort") + || fnName.getFunction().equalsIgnoreCase("array_overlap") + || fnName.getFunction().equalsIgnoreCase("array_union") + || fnName.getFunction().equalsIgnoreCase("array_intersect") + || fnName.getFunction().equalsIgnoreCase("array_compact") + || fnName.getFunction().equalsIgnoreCase("array_slice") + || fnName.getFunction().equalsIgnoreCase("array_popback") + || fnName.getFunction().equalsIgnoreCase("array_popfront") + || fnName.getFunction().equalsIgnoreCase("reverse") + || fnName.getFunction().equalsIgnoreCase("%element_slice%") + || fnName.getFunction().equalsIgnoreCase("array_concat") + || fnName.getFunction().equalsIgnoreCase("array_except")) + && ((args[ix].isDecimalV3()) + || (children.get(0).getType().isArrayType() + && (((ArrayType) children.get(0).getType()).getItemType().isDecimalV3()) + && (args[ix].isArrayType()) + && ((ArrayType) args[ix]).getItemType().isDecimalV3()))) { + continue; } else if (!argTypes[i].matchesType(args[ix]) && !( argTypes[i].isDateOrDateTime() && args[ix].isDateOrDateTime()) && (!fn.getReturnType().isDecimalV3() diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index f2e7bf9011..33e783ea62 100644 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -351,8 +351,8 @@ visible_functions = [ [['array_sum'], 'DOUBLE', ['ARRAY_FLOAT'], 'ALWAYS_NULLABLE'], [['array_sum'], 'DOUBLE', ['ARRAY_DOUBLE'], 'ALWAYS_NULLABLE'], [['array_sum'], 'DECIMALV2',['ARRAY_DECIMALV2'], 'ALWAYS_NULLABLE'], - [['array_sum'], 'DECIMAL32',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], - [['array_sum'], 'DECIMAL64',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], + [['array_sum'], 'DECIMAL128',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], + [['array_sum'], 'DECIMAL128',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], [['array_sum'], 'DECIMAL128',['ARRAY_DECIMAL128'], 'ALWAYS_NULLABLE'], [['array_avg'], 'DOUBLE', ['ARRAY_BOOLEAN'], 'ALWAYS_NULLABLE'], [['array_avg'], 'DOUBLE', ['ARRAY_TINYINT'], 'ALWAYS_NULLABLE'], @@ -363,8 +363,8 @@ visible_functions = [ [['array_avg'], 'DOUBLE', ['ARRAY_FLOAT'], 'ALWAYS_NULLABLE'], [['array_avg'], 'DOUBLE', ['ARRAY_DOUBLE'], 'ALWAYS_NULLABLE'], [['array_avg'], 'DECIMALV2',['ARRAY_DECIMALV2'], 'ALWAYS_NULLABLE'], - [['array_avg'], 'DECIMAL32',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], - [['array_avg'], 'DECIMAL64',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], + [['array_avg'], 'DECIMAL128',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], + [['array_avg'], 'DECIMAL128',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], [['array_avg'], 'DECIMAL128',['ARRAY_DECIMAL128'], 'ALWAYS_NULLABLE'], [['array_product'], 'DOUBLE', ['ARRAY_BOOLEAN'], 'ALWAYS_NULLABLE'], [['array_product'], 'DOUBLE', ['ARRAY_TINYINT'], 'ALWAYS_NULLABLE'], @@ -375,8 +375,8 @@ visible_functions = [ [['array_product'], 'DOUBLE', ['ARRAY_FLOAT'], 'ALWAYS_NULLABLE'], [['array_product'], 'DOUBLE', ['ARRAY_DOUBLE'], 'ALWAYS_NULLABLE'], [['array_product'], 'DECIMALV2',['ARRAY_DECIMALV2'], 'ALWAYS_NULLABLE'], - [['array_product'], 'DECIMAL32',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], - [['array_product'], 'DECIMAL64',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], + [['array_product'], 'DECIMAL128',['ARRAY_DECIMAL32'], 'ALWAYS_NULLABLE'], + [['array_product'], 'DECIMAL128',['ARRAY_DECIMAL64'], 'ALWAYS_NULLABLE'], [['array_product'], 'DECIMAL128',['ARRAY_DECIMAL128'], 'ALWAYS_NULLABLE'], [['array_remove'], 'ARRAY_BOOLEAN', ['ARRAY_BOOLEAN', 'BOOLEAN'], ''], diff --git a/regression-test/data/query_p0/sql_functions/aggregate_functions/test_aggregate_histogram.out b/regression-test/data/query_p0/sql_functions/aggregate_functions/test_aggregate_histogram.out index 27f900650d..b42a07ae2d 100644 --- a/regression-test/data/query_p0/sql_functions/aggregate_functions/test_aggregate_histogram.out +++ b/regression-test/data/query_p0/sql_functions/aggregate_functions/test_aggregate_histogram.out @@ -1,14 +1,14 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -{"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"14444.44","upper":"34444.44","ndv":3,"count":3,"pre_sum":0},{"lower":"4444.44","upper":"94444.44","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} +{"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"4444.44","upper":"14444.44","ndv":2,"count":3,"pre_sum":0},{"lower":"24444.44","upper":"94444.44","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} -- !select -- -1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":2,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"10","ndv":1,"count":1,"pre_sum":0},{"lower":"11","upper":"11","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":2,"pre_sum":0},{"lower":"21","upper":"21","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"1444444444444","upper":"1444444444444","ndv":1,"count":1,"pre_sum":0},{"lower":"4444444444444","upper":"4444444444444","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"1555555555","upper":"1555555555","ndv":1,"count":1,"pre_sum":0},{"lower":"55555555555","upper":"55555555555","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"0.1","ndv":1,"count":2,"pre_sum":0},{"lower":"1.1","upper":"1.1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"0.222","ndv":1,"count":2,"pre_sum":0},{"lower":"1.222","upper":"1.222","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"3333.330000000","ndv":1,"count":2,"pre_sum":0},{"lower":"13333.330000000","upper":"13333.330000000","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"14444.44","upper":"14444.44","ndv":1,"count":1,"pre_sum":0},{"lower":"4444.44","upper":"4444.44","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"c","ndv":1,"count":2,"pre_sum":0},{"lower":"d","upper":"d","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar1","ndv":1,"count":2,"pre_sum":0},{"lower":"varchar2","upper":"varchar2","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string1","ndv":1,"count":2,"pre_sum":0},{"lower":"string2","upper":"string2","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-01","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02","upper":"2022-12-02","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-01","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02","upper":"2022-12-02","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-01 22:23:23","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02 22:23:23","upper":"2022-12-02 22:23:23","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-01 22:23:24.999999","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":6,"pre_sum":0}]} +1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":2,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"10","ndv":1,"count":1,"pre_sum":0},{"lower":"11","upper":"11","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":2,"pre_sum":0},{"lower":"21","upper":"21","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"1444444444444","upper":"1444444444444","ndv":1,"count":1,"pre_sum":0},{"lower":"4444444444444","upper":"4444444444444","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"1555555555","upper":"1555555555","ndv":1,"count":1,"pre_sum":0},{"lower":"55555555555","upper":"55555555555","ndv":1,"count":2,"pre_sum":1}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"0.1","ndv":1,"count":2,"pre_sum":0},{"lower":"1.1","upper":"1.1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"0.222","ndv":1,"count":2,"pre_sum":0},{"lower":"1.222","upper":"1.222","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"3333.330000000","ndv":1,"count":2,"pre_sum":0},{"lower":"13333.330000000","upper":"13333.330000000","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"4444.44","upper":"4444.44","ndv":1,"count":2,"pre_sum":0},{"lower":"14444.44","upper":"14444.44","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"c","ndv":1,"count":2,"pre_sum":0},{"lower":"d","upper":"d","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar1","ndv":1,"count":2,"pre_sum":0},{"lower":"varchar2","upper":"varchar2","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string1","ndv":1,"count":2,"pre_sum":0},{"lower":"string2","upper":"string2","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-01","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02","upper":"2022-12-02","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-01","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02","upper":"2022-12-02","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-01 22:23:23","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02 22:23:23","upper":"2022-12-02 22:23:23","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-01 22:23:24.999999","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-02 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":6,"pre_sum":0}]} 2 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":2,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"21","ndv":2,"count":2,"pre_sum":0},{"lower":"31","upper":"31","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"20","upper":"22","ndv":2,"count":2,"pre_sum":0},{"lower":"32","upper":"32","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":2,"count":2,"pre_sum":0},{"lower":"3444444444444","upper":"3444444444444","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":2,"count":2,"pre_sum":0},{"lower":"9555555555","upper":"9555555555","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2.1","upper":"3.1","ndv":2,"count":2,"pre_sum":0},{"lower":"9.1","upper":"9.1","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2.222","upper":"3.222","ndv":2,"count":2,"pre_sum":0},{"lower":"9.222","upper":"9.222","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"23333.330000000","upper":"33333.330000000","ndv":2,"count":2,"pre_sum":0},{"lower":"93333.330000000","upper":"93333.330000000","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"24444.44","upper":"34444.44","ndv":2,"count":2,"pre_sum":0},{"lower":"94444.44","upper":"94444.44","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"f","upper":"l","ndv":2,"count":2,"pre_sum":0},{"lower":"p","upper":"p","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"varchar3","upper":"varchar3","ndv":1,"count":2,"pre_sum":0},{"lower":"varchar9","upper":"varchar9","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"string3","upper":"string3","ndv":1,"count":2,"pre_sum":0},{"lower":"string9","upper":"string9","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-03","upper":"2022-12-03","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-09","upper":"2022-12-09","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-03","upper":"2022-12-03","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-09","upper":"2022-12-09","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-03 22:23:23","upper":"2022-12-03 22:23:23","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-09 22:23:23","upper":"2022-12-09 22:23:23","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-03 22:23:24.999999","ndv":1,"count":2,"pre_sum":0},{"lower":"2022-12-09 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":1,"count":1,"pre_sum":2}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":6,"pre_sum":0}]} -- !select -- -1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"14444.44","upper":"34444.44","ndv":3,"count":3,"pre_sum":0},{"lower":"4444.44","upper":"94444.44","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} +1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"4444.44","upper":"14444.44","ndv":2,"count":3,"pre_sum":0},{"lower":"24444.44","upper":"94444.44","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} -- !select -- -1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"14444.44","upper":"34444.44","ndv":3,"count":3,"pre_sum":0},{"lower":"4444.44","upper":"94444.44","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} +1 {"num_buckets":2,"buckets":[{"lower":"0","upper":"0","ndv":1,"count":4,"pre_sum":0},{"lower":"1","upper":"1","ndv":1,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"10","upper":"11","ndv":2,"count":4,"pre_sum":0},{"lower":"21","upper":"31","ndv":2,"count":2,"pre_sum":4}]} {"num_buckets":2,"buckets":[{"lower":"12","upper":"20","ndv":2,"count":3,"pre_sum":0},{"lower":"21","upper":"32","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"944444444444","upper":"2444444444444","ndv":3,"count":3,"pre_sum":0},{"lower":"3444444444444","upper":"4444444444444","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"255555555","upper":"3555555555","ndv":3,"count":3,"pre_sum":0},{"lower":"9555555555","upper":"55555555555","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.1","upper":"1.1","ndv":2,"count":3,"pre_sum":0},{"lower":"2.1","upper":"9.1","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"0.222","upper":"1.222","ndv":2,"count":3,"pre_sum":0},{"lower":"2.222","upper":"9.222","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"3333.330000000","upper":"13333.330000000","ndv":2,"count":3,"pre_sum":0},{"lower":"23333.330000000","upper":"93333.330000000","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"4444.44","upper":"14444.44","ndv":2,"count":3,"pre_sum":0},{"lower":"24444.44","upper":"94444.44","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"c","upper":"d","ndv":2,"count":3,"pre_sum":0},{"lower":"f","upper":"p","ndv":3,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"varchar1","upper":"varchar2","ndv":2,"count":3,"pre_sum":0},{"lower":"varchar3","upper":"varchar9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"string1","upper":"string2","ndv":2,"count":3,"pre_sum":0},{"lower":"string3","upper":"string9","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01","upper":"2022-12-02","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03","upper":"2022-12-09","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:23","upper":"2022-12-02 22:23:23","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:23","upper":"2022-12-09 22:23:23","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":2,"buckets":[{"lower":"2022-12-01 22:23:24.999999","upper":"2022-12-02 22:23:24.999999","ndv":2,"count":3,"pre_sum":0},{"lower":"2022-12-03 22:23:24.999999","upper":"2022-12-09 22:23:24.999999","ndv":2,"count":3,"pre_sum":3}]} {"num_buckets":1,"buckets":[{"lower":"not null","upper":"not null","ndv":1,"count":12,"pre_sum":0}]} diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out index c0a773048f..906452af47 100644 --- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out +++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out @@ -1,31 +1,31 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -1 1 100 1000 2147483648 9223372036854775808 0E-9 1.0 100.0001 2022-08-31 2022-08-31T12:00 2022-08-31 2022-08-31T12:00:00.999 -2 1 \N \N \N \N \N 127.0 4.023 \N \N \N \N -3 -1 -32768 -2147483647 -9223372036854775808 -117341182548128045443221445 -9.999999000 -1.0 -128.0001 \N \N \N \N +1 1 100 1000 2147483648 9223372036854775808 0E-9 1.0 100.0001 2022-08-31 2022-08-31T12:00 2022-08-31 2022-08-31T12:00:00.999 111111 222222.222 333333.333 444444.444 +2 1 \N \N \N \N \N 127.0 4.023 \N \N \N \N \N \N \N \N +3 -1 -32768 -2147483647 -9223372036854775808 -117341182548128045443221445 -9.999999000 -1.0 -128.0001 \N \N \N \N 111111 222222.222 333333.333 444444.444 +4 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N + +-- !select -- +1 3 101 1001 2147483649 9223372036854775808 9.999999000 1.5 100.0005 2022-10-15 2022-10-15T10:30 2022-10-15 2022-10-15T10:30:00.999 111111 222222.222 333333.333 444444.444 +2 3 \N \N \N \N \N 128.1 4.023 \N \N \N \N \N \N \N \N +3 1 -32767 -50000 0 170141183460469231731687303715884105727 9.999999000 1.0 127.0001 \N \N \N \N 111111 222222.222 333333.333 444444.444 +4 \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N \N + +-- !select -- +1 2.0 100.5 1000.5 2.1474836485E9 9.223372036854776E18 4.999999500 1.25 100.00030000000001 111111 222222.222 333333.333 444444.444 +2 2.0 \N \N \N \N \N 127.55000305175781 4.023 \N \N \N \N +3 0.0 -32767.5 -1.0737668235E9 -4.6116860184273879E18 8.5070591730175945E37 0E-9 0.0 -0.5 111111 222222.222 333333.333 444444.444 4 \N \N \N \N \N \N \N \N \N \N \N \N -- !select -- -1 3 101 1001 2147483649 9223372036854775808 9.999999000 1.5 100.0005 2022-10-15 2022-10-15T10:30 2022-10-15 2022-10-15T10:30:00.999 -2 3 \N \N \N \N \N 128.1 4.023 \N \N \N \N -3 1 -32767 -50000 0 170141183460469231731687303715884105727 9.999999000 1.0 127.0001 \N \N \N \N +1 6 201 2001 4294967297 9223372036854775808 9.999999000 2.5 200.00060000000002 222222 444444.444 666666.666 888888.888 +2 12 \N \N \N \N \N 255.10000610351562 4.023 \N \N \N \N +3 0 -65535 -2147533647 -9223372036854775808 170141183460351890549139175670440884282 0E-9 0.0 -1.0 222222 444444.444 666666.666 888888.888 4 \N \N \N \N \N \N \N \N \N \N \N \N -- !select -- -1 2.0 100.5 1000.5 2.1474836485E9 9.223372036854776E18 4.999999500 1.25 100.00030000000001 -2 2.0 \N \N \N \N \N 127.55000305175781 4.023 -3 0.0 -32767.5 -1.0737668235E9 -4.6116860184273879E18 8.5070591730175945E37 0E-9 0.0 -0.5 -4 \N \N \N \N \N \N \N \N - --- !select -- -1 6 201 2001 4294967297 9223372036854775808 9.999999000 2.5 200.00060000000002 -2 12 \N \N \N \N \N 255.10000610351562 4.023 -3 0 -65535 -2147533647 -9223372036854775808 170141183460351890549139175670440884282 0E-9 0.0 -1.0 -4 \N \N \N \N \N \N \N \N - --- !select -- -1 6.0 10100.0 1001000.0 4.6116860205748716E18 9.223372036854776E18 0E-9 1.5 10000.06000005 -2 36.0 \N \N \N \N \N 16268.700775146484 4.023 -3 -0.0 1.073709056E9 1.0737418235E14 -0.0 -1.9964567667389465E64 -99.999980000 -0.0 -16256.02550001 -4 \N \N \N \N \N \N \N \N +1 6.0 10100.0 1001000.0 4.6116860205748716E18 9.223372036854776E18 0E-9 1.5 10000.06000005 12345654321 49382715950617284.000 111111110888888889.000 197530863802469136.000 +2 36.0 \N \N \N \N \N 16268.700775146484 4.023 \N \N \N \N +3 -0.0 1.073709056E9 1.0737418235E14 -0.0 -1.9964567667389465E64 -99.999980000 -0.0 -16256.02550001 12345654321 49382715950617284.000 111111110888888889.000 197530863802469136.000 +4 \N \N \N \N \N \N \N \N \N \N \N \N diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out index a1e1c10ae4..b37edf7d80 100644 --- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out +++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions.out @@ -54,6 +54,17 @@ 8 \N 9 \N +-- !select -- +1 true +2 true +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 2, 3] ['a', 'b', ''] 2 [4] \N @@ -76,6 +87,17 @@ 8 \N \N 9 \N \N +-- !select -- +1 [111.111, 222.222] +2 [3333.333, 4444.444] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- [2, 3] 1 [4] 2 @@ -109,6 +131,17 @@ \N \N +-- !select -- +[111.111, 222.222] +[3333.333, 4444.444] +\N +\N +\N +\N +\N +\N +\N + -- !select -- 1 [1, 2, 3] ['', 'a', 'b'] [1, 2] 2 [4] \N [5] @@ -131,6 +164,17 @@ 8 \N \N 9 \N \N +-- !select -- +1 [111.111, 222.222] +2 [3333.333, 4444.444] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 2, 3] 2 [4, 5] @@ -164,6 +208,17 @@ 8 \N 9 \N +-- !select -- +1 [111.111, 222.222, 333.333] +2 [3333.333, 4444.444, 5555.555] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [3] 2 [4] @@ -197,6 +252,17 @@ 8 \N 9 \N +-- !select -- +1 [111.111] +2 [3333.333] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 2] 2 [] @@ -230,6 +296,17 @@ 8 \N 9 \N +-- !select -- +1 [222.222] +2 [4444.444] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [2, 3] 2 [] @@ -274,6 +351,17 @@ 8 \N 9 \N +-- !select -- +1 [111.111, 222.222] +2 [3333.333, 4444.444] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [3, 2, 1] ['', 'b', 'a'] [2, 1] 2 [4] \N [5] @@ -296,6 +384,17 @@ 8 \N \N 9 \N \N +-- !select -- +1 [222.222, 111.111] +2 [4444.444, 3333.333] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 1_2_3 a-b- 2 4 \N @@ -406,6 +505,17 @@ 8 \N 9 \N +-- !select -- +1 true +2 false +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 2, 3] 2 [1] @@ -472,6 +582,17 @@ 8 \N 9 \N +-- !select -- +1 [1, 2] +2 [1, 2] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 1, 1] 2 [1] @@ -604,6 +725,17 @@ 8 \N 9 \N +-- !select -- +1 [111.111] +2 [3333.333] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [2, 3] 2 [] @@ -670,6 +802,17 @@ 8 \N 9 \N +-- !select -- +1 [222.222] +2 [4444.444] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- 1 [1, 1, 1] 2 [2, 2, 2] @@ -846,6 +989,17 @@ 8 \N 9 \N +-- !select -- +1 1 +2 0 +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select_array -- 1 [1] true 2 [2] true @@ -901,6 +1055,17 @@ 8 \N 9 \N +-- !select -- +1 [111.111, 222.222, 222.222, 333.333] +2 [3333.333, 4444.444, 4444.444, 5555.555] +3 \N +4 \N +5 \N +6 \N +7 \N +8 \N +9 \N + -- !select -- \N \N -1 \N diff --git a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out index 8ca4024fc9..145a9f5f16 100644 --- a/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out +++ b/regression-test/data/query_p0/sql_functions/array_functions/test_array_functions_by_literal.out @@ -32,6 +32,9 @@ true -- !sql -- true +-- !sql -- +true + -- !sql -- 1 @@ -83,6 +86,9 @@ true -- !sql -- 1 +-- !sql -- +1 + -- !sql -- 3 @@ -113,6 +119,9 @@ true -- !sql -- 2023-02-05 +-- !sql -- +111.111 + -- !sql -- 1 @@ -146,6 +155,9 @@ true -- !sql -- 2023-02-05 +-- !sql -- +222.222 + -- !sql -- 2.0 @@ -224,6 +236,21 @@ true -- !sql -- 2023-02-05 +-- !sql -- +166.666 + +-- !sql -- +333.333 + +-- !sql -- +111.111 + +-- !sql -- +222.222 + +-- !sql -- +24691.308 + -- !sql -- [1, 2, 3] @@ -257,6 +284,9 @@ true -- !sql -- [2023-02-04, 2023-02-05] +-- !sql -- +[111.111, 222.222] + -- !sql -- [2, 3] @@ -278,6 +308,9 @@ true -- !sql -- [2023-02-04] +-- !sql -- +[222.222] + -- !sql -- [1, 2, 3] @@ -308,6 +341,9 @@ true -- !sql -- [2023-02-05, 2023-02-06] +-- !sql -- +[111.111, 222.222] + -- !sql -- false @@ -335,6 +371,9 @@ true -- !sql -- false +-- !sql -- +true + -- !sql -- [1, 2, 3, 4] @@ -416,6 +455,15 @@ false -- !sql -- [2023-02-05] +-- !sql -- +[111.111, 222.222, 333.333] + +-- !sql -- +[111.111] + +-- !sql -- +[222.222] + -- !sql -- [1] @@ -449,6 +497,9 @@ false -- !sql -- [2023-02-06, 2023-02-05] +-- !sql -- +[111.111, 222.222] + -- !sql -- [2, 3, 4, 5, 6] @@ -482,6 +533,9 @@ false -- !sql -- [2023-02-04 23:07:34.999, 2023-02-07 22:07:34.999, 2023-02-04 23:07:34.999] +-- !sql -- +[222.222] + -- !sql -- 1_2_3 @@ -554,6 +608,12 @@ _ -- !sql -- [2023-02-06, 2023-02-05, 2023-02-07, 2023-02-05] +-- !sql -- +[111.111, 222.222, 333.333] + +-- !sql -- +[111.111, 222.222] + -- !sql -- [1000002] @@ -569,6 +629,9 @@ _ -- !sql -- [24.99] +-- !sql -- +[111, 222] + -- !sql -- [1, 2, 3, 2, 3, 4, 8, 1, 2, 9] diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy index fb7839c110..de827daa43 100644 --- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy +++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy @@ -33,7 +33,11 @@ suite("test_array_aggregation_functions") { `a9` array NULL COMMENT "", `a10` array NULL COMMENT "", `a11` array NULL COMMENT "", - `a12` array NULL COMMENT "" + `a12` array NULL COMMENT "", + `a13` array NULL COMMENT "", + `a14` array NULL COMMENT "", + `a15` array NULL COMMENT "", + `a16` array NULL COMMENT "" ) ENGINE=OLAP DUPLICATE KEY(`k1`) DISTRIBUTED BY HASH(`k1`) BUCKETS 1 @@ -42,14 +46,14 @@ suite("test_array_aggregation_functions") { "storage_format" = "V2" ) """ - sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000, 1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0, 1.5], [100.0001, 100.0005], ['2022-10-15', '2022-08-31', '2022-09-01'], ['2022-10-15 10:30:00', '2022-08-31 12:00:00', '2022-09-01 09:00:00'], ['2022-10-15', '2022-08-31', '2022-09-01'], ['2022-10-15 10:30:00.999', '2022-08-31 12:00:00.999', '2022-09-01 09:00:00.999']) """ - sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL, NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL, NULL, NULL) """ - sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768], [-50000, -2147483647], [-9223372036854775808, 0], [-117341182548128045443221445, 170141183460469231731687303715884105727], [-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL, NULL, NULL) """ - sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [], [], NULL, NULL, NULL) """ + sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000, 1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0, 1.5], [100.0001, 100.0005], ['2022-10-15', '2022-08-31', '2022-09-01'], ['2022-10-15 10:30:00', '2022-08-31 12:00:00', '2022-09-01 09:00:00'], ['2022-10-15', '2022-08-31', '2022-09-01'], ['2022-10-15 10:30:00.999', '2022-08-31 12:00:00.999', '2022-09-01 09:00:00.999'], [111111.111, 111111.111], [222222.2222, 222222.2222], [333333.33333, 333333.33333], [444444.44444, 444444.44444]) """ + sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL, NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) """ + sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768], [-50000, -2147483647], [-9223372036854775808, 0], [-117341182548128045443221445, 170141183460469231731687303715884105727], [-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL, NULL, NULL, [111111.111, 111111.111], [222222.2222, 222222.2222], [333333.33333, 333333.33333], [444444.44444, 444444.44444]) """ + sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [], [], NULL, NULL, NULL, [], [], [], []) """ - qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3), array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8), array_min(a9), array_min(a10), array_min(a11), array_min(a12) from ${tableName} order by k1" - qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3), array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8), array_max(a9), array_max(a10), array_max(a11), array_max(a12) from ${tableName} order by k1" - qt_select "SELECT k1, array_avg(a1), array_avg(a2), array_avg(a3), array_avg(a4), array_avg(a5), array_avg(a6), array_avg(a7), array_avg(a8) from ${tableName} order by k1" - qt_select "SELECT k1, array_sum(a1), array_sum(a2), array_sum(a3), array_sum(a4), array_sum(a5), array_sum(a6), array_sum(a7), array_sum(a8) from ${tableName} order by k1" - qt_select "SELECT k1, array_product(a1), array_product(a2), array_product(a3), array_product(a4), array_product(a5), array_product(a6), array_product(a7), array_product(a8) from ${tableName} order by k1" + qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3), array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8), array_min(a9), array_min(a10), array_min(a11), array_min(a12), array_min(a13), array_min(a14), array_min(a15), array_min(a16) from ${tableName} order by k1" + qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3), array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8), array_max(a9), array_max(a10), array_max(a11), array_max(a12), array_max(a13), array_max(a14), array_max(a15), array_max(a16)from ${tableName} order by k1" + qt_select "SELECT k1, array_avg(a1), array_avg(a2), array_avg(a3), array_avg(a4), array_avg(a5), array_avg(a6), array_avg(a7), array_avg(a8), array_avg(a13), array_avg(a14), array_avg(a15), array_avg(a16) from ${tableName} order by k1" + qt_select "SELECT k1, array_sum(a1), array_sum(a2), array_sum(a3), array_sum(a4), array_sum(a5), array_sum(a6), array_sum(a7), array_sum(a8), array_sum(a13), array_sum(a14), array_sum(a15), array_sum(a16) from ${tableName} order by k1" + qt_select "SELECT k1, array_product(a1), array_product(a2), array_product(a3), array_product(a4), array_product(a5), array_product(a6), array_product(a7), array_product(a8), array_product(a13), array_product(a14), array_product(a15), array_product(a16) from ${tableName} order by k1" } diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy index e178eb6e65..5c08acdbec 100644 --- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy +++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy @@ -31,7 +31,9 @@ suite("test_array_functions") { `k8` ARRAY NULL COMMENT "", `k9` ARRAY NULL COMMENT "", `k10` ARRAY NULL COMMENT "", - `k11` ARRAY NULL COMMENT "" + `k11` ARRAY NULL COMMENT "", + `k12` ARRAY NULL COMMENT "", + `k13` ARRAY NULL COMMENT "" ) ENGINE=OLAP DUPLICATE KEY(`k1`) DISTRIBUTED BY HASH(`k1`) BUCKETS 1 @@ -40,43 +42,52 @@ suite("test_array_functions") { "storage_format" = "V2" ) """ - sql """ INSERT INTO ${tableName} VALUES(1,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13"],["2015-03-13 12:36:38"],["2023-02-05","2023-02-06"],["2023-02-07","2023-02-06"],['2022-10-15 10:30:00.999', '2022-08-31 12:00:00.999'],['2022-10-16 10:30:00.999', '2022-08-31 12:00:00.999']) """ - sql """ INSERT INTO ${tableName} VALUES(2,[4],NULL,[5],["hi2"],NULL,NULL,["2023-01-05","2023-01-06"],["2023-01-07","2023-01-06"],['2022-11-15 10:30:00.999', '2022-01-31 12:00:00.999'],['2022-11-16 10:30:00.999', '2022-01-31 12:00:00.999']) """ - sql """ INSERT INTO ${tableName} VALUES(3,[],[],NULL,["hi3"],NULL,NULL,NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(4,[1,2,3,4,5,4,3,2,1],[],[],NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(5,[],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(6,[1,2,3,4,5,4,3,2,1],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(7,[8,9,NULL,10,NULL],["f",NULL,"g",NULL,"h"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(8,[1,2,3,3,4,4,NULL],["a","b","b","b"],[1,2,2,3],["hi","hi","hello"],["2015-03-13"],["2015-03-13 12:36:38"],NULL,NULL,NULL,NULL) """ - sql """ INSERT INTO ${tableName} VALUES(9,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13","2015-03-13","2015-03-14"],["2015-03-13 12:36:38","2015-03-13 12:36:38"],NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(1,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13"],["2015-03-13 12:36:38"],["2023-02-05","2023-02-06"],["2023-02-07","2023-02-06"],['2022-10-15 10:30:00.999', '2022-08-31 12:00:00.999'],['2022-10-16 10:30:00.999', '2022-08-31 12:00:00.999'],[111.111, 222.222],[222.222, 333.333]) """ + sql """ INSERT INTO ${tableName} VALUES(2,[4],NULL,[5],["hi2"],NULL,NULL,["2023-01-05","2023-01-06"],["2023-01-07","2023-01-06"],['2022-11-15 10:30:00.999', '2022-01-31 12:00:00.999'],['2022-11-16 10:30:00.999', '2022-01-31 12:00:00.999'],[3333.3333, 4444.4444],[4444.4444, 5555.5555]) """ + sql """ INSERT INTO ${tableName} VALUES(3,[],[],NULL,["hi3"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(4,[1,2,3,4,5,4,3,2,1],[],[],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(5,[],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(6,[1,2,3,4,5,4,3,2,1],["a","b","c","d","c","b","a"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(7,[8,9,NULL,10,NULL],["f",NULL,"g",NULL,"h"],NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(8,[1,2,3,3,4,4,NULL],["a","b","b","b"],[1,2,2,3],["hi","hi","hello"],["2015-03-13"],["2015-03-13 12:36:38"],NULL,NULL,NULL,NULL,NULL,NULL) """ + sql """ INSERT INTO ${tableName} VALUES(9,[1,2,3],["a","b",""],[1,2],["hi"],["2015-03-13","2015-03-13","2015-03-14"],["2015-03-13 12:36:38","2015-03-13 12:36:38"],NULL,NULL,NULL,NULL,NULL,NULL) """ qt_select "SELECT k1, size(k2), size(k3) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, cardinality(k2), cardinality(k3) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, arrays_overlap(k2, k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, arrays_overlap(k8, k9) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, arrays_overlap(k10, k11) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, arrays_overlap(k12, k13) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_distinct(k2), array_distinct(k3) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_distinct(k8), array_distinct(k10) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_distinct(k12) FROM ${tableName} ORDER BY k1" qt_select "SELECT array_remove(k2, k1), k1 FROM ${tableName} ORDER BY k1" qt_select "SELECT array_remove(k8, cast('2023-02-05' as datev2)) FROM ${tableName} ORDER BY k1" qt_select "SELECT array_remove(k10, cast('2022-10-15 10:30:00.999' as datetimev2(3))) FROM ${tableName} ORDER BY k1" + qt_select "SELECT array_remove(k12, cast(111.111 as decimalv3(6,3))) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_sort(k2), array_sort(k3), array_sort(k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_sort(k8), array_sort(k10) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_sort(k12) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_union(k2, k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_union(k8, k9) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_union(k10, k11) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_union(k12, k13) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_except(k2, k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_except(k8, k9) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_except(k10, k11) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_except(k12, k13) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_intersect(k2, k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_intersect(k8, k9) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_intersect(k10, k11) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_intersect(k12, k13) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_slice(k2, 2) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_slice(k2, 1, 2) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_slice(k8, 1, 2) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_slice(k10, 1, 2) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_slice(k12, 1, 2) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, reverse(k2), reverse(k3), reverse(k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, reverse(k8), reverse(k10) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, reverse(k12) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_join(k2, '_', 'null'), array_join(k3, '-', 'null') FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_contains(k2, 1) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_contains(k3, 'a') FROM ${tableName} ORDER BY k1" @@ -87,12 +98,14 @@ suite("test_array_functions") { qt_select "SELECT k1, array_contains(k6, null) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_contains(k8, cast('2023-02-05' as datev2)) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_contains(k10, cast('2022-10-15 10:30:00.999' as datetimev2(3))) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_contains(k12, cast(111.111 as decimalv3(6,3))) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k2) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k5) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k6) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k7) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k8) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate(k10) from ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_enumerate(k12) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate_uniq(k2) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate_uniq(k5) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_enumerate_uniq(k6) from ${tableName} ORDER BY k1" @@ -105,12 +118,14 @@ suite("test_array_functions") { qt_select "SELECT k1, array_popback(k7) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popback(k8) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popback(k10) from ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_popback(k12) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k2) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k5) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k6) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k7) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k8) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_popfront(k10) from ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_popfront(k12) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_with_constant(3, k1) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_with_constant(10, null) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_with_constant(2, 'a') from ${tableName} ORDER BY k1" @@ -127,11 +142,13 @@ suite("test_array_functions") { qt_select "SELECT k1, array_position(k6, null) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_position(k8, cast('2023-02-05' as datev2)) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_position(k10, cast('2022-10-15 10:30:00.999' as datetimev2(3))) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_position(k12, cast(111.111 as decimalv3(6,3))) FROM ${tableName} ORDER BY k1" qt_select_array "SELECT k1, array(k1), array_contains(array(k1), k1) from ${tableName} ORDER BY k1" qt_select "SELECT k1, array_concat(k2, k4) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_concat(k2, [1, null, 2], k4, [null]) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_concat(k8, k9) FROM ${tableName} ORDER BY k1" qt_select "SELECT k1, array_concat(k10, k11, array(cast('2023-03-05 10:30:00.999' as datetimev2(3)))) FROM ${tableName} ORDER BY k1" + qt_select "SELECT k1, array_concat(k12, k13) FROM ${tableName} ORDER BY k1" def tableName2 = "tbl_test_array_range" sql """DROP TABLE IF EXISTS ${tableName2}""" diff --git a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy index 7cafdc54b6..5102c2b2cf 100644 --- a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy +++ b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions_by_literal.groovy @@ -28,6 +28,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_contains([true], false)" qt_sql "select array_contains(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast ('2023-02-04 22:07:34.999' as datetimev2(3)))" qt_sql "select array_contains(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))" + qt_sql "select array_contains(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), cast (111.111 as decimalv3(6,3)))" // array_position function qt_sql "select array_position([1,2,3], 1)" @@ -46,6 +47,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_position([false, NULL, true], true)" qt_sql "select array_position(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast ('2023-02-04 22:07:34.999' as datetimev2(3)))" qt_sql "select array_position(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))" + qt_sql "select array_position(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), cast (111.111 as decimalv3(6,3)))" // element_at function qt_sql "select element_at([1,2,3], 1)" @@ -59,6 +61,7 @@ suite("test_array_functions_by_literal") { qt_sql "select element_at([true, NULL, false], 2)" qt_sql "select element_at(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), 1)" qt_sql "select element_at(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)), 2)" + qt_sql "select element_at(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), 1)" // array subscript function qt_sql "select [1,2,3][1]" @@ -72,6 +75,7 @@ suite("test_array_functions_by_literal") { qt_sql "select [true, false]" qt_sql "select (array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))[2]" qt_sql "select (array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)))[2]" + qt_sql "select (array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))[2]" // array_aggregation function qt_sql "select array_avg([1,2,3])" @@ -100,6 +104,11 @@ suite("test_array_functions_by_literal") { qt_sql "select array_max(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))" qt_sql "select array_min(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)))" qt_sql "select array_max(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)))" + qt_sql "select array_avg(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" + qt_sql "select array_sum(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" + qt_sql "select array_min(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" + qt_sql "select array_max(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" + qt_sql "select array_product(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" // array_distinct function qt_sql "select array_distinct([1,1,2,2,3,3])" @@ -113,6 +122,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_distinct([1, 0, 0, null])" qt_sql "select array_distinct(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))" qt_sql "select array_distinct(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2),cast ('2023-02-05' as datev2)))" + qt_sql "select array_distinct(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" // array_remove function @@ -123,6 +133,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_remove([true, false, false], false)" qt_sql "select array_remove(array(cast ('2023-02-04 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))), cast ('2023-02-04 22:07:34.999' as datetimev2(3)))" qt_sql "select array_remove(array(cast ('2023-02-04' as datev2),cast ('2023-02-05' as datev2)), cast ('2023-02-05' as datev2))" + qt_sql "select array_remove(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), cast (111.111 as decimalv3(6,3)))" // array_sort function qt_sql "select array_sort([1,2,3])" @@ -135,6 +146,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_sort([])" qt_sql "select array_sort(array(cast ('2023-02-06 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))" qt_sql "select array_sort(array(cast ('2023-02-06' as datev2),cast ('2023-02-05' as datev2)))" + qt_sql "select array_sort(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" // array_overlap function qt_sql "select arrays_overlap([1,2,3], [4,5,6])" @@ -146,6 +158,7 @@ suite("test_array_functions_by_literal") { qt_sql "select arrays_overlap(array(cast ('2023-02-06 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))),array(cast ('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-08 23:07:34.999' as datetimev2(3))))" qt_sql "select arrays_overlap(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" qt_sql "select arrays_overlap(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast ('2023-02-08' as datev2)))" + qt_sql "select arrays_overlap(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), array(cast (222.222 as decimalv3(6,3)),cast (333.333 as decimalv3(6,3))))" // array_binary function qt_sql "select array_union([1,2,3], [2,3,4])" @@ -175,6 +188,9 @@ suite("test_array_functions_by_literal") { qt_sql "select array_union(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" qt_sql "select array_except(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" qt_sql "select array_intersect(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)), array(cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" + qt_sql "select array_union(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), array(cast (222.222 as decimalv3(6,3)),cast (333.333 as decimalv3(6,3))))" + qt_sql "select array_except(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), array(cast (222.222 as decimalv3(6,3)),cast (333.333 as decimalv3(6,3))))" + qt_sql "select array_intersect(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), array(cast (222.222 as decimalv3(6,3)),cast (333.333 as decimalv3(6,3))))" // array_slice function qt_sql "select [1,2,3][1:1]" @@ -188,6 +204,7 @@ suite("test_array_functions_by_literal") { qt_sql "select [true, false, false][2:]" qt_sql "select (array(cast ('2023-02-06 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))[1:2]" qt_sql "select (array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2)))[1:2]" + qt_sql "select (array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))[1:2]" // array_popfront function qt_sql "select array_popfront([1,2,3,4,5,6])" @@ -201,6 +218,7 @@ suite("test_array_functions_by_literal") { qt_sql "select array_popfront(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2), cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" qt_sql "select array_popfront(array(null, cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2), cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" qt_sql "select array_popfront(array(cast ('2023-02-06 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3)), cast ('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))" + qt_sql "select array_popfront(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" // array_join function qt_sql "select array_join([1, 2, 3], '_')" @@ -228,6 +246,8 @@ suite("test_array_functions_by_literal") { qt_sql "select array_compact(['2015-03-13','2015-03-13'])" qt_sql "select array_compact(array(cast ('2023-02-06 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3)), cast ('2023-02-07 22:07:34.999' as datetimev2(3)),cast ('2023-02-04 23:07:34.999' as datetimev2(3))))" qt_sql "select array_compact(array(cast ('2023-02-06' as datev2), cast ('2023-02-05' as datev2), cast ('2023-02-07' as datev2), cast ('2023-02-05' as datev2)))" + qt_sql "select array_compact(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3)),cast (333.333 as decimalv3(6,3))))" + qt_sql "select array_compact(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))))" // array_apply qt_sql """select array_apply([1000000, 1000001, 1000002], '=', 1000002)""" @@ -235,6 +255,7 @@ suite("test_array_functions_by_literal") { qt_sql """select array_apply(cast(array("2020-01-02", "2022-01-03", "2021-01-01", "1996-04-17") as array), ">", '2020-01-02')""" qt_sql """select array_apply(array(cast (24.99 as decimal(10,3)),cast (25.99 as decimal(10,3))), ">", '25')""" qt_sql """select array_apply(array(cast (24.99 as decimal(10,3)),cast (25.99 as decimal(10,3))), "!=", '25.99')""" + qt_sql """select array_apply(array(cast (111.111 as decimalv3(6,3)),cast (222.222 as decimalv3(6,3))), ">", '111.111')""" qt_sql "select array_concat([1, 2, 3], [2, 3, 4], [8, 1, 2], [9])" qt_sql "select array_concat([12, 23], [25, null], [null], [66])"