[Fix](Exception) throw exception in defer may result std::terminate (… (#39007)

pick #38935
This commit is contained in:
lihangyu
2024-08-07 13:46:23 +08:00
committed by GitHub
parent 8cb5aa64f4
commit 7550fbaff7

View File

@ -103,11 +103,11 @@ private:
static Status get_element_column(const ColumnObject& src, const ColumnPtr& index_column,
ColumnPtr* result) {
std::string field_name = index_column->get_data_at(0).to_string();
Defer finalize([&]() { (*result)->assume_mutable()->finalize(); });
if (src.empty()) {
*result = ColumnObject::create(true);
// src subcolumns empty but src row count may not be 0
(*result)->assume_mutable()->insert_many_defaults(src.size());
(*result)->assume_mutable()->finalize();
return Status::OK();
}
if (src.is_scalar_variant() &&
@ -132,6 +132,7 @@ private:
}
}
*result = ColumnObject::create(true, type, std::move(result_column));
(*result)->assume_mutable()->finalize();
return Status::OK();
} else {
auto mutable_src = src.clone_finalized();
@ -173,6 +174,7 @@ private:
result_col->insert_many_defaults(src.size());
}
*result = result_col->get_ptr();
(*result)->assume_mutable()->finalize();
VLOG_DEBUG << "dump new object "
<< static_cast<const ColumnObject*>(result_col.get())->debug_string()
<< ", path " << path.get_path();