MCPcopy Create free account
hub / github.com/apache/cloudberry / ExecIRUpdateTriggers

Function ExecIRUpdateTriggers

src/backend/commands/trigger.c:2969–3033  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2967}
2968
2969bool
2970ExecIRUpdateTriggers(EState *estate, ResultRelInfo *relinfo,
2971 HeapTuple trigtuple, TupleTableSlot *newslot)
2972{
2973 TriggerDesc *trigdesc = relinfo->ri_TrigDesc;
2974 TupleTableSlot *oldslot = ExecGetTriggerOldSlot(estate, relinfo);
2975 HeapTuple newtuple = NULL;
2976 bool should_free;
2977 TriggerData LocTriggerData = {0};
2978 int i;
2979
2980 LocTriggerData.type = T_TriggerData;
2981 LocTriggerData.tg_event = TRIGGER_EVENT_UPDATE |
2982 TRIGGER_EVENT_ROW |
2983 TRIGGER_EVENT_INSTEAD;
2984 LocTriggerData.tg_relation = relinfo->ri_RelationDesc;
2985
2986 ExecForceStoreHeapTuple(trigtuple, oldslot, false);
2987
2988 for (i = 0; i < trigdesc->numtriggers; i++)
2989 {
2990 Trigger *trigger = &trigdesc->triggers[i];
2991 HeapTuple oldtuple;
2992
2993 if (!TRIGGER_TYPE_MATCHES(trigger->tgtype,
2994 TRIGGER_TYPE_ROW,
2995 TRIGGER_TYPE_INSTEAD,
2996 TRIGGER_TYPE_UPDATE))
2997 continue;
2998 if (!TriggerEnabled(estate, relinfo, trigger, LocTriggerData.tg_event,
2999 NULL, oldslot, newslot))
3000 continue;
3001
3002 if (!newtuple)
3003 newtuple = ExecFetchSlotHeapTuple(newslot, true, &should_free);
3004
3005 LocTriggerData.tg_trigslot = oldslot;
3006 LocTriggerData.tg_trigtuple = trigtuple;
3007 LocTriggerData.tg_newslot = newslot;
3008 LocTriggerData.tg_newtuple = oldtuple = newtuple;
3009
3010 LocTriggerData.tg_trigger = trigger;
3011 newtuple = ExecCallTriggerFunc(&LocTriggerData,
3012 i,
3013 relinfo->ri_TrigFunctions,
3014 relinfo->ri_TrigInstrument,
3015 GetPerTupleMemoryContext(estate));
3016 if (newtuple == NULL)
3017 {
3018 return false; /* "do nothing" */
3019 }
3020 else if (newtuple != oldtuple)
3021 {
3022 ExecForceStoreHeapTuple(newtuple, newslot, false);
3023
3024 if (should_free)
3025 heap_freetuple(oldtuple);
3026

Callers 1

ExecUpdateFunction · 0.85

Calls 6

ExecGetTriggerOldSlotFunction · 0.85
ExecForceStoreHeapTupleFunction · 0.85
TriggerEnabledFunction · 0.85
ExecFetchSlotHeapTupleFunction · 0.85
ExecCallTriggerFuncFunction · 0.85
heap_freetupleFunction · 0.85

Tested by

no test coverage detected