Fix the problem of generating SEQUENCE operator when the default sequence is not used

This commit is contained in:
hwx65 2024-04-28 06:45:40 +00:00 committed by ob-robot
parent d8fd236fa0
commit 7aaeade0b3
5 changed files with 21 additions and 20 deletions

View File

@ -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<ColumnItem *>(column)->default_value_expr_, expr))) {
LOG_WARN("fail to build expr_default expr", K(ret));
} else {
ObDelUpdResolver* del_upd_resolver = dynamic_cast<ObDelUpdResolver *>(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()))) {

View File

@ -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<ObColumnRefRawExpr*> &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<ObColumnRefRawExpr*> &value_desc, bool &need_match);
int build_autoinc_param(
const uint64_t table_id,

View File

@ -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()))) {

View File

@ -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));
}
}
}

View File

@ -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
}
}
}