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

Function ExecBSUpdateTriggers

src/backend/commands/trigger.c:2720–2776  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2718}
2719
2720void
2721ExecBSUpdateTriggers(EState *estate, ResultRelInfo *relinfo)
2722{
2723 TriggerDesc *trigdesc;
2724 int i;
2725 TriggerData LocTriggerData = {0};
2726 Bitmapset *updatedCols;
2727
2728 trigdesc = relinfo->ri_TrigDesc;
2729
2730 if (trigdesc == NULL)
2731 return;
2732 if (!trigdesc->trig_update_before_statement)
2733 return;
2734
2735 /* no-op if we already fired BS triggers in this context */
2736 if (before_stmt_triggers_fired(RelationGetRelid(relinfo->ri_RelationDesc),
2737 CMD_UPDATE))
2738 return;
2739
2740 /* statement-level triggers operate on the parent table */
2741 Assert(relinfo->ri_RootResultRelInfo == NULL);
2742
2743 updatedCols = ExecGetAllUpdatedCols(relinfo, estate);
2744
2745 LocTriggerData.type = T_TriggerData;
2746 LocTriggerData.tg_event = TRIGGER_EVENT_UPDATE |
2747 TRIGGER_EVENT_BEFORE;
2748 LocTriggerData.tg_relation = relinfo->ri_RelationDesc;
2749 LocTriggerData.tg_updatedcols = updatedCols;
2750 for (i = 0; i < trigdesc->numtriggers; i++)
2751 {
2752 Trigger *trigger = &trigdesc->triggers[i];
2753 HeapTuple newtuple;
2754
2755 if (!TRIGGER_TYPE_MATCHES(trigger->tgtype,
2756 TRIGGER_TYPE_STATEMENT,
2757 TRIGGER_TYPE_BEFORE,
2758 TRIGGER_TYPE_UPDATE))
2759 continue;
2760 if (!TriggerEnabled(estate, relinfo, trigger, LocTriggerData.tg_event,
2761 updatedCols, NULL, NULL))
2762 continue;
2763
2764 LocTriggerData.tg_trigger = trigger;
2765 newtuple = ExecCallTriggerFunc(&LocTriggerData,
2766 i,
2767 relinfo->ri_TrigFunctions,
2768 relinfo->ri_TrigInstrument,
2769 GetPerTupleMemoryContext(estate));
2770
2771 if (newtuple)
2772 ereport(ERROR,
2773 (errcode(ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED),
2774 errmsg("BEFORE STATEMENT trigger cannot return a value")));
2775 }
2776}
2777

Callers 1

fireBSTriggersFunction · 0.85

Calls 6

ExecGetAllUpdatedColsFunction · 0.85
TriggerEnabledFunction · 0.85
ExecCallTriggerFuncFunction · 0.85
errcodeFunction · 0.50
errmsgFunction · 0.50

Tested by

no test coverage detected