This is an automated email from the ASF dual-hosted git repository.
dataroaring 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 55c42da511 [Feature](array) Support array<decimalv3> data type (#16640)
55c42da511 is described below
commit 55c42da511af0f9a4f406cf34602308a678c0933
Author: abmdocrt <[email protected]>
AuthorDate: Mon Mar 13 10:48:13 2023 +0800
[Feature](array) Support array<decimalv3> data type (#16640)
---
be/src/vec/data_types/data_type_factory.hpp | 19 +++
.../functions/array/function_array_aggregation.cpp | 2 +
.../functions/array/function_array_difference.h | 3 +
.../vec/functions/array/function_array_distinct.h | 9 ++
.../vec/functions/array/function_array_element.h | 12 ++
be/src/vec/functions/array/function_array_index.h | 24 +++
be/src/vec/functions/array/function_array_join.h | 10 ++
be/src/vec/functions/array/function_array_remove.h | 19 +++
be/src/vec/functions/array/function_array_set.h | 3 +
be/src/vec/functions/array/function_array_sort.h | 10 ++
.../vec/functions/array/function_arrays_overlap.h | 14 +-
be/src/vec/functions/function.cpp | 65 ++++++++
be/src/vec/functions/function.h | 42 +-----
.../main/java/org/apache/doris/catalog/Type.java | 3 +
.../main/java/org/apache/doris/analysis/Expr.java | 19 +++
.../apache/doris/analysis/FunctionCallExpr.java | 38 ++++-
gensrc/script/doris_builtins_functions.py | 12 +-
.../test_aggregate_histogram.out | 8 +-
.../test_array_aggregation_functions.out | 40 ++---
.../array_functions/test_array_functions.out | 165 +++++++++++++++++++++
.../test_array_functions_by_literal.out | 63 ++++++++
.../test_array_aggregation_functions.groovy | 24 +--
.../array_functions/test_array_functions.groovy | 37 +++--
.../test_array_functions_by_literal.groovy | 21 +++
24 files changed, 574 insertions(+), 88 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 <mutex>
#include <string>
+#include <type_traits>
#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<const
DataTypeArray*>(type_ptr.get()))->get_nested_type();
+ auto nested_nullable_entity_ptr =
+ (assert_cast<const
DataTypeArray*>(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<Int128>(res, type, data, offsets) ||
execute_type<Float32>(res, type, data, offsets) ||
execute_type<Float64>(res, type, data, offsets) ||
+ execute_type<Decimal32>(res, type, data, offsets) ||
+ execute_type<Decimal64>(res, type, data, offsets) ||
execute_type<Decimal128>(res, type, data, offsets) ||
execute_type<Decimal128I>(res, type, data, offsets) ||
execute_type<Date>(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<ColumnDecimal64>(*nested_column)) {
res = _execute_number_expanded<Decimal64, Decimal64>(offsets,
*nested_column,
nested_null_map);
+ } else if (check_column<ColumnDecimal128I>(*nested_column)) {
+ res = _execute_number_expanded<Decimal128I, Decimal128I>(offsets,
*nested_column,
+
nested_null_map);
} else if (check_column<ColumnDecimal128>(*nested_column)) {
res = _execute_number_expanded<Decimal128, Decimal128>(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<ColumnDateTimeV2>(src_column, src_offsets,
dest_column,
dest_offsets,
src_null_map, dest_null_map);
+ } else if (which.is_decimal32()) {
+ res = _execute_number<ColumnDecimal32>(src_column, src_offsets,
dest_column,
+ dest_offsets, src_null_map,
dest_null_map);
+ } else if (which.is_decimal64()) {
+ res = _execute_number<ColumnDecimal64>(src_column, src_offsets,
dest_column,
+ dest_offsets, src_null_map,
dest_null_map);
+ } else if (which.is_decimal128i()) {
+ res = _execute_number<ColumnDecimal128I>(src_column, src_offsets,
dest_column,
+ dest_offsets,
src_null_map, dest_null_map);
} else if (which.is_decimal128()) {
res = _execute_number<ColumnDecimal128>(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<ColumnFloat64>(offsets, *nested_column,
src_null_map,
*arguments[1].column,
nested_null_map,
dst_null_map);
+ } else if (check_column<ColumnDecimal32>(*nested_column)) {
+ res = _execute_number<ColumnDecimal32>(offsets, *nested_column,
src_null_map,
+ *arguments[1].column,
nested_null_map,
+ dst_null_map);
+ } else if (check_column<ColumnDecimal64>(*nested_column)) {
+ res = _execute_number<ColumnDecimal64>(offsets, *nested_column,
src_null_map,
+ *arguments[1].column,
nested_null_map,
+ dst_null_map);
+ } else if (check_column<ColumnDecimal128I>(*nested_column)) {
+ res = _execute_number<ColumnDecimal128I>(offsets, *nested_column,
src_null_map,
+ *arguments[1].column,
nested_null_map,
+ dst_null_map);
} else if (check_column<ColumnDecimal128>(*nested_column)) {
res = _execute_number<ColumnDecimal128>(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<NestedColumnType, ColumnDateTimeV2>(
offsets, nested_null_map, nested_column, right_column,
right_nested_null_map,
outer_null_map);
+ } else if (check_column<ColumnDecimal32>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal32>(
+ offsets, nested_null_map, nested_column, right_column,
right_nested_null_map,
+ outer_null_map);
+ } else if (check_column<ColumnDecimal64>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal64>(
+ offsets, nested_null_map, nested_column, right_column,
right_nested_null_map,
+ outer_null_map);
+ } else if (check_column<ColumnDecimal128I>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal128I>(
+ offsets, nested_null_map, nested_column, right_column,
right_nested_null_map,
+ outer_null_map);
} else if (check_column<ColumnDecimal128>(right_column)) {
return _execute_number<NestedColumnType, ColumnDecimal128>(
offsets, nested_null_map, nested_column, right_column,
right_nested_null_map,
@@ -329,6 +341,18 @@ private:
return_column = _execute_number_expanded<ColumnFloat64>(
offsets, nested_null_map, *nested_column,
*right_column,
right_nested_null_map, array_null_map);
+ } else if (check_column<ColumnDecimal32>(*nested_column)) {
+ return_column = _execute_number_expanded<ColumnDecimal32>(
+ offsets, nested_null_map, *nested_column,
*right_column,
+ right_nested_null_map, array_null_map);
+ } else if (check_column<ColumnDecimal64>(*nested_column)) {
+ return_column = _execute_number_expanded<ColumnDecimal64>(
+ offsets, nested_null_map, *nested_column,
*right_column,
+ right_nested_null_map, array_null_map);
+ } else if (check_column<ColumnDecimal128I>(*nested_column)) {
+ return_column = _execute_number_expanded<ColumnDecimal128I>(
+ offsets, nested_null_map, *nested_column,
*right_column,
+ right_nested_null_map, array_null_map);
} else if (check_column<ColumnDecimal128>(*nested_column)) {
return_column = _execute_number_expanded<ColumnDecimal128>(
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<ColumnDateTimeV2>(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<ColumnDecimal32>(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<ColumnDecimal64>(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<ColumnDecimal128I>(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<ColumnDecimal128>(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<ColumnFloat64>(right_column)) {
return _execute_number<NestedColumnType, ColumnFloat64>(offsets,
nested_column,
right_column, nested_null_map);
+ } else if (check_column<ColumnDecimal32>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal32>(
+ offsets, nested_column, right_column, nested_null_map);
+ } else if (check_column<ColumnDecimal64>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal64>(
+ offsets, nested_column, right_column, nested_null_map);
+ } else if (check_column<ColumnDecimal128I>(right_column)) {
+ return _execute_number<NestedColumnType, ColumnDecimal128I>(
+ offsets, nested_column, right_column, nested_null_map);
} else if (check_column<ColumnDecimal128>(right_column)) {
return _execute_number<NestedColumnType, ColumnDecimal128>(
offsets, nested_column, right_column, nested_null_map);
@@ -326,6 +336,15 @@ private:
} else if (check_column<ColumnFloat64>(*nested_column)) {
res = _execute_number_expanded<ColumnFloat64>(offsets,
*nested_column,
*right_column,
nested_null_map);
+ } else if (check_column<ColumnDecimal32>(*nested_column)) {
+ res = _execute_number_expanded<ColumnDecimal32>(offsets,
*nested_column,
+ *right_column,
nested_null_map);
+ } else if (check_column<ColumnDecimal64>(*nested_column)) {
+ res = _execute_number_expanded<ColumnDecimal64>(offsets,
*nested_column,
+ *right_column,
nested_null_map);
+ } else if (check_column<ColumnDecimal128I>(*nested_column)) {
+ res = _execute_number_expanded<ColumnDecimal128I>(offsets,
*nested_column,
+
*right_column, nested_null_map);
} else if (check_column<ColumnDecimal128>(*nested_column)) {
res = _execute_number_expanded<ColumnDecimal128>(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<ColumnInt128>(dst, left_data, right_data) ||
_execute_internal<ColumnFloat32>(dst, left_data, right_data) ||
_execute_internal<ColumnFloat64>(dst, left_data, right_data) ||
+ _execute_internal<ColumnDecimal32>(dst, left_data, right_data) ||
+ _execute_internal<ColumnDecimal64>(dst, left_data, right_data) ||
+ _execute_internal<ColumnDecimal128I>(dst, left_data, right_data) ||
_execute_internal<ColumnDecimal128>(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<ColumnDateTimeV2>(src_column, src_offsets,
dest_column,
dest_offsets,
src_null_map, dest_null_map);
+ } else if (which.is_decimal32()) {
+ res = _execute_number<ColumnDecimal32>(src_column, src_offsets,
dest_column,
+ dest_offsets, src_null_map,
dest_null_map);
+ } else if (which.is_decimal64()) {
+ res = _execute_number<ColumnDecimal64>(src_column, src_offsets,
dest_column,
+ dest_offsets, src_null_map,
dest_null_map);
+ } else if (which.is_decimal128i()) {
+ res = _execute_number<ColumnDecimal128I>(src_column, src_offsets,
dest_column,
+ dest_offsets,
src_null_map, dest_null_map);
} else if (which.is_decimal128()) {
res = _execute_number<ColumnDecimal128>(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<ColumnDecimal128>(*left_exec_data.nested_col)) {
+ if (check_column<ColumnDecimal32>(*left_exec_data.nested_col)) {
+ ret = _execute_internal<ColumnDecimal32>(left_exec_data,
right_exec_data,
+ dst_null_map_data,
+
dst_nested_col->get_data().data());
+ } else if
(check_column<ColumnDecimal64>(*left_exec_data.nested_col)) {
+ ret = _execute_internal<ColumnDecimal64>(left_exec_data,
right_exec_data,
+ dst_null_map_data,
+
dst_nested_col->get_data().data());
+ } else if
(check_column<ColumnDecimal128I>(*left_exec_data.nested_col)) {
+ ret = _execute_internal<ColumnDecimal128I>(left_exec_data,
right_exec_data,
+ dst_null_map_data,
+
dst_nested_col->get_data().data());
+ } else if
(check_column<ColumnDecimal128>(*left_exec_data.nested_col)) {
ret = _execute_internal<ColumnDecimal128>(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<const
DataTypeArray*>(return_type_ptr.get()))->get_nested_type();
+ auto nested_nullable_func_return_type =
+ (assert_cast<const
DataTypeArray*>(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<DataTypeNothing> 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<Expr>
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<ArrayList<Expr>, 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 [...]
+{"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 [...]
-- !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","up [...]
+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","up [...]
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","upp [...]
-- !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","upp [...]
+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","upp [...]
-- !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","upp [...]
+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","upp [...]
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
-4 \N \N \N \N \N \N \N \N \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
-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
-4 \N \N \N \N \N \N \N \N \N
\N \N \N
+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
-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
+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 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
+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 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<date> NULL COMMENT "",
`a10` array<datetime> NULL COMMENT "",
`a11` array<datev2> NULL COMMENT "",
- `a12` array<datetimev2(3)> NULL COMMENT ""
+ `a12` array<datetimev2(3)> NULL COMMENT "",
+ `a13` array<decimalv3> NULL COMMENT "",
+ `a14` array<decimalv3(6, 3)> NULL COMMENT "",
+ `a15` array<decimalv3(10, 3)> NULL COMMENT "",
+ `a16` array<decimalv3(20, 3)> 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.3333 [...]
+ 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<datev2> NULL COMMENT "",
`k9` ARRAY<datev2> NULL COMMENT "",
`k10` ARRAY<datetimev2(3)> NULL COMMENT "",
- `k11` ARRAY<datetimev2(3)> NULL COMMENT ""
+ `k11` ARRAY<datetimev2(3)> NULL COMMENT "",
+ `k12` ARRAY<decimalv3(6, 3)> NULL COMMENT "",
+ `k13` ARRAY<decimalv3(6, 3)> 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<datetimev2>), ">", '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])"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]