[to #52199994]fix bug dblink with public synoym

This commit is contained in:
seuwebber 2023-09-15 00:13:44 +00:00 committed by ob-robot
parent 7da311d37c
commit 8ca94305dd
2 changed files with 10 additions and 7 deletions

View File

@ -1440,7 +1440,8 @@ int ObPLExternalNS::resolve_synonym(uint64_t object_db_id,
ExternalType &type,
uint64_t &parent_id,
int64_t &var_idx,
const ObString &synonym_name) const
const ObString &synonym_name,
const uint64_t cur_db_id) const
{
int ret = OB_SUCCESS;
uint64_t object_id = OB_INVALID_ID;
@ -1469,13 +1470,14 @@ int ObPLExternalNS::resolve_synonym(uint64_t object_db_id,
ObString full_object_name = tmp_name.split_on('@');
bool exist = false;
if (!full_object_name.empty()) {
ObString obj_name;
// object_id is the synonym id
if (OB_FAIL(schema_guard.get_dblink_id(tenant_id, tmp_name, dblink_id))
|| OB_INVALID_ID == dblink_id) {
LOG_WARN("resolve synonym failed!", K(ret), K(object_db_id), K(tmp_name));
} else if (OB_FAIL(schema_guard.check_synonym_exist_with_name(tenant_id, object_db_id, synonym_name,
exist, object_id))) {
LOG_WARN("check_synonym_exist_with_name failed", K(ret),
K(object_db_id), K(synonym_name), K(object_name));
} else if (OB_FAIL(schema_guard.get_object_with_synonym(tenant_id, cur_db_id, synonym_name, object_db_id,
object_id, obj_name, exist, true))) {
LOG_WARN("get synonym schema failed", K(ret), K(cur_db_id), K(synonym_name), K(object_name));
} else if (!exist || OB_INVALID_ID == object_id) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("synonym not exist", K(ret), K(tenant_id), K(object_db_id), K(object_name), K(synonym_name));
@ -1684,7 +1686,7 @@ int ObPLExternalNS::resolve_external_symbol(const common::ObString &name,
schema_checker, synonym_checker,
tenant_id, db_id, name, object_db_id, object_name, exist));
if (exist) {
OZ (resolve_synonym(object_db_id, object_name, type, parent_id, var_idx, name));
OZ (resolve_synonym(object_db_id, object_name, type, parent_id, var_idx, name, db_id));
}
}
// 尝试看是不是系统变量的特殊写法,如 set SQL_MODE='ONLY_FULL_GROUP_BY';

View File

@ -1166,7 +1166,8 @@ public:
ExternalType &type,
uint64_t &parent_id,
int64_t &var_idx,
const ObString &synonym_name) const;
const ObString &synonym_name,
const uint64_t cur_db_id) const;
int resolve_external_symbol(const common::ObString &name, ExternalType &type, ObPLDataType &data_type,
uint64_t &parent_id, int64_t &var_idx) const;
int resolve_external_type_by_name(const ObString &db_name,