[CP] [to #51586221] fix ObUserDefinedType::destruct_obj with set_null flag

This commit is contained in:
obdev 2023-08-17 09:44:20 +00:00 committed by ob-robot
parent 9b01ed202d
commit 642ee3ef30
4 changed files with 6 additions and 6 deletions

View File

@ -2502,7 +2502,7 @@ int ObPLExecState::set_var(int64_t var_idx, const ObObjParam& value)
&& params->at(var_idx).is_pl_extend()
&& params->at(var_idx).get_ext() != 0
&& params->at(var_idx).get_meta().get_extend_type() != PL_REF_CURSOR_TYPE) {
OZ (ObUserDefinedType::destruct_obj(params->at(var_idx), ctx_.exec_ctx_->get_my_session()));
OZ (ObUserDefinedType::destruct_obj(params->at(var_idx), ctx_.exec_ctx_->get_my_session(), false));
}
if (OB_FAIL(ret)) {

View File

@ -211,7 +211,7 @@ int ObPLPackageState::set_package_var_val(const int64_t var_idx, const ObObj &va
&& types_.at(var_idx) != PL_CURSOR_TYPE
&& types_.at(var_idx) != PL_REF_CURSOR_TYPE) {
CK (vars_.at(var_idx).get_ext() != 0);
OZ (ObUserDefinedType::destruct_obj(vars_.at(var_idx)));
OZ (ObUserDefinedType::destruct_obj(vars_.at(var_idx), NULL, false));
} else {
vars_.at(var_idx) = value;
}

View File

@ -312,7 +312,7 @@ int ObUserDefinedType::deep_copy_obj(
return ret;
}
int ObUserDefinedType::destruct_obj(ObObj &src, ObSQLSessionInfo *session)
int ObUserDefinedType::destruct_obj(ObObj &src, ObSQLSessionInfo *session, bool set_null)
{
int ret = OB_SUCCESS;
@ -337,7 +337,7 @@ int ObUserDefinedType::destruct_obj(ObObj &src, ObSQLSessionInfo *session)
for (int64_t i = 0; OB_SUCC(ret) && i < record->get_count(); ++i) {
OZ (destruct_obj(record->get_element()[i], session));
}
OX (record->set_null());
OX (set_null ? src.set_null() : record->set_null());
}
break;
#ifdef OB_BUILD_ORACLE_PL
@ -367,7 +367,7 @@ int ObUserDefinedType::destruct_obj(ObObj &src, ObSQLSessionInfo *session)
collection->set_count(-1);
collection->set_first(OB_INVALID_INDEX);
collection->set_last(OB_INVALID_INDEX);
collection->set_null();
set_null ? src.set_null() : collection->set_null();
}
}
}

View File

@ -143,7 +143,7 @@ public:
static int deep_copy_obj(
ObIAllocator &allocator, const ObObj &src, ObObj &dst, bool need_new_allocator = true, bool ignore_del_element = false);
static int destruct_obj(ObObj &src, sql::ObSQLSessionInfo *session = NULL);
static int destruct_obj(ObObj &src, sql::ObSQLSessionInfo *session = NULL, bool set_null = true);
static int serialize_obj(const ObObj &obj, char* buf, const int64_t len, int64_t& pos);
static int deserialize_obj(ObObj &obj, const char* buf, const int64_t len, int64_t& pos);
static int64_t get_serialize_obj_size(const ObObj &obj);