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());
 | 
			
		||||
        bool is_retry = false;
 | 
			
		||||
        do {
 | 
			
		||||
          ObArenaAllocator allocator;
 | 
			
		||||
          ParamStore exec_params( (ObWrapperAllocator(allocator)) );
 | 
			
		||||
          ObWaitEventDesc max_wait_desc;
 | 
			
		||||
          ObWaitEventStat total_wait_desc;
 | 
			
		||||
          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_sys_local_schema_version(sys_version));
 | 
			
		||||
            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();
 | 
			
		||||
            ObSQLSessionInfo::SessionType old_session_type = session->get_session_type();
 | 
			
		||||
@ -2661,7 +2661,19 @@ int ObSPIService::spi_execute_immediate(ObPLExecCtx *ctx,
 | 
			
		||||
                } else {
 | 
			
		||||
                  for (int64_t i = 0; OB_SUCC(ret) && i < exec_param_cnt; ++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));
 | 
			
		||||
                  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));
 | 
			
		||||
          }
 | 
			
		||||
          ret = OB_SUCCESS == ret ? close_ret : ret;
 | 
			
		||||
          spi_result.destruct_exec_params(*session);
 | 
			
		||||
          is_retry = true;
 | 
			
		||||
        } while (RETRY_TYPE_NONE != retry_ctrl.get_retry_type()); //SPI只做LOCAL重试
 | 
			
		||||
        session->get_retry_info_for_update().clear();
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user