From d0eea3886d3d1952ce98d8a5aa72799de7be3742 Mon Sep 17 00:00:00 2001 From: Ashin Gau Date: Tue, 2 Jul 2024 15:32:52 +0800 Subject: [PATCH] [fix](multi-catalog) Revert #36575 and check nullptr of data column (#37086) Revert #36575, because `VScanner::get_block` will check `DCHECK(block->rows() == 0)`, so block should be cleared when `eof = true`. --- be/src/vec/core/block.cpp | 6 ++++-- be/src/vec/exec/format/orc/vorc_reader.cpp | 2 ++ be/src/vec/exec/format/parquet/vparquet_reader.cpp | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/be/src/vec/core/block.cpp b/be/src/vec/core/block.cpp index 39f952c837..dd1a659ae1 100644 --- a/be/src/vec/core/block.cpp +++ b/be/src/vec/core/block.cpp @@ -704,8 +704,10 @@ void Block::clear_column_data(int column_size) noexcept { } } for (auto& d : data) { - DCHECK_EQ(d.column->use_count(), 1) << " " << print_use_count(); - (*std::move(d.column)).assume_mutable()->clear(); + if (d.column) { + DCHECK_EQ(d.column->use_count(), 1) << " " << print_use_count(); + (*std::move(d.column)).assume_mutable()->clear(); + } } row_same_bit.clear(); } diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index 6e4f5674e2..16909f0023 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -1594,6 +1594,7 @@ Status OrcReader::get_next_block_impl(Block* block, size_t* read_rows, bool* eof } catch (std::exception& e) { std::string _err_msg = e.what(); if (_io_ctx && _io_ctx->should_stop && _err_msg == "stop") { + block->clear_column_data(); *eof = true; *read_rows = 0; return Status::OK(); @@ -1663,6 +1664,7 @@ Status OrcReader::get_next_block_impl(Block* block, size_t* read_rows, bool* eof } catch (std::exception& e) { std::string _err_msg = e.what(); if (_io_ctx && _io_ctx->should_stop && _err_msg == "stop") { + block->clear_column_data(); *eof = true; *read_rows = 0; return Status::OK(); diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_reader.cpp index db3399eb0d..f99786dc6e 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_reader.cpp @@ -525,6 +525,7 @@ Status ParquetReader::get_next_block(Block* block, size_t* read_rows, bool* eof) Status batch_st = _current_group_reader->next_batch(block, _batch_size, read_rows, &_row_group_eof); if (batch_st.is()) { + block->clear_column_data(); _current_group_reader.reset(nullptr); *read_rows = 0; *eof = true;