[CP] [to #44112459] fix serval pl/sql bugs

This commit is contained in:
obdev 2023-10-18 02:43:43 +00:00 committed by ob-robot
parent 983a0ad9dc
commit a8d994c61e
5 changed files with 24 additions and 23 deletions

View File

@ -188,10 +188,6 @@ int ObPLPackage::instantiate_package_state(const ObPLResolveCtx &resolve_ctx,
if (OB_ISNULL(var)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("var is null", K(ret), K(var), K(var_idx));
} else if (var->is_dup_declare()) {
ret = OB_ERR_DECL_MORE_THAN_ONCE;
LOG_WARN("package var dup", K(ret), K(var_idx));
LOG_USER_ERROR(OB_ERR_DECL_MORE_THAN_ONCE, var->get_name().length(), var->get_name().ptr());
} else {
if (var_type.is_cursor_type()
&& OB_FAIL(resolve_ctx.session_info_.init_cursor_cache())) {
@ -306,8 +302,14 @@ int ObPLPackage::get_var(const ObString &var_name, const ObPLVar *&var, int64_t
ObPLVar *tmp_var = var_table_.at(i);
if (!tmp_var->is_formal_param()
&& ObCharset::case_insensitive_equal(var_name, tmp_var->get_name())) {
var = tmp_var;
var_idx = i;
if (tmp_var->is_dup_declare()) {
ret = OB_ERR_DECL_MORE_THAN_ONCE;
LOG_WARN("package var dup", K(ret), K(var_idx));
LOG_USER_ERROR(OB_ERR_DECL_MORE_THAN_ONCE, tmp_var->get_name().length(), tmp_var->get_name().ptr());
} else {
var = tmp_var;
var_idx = i;
}
}
}
return ret;

View File

@ -11209,7 +11209,8 @@ int ObPLResolver::resolve_object_construct(const sql::ObQualifiedName &q_name,
|| OB_ERR_FUNCTION_UNKNOWN == ret
|| OB_ERR_SP_UNDECLARED_VAR == ret
|| OB_ERR_INVALID_TYPE_FOR_OP == ret
|| OB_ERR_PACKAGE_DOSE_NOT_EXIST == ret) {
|| OB_ERR_PACKAGE_DOSE_NOT_EXIST == ret
|| OB_ERR_SP_DOES_NOT_EXIST == ret) {
ret = OB_SUCCESS;
pl_reset_warning_buffer();
OZ (resolve_record_construct(q_name, udf_info, user_type, expr));

View File

@ -34,7 +34,7 @@
} while(0);
#endif
#ifndef NDEBUG
#ifdef NDEBUG
#ifndef SET_LOG_CHECK_MODE
#define SET_LOG_CHECK_MODE() \
bool set_check_mode = false; \

View File

@ -2028,21 +2028,7 @@ int ObPLExternalNS::resolve_external_type_by_name(const ObString &db_name, const
ObSchemaChecker schema_checker;
ObSynonymChecker synonym_checker;
OZ (schema_checker.init(resolve_ctx_.schema_guard_, resolve_ctx_.session_info_.get_sessid()));
OZ (ObResolverUtils::resolve_synonym_object_recursively(
schema_checker, synonym_checker,
tenant_id, db_id, type_name, object_db_id, object_name, exist));
if (OB_FAIL(ret)) {
} else if (exist) {
if (OB_FAIL(resolve_ctx_.schema_guard_.get_udt_info(tenant_id, object_db_id,
OB_INVALID_ID, object_name,
udt_info))) {
LOG_WARN("get udt info failed", K(ret));
}
} else if (OB_FAIL(resolve_ctx_.schema_guard_.get_udt_info(tenant_id, db_id,
OB_INVALID_ID, type_name,
udt_info))) {
LOG_WARN("get udt info failed", K(ret));
}
OZ (resolve_ctx_.schema_guard_.get_udt_info(tenant_id, db_id, OB_INVALID_ID, type_name, udt_info));
}
if (OB_SUCC(ret) && (is_oracle_sys_user || OB_ISNULL(udt_info))) {
// try system udt

View File

@ -7020,6 +7020,18 @@ int ObSPIService::get_result(ObPLExecCtx *ctx,
CK (OB_NOT_NULL(table = reinterpret_cast<ObPLCollection*>(result_address.get_ext())));
CK (OB_NOT_NULL(table));
OZ (bulk_tables.push_back(table));
#ifdef OB_BUILD_ORACLE_PL
if (OB_SUCC(ret) && table->is_varray()) {
ObPLVArray *varray = static_cast<ObPLVArray*>(table);
bool append_mode = (NULL == implicit_cursor ? false : implicit_cursor->get_in_forall());
int64_t new_count = append_mode ? table->get_count() + row_count : row_count;
CK (OB_NOT_NULL(varray));
if (OB_SUCC(ret) && new_count > varray->get_capacity()) {
ret = OB_ERR_SUBSCRIPT_OUTSIDE_LIMIT;
LOG_WARN("Subscript outside of limit", K(ret), K(append_mode), K(new_count), KPC(varray));
}
}
#endif
}
if (OB_SUCC(ret)) {
for (int64_t i = 0; OB_SUCC(ret) && i < bulk_tables.count(); ++i) {