[to #48696881] remove free_session_var call in package

This commit is contained in:
obdev
2023-03-28 09:11:12 +00:00
committed by ob-robot
parent 3a063b1508
commit 26ddc2614d
2 changed files with 8 additions and 5 deletions

View File

@ -758,14 +758,16 @@ int ObPLPackageManager::set_package_var_val(const ObPLResolveCtx &resolve_ctx,
LOG_WARN("not null check violated", K(var->is_not_null()), K(var_val.is_null()), K(ret));
}
OZ (package_state->set_package_var_val(var_idx, new_var_val, !need_deserialize));
if (OB_NOT_NULL(var) && var->get_type().is_cursor_type() && !var->get_type().is_cursor_var()) {
// package ref cursor variable, refrence outside, do not destruct it.
} else if (OB_FAIL(ret)) {
OZ (ObUserDefinedType::destruct_obj(new_var_val, &(resolve_ctx.session_info_)));
} else {
OZ (ObUserDefinedType::destruct_obj(old_var_val, &(resolve_ctx.session_info_)));
}
if (!need_deserialize) {
OZ (package_state->update_changed_vars(var_idx));
}
OZ (var->get_type().free_session_var(resolve_ctx,
var->get_type().is_cursor_type() ?
package_state->get_pkg_cursor_allocator()
: package_state->get_pkg_allocator(),
old_var_val), K(package_id), K(var_idx), K(var_val));
return ret;
}

View File

@ -4324,6 +4324,7 @@ int ObSPIService::spi_extend_collection(pl::ObPLExecCtx *ctx,
for (int64_t j = coll_cnt - n; OB_SUCC(ret) && j < coll_cnt; ++j) {
if (ith_elem.is_pl_extend()) {
CK (OB_NOT_NULL(table->get_allocator()));
OZ (ObUserDefinedType::destruct_obj(data[j], ctx->exec_ctx_->get_my_session()));
OZ (ObUserDefinedType::deep_copy_obj(*(table->get_allocator()), ith_elem, data[j]));
} else {
new (&(data[j]))ObObj(ith_elem);