From f773f1ea34c2e1e63d1854696a098c58fef376db Mon Sep 17 00:00:00 2001 From: hamstersox <673144759@qq.com> Date: Wed, 13 Sep 2023 04:40:08 +0000 Subject: [PATCH] fix using mysql mode to check oracle mode table name --- .../restore/ob_import_table_job_scheduler.cpp | 5 ++--- src/sql/ob_sql_utils.cpp | 12 +++++++++++- src/sql/ob_sql_utils.h | 6 ++++++ src/sql/resolver/cmd/ob_alter_system_resolver.cpp | 8 +++++--- .../ob_storage_ha_tablet_builder.cpp | 2 +- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/rootserver/restore/ob_import_table_job_scheduler.cpp b/src/rootserver/restore/ob_import_table_job_scheduler.cpp index a6fb90e4df..647d368283 100644 --- a/src/rootserver/restore/ob_import_table_job_scheduler.cpp +++ b/src/rootserver/restore/ob_import_table_job_scheduler.cpp @@ -347,7 +347,8 @@ int ObImportTableJobScheduler::canceling_(share::ObImportTableJob &job) if (task.get_status().is_finish()) { } else if (OB_FAIL(check_import_ddl_task_exist_(task, is_exist))) { LOG_WARN("failed to check import ddl task", K(ret)); - } else if (!is_exist) { + } else if (is_exist && OB_FAIL(ObDDLServerClient::abort_redef_table(arg))) { + LOG_WARN("failed to abort redef table", K(ret), K(arg)); } else { LOG_INFO("[IMPORT_TABLE]cancel import table task", K(arg)); share::ObTaskId trace_id(*ObCurTraceId::get_trace_id()); @@ -355,8 +356,6 @@ int ObImportTableJobScheduler::canceling_(share::ObImportTableJob &job) if (OB_FAIL(result.set_result(OB_CANCELED, trace_id, GCONF.self_addr_))) { LOG_WARN("failed to set result", K(ret)); } else if (OB_FALSE_IT(task.set_result(result))) { - } else if (OB_FAIL(ObDDLServerClient::abort_redef_table(arg))) { - LOG_WARN("failed to abort redef table", K(ret), K(arg)); } else if (OB_FAIL(task_helper_.advance_status(*sql_proxy_, task, next_status))) { LOG_WARN("failed to cancel import task", K(ret), K(task)); } else { diff --git a/src/sql/ob_sql_utils.cpp b/src/sql/ob_sql_utils.cpp index c1cddfe83e..5d700bac85 100644 --- a/src/sql/ob_sql_utils.cpp +++ b/src/sql/ob_sql_utils.cpp @@ -1084,6 +1084,16 @@ int ObSQLUtils::check_and_convert_table_name(const ObCollationType cs_type, ObString &name, const stmt::StmtType stmt_type, const bool is_index_table) +{ + return check_and_convert_table_name(cs_type, preserve_lettercase, name, lib::is_oracle_mode(), stmt_type, is_index_table); +} + +int ObSQLUtils::check_and_convert_table_name(const ObCollationType cs_type, + const bool preserve_lettercase, + ObString &name, + const bool is_oracle_mode, + const stmt::StmtType stmt_type, + const bool is_index_table) { /** * MYSQL模式 @@ -1101,7 +1111,7 @@ int ObSQLUtils::check_and_convert_table_name(const ObCollationType cs_type, int ret = OB_SUCCESS; int64_t name_len = name.length(); const char *name_str = name.ptr(); - const int64_t max_user_table_name_length = lib::is_oracle_mode() + const int64_t max_user_table_name_length = is_oracle_mode ? OB_MAX_USER_TABLE_NAME_LENGTH_ORACLE : OB_MAX_USER_TABLE_NAME_LENGTH_MYSQL; const int64_t max_index_name_prefix_len = 30; if (0 == name_len diff --git a/src/sql/ob_sql_utils.h b/src/sql/ob_sql_utils.h index 2a3bc11f50..99bc240155 100644 --- a/src/sql/ob_sql_utils.h +++ b/src/sql/ob_sql_utils.h @@ -324,6 +324,12 @@ public: static int cvt_db_name_to_org(share::schema::ObSchemaGetterGuard &schema_guard, const ObSQLSessionInfo *session, common::ObString &name); + static int check_and_convert_table_name(const common::ObCollationType cs_type, + const bool preserve_lettercase, + common::ObString &name, + const bool is_oracle_mode, + const stmt::StmtType stmt_type = stmt::T_NONE, + const bool is_index_table = false); static int check_and_convert_table_name(const common::ObCollationType cs_type, const bool preserve_lettercase, common::ObString &name, diff --git a/src/sql/resolver/cmd/ob_alter_system_resolver.cpp b/src/sql/resolver/cmd/ob_alter_system_resolver.cpp index b1bee17192..f3bf6f1f53 100644 --- a/src/sql/resolver/cmd/ob_alter_system_resolver.cpp +++ b/src/sql/resolver/cmd/ob_alter_system_resolver.cpp @@ -5212,6 +5212,7 @@ int ObRecoverTableResolver::resolve_remap_tables_( share::ObRemapTableItem remap_table_item; ObCollationType cs_type = CS_TYPE_INVALID; bool perserve_lettercase = Worker::CompatMode::ORACLE == compat_mode ? true : (case_mode != OB_LOWERCASE_AND_INSENSITIVE); + bool is_oracle_mode = Worker::CompatMode::ORACLE == compat_mode; // No matter what name case mode is of target tenant, the names of remap tables are case sensitive. const ObNameCaseMode sensitive_case_mode = OB_ORIGIN_AND_SENSITIVE; for (int64_t i = 0; OB_SUCC(ret) && i < node->num_child_; ++i) { @@ -5249,11 +5250,11 @@ int ObRecoverTableResolver::resolve_remap_tables_( if (!src_db_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_db_name(cs_type, perserve_lettercase, src_db_name))) { LOG_WARN("failed to check and convert db name", K(ret), K(cs_type), K(perserve_lettercase), K(src_db_name)); - } else if (!src_tb_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, src_tb_name))) { + } else if (!src_tb_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, src_tb_name, is_oracle_mode))) { LOG_WARN("failed to check and convert table name", K(ret), K(cs_type), K(perserve_lettercase), K(src_tb_name)); } else if (!dst_db_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_db_name(cs_type, perserve_lettercase, dst_db_name))) { LOG_WARN("failed to check and convert db name", K(ret), K(cs_type), K(perserve_lettercase), K(dst_db_name)); - } else if (!dst_tb_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, dst_tb_name))) { + } else if (!dst_tb_name.empty() && OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, dst_tb_name, is_oracle_mode))) { LOG_WARN("failed to check and convert table name", K(ret), K(cs_type), K(perserve_lettercase), K(dst_tb_name)); } else if (!src_pt_name.empty() && src_pt_name.length() > OB_MAX_PARTITION_NAME_LENGTH) { ret = OB_ERR_WRONG_VALUE; @@ -5367,6 +5368,7 @@ int ObRecoverTableResolver::resolve_recover_tables_( int ret = OB_SUCCESS; ObCollationType cs_type = CS_TYPE_INVALID; bool perserve_lettercase = Worker::CompatMode::ORACLE == compat_mode ? true : (case_mode != OB_LOWERCASE_AND_INSENSITIVE); + bool is_oracle_mode = Worker::CompatMode::ORACLE == compat_mode; // No matter what name case mode is of target tenant, the names of recover tables are case sensitive. const ObNameCaseMode sensitive_case_mode = OB_ORIGIN_AND_SENSITIVE; if (OB_ISNULL(node)) { @@ -5404,7 +5406,7 @@ int ObRecoverTableResolver::resolve_recover_tables_( } else if (OB_NOT_NULL(db_node) && OB_NOT_NULL(tb_node) && OB_ISNULL(pt_node)) { // db_name.tb_name recover tb_name of db_name ObString db_name(db_node->str_len_, db_node->str_value_), tb_name(tb_node->str_len_, tb_node->str_value_); - if (OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, tb_name))) { + if (OB_FAIL(ObSQLUtils::check_and_convert_table_name(cs_type, perserve_lettercase, tb_name, is_oracle_mode))) { LOG_WARN("failed to check and convert table name", K(ret), K(cs_type), K(perserve_lettercase), K(tb_name)); } else if (OB_FAIL(ObSQLUtils::check_and_convert_db_name(cs_type, perserve_lettercase, db_name))) { LOG_WARN("failed to check and convert db name", K(ret), K(cs_type), K(perserve_lettercase), K(db_name)); diff --git a/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp b/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp index d804a523ca..4b044599c8 100755 --- a/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp +++ b/src/storage/high_availability/ob_storage_ha_tablet_builder.cpp @@ -346,7 +346,7 @@ int ObStorageHATabletsBuilder::update_pending_tablets_with_remote() const ObTabletID tablet_id = tablet_info.tablet_id_; if (OB_FAIL(ls->ha_get_tablet(tablet_id, tablet_handle))) { - if (OB_TABLET_NOT_EXIST) { + if (OB_TABLET_NOT_EXIST == ret) { LOG_INFO("tablet is not exist", K(tablet_id)); ret = OB_SUCCESS; continue;