dblink_write implement [FEAT MERGE]

Co-authored-by: zzg19950727 <1071026277@qq.com>
Co-authored-by: xianyu-w <707512433@qq.com>
This commit is contained in:
obdev
2023-01-29 16:23:18 +08:00
committed by ob-robot
parent 195ab500ab
commit 814de27a42
226 changed files with 9602 additions and 4087 deletions

View File

@ -89,11 +89,20 @@ int ObStmtResolver::resolve_table_relation_node_v2(const ParseNode *node,
NULL != dblink_name_len &&
node->num_child_ >= 3 &&
NULL != node->children_[2] &&
T_IDENT == node->children_[2]->type_ &&
NULL != node->children_[2]->str_value_) {
T_DBLINK_NAME == node->children_[2]->type_ &&
NULL != node->children_[2]->children_ &&
2 == node->children_[2]->num_child_ &&
NULL != node->children_[2]->children_[0] &&
NULL != node->children_[2]->children_[1]) {
//Obtaining dblink_name here is not to obtain the dblink name itself, but to determine whether there is an opt_dblink node
*dblink_name_ptr = const_cast<char*>(node->children_[2]->str_value_);
*dblink_name_len = static_cast<int32_t>(node->children_[2]->str_len_);
ParseNode *dblink_name_node = node->children_[2];
if (node->children_[2]->children_[1]->value_) { // dblink name is @!
*dblink_name_ptr = const_cast<char*>(node->children_[2]->children_[0]->str_value_);
*dblink_name_len = 1;
} else { // dblink name is @xxxx or @, @ will be skip before here
*dblink_name_ptr = const_cast<char*>(node->children_[2]->children_[0]->str_value_);
*dblink_name_len = static_cast<int32_t>(node->children_[2]->children_[0]->str_len_);
}
}
if (OB_ISNULL(session_info_)) {
ret = OB_ERR_UNEXPECTED;
@ -161,6 +170,23 @@ int ObStmtResolver::resolve_table_relation_node_v2(const ParseNode *node,
return ret;
}
int ObStmtResolver::resolve_dblink_name(const ParseNode *table_node, ObString &dblink_name, bool &is_reverse_link)
{
int ret = OB_SUCCESS;
dblink_name.reset();
if (!OB_ISNULL(table_node) && table_node->num_child_ > 2 &&
!OB_ISNULL(table_node->children_) && !OB_ISNULL(table_node->children_[2])) {
const ParseNode *dblink_node = table_node->children_[2];
if (2 == dblink_node->num_child_ && !OB_ISNULL(dblink_node->children_) &&
!OB_ISNULL(dblink_node->children_[0]) && !OB_ISNULL(dblink_node->children_[1])) {
int32_t dblink_name_len = static_cast<int32_t>(dblink_node->children_[0]->str_len_);
dblink_name.assign_ptr(dblink_node->children_[0]->str_value_, dblink_name_len);
is_reverse_link = dblink_node->children_[1]->value_;
}
}
return ret;
}
int ObStmtResolver::resolve_ref_factor(const ParseNode *node,
ObSQLSessionInfo *session_info,
ObString &table_name,