Fix the problem of generating SEQUENCE operator when the default sequence is not used
This commit is contained in:
parent
d8fd236fa0
commit
7aaeade0b3
@ -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()))) {
|
||||
|
@ -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,
|
||||
|
@ -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()))) {
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user