From 6f05db2849c874320d9ba4de3e0bf645a858f23e Mon Sep 17 00:00:00 2001 From: obdev Date: Fri, 16 Dec 2022 13:11:35 +0000 Subject: [PATCH] [CP] fix a core caused by omitting the deep copy --- src/sql/resolver/ddl/ob_alter_table_resolver.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/sql/resolver/ddl/ob_alter_table_resolver.cpp b/src/sql/resolver/ddl/ob_alter_table_resolver.cpp index 803507699a..5ddc24bd0f 100644 --- a/src/sql/resolver/ddl/ob_alter_table_resolver.cpp +++ b/src/sql/resolver/ddl/ob_alter_table_resolver.cpp @@ -2234,6 +2234,7 @@ int ObAlterTableResolver::resolve_alter_index(const ParseNode &node) int ObAlterTableResolver::resolve_alter_index_parallel_oracle(const ParseNode &node) { int ret = OB_SUCCESS; + ObString tmp_index_name; ObString index_name; if (T_PARALLEL != node.type_ || OB_ISNULL(node.children_)) { ret = OB_ERR_UNEXPECTED; @@ -2244,8 +2245,10 @@ int ObAlterTableResolver::resolve_alter_index_parallel_oracle(const ParseNode &n } else if (OB_ISNULL(index_schema_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("the index schema is null", K(ret)); - } else if (OB_FAIL(index_schema_->get_index_name(index_name))) { + } else if (OB_FAIL(index_schema_->get_index_name(tmp_index_name))) { LOG_WARN("failed get index name", K(ret)); + } else if (OB_FAIL(deep_copy_str(tmp_index_name, index_name))) { + LOG_WARN("failed to deep copy new_db_name", K(ret)); } else { int64_t index_dop = node.children_[0]->value_; LOG_DEBUG("alter index table dop", @@ -2375,14 +2378,17 @@ int ObAlterTableResolver::resolve_rename_index(const ParseNode &node) } else if (OB_FAIL(ObSQLUtils::check_index_name(cs_type, tmp_new_index_name))) { LOG_WARN("fail to check index name", K(tmp_new_index_name), K(ret)); } else { + ObString tmp_index_name; ObString ori_index_name; ObString new_index_name; if (lib::is_mysql_mode()) { ori_index_name.assign_ptr(index_node->str_value_, static_cast(index_node->str_len_)); } else if (lib::is_oracle_mode()) { - if (OB_FAIL(index_schema_->get_index_name(ori_index_name))) { + if (OB_FAIL(index_schema_->get_index_name(tmp_index_name))) { LOG_WARN("fail to get origin index name", K(ret)); + } else if (OB_FAIL(deep_copy_str(tmp_index_name, ori_index_name))) { + LOG_WARN("failed to deep copy new_db_name", K(ret)); } } new_index_name.assign_ptr(new_name_node->str_value_, static_cast(new_name_node->str_len_)); @@ -2703,6 +2709,7 @@ int ObAlterTableResolver::resolve_drop_primary(const ParseNode &action_node_list int ObAlterTableResolver::resolve_alter_index_tablespace_oracle(const ParseNode &node) { int ret = OB_SUCCESS; + ObString tmp_index_name; ObString index_name; if (T_TABLESPACE != node.type_|| OB_ISNULL(node.children_[0]) || OB_ISNULL(session_info_)) { ret = OB_ERR_UNEXPECTED; @@ -2710,8 +2717,10 @@ int ObAlterTableResolver::resolve_alter_index_tablespace_oracle(const ParseNode } else if (OB_ISNULL(index_schema_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("the index schema is null", K(ret)); - } else if (OB_FAIL(index_schema_->get_index_name(index_name))) { + } else if (OB_FAIL(index_schema_->get_index_name(tmp_index_name))) { LOG_WARN("failed to get index name", K(ret)); + } else if (OB_FAIL(deep_copy_str(tmp_index_name, index_name))) { + LOG_WARN("failed to deep copy new_db_name", K(ret)); } else { const uint64_t tenant_id = session_info_->get_effective_tenant_id(); const ObTablespaceSchema *tablespace_schema = NULL;