@@ -4442,11 +4442,12 @@ ExecISInsertTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
4442
4442
IOTState prevState ;
4443
4443
trigdesc = relinfo -> ri_TrigDesc ;
4444
4444
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 ))
4447
4448
{
4448
4449
set_iot_state (RelationGetRelid (rel ), CMD_INSERT , IOT_NOT_REQUIRED );
4449
- return IOT_NOT_REQUIRED ;
4450
+ return IOT_NOT_REQUIRED ;
4450
4451
}
4451
4452
4452
4453
// if the trigger is already fired or not required
@@ -4471,7 +4472,8 @@ ExecISUpdateTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
4471
4472
if (trigdesc == NULL )
4472
4473
return IOT_NOT_REQUIRED ;
4473
4474
4474
- if (!trigdesc -> trig_update_instead_statement ) {
4475
+ if (!trigdesc -> trig_update_instead_statement || !isTsqlInsteadofTriggerExecution (estate , relinfo , TRIGGER_EVENT_UPDATE ))
4476
+ {
4475
4477
set_iot_state (RelationGetRelid (relinfo -> ri_RelationDesc ), CMD_UPDATE , IOT_NOT_REQUIRED );
4476
4478
return IOT_NOT_REQUIRED ;
4477
4479
}
@@ -4498,7 +4500,9 @@ ExecISDeleteTriggers(EState *estate, ResultRelInfo *relinfo, TransitionCaptureSt
4498
4500
4499
4501
if (trigdesc == NULL )
4500
4502
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
+ {
4502
4506
set_iot_state (RelationGetRelid (relinfo -> ri_RelationDesc ), CMD_DELETE , IOT_NOT_REQUIRED );
4503
4507
return IOT_NOT_REQUIRED ;
4504
4508
}
@@ -4962,7 +4966,11 @@ isTsqlInsteadofTriggerExecution(EState *estate, ResultRelInfo *relinfo, TriggerE
4962
4966
for (i = 0 ; i < trigdesc -> numtriggers ; i ++ )
4963
4967
{
4964
4968
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
+ {
4966
4974
return !TsqlRecuresiveCheck (relinfo );
4967
4975
}
4968
4976
}
0 commit comments