fix bug pdml update partition_key would change the new_row pk by insert before_row trigger

This commit is contained in:
yishenglanlingzui
2024-04-01 03:45:23 +00:00
committed by ob-robot
parent 1da0980936
commit 7261fc9df1
2 changed files with 7 additions and 2 deletions

View File

@ -71,6 +71,8 @@ int ObDmlCgService::generate_insert_ctdef(ObLogDelUpd &op,
LOG_TRACE("begin to generate insert ctdef", K(index_dml_info));
ObArray<ObRawExpr*> old_row;
ObArray<ObRawExpr*> new_row;
uint64_t dml_event = op.is_pdml_update_split() ?
ObTriggerEvents::get_update_event() : ObTriggerEvents::get_insert_event();
if (OB_ISNULL(op.get_stmt())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret));
@ -78,7 +80,7 @@ int ObDmlCgService::generate_insert_ctdef(ObLogDelUpd &op,
LOG_WARN("convert insert new row exprs failed", K(ret));
} else if (OB_FAIL(generate_dml_base_ctdef(op, index_dml_info,
ins_ctdef,
ObTriggerEvents::get_insert_event(),
dml_event,
old_row,
new_row))) {
LOG_WARN("generate dml base ctdef failed", K(ret), K(index_dml_info));
@ -276,12 +278,14 @@ int ObDmlCgService::generate_delete_ctdef(ObLogDelUpd &op,
int ret = OB_SUCCESS;
ObSEArray<ObRawExpr*, 64> old_row;
ObSEArray<ObRawExpr*, 64> new_row;
uint64_t dml_event = op.is_pdml_update_split() ?
ObTriggerEvents::get_update_event() : ObTriggerEvents::get_delete_event();
if (OB_FAIL(old_row.assign(index_dml_info.column_old_values_exprs_))) {
LOG_WARN("fail to assign delete old row", K(ret));
} else if (OB_FAIL(generate_dml_base_ctdef(op,
index_dml_info,
del_ctdef,
ObTriggerEvents::get_delete_event(),
dml_event,
old_row,
new_row))) {
LOG_WARN("generate dml base ctdef failed", K(ret), K(index_dml_info));

View File

@ -307,6 +307,7 @@ ObLogDelUpd::ObLogDelUpd(ObDelUpdLogPlan &plan)
need_barrier_(false),
is_first_dml_op_(false),
table_location_uncertain_(false),
is_pdml_update_split_(false),
pdml_partition_id_expr_(NULL),
pdml_is_returning_(false),
err_log_define_(),