This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 6289f7e6059efcbdac3542ee9c103927c51e1957 Author: Qi Chen <[email protected]> AuthorDate: Sat Feb 3 20:17:24 2024 +0800 [Fix](multi-catalog) Fix truncate_char_or_varchar_column crash. (#30731) --- be/src/vec/exec/scan/vfile_scanner.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/be/src/vec/exec/scan/vfile_scanner.cpp b/be/src/vec/exec/scan/vfile_scanner.cpp index 2dbef651bf3..76d7bc12ce6 100644 --- a/be/src/vec/exec/scan/vfile_scanner.cpp +++ b/be/src/vec/exec/scan/vfile_scanner.cpp @@ -698,6 +698,11 @@ Status VFileScanner::_truncate_char_or_varchar_columns(Block* block) { void VFileScanner::_truncate_char_or_varchar_column(Block* block, int idx, int len) { auto int_type = std::make_shared<DataTypeInt32>(); size_t num_columns_without_result = block->columns(); + const ColumnNullable* col_nullable = + assert_cast<const ColumnNullable*>(block->get_by_position(idx).column.get()); + const ColumnPtr& string_column_ptr = col_nullable->get_nested_column_ptr(); + ColumnPtr null_map_column_ptr = col_nullable->get_null_map_column_ptr(); + block->replace_by_position(idx, std::move(string_column_ptr)); block->insert({int_type->create_column_const(block->rows(), to_field(1)), int_type, "const 1"}); // pos is 1 block->insert({int_type->create_column_const(block->rows(), to_field(len)), int_type, @@ -708,8 +713,11 @@ void VFileScanner::_truncate_char_or_varchar_column(Block* block, int idx, int l temp_arguments[1] = num_columns_without_result; // pos temp_arguments[2] = num_columns_without_result + 1; // len size_t result_column_id = num_columns_without_result + 2; + SubstringUtil::substring_execute(*block, temp_arguments, result_column_id, block->rows()); - block->replace_by_position(idx, block->get_by_position(result_column_id).column); + auto res = ColumnNullable::create(block->get_by_position(result_column_id).column, + null_map_column_ptr); + block->replace_by_position(idx, std::move(res)); Block::erase_useless_column(block, num_columns_without_result); } @@ -1149,4 +1157,4 @@ void VFileScanner::try_stop() { } } -} // namespace doris::vectorized \ No newline at end of file +} // namespace doris::vectorized --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
