[Fix](Exception) throw exception in defer may result std::terminate (… (#39007)
pick #38935
This commit is contained in:
@ -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();
|
||||
|
||||
Reference in New Issue
Block a user