[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:
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user