diff --git a/src/observer/ob_inner_sql_connection.cpp b/src/observer/ob_inner_sql_connection.cpp index 86a6731389..d20ef1ec3a 100644 --- a/src/observer/ob_inner_sql_connection.cpp +++ b/src/observer/ob_inner_sql_connection.cpp @@ -2117,37 +2117,5 @@ int ObInnerSQLConnection::end_nested_session(ObSQLSessionInfo::StmtSavedValue &s } return ret; } - -int ObInnerSQLConnection::set_foreign_key_cascade(bool is_cascade) -{ - int ret = OB_SUCCESS; - OV (is_extern_session()); - OX (extern_session_->set_foreign_key_casecade(is_cascade)); - return ret; -} - -int ObInnerSQLConnection::get_foreign_key_cascade(bool &is_cascade) const -{ - int ret = OB_SUCCESS; - OV (is_extern_session()); - OX (is_cascade = extern_session_->is_foreign_key_cascade()); - return ret; -} - -int ObInnerSQLConnection::set_foreign_key_check_exist(bool is_check_exist) -{ - int ret = OB_SUCCESS; - OV (is_extern_session()); - OX (extern_session_->set_foreign_key_check_exist(is_check_exist)); - return ret; -} - -int ObInnerSQLConnection::get_foreign_key_check_exist(bool &is_check_exist) const -{ - int ret = OB_SUCCESS; - OV (is_extern_session()); - OX (is_check_exist = extern_session_->is_foreign_key_check_exist()); - return ret; -} } // end of namespace observer } // end of namespace oceanbase diff --git a/src/sql/code_generator/ob_static_engine_cg.cpp b/src/sql/code_generator/ob_static_engine_cg.cpp index 19c26c5b84..12e14b0eac 100644 --- a/src/sql/code_generator/ob_static_engine_cg.cpp +++ b/src/sql/code_generator/ob_static_engine_cg.cpp @@ -2740,6 +2740,8 @@ int ObStaticEngineCG::generate_delete_with_das(ObLogDelete &op, ObTableDeleteSpe DASTableIdList parent_tables(phy_plan_->get_allocator()); if(OB_FAIL(check_fk_nested_dup_del(del_table_id, root_table_id, parent_tables, is_dup))) { LOG_WARN("failed to perform nested duplicate table check", K(ret), K(del_table_id), K(root_table_id)); + } else if (is_dup) { + LOG_TRACE("[FOREIGN KEY] find duplicate deleted table induced by foreign key casacde", K(del_table_id), K(root_table_id)); } } if (OB_SUCC(ret) && is_dup) { @@ -8763,7 +8765,7 @@ int ObStaticEngineCG::check_fk_nested_dup_del(const uint64_t table_id, const uint64_t child_table_id = fk_info.child_table_id_; const uint64_t parent_table_id = fk_info.parent_table_id_; ObReferenceAction del_act = fk_info.delete_action_; - if (child_table_id != common::OB_INVALID_ID && del_act == ACTION_CASCADE) { + if (root_table_id == parent_table_id && child_table_id != common::OB_INVALID_ID && del_act == ACTION_CASCADE) { if (child_table_id == table_id) { is_dup = true; } else if (has_cycle_reference(parent_tables, child_table_id)) { diff --git a/src/sql/das/ob_das_context.h b/src/sql/das/ob_das_context.h index 6aa852128a..0ba9af26df 100644 --- a/src/sql/das/ob_das_context.h +++ b/src/sql/das/ob_das_context.h @@ -62,6 +62,18 @@ public: } ~ObDASCtx() { + // Destroy the hash set list used for checking duplicate rowkey for foreign key cascade delete + if (!del_ctx_list_.empty()) { + DASDelCtxList::iterator iter = del_ctx_list_.begin(); + for (; iter != del_ctx_list_.end(); iter++) { + DmlRowkeyDistCtx& del_ctx = *iter; + if (del_ctx.deleted_rows_ != nullptr) { + del_ctx.deleted_rows_->destroy(); + del_ctx.deleted_rows_ = nullptr; + } + } + } + del_ctx_list_.destroy(); } int init(const ObPhysicalPlan &plan, ObExecContext &ctx); diff --git a/src/sql/engine/dml/ob_dml_service.cpp b/src/sql/engine/dml/ob_dml_service.cpp index 5b1c84d82b..12266d8106 100644 --- a/src/sql/engine/dml/ob_dml_service.cpp +++ b/src/sql/engine/dml/ob_dml_service.cpp @@ -742,7 +742,7 @@ int ObDMLService::process_delete_row(const ObDelCtDef &del_ctdef, if (OB_SUCC(ret) && !is_skipped && OB_NOT_NULL(del_rtdef.se_rowkey_dist_ctx_) && !has_instead_of_trg) { bool is_distinct = false; ObExecContext *root_ctx = nullptr; - if (OB_FAIL(dml_op.get_exec_ctx().get_fk_root_ctx(root_ctx))) { + if (OB_FAIL(get_exec_ctx_for_duplicate_rowkey_check(&dml_op.get_exec_ctx(), root_ctx))) { LOG_WARN("get root ExecContext failed", K(ret)); } else if (OB_ISNULL(root_ctx)) { ret = OB_ERR_UNEXPECTED; @@ -1401,7 +1401,7 @@ int ObDMLService::init_del_rtdef(ObDMLRtCtx &dml_rtctx, if (dml_op.is_fk_nested_session()) { // for delete distinct check that has foreign key, perform global distinct check between nested session, // to avoid delete same row mutiple times between different nested sqls - if (OB_FAIL(dml_op.get_exec_ctx().get_fk_root_ctx(root_ctx))) { + if (OB_FAIL(get_exec_ctx_for_duplicate_rowkey_check(&dml_op.get_exec_ctx(), root_ctx))) { LOG_WARN("failed to get root exec ctx", K(ret)); } else if (OB_ISNULL(root_ctx)) { ret = OB_ERR_UNEXPECTED; @@ -1417,6 +1417,7 @@ int ObDMLService::init_del_rtdef(ObDMLRtCtx &dml_rtctx, // for table not deleted at parent session, create a new hash set and add to the list at root ctx DmlRowkeyDistCtx del_ctx; del_ctx.table_id_ = del_table_id; + LOG_TRACE("[FOREIGN KEY] create hash set used for checking duplicate rowkey due to cascade delete", K(del_table_id)); if (OB_FAIL(ObDMLService::create_rowkey_check_hashset(dml_op.get_spec().rows_, root_ctx, del_ctx.deleted_rows_))) { LOG_WARN("failed to create hash set", K(ret)); } else if (OB_FAIL(del_ctx_list.push_back(del_ctx))) { @@ -1435,7 +1436,8 @@ int ObDMLService::init_del_rtdef(ObDMLRtCtx &dml_rtctx, DASDelCtxList& del_ctx_list = dml_op.get_exec_ctx().get_das_ctx().get_das_del_ctx_list(); DmlRowkeyDistCtx del_ctx; del_ctx.table_id_ = del_table_id; - if (OB_FAIL(dml_op.get_exec_ctx().get_fk_root_ctx(root_ctx))) { + LOG_TRACE("[FOREIGN KEY] create hash set used for checking duplicate rowkey due to cascade delete", K(del_table_id)); + if (OB_FAIL(get_exec_ctx_for_duplicate_rowkey_check(&dml_op.get_exec_ctx(), root_ctx))) { LOG_WARN("failed to get root exec ctx", K(ret)); } else if (OB_ISNULL(root_ctx) || root_ctx != &dml_op.get_exec_ctx()) { ret = OB_ERR_UNEXPECTED; @@ -1453,7 +1455,7 @@ int ObDMLService::init_del_rtdef(ObDMLRtCtx &dml_rtctx, } } else { //T_DISTINCT_NONE == del_ctdef.distinct_algo_, means optimizer think don't need to create a new hash set for distinct check if (dml_op.is_fk_nested_session()) { //for delete triggered by delete cascade, need to check whether upper nested sqls will delete the same table - if (OB_FAIL(dml_op.get_exec_ctx().get_fk_root_ctx(root_ctx))) { + if (OB_FAIL(get_exec_ctx_for_duplicate_rowkey_check(&dml_op.get_exec_ctx(), root_ctx))) { LOG_WARN("failed to get root exec ctx", K(ret)); } else if (OB_ISNULL(root_ctx)) { ret = OB_ERR_UNEXPECTED; @@ -1462,6 +1464,7 @@ int ObDMLService::init_del_rtdef(ObDMLRtCtx &dml_rtctx, DASDelCtxList& del_ctx_list = root_ctx->get_das_ctx().get_das_del_ctx_list(); if (ObDMLService::is_nested_dup_table(del_table_id, del_ctx_list)) { // A duplicate table was found + LOG_TRACE("[FOREIGN KEY] get hash set used for checking duplicate rowkey due to cascade delete", K(del_table_id)); if (OB_FAIL(ObDMLService::get_nested_dup_table_ctx(del_table_id, del_ctx_list, del_rtdef.se_rowkey_dist_ctx_))) { LOG_WARN("failed to get nested duplicate delete table ctx for fk nested session", K(ret)); } @@ -2448,5 +2451,31 @@ int ObDMLService::log_user_error_inner( return ret; } +// get the exec_ctx to create hash set to perform duplicate rowkey check, +// which is used to avoid delete or update same row mutiple times +int ObDMLService::get_exec_ctx_for_duplicate_rowkey_check(ObExecContext *ctx, ObExecContext* &needed_ctx) +{ + int ret = OB_SUCCESS; + ObExecContext *parent_ctx = nullptr; + needed_ctx = nullptr; + if (OB_ISNULL(ctx)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected null pointer", K(ret)); + } else if (OB_ISNULL(parent_ctx = ctx->get_parent_ctx())) { + // case1: current ctx is the root ctx, means current stmt is the root stmt, + // create hash set at current ctx to perform duplicate rowkey check + needed_ctx = ctx; + } else if (!(parent_ctx->get_das_ctx().is_fk_cascading_)) { + // case2: current stmt is not the root stmt, is not triggered by foreign key cascade operations + // may be trigger or PL instead, create hash set at current ctx to perform duplicate rowkey check + needed_ctx = ctx; + } else if (OB_FAIL(SMART_CALL(get_exec_ctx_for_duplicate_rowkey_check(parent_ctx, needed_ctx)))) { + // case3: current stmt is a nested stmt, and is triggered by foreign key cascade operations + // need to find it's ancestor ctx which is not triggered by cascade operations + LOG_WARN("failed to get the exec_ctx to perform duplicate rowkey check between nested sqls", K(ret), K(ctx->get_nested_level())); + } + return ret; +} + } // namespace sql } // namespace oceanbase diff --git a/src/sql/engine/dml/ob_dml_service.h b/src/sql/engine/dml/ob_dml_service.h index 5ac304f4fe..e20bd8b9b5 100644 --- a/src/sql/engine/dml/ob_dml_service.h +++ b/src/sql/engine/dml/ob_dml_service.h @@ -249,6 +249,7 @@ public: int64_t row_num, common::ObString &column_name, ObExecContext &ctx); + static int get_exec_ctx_for_duplicate_rowkey_check(ObExecContext *ctx, ObExecContext* &needed_ctx); private: template diff --git a/src/sql/engine/dml/ob_table_modify_op.cpp b/src/sql/engine/dml/ob_table_modify_op.cpp index 9418805cf8..56cb75954b 100644 --- a/src/sql/engine/dml/ob_table_modify_op.cpp +++ b/src/sql/engine/dml/ob_table_modify_op.cpp @@ -57,10 +57,8 @@ int ForeignKeyHandle::do_handle(ObTableModifyOp &op, if (OB_SUCC(ret) && !new_row.empty()) { if (ACTION_CHECK_EXIST == fk_arg.ref_action_) { // insert or update. - bool is_foreign_key_cascade = false; - if (OB_FAIL(op.get_foreign_key_cascade(is_foreign_key_cascade))) { - LOG_WARN("failed to get foreign key cascade", K(ret), K(fk_arg), K(new_row)); - } else if (is_foreign_key_cascade) { + bool is_foreign_key_cascade = ObSQLUtils::is_fk_nested_sql(&op.get_exec_ctx()); + if (is_foreign_key_cascade) { // nested update can not check parent row. LOG_DEBUG("skip foreign_key_check_exist in nested session"); } else if (OB_FAIL(check_exist(op, fk_arg, new_row, fk_checker, false))) { @@ -247,8 +245,6 @@ int ForeignKeyHandle::check_exist_inner_sql(ObTableModifyOp &op, SMART_VAR(ObMySQLProxy::MySQLResult, res) { if (OB_FAIL(op.begin_nested_session(fk_arg.is_self_ref_))) { LOG_WARN("failed to begin nested session", K(ret), K(stmt_buf)); - } else if (OB_FAIL(op.set_foreign_key_check_exist(true))) { - LOG_WARN("failed to set foreign key cascade", K(ret)); } else { // must call end_nested_session() if begin_nested_session() success. bool is_zero = false; @@ -314,13 +310,6 @@ int ForeignKeyHandle::check_exist_inner_sql(ObTableModifyOp &op, } } } - int reset_ret = op.set_foreign_key_check_exist(false); - if (OB_SUCCESS != reset_ret) { - LOG_WARN("failed to reset foreign key cascade", K(reset_ret)); - if (OB_SUCCESS == ret) { - ret = reset_ret; - } - } int end_ret = op.end_nested_session(); if (OB_SUCCESS != end_ret) { LOG_WARN("failed to end nested session", K(end_ret)); @@ -408,22 +397,9 @@ int ForeignKeyHandle::cascade(ObTableModifyOp &op, if (OB_FAIL(op.begin_nested_session(fk_arg.is_self_ref_))) { LOG_WARN("failed to begin nested session", K(ret)); } else { - // must call end_nested_session() if begin_nested_session() success. - // - // skip modify_ctx.set_foreign_key_cascade when cascade update and self ref. - if (!(fk_arg.is_self_ref_ && !new_row.empty()) && - OB_FAIL(op.set_foreign_key_cascade(true))) { - LOG_WARN("failed to set foreign key cascade", K(ret)); - } else if (OB_FAIL(op.execute_write(stmt_buf))) { + if (OB_FAIL(op.execute_write(stmt_buf))) { LOG_WARN("failed to execute stmt", K(ret), K(stmt_buf)); } - int reset_ret = op.set_foreign_key_cascade(false); - if (OB_SUCCESS != reset_ret) { - LOG_WARN("failed to reset foreign key cascade", K(reset_ret)); - if (OB_SUCCESS == ret) { - ret = reset_ret; - } - } int end_ret = op.end_nested_session(); if (OB_SUCCESS != end_ret) { LOG_WARN("failed to end nested session", K(end_ret)); @@ -490,18 +466,9 @@ int ForeignKeyHandle::set_null(ObTableModifyOp &op, if (OB_FAIL(op.begin_nested_session(fk_arg.is_self_ref_))) { LOG_WARN("failed to begin nested session", K(ret)); } else { - if (OB_FAIL(op.set_foreign_key_cascade(true))) { - LOG_WARN("failed to set foreign key cascade", K(ret)); - } else if (OB_FAIL(op.execute_write(stmt_buf))) { + if (OB_FAIL(op.execute_write(stmt_buf))) { LOG_WARN("failed to execute stmt", K(ret), K(stmt_buf)); } - int reset_ret = op.set_foreign_key_cascade(false); - if (OB_SUCCESS != reset_ret) { - LOG_WARN("failed to reset foreign key cascade", K(reset_ret)); - if (OB_SUCCESS == ret) { - ret = reset_ret; - } - } int end_ret = op.end_nested_session(); if (OB_SUCCESS != end_ret) { LOG_WARN("failed to end nested session", K(end_ret)); @@ -718,20 +685,6 @@ ObTableModifyOp::ObTableModifyOp(ObExecContext &ctx, GET_SQL_MODE_BIT(IS_NO_BACKSLASH_ESCAPES, ctx_.get_my_session()->get_sql_mode(), obj_print_params_.skip_escape_); } -bool ObTableModifyOp::is_fk_root_session() { - bool ret = false; - if (OB_ISNULL(ctx_.get_parent_ctx())) { - if (this->need_foreign_key_checks()) { - ret = true; - } - } else { - if (!ctx_.get_parent_ctx()->get_das_ctx().is_fk_cascading_ && need_foreign_key_checks()) { - ret = true; - } - } - return ret; -} - int ObTableModifyOp::inner_open() { int ret = OB_SUCCESS; @@ -879,19 +832,6 @@ int ObTableModifyOp::inner_close() } } dml_modify_rows_.clear(); - // Release the hash sets created at fk root ctx for delete distinct checks - if (OB_SUCC(ret) && get_exec_ctx().is_fk_root_ctx()) { - DASDelCtxList& del_ctx_list = get_exec_ctx().get_das_ctx().get_das_del_ctx_list(); - DASDelCtxList::iterator iter = del_ctx_list.begin(); - for (; OB_SUCC(ret)&& iter != del_ctx_list.end(); iter++) { - DmlRowkeyDistCtx del_ctx = *iter; - if (del_ctx.deleted_rows_ != nullptr) { - del_ctx.deleted_rows_->destroy(); - del_ctx.deleted_rows_ = nullptr; - } - } - del_ctx_list.destroy(); - } return ret; } @@ -1086,43 +1026,6 @@ int ObTableModifyOp::end_nested_session() } return ret; } - -int ObTableModifyOp::set_foreign_key_cascade(bool is_cascade) -{ - int ret = OB_SUCCESS; - OV (OB_NOT_NULL(inner_conn_)); - OZ (inner_conn_->set_foreign_key_cascade(is_cascade)); - return ret; -} - -int ObTableModifyOp::get_foreign_key_cascade(bool &is_cascade) const -{ - int ret = OB_SUCCESS; - if (OB_NOT_NULL(inner_conn_)) { - OZ (inner_conn_->get_foreign_key_cascade(is_cascade)); - } else { - //if inner connection is null, it means not need use inner sql, so set is_cascade false - is_cascade = false; - } - return ret; -} - -int ObTableModifyOp::set_foreign_key_check_exist(bool is_check_exist) -{ - int ret = OB_SUCCESS; - OV (OB_NOT_NULL(inner_conn_)); - OZ (inner_conn_->set_foreign_key_check_exist(is_check_exist)); - return ret; -} - -int ObTableModifyOp::get_foreign_key_check_exist(bool &is_check_exist) const -{ - int ret = OB_SUCCESS; - OV (OB_NOT_NULL(inner_conn_)); - OZ (inner_conn_->get_foreign_key_check_exist(is_check_exist)); - return ret; -} - int ObTableModifyOp::execute_write(const char *sql) { int ret = OB_SUCCESS; diff --git a/src/sql/engine/ob_exec_context.cpp b/src/sql/engine/ob_exec_context.cpp index 9b4b9a0f36..5100763439 100644 --- a/src/sql/engine/ob_exec_context.cpp +++ b/src/sql/engine/ob_exec_context.cpp @@ -233,31 +233,6 @@ void ObExecContext::reset_op_env() udf_ctx_mgr_->reset(); } } - -int ObExecContext::get_fk_root_ctx(ObExecContext* &fk_root_ctx) -{ - int ret = OB_SUCCESS; - if (OB_ISNULL(this->get_parent_ctx())) { - fk_root_ctx = this; - } else if (!this->get_my_session()->is_foreign_key_cascade()) { - fk_root_ctx = this; - } else if (OB_FAIL(SMART_CALL(get_parent_ctx()->get_fk_root_ctx(fk_root_ctx)))) { - LOG_WARN("failed to get fk root ctx", K(ret)); - } - return ret; -} - -bool ObExecContext::is_fk_root_ctx() -{ - bool ret = false; - if (OB_ISNULL(this->get_parent_ctx())) { - ret = true; - } else if (!this->get_my_session()->is_foreign_key_cascade()) { - ret = true; - } - return ret; -} - int ObExecContext::init_phy_op(const uint64_t phy_op_size) { int ret = OB_SUCCESS; diff --git a/src/sql/engine/ob_exec_context.h b/src/sql/engine/ob_exec_context.h index 90e73f235a..fcfe8c67ee 100644 --- a/src/sql/engine/ob_exec_context.h +++ b/src/sql/engine/ob_exec_context.h @@ -208,9 +208,6 @@ public: inline ObSQLSessionInfo *get_my_session() const; //get the parent execute context in nested sql ObExecContext *get_parent_ctx() { return parent_ctx_; } - //get the root execute context of foreign key in nested sql - int get_fk_root_ctx(ObExecContext* &root_ctx); - bool is_fk_root_ctx(); int64_t get_nested_level() const { return nested_level_; } /** * @brief set sql proxy diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 354daa739b..aa8ccba432 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -139,8 +139,6 @@ ObBasicSessionInfo::ObBasicSessionInfo(const uint64_t tenant_id) inf_pc_configs_(), curr_trans_last_stmt_end_time_(0), check_sys_variable_(true), - is_foreign_key_cascade_(false), - is_foreign_key_check_exist_(false), acquire_from_pool_(false), release_to_pool_(true), is_tenant_killed_(0), @@ -431,8 +429,6 @@ void ObBasicSessionInfo::reset(bool skip_sys_var) curr_trans_last_stmt_end_time_ = 0; reserved_read_snapshot_version_.reset(); check_sys_variable_ = true; - is_foreign_key_cascade_ = false; - is_foreign_key_check_exist_ = false; acquire_from_pool_ = false; // 不要重置release_to_pool_,原因见属性声明位置的注释。 is_tenant_killed_ = 0; @@ -4416,6 +4412,9 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo) bool need_serial_exec = false; uint64_t sql_scope_flags = sql_scope_flags_.get_flags(); + // No meaningful field for serialization compatibility + bool is_foreign_key_cascade = false; + bool is_foreign_key_check_exist = false; LST_DO_CODE(OB_UNIS_ENCODE, sys_vars_cache_.inc_data_, unused_safe_weak_read_snapshot, @@ -4439,10 +4438,10 @@ OB_DEF_SERIALIZE(ObBasicSessionInfo) labels_, total_stmt_tables_, cur_stmt_tables_, - is_foreign_key_cascade_, + is_foreign_key_cascade, sys_var_in_pc_str_, config_in_pc_str_, - is_foreign_key_check_exist_, + is_foreign_key_check_exist, need_serial_exec, sql_scope_flags, stmt_type_, @@ -4620,6 +4619,9 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo) flt_vars_.last_flt_trace_id_.reset(); flt_vars_.last_flt_span_id_.reset(); const ObTZInfoMap *tz_info_map = tz_info_wrap_.get_tz_info_offset().get_tz_info_map(); + // No meaningful field for serialization compatibility + bool is_foreign_key_cascade = false; + bool is_foreign_key_check_exist = false; LST_DO_CODE(OB_UNIS_DECODE, sys_vars_cache_.inc_data_, unused_safe_weak_read_snapshot, @@ -4643,10 +4645,10 @@ OB_DEF_DESERIALIZE(ObBasicSessionInfo) labels_, total_stmt_tables_, cur_stmt_tables_, - is_foreign_key_cascade_, + is_foreign_key_cascade, sys_var_in_pc_str_, config_in_pc_str_, - is_foreign_key_check_exist_, + is_foreign_key_check_exist, need_serial_exec, sql_scope_flags, stmt_type_, @@ -4952,7 +4954,9 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo) int64_t unused_safe_weak_read_snapshot = 0; bool need_serial_exec = false; uint64_t sql_scope_flags = sql_scope_flags_.get_flags(); - + // No meaningful field for serialization compatibility + bool is_foreign_key_cascade = false; + bool is_foreign_key_check_exist = false; LST_DO_CODE(OB_UNIS_ADD_LEN, sys_vars_cache_.inc_data_, unused_safe_weak_read_snapshot, @@ -4976,10 +4980,10 @@ OB_DEF_SERIALIZE_SIZE(ObBasicSessionInfo) labels_, total_stmt_tables_, cur_stmt_tables_, - is_foreign_key_cascade_, + is_foreign_key_cascade, sys_var_in_pc_str_, config_in_pc_str_, - is_foreign_key_check_exist_, + is_foreign_key_check_exist, need_serial_exec, sql_scope_flags, stmt_type_, @@ -5955,10 +5959,6 @@ int ObBasicSessionInfo::base_save_session(BaseSavedValue &saved_value, bool skip OX (cur_stmt_tables_.reset()); OX (sys_vars_cache_.get_autocommit_info(saved_value.inc_autocommit_)); OX (sys_vars_cache_.set_autocommit_info(false)); - OX (saved_value.is_foreign_key_cascade_ = is_foreign_key_cascade_); - OX (is_foreign_key_cascade_ = false); - OX (saved_value.is_foreign_key_check_exist_ = is_foreign_key_check_exist_); - OX (is_foreign_key_check_exist_ = false); return ret; } @@ -5989,8 +5989,6 @@ int ObBasicSessionInfo::begin_nested_session(StmtSavedValue &saved_value, bool s int ObBasicSessionInfo::base_restore_session(BaseSavedValue &saved_value) { int ret = OB_SUCCESS; - OX (is_foreign_key_check_exist_ = saved_value.is_foreign_key_check_exist_); - OX (is_foreign_key_cascade_ = saved_value.is_foreign_key_cascade_); OX (sys_vars_cache_.set_autocommit_info(saved_value.inc_autocommit_)); OZ (cur_stmt_tables_.assign(saved_value.cur_stmt_tables_)); OZ (total_stmt_tables_.assign(saved_value.total_stmt_tables_)); diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index 1770f40702..c07f0de0c8 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -316,7 +316,6 @@ public: cur_stmt_tables_.reset(); read_uncommited_ = false; inc_autocommit_ = false; - is_foreign_key_cascade_ = false; need_serial_exec_ = false; } public: @@ -331,8 +330,6 @@ public: // bool in_transaction_; // 对应TransSavedValue的trans_flags_,不放在基类中。 bool read_uncommited_; bool inc_autocommit_; - bool is_foreign_key_cascade_; - bool is_foreign_key_check_exist_; bool need_serial_exec_; public: // 原TransSavedValue的属性 @@ -1352,11 +1349,6 @@ public: void set_tenant_killed() { ATOMIC_STORE(&is_tenant_killed_, 1); } bool is_use_inner_allocator() const; int64_t get_reused_count() const { return reused_count_; } - bool is_foreign_key_cascade() const { return is_foreign_key_cascade_; } - void set_foreign_key_casecade(bool value) { is_foreign_key_cascade_ = value; } - bool is_foreign_key_check_exist() const { return is_foreign_key_check_exist_; } - void set_foreign_key_check_exist(bool value) { is_foreign_key_check_exist_ = value; } - bool reuse_cur_sql_no() const { return is_foreign_key_cascade() || is_foreign_key_check_exist(); } inline void set_first_need_txn_stmt_type(stmt::StmtType stmt_type) { if (stmt::T_NONE == first_need_txn_stmt_type_) { @@ -2287,8 +2279,6 @@ private: int64_t curr_trans_last_stmt_end_time_; bool check_sys_variable_; - bool is_foreign_key_cascade_; - bool is_foreign_key_check_exist_; bool acquire_from_pool_; // 在构造函数中初始化为true,在一些特定错误情况下被设为false,表示session不能释放回session pool。 // 所以reset接口中不需要、并且也不能重置release_to_pool_。