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:
		@ -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, 
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user