From 056c5a28b41a3d10828568279e0c107c8ff930c5 Mon Sep 17 00:00:00 2001 From: cx0 Date: Mon, 20 Dec 2021 20:05:37 +0800 Subject: [PATCH] disallow multiple aliases to same table --- src/sql/resolver/dml/ob_update_resolver.cpp | 44 +++------------------ src/sql/resolver/dml/ob_update_resolver.h | 2 +- 2 files changed, 6 insertions(+), 40 deletions(-) diff --git a/src/sql/resolver/dml/ob_update_resolver.cpp b/src/sql/resolver/dml/ob_update_resolver.cpp index 61b6b5cc6..8bd0b7bb2 100644 --- a/src/sql/resolver/dml/ob_update_resolver.cpp +++ b/src/sql/resolver/dml/ob_update_resolver.cpp @@ -100,8 +100,8 @@ int ObUpdateResolver::resolve(const ParseNode& parse_tree) } if (OB_SUCC(ret) && update_stmt->get_table_size() > 1) { // check multi table update conflict - if (OB_FAIL(check_multi_update_key_conflict())) { - LOG_WARN("check multi update key conflict failed", K(ret)); + if (OB_FAIL(check_multi_update_table_conflict())) { + LOG_WARN("check multi update table conflict failed", K(ret)); } } @@ -336,7 +336,7 @@ int ObUpdateResolver::check_safe_update_mode(ObUpdateStmt* update_stmt) return ret; } -int ObUpdateResolver::check_multi_update_key_conflict() +int ObUpdateResolver::check_multi_update_table_conflict() { int ret = OB_SUCCESS; const ObUpdateStmt* update_stmt = get_update_stmt(); @@ -355,42 +355,8 @@ int ObUpdateResolver::check_multi_update_key_conflict() ret = OB_ERR_UNEXPECTED; LOG_WARN("tables are null", K(table1), K(table2)); } else if (ta1.table_id_ != ta2.table_id_ && table1->ref_id_ == table2->ref_id_) { - uint64_t base_table_id = - table1->is_generated_table() ? table1->get_base_table_item().ref_id_ : table1->ref_id_; - for (int64_t k = 0; OB_SUCC(ret) && k < ta1.assignments_.count(); ++k) { - bool is_key = false; - uint64_t column_id = ta1.assignments_.at(k).column_expr_->get_column_id(); - if (OB_FAIL(schema_checker_->column_is_key(base_table_id, column_id, is_key))) { - LOG_WARN("check column is key failed", K(ret), K(base_table_id), K(column_id)); - } else if (is_key) { - // set error code - ret = OB_ERR_MULTI_UPDATE_KEY_CONFLICT; - const ObString concat_name1 = concat_table_name(table1->database_name_, table1->get_table_name()); - const ObString concat_name2 = concat_table_name(table2->database_name_, table2->get_table_name()); - LOG_USER_ERROR(OB_ERR_MULTI_UPDATE_KEY_CONFLICT, - concat_name1.length(), - concat_name1.ptr(), - concat_name2.length(), - concat_name2.ptr()); - } - } - for (int64_t k = 0; OB_SUCC(ret) && k < ta2.assignments_.count(); ++k) { - bool is_key = false; - uint64_t column_id = ta2.assignments_.at(k).column_expr_->get_column_id(); - if (OB_FAIL(schema_checker_->column_is_key(base_table_id, column_id, is_key))) { - LOG_WARN("check column is key failed", K(ret), K(base_table_id), K(column_id)); - } else if (is_key) { - // set error code - ret = OB_ERR_MULTI_UPDATE_KEY_CONFLICT; - const ObString concat_name1 = concat_table_name(table1->database_name_, table1->get_table_name()); - const ObString concat_name2 = concat_table_name(table2->database_name_, table2->get_table_name()); - LOG_USER_ERROR(OB_ERR_MULTI_UPDATE_KEY_CONFLICT, - concat_name1.length(), - concat_name1.ptr(), - concat_name2.length(), - concat_name2.ptr()); - } - } + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "multiple aliases to same table"); } } } diff --git a/src/sql/resolver/dml/ob_update_resolver.h b/src/sql/resolver/dml/ob_update_resolver.h index b760303e6..1109c4875 100644 --- a/src/sql/resolver/dml/ob_update_resolver.h +++ b/src/sql/resolver/dml/ob_update_resolver.h @@ -53,7 +53,7 @@ private: int resolve_cascade_updated_global_index( const ObTableAssignment& ta, common::ObIArray& cascade_global_index); int resolve_multi_table_dml_info(const ObTableAssignment& ta, common::ObIArray& global_index); - int check_multi_update_key_conflict(); + int check_multi_update_table_conflict(); int check_view_updatable(); -- GitLab