[Bug](excution) avoid core dump on filter_block_internal and add debug information (#21433)

avoid core dump on filter_block_internal and add debug information
This commit is contained in:
Pxl
2023-07-03 18:10:30 +08:00
committed by GitHub
parent 63b170251e
commit f7c724f8a3
2 changed files with 21 additions and 2 deletions

View File

@ -701,6 +701,12 @@ void Block::filter_block_internal(Block* block, const std::vector<uint32_t>& col
if (column->size() != count) {
if (column->is_exclusive()) {
const auto result_size = column->assume_mutable()->filter(filter);
if (result_size != count) {
throw Exception(ErrorCode::INTERNAL_ERROR,
"result_size not euqal with filter_size, result_size={}, "
"filter_size={}",
result_size, count);
}
CHECK_EQ(result_size, count);
} else {
column = column->filter(filter, count);

View File

@ -245,8 +245,21 @@ Status VExprContext::execute_conjuncts_and_filter_block(
std::move(*block->get_by_position(col).column).assume_mutable()->clear();
}
} else {
RETURN_IF_CATCH_EXCEPTION(
Block::filter_block_internal(block, columns_to_filter, result_filter));
try {
Block::filter_block_internal(block, columns_to_filter, result_filter);
} catch (const Exception& e) {
std::string str;
for (auto ctx : ctxs) {
if (str.length()) {
str += ",";
}
str += ctx->root()->debug_string();
}
return Status::InternalError(
"filter_block_internal meet exception, exprs=[{}], exception={}", str,
e.what());
}
}
Block::erase_useless_column(block, column_to_keep);
return Status::OK();