diff --git a/be/src/vec/functions/array/function_array_slice.h b/be/src/vec/functions/array/function_array_slice.h index 2acd1d3fbe1fd4..b65ccd3de00358 100644 --- a/be/src/vec/functions/array/function_array_slice.h +++ b/be/src/vec/functions/array/function_array_slice.h @@ -75,9 +75,11 @@ class FunctionArraySlice : public IFunction { auto offset_column = block.get_by_position(arguments[1]).column->convert_to_full_column_if_const(); ColumnPtr length_column = nullptr; + const ColumnInt64* length_column_int64 = nullptr; if (arguments.size() > 2) { length_column = block.get_by_position(arguments[2]).column->convert_to_full_column_if_const(); + length_column_int64 = assert_cast(length_column.get()); } // extract src array column ColumnArrayExecutionData src; @@ -92,7 +94,8 @@ class FunctionArraySlice : public IFunction { ColumnArrayMutableData dst = create_mutable_data(src.nested_col, is_nullable); dst.offsets_ptr->reserve(input_rows_count); // execute - slice_array(dst, src, *offset_column, length_column.get()); + const auto* offset_column_int64 = assert_cast(offset_column.get()); + slice_array(dst, src, *offset_column_int64, length_column_int64); ColumnPtr res_column = assemble_column_array(dst); block.replace_by_position(result, std::move(res_column)); return Status::OK(); diff --git a/be/src/vec/functions/array/function_array_utils.cpp b/be/src/vec/functions/array/function_array_utils.cpp index ab999aa21ccdd1..c0141bfc8d14fc 100644 --- a/be/src/vec/functions/array/function_array_utils.cpp +++ b/be/src/vec/functions/array/function_array_utils.cpp @@ -78,12 +78,12 @@ MutableColumnPtr assemble_column_array(ColumnArrayMutableData& data) { } void slice_array(ColumnArrayMutableData& dst, ColumnArrayExecutionData& src, - const IColumn& offset_column, const IColumn* length_column) { + const ColumnInt64& offset_column, const ColumnInt64* length_column) { size_t cur = 0; for (size_t row = 0; row < src.offsets_ptr->size(); ++row) { size_t off = (*src.offsets_ptr)[row - 1]; size_t len = (*src.offsets_ptr)[row] - off; - Int64 start = offset_column.get_int(row); + Int64 start = offset_column.get_element(row); if (len == 0 || start == 0) { dst.offsets_ptr->push_back(cur); continue; @@ -98,7 +98,7 @@ void slice_array(ColumnArrayMutableData& dst, ColumnArrayExecutionData& src, } Int64 end; if (length_column) { - Int64 size = length_column->get_int(row); + Int64 size = length_column->get_element(row); end = std::max((Int64)off, std::min((Int64)(off + len), start + size)); } else { end = off + len; diff --git a/be/src/vec/functions/array/function_array_utils.h b/be/src/vec/functions/array/function_array_utils.h index 36bf811b770899..938bfce08fade4 100644 --- a/be/src/vec/functions/array/function_array_utils.h +++ b/be/src/vec/functions/array/function_array_utils.h @@ -91,7 +91,7 @@ MutableColumnPtr assemble_column_array(ColumnArrayMutableData& data); // array[offset:length] void slice_array(ColumnArrayMutableData& dst, ColumnArrayExecutionData& src, - const IColumn& offset_column, const IColumn* length_column); + const ColumnInt64& offset_column, const ColumnInt64* length_column); using ColumnArrayExecutionDatas = std::vector; } // namespace doris::vectorized diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h b/be/src/vec/functions/function_date_or_datetime_computation.h index 90221e66c213a9..1ff3ca82dd5ed7 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.h +++ b/be/src/vec/functions/function_date_or_datetime_computation.h @@ -647,9 +647,10 @@ struct DateTimeAddIntervalImpl { col_to->get_data(), null_map->get_data(), delta_vec_column->get_data()); } else { - Op::constant_vector(sources_const->template get_value(), - col_to->get_data(), null_map->get_data(), - *not_nullable_column_ptr_arg1); + return Status::RuntimeError( + "Illegal column {} of first argument of function {}", + block.get_by_position(arguments[0]).column->get_name(), + Transform::name); } if (const auto* nullable_col = check_and_get_column( block.get_by_position(arguments[0]).column.get())) { @@ -677,9 +678,10 @@ struct DateTimeAddIntervalImpl { Op::constant_vector(sources_const->template get_value(), col_to->get_data(), delta_vec_column->get_data()); } else { - Op::constant_vector(sources_const->template get_value(), - col_to->get_data(), - *block.get_by_position(arguments[1]).column); + return Status::RuntimeError( + "Illegal column {} of first argument of function {}", + block.get_by_position(arguments[0]).column->get_name(), + Transform::name); } block.replace_by_position(result, std::move(col_to)); } diff --git a/be/src/vec/sink/vtablet_block_convertor.cpp b/be/src/vec/sink/vtablet_block_convertor.cpp index 26de6ea6c7e3d1..e9b8be6f922156 100644 --- a/be/src/vec/sink/vtablet_block_convertor.cpp +++ b/be/src/vec/sink/vtablet_block_convertor.cpp @@ -45,6 +45,7 @@ #include "vec/columns/column_nullable.h" #include "vec/columns/column_string.h" #include "vec/columns/column_struct.h" +#include "vec/columns/columns_number.h" #include "vec/common/assert_cast.h" #include "vec/core/block.h" #include "vec/core/types.h" @@ -532,6 +533,7 @@ Status OlapTableBlockConvertor::_fill_auto_inc_cols(vectorized::Block* block, si } else if (const auto* src_nullable_column = check_and_get_column(src_column_ptr)) { auto src_nested_column_ptr = src_nullable_column->get_nested_column_ptr(); + const auto* src_int_64 = assert_cast(src_nested_column_ptr.get()); const auto& null_map_data = src_nullable_column->get_null_map_data(); dst_values.reserve(rows); for (size_t i = 0; i < rows; i++) { @@ -545,7 +547,7 @@ Status OlapTableBlockConvertor::_fill_auto_inc_cols(vectorized::Block* block, si for (size_t i = 0; i < rows; i++) { dst_values.emplace_back((null_map_data[i] != 0) ? _auto_inc_id_allocator.next_id() - : src_nested_column_ptr->get_int(i)); + : src_int_64->get_element(i)); } } else { return Status::OK();