to issue<49484128>:fix a core when using dynamic sql bulk into
This commit is contained in:
@ -2616,6 +2616,8 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
|
|||||||
session->set_query_start_time(ObTimeUtility::current_time());
|
session->set_query_start_time(ObTimeUtility::current_time());
|
||||||
bool is_retry = false;
|
bool is_retry = false;
|
||||||
do {
|
do {
|
||||||
|
ObArenaAllocator allocator;
|
||||||
|
ParamStore exec_params( (ObWrapperAllocator(allocator)) );
|
||||||
ObWaitEventDesc max_wait_desc;
|
ObWaitEventDesc max_wait_desc;
|
||||||
ObWaitEventStat total_wait_desc;
|
ObWaitEventStat total_wait_desc;
|
||||||
const bool enable_perf_event = lib::is_diagnose_info_enabled();
|
const bool enable_perf_event = lib::is_diagnose_info_enabled();
|
||||||
@ -2643,8 +2645,6 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
|
|||||||
OX (retry_ctrl.set_tenant_local_schema_version(tenant_version));
|
OX (retry_ctrl.set_tenant_local_schema_version(tenant_version));
|
||||||
OX (retry_ctrl.set_sys_local_schema_version(sys_version));
|
OX (retry_ctrl.set_sys_local_schema_version(sys_version));
|
||||||
OX (spi_result.get_sql_ctx().schema_guard_ = &spi_result.get_scheme_guard());
|
OX (spi_result.get_sql_ctx().schema_guard_ = &spi_result.get_scheme_guard());
|
||||||
ObArenaAllocator allocator;
|
|
||||||
ParamStore exec_params( (ObWrapperAllocator(allocator)) );
|
|
||||||
|
|
||||||
bool is_inner_session = session->is_inner();
|
bool is_inner_session = session->is_inner();
|
||||||
ObSQLSessionInfo::SessionType old_session_type = session->get_session_type();
|
ObSQLSessionInfo::SessionType old_session_type = session->get_session_type();
|
||||||
@ -2661,7 +2661,19 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
|
|||||||
} else {
|
} else {
|
||||||
for (int64_t i = 0; OB_SUCC(ret) && i < exec_param_cnt; ++i) {
|
for (int64_t i = 0; OB_SUCC(ret) && i < exec_param_cnt; ++i) {
|
||||||
CK (OB_NOT_NULL(params[i]));
|
CK (OB_NOT_NULL(params[i]));
|
||||||
OZ (exec_params.push_back(*params[i]), *params[i]);
|
if (OB_SUCC(ret)) {
|
||||||
|
ObObjParam new_param = *params[i];
|
||||||
|
if (params[i]->is_pl_extend()) {
|
||||||
|
if (params[i]->get_meta().get_extend_type() != PL_REF_CURSOR_TYPE) {
|
||||||
|
new_param.set_int_value(0);
|
||||||
|
OZ (pl::ObUserDefinedType::deep_copy_obj(allocator, *params[i], new_param, true));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
OZ (deep_copy_obj(allocator, *params[i], new_param));
|
||||||
|
}
|
||||||
|
OX (new_param.set_need_to_check_type(true));
|
||||||
|
OZ (exec_params.push_back(new_param), new_param);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LOG_INFO("execute dynamic sql using", K(ps_sql), K(exec_params));
|
LOG_INFO("execute dynamic sql using", K(ps_sql), K(exec_params));
|
||||||
OZ (GCTX.sql_engine_->handle_pl_execute(
|
OZ (GCTX.sql_engine_->handle_pl_execute(
|
||||||
@ -2764,6 +2776,7 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
|
|||||||
LOG_WARN("close result set failed", K(ret), K(close_ret));
|
LOG_WARN("close result set failed", K(ret), K(close_ret));
|
||||||
}
|
}
|
||||||
ret = OB_SUCCESS == ret ? close_ret : ret;
|
ret = OB_SUCCESS == ret ? close_ret : ret;
|
||||||
|
spi_result.destruct_exec_params(*session);
|
||||||
is_retry = true;
|
is_retry = true;
|
||||||
} while (RETRY_TYPE_NONE != retry_ctrl.get_retry_type()); //SPI只做LOCAL重试
|
} while (RETRY_TYPE_NONE != retry_ctrl.get_retry_type()); //SPI只做LOCAL重试
|
||||||
session->get_retry_info_for_update().clear();
|
session->get_retry_info_for_update().clear();
|
||||||
|
|||||||
Reference in New Issue
Block a user