Skip to content

Commit dc153c3

Browse files
committed
Merge remote-tracking branch 'upstream/BABEL_2_X_DEV__PG_14_X' into babel_726_2_x
2 parents d5f3180 + 948f511 commit dc153c3

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/backend/commands/trigger.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4442,11 +4442,12 @@ ExecISInsertTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
44424442
IOTState prevState;
44434443
trigdesc = relinfo->ri_TrigDesc;
44444444
if (trigdesc == NULL)
4445-
return IOT_NOT_REQUIRED;
4446-
if (!trigdesc->trig_insert_instead_statement)
4445+
return IOT_NOT_REQUIRED;
4446+
4447+
if (!trigdesc->trig_insert_instead_statement || !isTsqlInsteadofTriggerExecution(estate, relinfo, TRIGGER_EVENT_INSERT))
44474448
{
44484449
set_iot_state(RelationGetRelid(rel), CMD_INSERT, IOT_NOT_REQUIRED);
4449-
return IOT_NOT_REQUIRED;
4450+
return IOT_NOT_REQUIRED;
44504451
}
44514452

44524453
// if the trigger is already fired or not required
@@ -4471,7 +4472,8 @@ ExecISUpdateTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
44714472
if (trigdesc == NULL)
44724473
return IOT_NOT_REQUIRED;
44734474

4474-
if (!trigdesc->trig_update_instead_statement) {
4475+
if (!trigdesc->trig_update_instead_statement || !isTsqlInsteadofTriggerExecution(estate, relinfo, TRIGGER_EVENT_UPDATE))
4476+
{
44754477
set_iot_state(RelationGetRelid(relinfo->ri_RelationDesc), CMD_UPDATE, IOT_NOT_REQUIRED);
44764478
return IOT_NOT_REQUIRED;
44774479
}
@@ -4498,7 +4500,9 @@ ExecISDeleteTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
44984500

44994501
if (trigdesc == NULL)
45004502
return IOT_NOT_REQUIRED;
4501-
if (!trigdesc->trig_delete_instead_statement) {
4503+
4504+
if (!trigdesc->trig_delete_instead_statement || !isTsqlInsteadofTriggerExecution(estate, relinfo, TRIGGER_EVENT_DELETE))
4505+
{
45024506
set_iot_state(RelationGetRelid(relinfo->ri_RelationDesc), CMD_DELETE, IOT_NOT_REQUIRED);
45034507
return IOT_NOT_REQUIRED;
45044508
}
@@ -4962,7 +4966,11 @@ isTsqlInsteadofTriggerExecution(EState *estate, ResultRelInfo *relinfo, TriggerE
49624966
for (i = 0; i < trigdesc->numtriggers; i++)
49634967
{
49644968
Trigger *trigger = &trigdesc->triggers[i];
4965-
if (TriggerEnabled(estate, relinfo, trigger, event, NULL, NULL, NULL)){
4969+
if (TriggerEnabled(estate, relinfo, trigger, event, NULL, NULL, NULL) &&
4970+
(TRIGGER_TYPE_MATCHES(trigger->tgtype, TRIGGER_TYPE_STATEMENT, TRIGGER_TYPE_INSTEAD, TRIGGER_TYPE_INSERT) ||
4971+
TRIGGER_TYPE_MATCHES(trigger->tgtype, TRIGGER_TYPE_STATEMENT, TRIGGER_TYPE_INSTEAD, TRIGGER_TYPE_UPDATE) ||
4972+
TRIGGER_TYPE_MATCHES(trigger->tgtype, TRIGGER_TYPE_STATEMENT, TRIGGER_TYPE_INSTEAD, TRIGGER_TYPE_DELETE)))
4973+
{
49664974
return !TsqlRecuresiveCheck(relinfo);
49674975
}
49684976
}

0 commit comments

Comments
 (0)