From 0b86536ba3ae6c3e4df92fe3b96a130e17240bd4 Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Wed, 1 Mar 2023 18:04:44 +0800 Subject: [PATCH 1/2] [vectorized](bug) fix array constructor function change origin column from block --- be/src/vec/functions/array/function_array_constructor.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/be/src/vec/functions/array/function_array_constructor.cpp b/be/src/vec/functions/array/function_array_constructor.cpp index fcb71eeede8cdb..54bb79c2e617de 100644 --- a/be/src/vec/functions/array/function_array_constructor.cpp +++ b/be/src/vec/functions/array/function_array_constructor.cpp @@ -61,11 +61,13 @@ class FunctionArrayConstructor : public IFunction { result_offset_col.resize(input_rows_count); // convert to nullable column + ColumnPtr arg[num_element]; for (size_t i = 0; i < num_element; ++i) { auto& col = block.get_by_position(arguments[i]).column; col = col->convert_to_full_column_if_const(); + arg[i] = col; if (result_nested_col.is_nullable() && !col->is_nullable()) { - col = ColumnNullable::create(col, ColumnUInt8::create(col->size(), 0)); + arg[i] = ColumnNullable::create(col, ColumnUInt8::create(col->size(), 0)); } } @@ -73,7 +75,7 @@ class FunctionArrayConstructor : public IFunction { ColumnArray::Offset64 offset = 0; for (size_t row = 0; row < input_rows_count; ++row) { for (size_t idx = 0; idx < num_element; ++idx) { - result_nested_col.insert_from(*block.get_by_position(arguments[idx]).column, row); + result_nested_col.insert_from(*arg[idx], row); } offset += num_element; result_offset_col[row] = offset; From bf8e01b7942a57b6a1f52d08218cb3b99170eb4c Mon Sep 17 00:00:00 2001 From: zhangstar333 <2561612514@qq.com> Date: Thu, 2 Mar 2023 11:06:30 +0800 Subject: [PATCH 2/2] add test --- .../array_functions/test_array_functions.out | 11 +++++++++++ .../array_functions/test_array_functions.groovy | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) 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 0aa8122714f282..e631432cc0b9ed 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 @@ -714,6 +714,17 @@ 8 \N 9 \N +-- !select_array -- +1 [1] true +2 [2] true +3 [3] true +4 [4] true +5 [5] true +6 [6] true +7 [7] true +8 [8] true +9 [9] true + -- !select -- \N \N -1 \N 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 f4edcba8ea7230..e0d560f7c568d9 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 @@ -115,7 +115,8 @@ 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_array "SELECT k1, array(k1), array_contains(array(k1), k1) from ${tableName} ORDER BY k1" + def tableName2 = "tbl_test_array_range" sql """DROP TABLE IF EXISTS ${tableName2}""" sql """