[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:
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
Reference in New Issue
Block a user