diff --git a/src/pl/ob_pl_resolver.cpp b/src/pl/ob_pl_resolver.cpp index fc2bd0f1ce..2cfa56ad15 100644 --- a/src/pl/ob_pl_resolver.cpp +++ b/src/pl/ob_pl_resolver.cpp @@ -11713,35 +11713,37 @@ int ObPLResolver::resolve_udf_info( #endif // adjust routine database name, will set to ObUDFRawExpr later. - if (OB_SUCC(ret) && db_name.empty() && OB_NOT_NULL(routine_info)) { - if (routine_info->get_database_id() != OB_INVALID_ID && - routine_info->get_database_id() != resolve_ctx_.session_info_.get_database_id()) { + if (OB_SUCC(ret) + && db_name.empty() + && OB_NOT_NULL(routine_info) + && routine_info->get_database_id() != OB_INVALID_ID) { + if (routine_info->get_database_id() != resolve_ctx_.session_info_.get_database_id()) { const ObDatabaseSchema *database_schema = NULL; OZ (resolve_ctx_.schema_guard_.get_database_schema( resolve_ctx_.session_info_.get_effective_tenant_id(), routine_info->get_database_id(), database_schema)); CK (OB_NOT_NULL(database_schema)); OX (db_name = database_schema->get_database_name_str()); - if (OB_SUCC(ret) && routine_info->get_package_id() != OB_INVALID_ID) { - if (routine_info->is_udt_routine()) { - const share::schema::ObUDTTypeInfo *udt_info = NULL; - OZ (resolve_ctx_.schema_guard_.get_udt_info( - routine_info->get_tenant_id(), routine_info->get_package_id(), udt_info)); - CK (OB_NOT_NULL(udt_info)); - OX (package_name = udt_info->get_type_name()); - } else { - const share::schema::ObPackageInfo *package_info = NULL; - OZ (resolve_ctx_.schema_guard_.get_package_info( - routine_info->get_tenant_id(), routine_info->get_package_id(), package_info)); - CK (OB_NOT_NULL(package_info)); - OX (package_name = package_info->get_package_name()); - } - } - if (OB_SUCC(ret) && - OB_NOT_NULL(udf_info.ref_expr_) && - udf_info.ref_expr_->get_func_name().case_compare(routine_info->get_routine_name()) != 0) { - OX (udf_info.ref_expr_->set_func_name(routine_info->get_routine_name())); + } + if (OB_SUCC(ret) && routine_info->get_package_id() != OB_INVALID_ID) { + if (routine_info->is_udt_routine()) { + const share::schema::ObUDTTypeInfo *udt_info = NULL; + OZ (resolve_ctx_.schema_guard_.get_udt_info( + routine_info->get_tenant_id(), routine_info->get_package_id(), udt_info)); + CK (OB_NOT_NULL(udt_info)); + OX (package_name = udt_info->get_type_name()); + } else { + const share::schema::ObPackageInfo *package_info = NULL; + OZ (resolve_ctx_.schema_guard_.get_package_info( + routine_info->get_tenant_id(), routine_info->get_package_id(), package_info)); + CK (OB_NOT_NULL(package_info)); + OX (package_name = package_info->get_package_name()); } } + if (OB_SUCC(ret) && + OB_NOT_NULL(udf_info.ref_expr_) && + udf_info.ref_expr_->get_func_name().case_compare(routine_info->get_routine_name()) != 0) { + OX (udf_info.ref_expr_->set_func_name(routine_info->get_routine_name())); + } } if (OB_SUCC(ret)) { @@ -13157,7 +13159,7 @@ int ObPLResolver::resolve_name(ObQualifiedName &q_name, access_idxs, func, access_ident.is_pl_udf()))) { - LOG_IN_CHECK_MODE("match var idents failed", K(ret), K(i), K(q_name.access_idents_)); + LOG_IN_CHECK_MODE("failed to resolve access ident", K(ret), K(i), K(q_name.access_idents_)); } } } @@ -14048,12 +14050,12 @@ int ObPLResolver::resolve_access_ident(ObObjAccessIdent &access_ident, // 当前 int64_t var_idx = access_ident.access_index_; const ObPLVar *local_var = NULL; CK (OB_NOT_NULL(sym_tbl)); - OV (var_idx >= 0 && var_idx < sym_tbl->get_count(), - OB_ERR_UNEXPECTED, K(var_idx), K(sym_tbl->get_count())); - CK (OB_NOT_NULL(local_var = sym_tbl->get_symbol(var_idx))); - OX (pl_data_type = local_var->get_type()); - OX (type = ObPLExternalNS::LOCAL_VAR); - OX (var_index = var_idx); + if (OB_SUCC(ret) && var_idx >= 0 && var_idx < sym_tbl->get_count()) { + CK (OB_NOT_NULL(local_var = sym_tbl->get_symbol(var_idx))); + OX (pl_data_type = local_var->get_type()); + OX (type = ObPLExternalNS::LOCAL_VAR); + OX (var_index = var_idx); + } } else { OZ (ns.resolve_symbol(access_ident.access_name_, type, diff --git a/src/sql/engine/expr/ob_expr_object_construct.cpp b/src/sql/engine/expr/ob_expr_object_construct.cpp index 7a311e5253..ff55bc9081 100644 --- a/src/sql/engine/expr/ob_expr_object_construct.cpp +++ b/src/sql/engine/expr/ob_expr_object_construct.cpp @@ -49,10 +49,11 @@ int ObExprObjectConstruct::calc_result_typeN(ObExprResType &type, CK (param_num == elem_types_.count()); for (int64_t i = 0; OB_SUCC(ret) && i < param_num; i++) { if ((ObExtendType == elem_types_.at(i).get_type() - && types[i].get_type() != ObExtendType && types[i].get_type() != ObNullType) + && types[i].get_type() != ObExtendType + && types[i].get_type() != ObNullType) ||(ObExtendType == types[i].get_type() && elem_types_.at(i).get_type() != ObExtendType)) { ret = OB_ERR_CALL_WRONG_ARG; - LOG_WARN("PLS-00306: wrong number or types of arguments in call", K(ret)); + LOG_WARN("PLS-00306: wrong number or types of arguments in call", K(ret), K(types[i]), K(elem_types_.at(i)), K(i)); } else { types[i].set_calc_accuracy(elem_types_.at(i).get_accuracy()); types[i].set_calc_meta(elem_types_.at(i).get_obj_meta()); diff --git a/src/sql/engine/expr/ob_expr_udf.cpp b/src/sql/engine/expr/ob_expr_udf.cpp index 0bb0629432..f981bb452b 100644 --- a/src/sql/engine/expr/ob_expr_udf.cpp +++ b/src/sql/engine/expr/ob_expr_udf.cpp @@ -463,7 +463,7 @@ int ObExprUDF::eval_udf(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res) CK (OB_NOT_NULL(session = ctx.exec_ctx_.get_my_session())); CK (OB_NOT_NULL(pl_engine = session->get_pl_engine())); - OZ (expr.eval_param_value(ctx)); + OZ (SMART_CALL(expr.eval_param_value(ctx))); OZ (build_udf_ctx(udf_ctx_id, expr.arg_cnt_, ctx.exec_ctx_, udf_ctx)); CK (OB_NOT_NULL(udf_params = udf_ctx->get_param_store())); diff --git a/src/sql/ob_spi.cpp b/src/sql/ob_spi.cpp index 2769e2395f..ce955f72a2 100644 --- a/src/sql/ob_spi.cpp +++ b/src/sql/ob_spi.cpp @@ -6376,7 +6376,8 @@ int ObSPIService::inner_open(ObPLExecCtx *ctx, spi_result.get_result_set()->set_stmt_type(static_cast(type)); OZ (GCTX.sql_engine_->handle_pl_execute( ps_sql, *session, exec_params, *spi_result.get_result_set(), spi_result.get_sql_ctx(), - true /* is_prepare_protocol */, false /* is_dynamic_sql */), exec_params); + true /* is_prepare_protocol */, false /* is_dynamic_sql */), + K(ps_sql), K(exec_params)); OZ (adjust_out_params(*spi_result.get_result_set(), out_params)); } } diff --git a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp index 0c8d5c76de..5f4f8b7924 100644 --- a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp @@ -2172,7 +2172,7 @@ int ObRawExprResolverImpl::resolve_left_node_of_obj_access_idents(const ParseNod { int ret = OB_SUCCESS; if (T_QUESTIONMARK == left_node.type_) { - // quesitonmark in obj access ref muse be top node + // quesitonmark in obj access ref must be top node CK (q_name.access_idents_.count() <= 0); OZ (q_name.access_idents_.push_back(ObObjAccessIdent(ObString(""), left_node.value_))); OX (q_name.access_idents_.at(q_name.access_idents_.count() - 1).set_pl_var());