/* * Andras Belokosztolszki * * A trigger function invoked after a new template is created automatically created from t5_predtype_after * */ #include "executor/spi.h" /* this is what you need to work with SPI */ #include "commands/trigger.h" /* -"- and triggers */ #include "utils/array.h" #include "catalog/pg_type.h" /* for OID constants */ extern Datum t5_template_trig(PG_FUNCTION_ARGS) ; Datum t5_template_trig(PG_FUNCTION_ARGS) { TriggerData *trigdata = (TriggerData *) fcinfo->context; TupleDesc tupdesc; HeapTuple rettuple; Relation rel; Trigger *trigger; /* to get trigger name */ int nargs; // trigger argument numbers char ** args; // trigger arguments elog(NOTICE, "hahaha"); if (!CALLED_AS_TRIGGER(fcinfo)) elog(ERROR, "TemplateTrigger: not fired by trigger manager"); /* tuple to return */ if (TRIGGER_FIRED_BY_INSERT(trigdata->tg_event)) { rettuple = trigdata->tg_trigtuple; } else { //update ??? for delete rettuple = trigdata->tg_trigtuple; } if (TRIGGER_FIRED_BEFORE(trigdata->tg_event)) { elog(ERROR,"TemplateTrigger: Trigger fired before the event"); } trigger = trigdata->tg_trigger; nargs = trigger->tgnargs; args = trigger->tgargs; rel = trigdata->tg_relation; tupdesc = trigdata->tg_relation->rd_att; trigdata = NULL; if(nargs!=1) elog(ERROR, "TemlateTrigger: Trigger must have one argument"); SPI_connect(); SPI_finish(); elog(NOTICE, "Template trigger finished"); return PointerGetDatum(rettuple); }