diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index 4d41830668960c..26e41afe3c901a 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -1211,8 +1211,8 @@ Status OrcReader::_fill_missing_columns( for (auto& kv : missing_columns) { if (kv.second == nullptr) { // no default column, fill with null - auto nullable_column = reinterpret_cast( - (*std::move(block->get_by_name(kv.first).column)).mutate().get()); + auto mutable_column = block->get_by_name(kv.first).column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); nullable_column->insert_many_defaults(rows); } else { // fill with default value @@ -1226,8 +1226,9 @@ Status OrcReader::_fill_missing_columns( // call resize because the first column of _src_block_ptr may not be filled by reader, // so _src_block_ptr->rows() may return wrong result, cause the column created by `ctx->execute()` // has only one row. - std::move(*block->get_by_position(result_column_id).column).mutate()->resize(rows); auto result_column_ptr = block->get_by_position(result_column_id).column; + auto mutable_column = result_column_ptr->assume_mutable(); + mutable_column->resize(rows); // result_column_ptr maybe a ColumnConst, convert it to a normal column result_column_ptr = result_column_ptr->convert_to_full_column_if_const(); auto origin_column_type = block->get_by_name(kv.first).type; diff --git a/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp index d09b1a261abd81..fd3200b36404ce 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_column_reader.cpp @@ -590,8 +590,8 @@ Status ArrayColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; if (doris_column->is_nullable()) { - auto* nullable_column = reinterpret_cast( - (*std::move(doris_column)).mutate().get()); + auto mutable_column = doris_column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); null_map_ptr = &nullable_column->get_null_map_data(); data_column = nullable_column->get_nested_column_ptr(); } else { @@ -641,8 +641,8 @@ Status MapColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr& t MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; if (doris_column->is_nullable()) { - auto* nullable_column = reinterpret_cast( - (*std::move(doris_column)).mutate().get()); + auto mutable_column = doris_column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); null_map_ptr = &nullable_column->get_null_map_data(); data_column = nullable_column->get_nested_column_ptr(); } else { @@ -710,8 +710,8 @@ Status StructColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr MutableColumnPtr data_column; NullMap* null_map_ptr = nullptr; if (doris_column->is_nullable()) { - auto* nullable_column = reinterpret_cast( - (*std::move(doris_column)).mutate().get()); + auto mutable_column = doris_column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); null_map_ptr = &nullable_column->get_null_map_data(); data_column = nullable_column->get_nested_column_ptr(); } else { @@ -792,8 +792,8 @@ Status StructColumnReader::read_column_data(ColumnPtr& doris_column, DataTypePtr auto& doris_field = doris_struct.get_column_ptr(idx); auto& doris_type = const_cast(doris_struct_type->get_element(idx)); DCHECK(doris_type->is_nullable()); - auto* nullable_column = reinterpret_cast( - (*std::move(doris_field)).mutate().get()); + auto mutable_column = doris_field->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); nullable_column->insert_null_elements(missing_column_sz); } diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index b9259be936bb31..0c44b087ac36ba 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -678,8 +678,8 @@ Status RowGroupReader::_fill_missing_columns( for (auto& kv : missing_columns) { if (kv.second == nullptr) { // no default column, fill with null - auto nullable_column = reinterpret_cast( - (*std::move(block->get_by_name(kv.first).column)).mutate().get()); + auto mutable_column = block->get_by_name(kv.first).column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); nullable_column->insert_many_defaults(rows); } else { // fill with default value @@ -693,8 +693,9 @@ Status RowGroupReader::_fill_missing_columns( // call resize because the first column of _src_block_ptr may not be filled by reader, // so _src_block_ptr->rows() may return wrong result, cause the column created by `ctx->execute()` // has only one row. - std::move(*block->get_by_position(result_column_id).column).mutate()->resize(rows); auto result_column_ptr = block->get_by_position(result_column_id).column; + auto mutable_column = result_column_ptr->assume_mutable(); + mutable_column->resize(rows); // result_column_ptr maybe a ColumnConst, convert it to a normal column result_column_ptr = result_column_ptr->convert_to_full_column_if_const(); auto origin_column_type = block->get_by_name(kv.first).type; diff --git a/be/src/vec/exec/scan/new_es_scanner.cpp b/be/src/vec/exec/scan/new_es_scanner.cpp index fae83854be0910..b19b009b314b53 100644 --- a/be/src/vec/exec/scan/new_es_scanner.cpp +++ b/be/src/vec/exec/scan/new_es_scanner.cpp @@ -132,7 +132,7 @@ Status NewEsScanner::_get_block_impl(RuntimeState* state, Block* block, bool* eo columns.resize(column_size); for (auto i = 0; i < column_size; i++) { if (mem_reuse) { - columns[i] = std::move(*block->get_by_position(i).column).mutate(); + columns[i] = block->get_by_position(i).column->assume_mutable(); } else { columns[i] = _tuple_desc->slots()[i]->get_empty_mutable_column(); } diff --git a/be/src/vec/exec/scan/vfile_scanner.cpp b/be/src/vec/exec/scan/vfile_scanner.cpp index 5b8e0c52fb2db4..4850220962278d 100644 --- a/be/src/vec/exec/scan/vfile_scanner.cpp +++ b/be/src/vec/exec/scan/vfile_scanner.cpp @@ -475,8 +475,8 @@ Status VFileScanner::_fill_missing_columns(size_t rows) { for (auto& kv : _missing_col_descs) { if (kv.second == nullptr) { // no default column, fill with null - auto nullable_column = reinterpret_cast( - (*std::move(_src_block_ptr->get_by_name(kv.first).column)).mutate().get()); + auto mutable_column = _src_block_ptr->get_by_name(kv.first).column->assume_mutable(); + auto* nullable_column = static_cast(mutable_column.get()); nullable_column->insert_many_defaults(rows); } else { // fill with default value @@ -490,10 +490,9 @@ Status VFileScanner::_fill_missing_columns(size_t rows) { // call resize because the first column of _src_block_ptr may not be filled by reader, // so _src_block_ptr->rows() may return wrong result, cause the column created by `ctx->execute()` // has only one row. - std::move(*_src_block_ptr->get_by_position(result_column_id).column) - .mutate() - ->resize(rows); auto result_column_ptr = _src_block_ptr->get_by_position(result_column_id).column; + auto mutable_column = result_column_ptr->assume_mutable(); + mutable_column->resize(rows); // result_column_ptr maybe a ColumnConst, convert it to a normal column result_column_ptr = result_column_ptr->convert_to_full_column_if_const(); auto origin_column_type = _src_block_ptr->get_by_name(kv.first).type; diff --git a/be/src/vec/exec/scan/vmeta_scanner.cpp b/be/src/vec/exec/scan/vmeta_scanner.cpp index 289930b16bce85..7fbc3ed2d37df5 100644 --- a/be/src/vec/exec/scan/vmeta_scanner.cpp +++ b/be/src/vec/exec/scan/vmeta_scanner.cpp @@ -96,7 +96,7 @@ Status VMetaScanner::_get_block_impl(RuntimeState* state, Block* block, bool* eo columns.resize(column_size); for (auto i = 0; i < column_size; i++) { if (mem_reuse) { - columns[i] = std::move(*block->get_by_position(i).column).mutate(); + columns[i] = block->get_by_position(i).column->assume_mutable(); } else { columns[i] = _tuple_desc->slots()[i]->get_empty_mutable_column(); }