[CP] [to #52643060] allow UDF calls when no database selected in MySQL mode

This commit is contained in:
0xacc
2023-10-19 06:43:10 +00:00
committed by ob-robot
parent a68da2aa9c
commit af7068fe4a

View File

@ -1552,11 +1552,9 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
db_id = parent_id;
} else if (OB_FAIL(session_info.get_database_id(db_id))) {
LOG_WARN("failed to get session database id", K(ret), K(db_id));
} else if (OB_INVALID_ID == db_id) {
ret = OB_ERR_NO_DB_SELECTED;
LOG_WARN("No database selected", K(ret));
}
if (OB_SUCC(ret)) {
if (OB_SUCC(ret) && OB_INVALID_ID != db_id) {
if (OB_FAIL(schema_guard.get_package_id(
tenant_id, db_id, name, share::schema::PACKAGE_TYPE, compatible_mode, package_id))) {
LOG_WARN("get package id failed", K(ret));
@ -1604,6 +1602,8 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
} else {
OZ (session_info.get_database_id(db_id));
}
if (OB_SUCC(ret) && OB_INVALID_ID != db_id) {
OZ (schema_guard.get_table_id(tenant_id, db_id, name, false,
schema::ObSchemaGetterGuard::ALL_NON_HIDDEN_TYPES, table_id));
if (OB_FAIL(ret)) {
@ -1623,6 +1623,7 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
var_idx = table_id;
}
}
}
// then udt type
if (OB_SUCC(ret) && OB_INVALID_INDEX == var_idx && lib::is_oracle_mode()) {
uint64_t tenant_id = session_info.get_effective_tenant_id();
@ -1633,6 +1634,8 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
} else {
OZ (session_info.get_database_id(db_id));
}
if (OB_SUCC(ret) && OB_INVALID_ID != db_id) {
const ObUDTTypeInfo *udt_info = NULL;
OZ (schema_guard.get_udt_info(tenant_id, db_id, OB_INVALID_ID, name, udt_info));
// 尝试去系统租户下查找
@ -1664,7 +1667,7 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
OZ (add_dependency_object(obj_version));
}
}
}
}
}
// then routine
@ -1706,6 +1709,8 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
} else {
OZ (session_info.get_database_id(db_id));
}
if (OB_SUCC(ret) && OB_INVALID_ID != db_id) {
OZ (schema_checker.init(schema_guard, session_info.get_sessid()));
OZ (ObResolverUtils::resolve_synonym_object_recursively(
schema_checker, synonym_checker,
@ -1714,6 +1719,7 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
OZ (resolve_synonym(object_db_id, object_name, type, parent_id, var_idx, name, db_id));
}
}
}
//then database name
if (OB_SUCC(ret) && is_oracle_mode() && OB_INVALID_INDEX == var_idx && OB_INVALID_INDEX == parent_id) {
uint64_t tenant_id = session_info.get_effective_tenant_id();