[CP] [to #2024110600104964418] fix: filter some error codes not to be overwritten during resolving
This commit is contained in:
parent
1925f87dd7
commit
f2302d9266
@ -14266,12 +14266,11 @@ int ObPLResolver::resolve_routine(ObObjAccessIdent &access_ident,
|
||||
}
|
||||
|
||||
if (OB_FAIL(ret)
|
||||
&& OB_ERR_UNEXPECTED != ret
|
||||
&& OB_ERR_SP_WRONG_ARG_NUM != ret
|
||||
&& OB_ERR_CALL_WRONG_ARG != ret
|
||||
&& OB_ERR_FUNC_DUP != ret
|
||||
&& OB_ERR_POSITIONAL_FOLLOW_NAME != ret
|
||||
&& OB_ALLOCATE_MEMORY_FAILED != ret) {
|
||||
&& !is_unrecoverable_error(ret)) {
|
||||
// Not A Routine, try compostie access again.
|
||||
if (access_idxs.count() > 0
|
||||
&& (access_idxs.at(access_idxs.count() - 1)).elem_type_.is_composite_type()
|
||||
|
@ -627,6 +627,16 @@ public:
|
||||
static int replace_udf_param_expr(ObObjAccessIdent &access_ident,
|
||||
ObIArray<ObQualifiedName> &columns,
|
||||
ObIArray<ObRawExpr*> &real_exprs);
|
||||
|
||||
static OB_INLINE bool is_unrecoverable_error(int ret)
|
||||
{
|
||||
return OB_ALLOCATE_MEMORY_FAILED == ret
|
||||
|| OB_ERR_UNEXPECTED == ret
|
||||
|| OB_EXCEED_QUERY_MEM_LIMIT == ret
|
||||
|| OB_TIMEOUT == ret
|
||||
|| OB_SIZE_OVERFLOW == ret;
|
||||
}
|
||||
|
||||
private:
|
||||
int resolve_declare_var(const ObStmtNodeTree *parse_tree, ObPLDeclareVarStmt *stmt, ObPLFunctionAST &func_ast);
|
||||
int resolve_declare_var(const ObStmtNodeTree *parse_tree, ObPLPackageAST &package_ast);
|
||||
|
@ -1729,11 +1729,13 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
|
||||
}
|
||||
const ObRoutineInfo *routine_info = NULL;
|
||||
OZ (schema_guard.get_standalone_procedure_info(tenant_id, db_id, name, routine_info));
|
||||
if (NULL == routine_info) {
|
||||
if (NULL == routine_info && !ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
ret = OB_SUCCESS;
|
||||
OZ (schema_guard.get_standalone_function_info(tenant_id, db_id, name, routine_info));
|
||||
}
|
||||
if (NULL == routine_info) {
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
// do nothing
|
||||
} else if (NULL == routine_info) {
|
||||
ret = OB_SUCCESS;
|
||||
type = ObPLExternalNS::INVALID_VAR;
|
||||
} else {
|
||||
|
@ -3225,7 +3225,9 @@ int ObDMLResolver::resolve_qualified_identifier(ObQualifiedName &q_name,
|
||||
if (OB_ERR_BAD_FIELD_ERROR == ret) {
|
||||
if (OB_FAIL(resolve_pseudo_column(q_name, real_ref_expr))) {
|
||||
LOG_WARN_IGNORE_COL_NOTFOUND(ret, "resolve pseudo column failed", K(ret), K(q_name));
|
||||
ret = OB_ERR_BAD_FIELD_ERROR;
|
||||
if (!ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
ret = OB_ERR_BAD_FIELD_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3249,7 +3251,9 @@ int ObDMLResolver::resolve_qualified_identifier(ObQualifiedName &q_name,
|
||||
if (OB_ERR_BAD_FIELD_ERROR == ret && !q_name.access_idents_.empty()) { //q_name.access_idents_为NULL肯定是列
|
||||
if (OB_FAIL(resolve_external_name(q_name, columns, real_exprs, real_ref_expr))) {
|
||||
LOG_WARN_IGNORE_COL_NOTFOUND(ret, "resolve external symbol failed", K(ret), K(q_name));
|
||||
ret = OB_ERR_BAD_FIELD_ERROR; // TODO: 单测test_resolver_select.test:465 select 1 as a from t1,t2 having c1=1; 失败
|
||||
if (!ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
ret = OB_ERR_BAD_FIELD_ERROR; // TODO: 单测test_resolver_select.test:465 select 1 as a from t1,t2 having c1=1; 失败
|
||||
}
|
||||
} else {
|
||||
is_external = true;
|
||||
}
|
||||
|
@ -808,7 +808,10 @@ if ((OB_FAIL(ret) || 0 == routines.count()) \
|
||||
} else if (OB_FAIL(schema_checker.get_package_id( // try user package now!
|
||||
tenant_id, object_db_id, object_name, compatible_mode, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
if (OB_FAIL(schema_checker.get_udt_id( // try user type now!
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
LOG_WARN("failed to get_package_id",
|
||||
K(ret), K(tenant_id), K(object_db_id), K(object_name), K(compatible_mode), K(package_id));
|
||||
} else if (OB_FAIL(schema_checker.get_udt_id( // try user type now!
|
||||
tenant_id, object_db_id, OB_INVALID_ID, object_name, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
bool need_try_synonym = false;
|
||||
@ -817,10 +820,16 @@ if ((OB_FAIL(ret) || 0 == routines.count()) \
|
||||
if (OB_FAIL(schema_checker.get_package_id( // try synonym user package now!
|
||||
tenant_id, object_db_id, object_name, compatible_mode, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
if ((is_sys_database_id(object_db_id)
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
LOG_WARN("failed to get_package_id",
|
||||
K(ret), K(tenant_id), K(object_db_id), K(object_name), K(compatible_mode), K(package_id));
|
||||
} else if ((is_sys_database_id(object_db_id)
|
||||
&& OB_FAIL(schema_checker.get_package_id(OB_SYS_TENANT_ID, object_db_id, object_name, compatible_mode, package_id)))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
if (OB_FAIL(schema_checker.get_udt_id( // try synonym user type now!
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
LOG_WARN("failed to get_package_id",
|
||||
K(ret), K(OB_SYS_TENANT_ID), K(object_db_id), K(object_name), K(compatible_mode), K(package_id));
|
||||
} else if (OB_FAIL(schema_checker.get_udt_id( // try synonym user type now!
|
||||
tenant_id, object_db_id, OB_INVALID_ID, object_name, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
LOG_WARN("failed to get package id", K(ret));
|
||||
@ -847,13 +856,18 @@ if ((OB_FAIL(ret) || 0 == routines.count()) \
|
||||
}
|
||||
// try system package or udt
|
||||
if (OB_FAIL(ret) || OB_INVALID_ID == package_id) {
|
||||
if (lib::is_oracle_mode() && (db_name.empty()
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
// do nothing
|
||||
} else if (lib::is_oracle_mode() && (db_name.empty()
|
||||
|| 0 == db_name.case_compare(OB_SYS_DATABASE_NAME)
|
||||
|| 0 == db_name.case_compare(OB_ORA_SYS_SCHEMA_NAME))) {
|
||||
if (OB_FAIL(schema_checker.get_package_id( // try system pacakge
|
||||
OB_SYS_TENANT_ID, OB_SYS_DATABASE_NAME, object_name, compatible_mode, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
if (OB_FAIL(schema_checker.get_udt_id( // try system udt
|
||||
if (ObPLResolver::is_unrecoverable_error(ret)) {
|
||||
LOG_WARN("failed to get_package_id",
|
||||
K(ret), K(OB_SYS_TENANT_ID), K(OB_SYS_DATABASE_NAME), K(object_name), K(compatible_mode), K(package_id));
|
||||
} else if (OB_FAIL(schema_checker.get_udt_id( // try system udt
|
||||
OB_SYS_TENANT_ID, OB_SYS_DATABASE_NAME, object_name, package_id))
|
||||
|| OB_INVALID_ID == package_id) {
|
||||
LOG_WARN("failed to get package id", K(ret));
|
||||
|
Loading…
x
Reference in New Issue
Block a user