[CP] [to #44112459] fix serval pl/sql bugs
This commit is contained in:
parent
983a0ad9dc
commit
a8d994c61e
@ -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;
|
||||
|
@ -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));
|
||||
|
@ -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; \
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user