[FEAT MERGE]:develop pl feature of 4.2 version

Co-authored-by: LiuYoung00 <liuyanglo_ol@163.com>
Co-authored-by: 0xacc <heyongyi1998@gmail.com>
Co-authored-by: seuwebber <webber_code@163.com>
This commit is contained in:
obdev
2023-04-27 16:08:10 +08:00
committed by ob-robot
parent 8e9c9d0c5f
commit 57f1c6e7ee
92 changed files with 3534 additions and 1304 deletions

View File

@ -1690,6 +1690,7 @@ int ObDmlCgService::add_trigger_arg(const ObTriggerInfo &trigger_info, ObDMLBase
trigger_arg.set_trigger_id(trigger_info.get_trigger_id());
trigger_arg.set_trigger_events(trigger_info.get_trigger_events());
trigger_arg.set_timing_points(trigger_info.get_timing_points());
trigger_arg.set_analyze_flag(trigger_info.get_analyze_flag());
if (OB_FAIL(dml_ctdef.trig_ctdef_.tg_args_.push_back(trigger_arg))) {
LOG_WARN("failed to add trigger arg", K(ret));
} else {
@ -2077,10 +2078,27 @@ int ObDmlCgService::convert_normal_triggers(ObLogDelUpd &log_op,
}
LOG_DEBUG("debug trigger", K(trig_ctdef.new_row_exprs_.count()),
K(trig_ctdef.old_row_exprs_.count()));
cg_.phy_plan_->set_has_nested_sql(true);
//为了支持触发器/UDF支持异常捕获,要求含有trigger的涉及修改表数据的dml串行执行
cg_.phy_plan_->set_need_serial_exec(true);
cg_.phy_plan_->set_contain_pl_udf_or_trigger(true);
bool is_forbid_parallel = false;
const ObTriggerInfo *trigger_info = NULL;
for (int64_t i = 0; OB_SUCC(ret) && !is_forbid_parallel && i < trigger_infos.count(); ++i) {
trigger_info = trigger_infos.at(i);
if (trigger_info->is_modifies_sql_data() ||
trigger_info->is_wps() ||
trigger_info->is_rps() ||
trigger_info->is_has_sequence()) {
is_forbid_parallel = true;
} else if (trigger_info->is_reads_sql_data()) { // dml + trigger(select) serial execute
is_forbid_parallel = true;
} else if (trigger_info->is_external_state()) {
is_forbid_parallel = true;
}
}
if (is_forbid_parallel) {
cg_.phy_plan_->set_has_nested_sql(true);
//为了支持触发器/UDF支持异常捕获,要求含有trigger的涉及修改表数据的dml串行执行
cg_.phy_plan_->set_need_serial_exec(true);
cg_.phy_plan_->set_contain_pl_udf_or_trigger(true);
}
}
}
return ret;