From 7aaeade0b3428808097ace7d9f77c3a9e4d8146d Mon Sep 17 00:00:00 2001 From: hwx65 <1780011298@qq.com> Date: Sun, 28 Apr 2024 06:45:40 +0000 Subject: [PATCH] Fix the problem of generating SEQUENCE operator when the default sequence is not used --- .../resolver/dml/ob_default_value_utils.cpp | 8 ++++++ src/sql/resolver/dml/ob_del_upd_resolver.h | 2 +- src/sql/resolver/dml/ob_insert_resolver.cpp | 3 --- src/sql/resolver/dml/ob_update_resolver.cpp | 3 --- src/sql/resolver/expr/ob_raw_expr_util.cpp | 25 +++++++++---------- 5 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/sql/resolver/dml/ob_default_value_utils.cpp b/src/sql/resolver/dml/ob_default_value_utils.cpp index 64b5c8222..316208066 100644 --- a/src/sql/resolver/dml/ob_default_value_utils.cpp +++ b/src/sql/resolver/dml/ob_default_value_utils.cpp @@ -18,6 +18,7 @@ #include "sql/resolver/dml/ob_insert_stmt.h" #include "sql/resolver/expr/ob_raw_expr_util.h" #include "sql/session/ob_sql_session_info.h" +#include "sql/resolver/dml/ob_del_upd_resolver.h" namespace oceanbase { using namespace common; @@ -372,6 +373,13 @@ int ObDefaultValueUtils::build_default_expr_strict(const ColumnItem *column, ObR } else if (NULL != column->default_value_expr_) { if (OB_FAIL(build_expr_default_expr(column, const_cast(column)->default_value_expr_, expr))) { LOG_WARN("fail to build expr_default expr", K(ret)); + } else { + ObDelUpdResolver* del_upd_resolver = dynamic_cast(resolver_); + if (OB_ISNULL(del_upd_resolver)) { + // do nothing + } else if (OB_FAIL(del_upd_resolver->recursive_search_sequence_expr(expr))) { + LOG_WARN("fail to search sequence expr", K(ret)); + } } } else if (column->base_cid_ == OB_HIDDEN_PK_INCREMENT_COLUMN_ID) { if (OB_FAIL(resolver_->build_heap_table_hidden_pk_expr(expr, column->get_expr()))) { diff --git a/src/sql/resolver/dml/ob_del_upd_resolver.h b/src/sql/resolver/dml/ob_del_upd_resolver.h index 10cc0638a..02000bd25 100644 --- a/src/sql/resolver/dml/ob_del_upd_resolver.h +++ b/src/sql/resolver/dml/ob_del_upd_resolver.h @@ -51,6 +51,7 @@ public: const static uint8_t IS_JSON_CONSTRAINT_RELAX = 1; const static uint8_t IS_JSON_CONSTRAINT_STRICT = 4; inline bool is_resolve_insert_update() { return is_resolve_insert_update_;} + int recursive_search_sequence_expr(const ObRawExpr *default_expr); protected: int resolve_assignments(const ParseNode &parse_node, @@ -269,7 +270,6 @@ protected: ObIArray &column_exprs); int replace_column_ref_for_check_constraint(ObInsertTableInfo& table_info, ObRawExpr *&expr); int add_default_sequence_id_to_stmt(const uint64_t table_id); - int recursive_search_sequence_expr(const ObRawExpr *default_expr); int check_need_match_all_params(const common::ObIArray &value_desc, bool &need_match); int build_autoinc_param( const uint64_t table_id, diff --git a/src/sql/resolver/dml/ob_insert_resolver.cpp b/src/sql/resolver/dml/ob_insert_resolver.cpp index dc78d6e7f..2d645c7ee 100644 --- a/src/sql/resolver/dml/ob_insert_resolver.cpp +++ b/src/sql/resolver/dml/ob_insert_resolver.cpp @@ -184,9 +184,6 @@ int ObInsertResolver::resolve_insert_clause(const ParseNode &node) LOG_WARN("pullup part exprs for view failed", K(ret)); } else { /*do nothing*/ } } - if (is_oracle_mode()) { - OZ(add_default_sequence_id_to_stmt(insert_stmt->get_table_item(0)->table_id_)); - } } if (OB_SUCC(ret)) { if (OB_FAIL(generate_insert_table_info(*table_item, insert_stmt->get_insert_table_info()))) { diff --git a/src/sql/resolver/dml/ob_update_resolver.cpp b/src/sql/resolver/dml/ob_update_resolver.cpp index 7758cd990..3a833ae8b 100644 --- a/src/sql/resolver/dml/ob_update_resolver.cpp +++ b/src/sql/resolver/dml/ob_update_resolver.cpp @@ -106,9 +106,6 @@ int ObUpdateResolver::resolve(const ParseNode &parse_tree) if ((NULL != (*it)->view_base_item_ || has_tg) && OB_FAIL(add_all_column_to_updatable_view(*update_stmt, *(*it), has_tg))) { LOG_WARN("add all column for updatable view failed", K(ret)); - } else if (is_oracle_mode() && - OB_FAIL(add_default_sequence_id_to_stmt((*it)->table_id_))) { - LOG_WARN("add default sequence id to stmt failed", K(ret)); } } } diff --git a/src/sql/resolver/expr/ob_raw_expr_util.cpp b/src/sql/resolver/expr/ob_raw_expr_util.cpp index 98dd05319..f4f331d06 100644 --- a/src/sql/resolver/expr/ob_raw_expr_util.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_util.cpp @@ -1940,7 +1940,7 @@ int ObRawExprUtils::resolve_sequence_object(const ObQualifiedName &q_name, } else if (is_generated_column && stmt::T_INSERT != type && stmt::T_UPDATE != type && stmt::T_MERGE != type) { // do nothing. only generate sequence operator in INSERT/UPDATE stmt. - } else { + } else if (!is_generated_column) { if (0 == q_name.col_name_.case_compare("NEXTVAL")) { // 将 sequence id 记录到 plan 里 if (OB_FAIL(dml_resolver->add_sequence_id_to_stmt(sequence_id))) { @@ -1951,21 +1951,20 @@ int ObRawExprUtils::resolve_sequence_object(const ObQualifiedName &q_name, LOG_WARN("fail add id to stmt", K(sequence_id), K(ret)); } } - if (OB_FAIL(ret)) { - // do nothing - } else if (syn_checker.has_synonym()) { - // add synonym depedency schemas - if (OB_FAIL(dml_resolver->add_object_versions_to_dependency(DEPENDENCY_SYNONYM, - SYNONYM_SCHEMA, - syn_checker.get_synonym_ids(), - syn_checker.get_database_ids()))) { - LOG_WARN("add synonym version failed", K(ret)); - } else { - // do nothing - } + } + if (OB_FAIL(ret)) { + // do nothing + } else if (syn_checker.has_synonym()) { + // add synonym depedency schemas + if (OB_FAIL(dml_resolver->add_object_versions_to_dependency( + DEPENDENCY_SYNONYM, SYNONYM_SCHEMA, syn_checker.get_synonym_ids(), + syn_checker.get_database_ids()))) { + LOG_WARN("add synonym version failed", K(ret)); } else { // do nothing } + } else { + // do nothing } } }