/*
* Andras Belokosztolszki
*
* A trigger function invoked when a predicate is is modified
* it looks up in the registered templates for this predicate the
* parties to be notified
*
* create trigger t4predt_..._trigger
* AFTER INSERT on ...
* FOR EACH ROW
* EXECUTE PROCEDURE t4predt_trig1();
*
*/
#include "executor/spi.h" /* this is what you need to work with SPI */
#include "commands/trigger.h" /* -"- and triggers */
#include "catalog/pg_type.h" /* for OID constants */
#include "MPS_triggers.h"
extern Datum t5_pred_general_trig(PG_FUNCTION_ARGS) ;
Datum t5_pred_general_trig(PG_FUNCTION_ARGS) {
TriggerData *trigdata = (TriggerData *) fcinfo->context;
TupleDesc tupdesc1;
HeapTuple rettuple;
HeapTuple rettuple_old; /* in case of update the old tuple */
Relation rel;
Trigger *trigger; /* to get trigger name */
int nargs;
char **args; /* arguments */
elog(NOTICE, "PredicateGeneralTrigger: Called");
if (!CALLED_AS_TRIGGER(fcinfo))
elog(ERROR, "PredicateGeneralTrigger: not fired by trigger manager!");
/* tuple to return */
if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) {
rettuple = trigdata->tg_newtuple;
rettuple_old = trigdata->tg_trigtuple;
} else {
rettuple = trigdata->tg_trigtuple;
rettuple_old = trigdata->tg_trigtuple; // old tuple is the default !!!
}
if (!TRIGGER_FIRED_AFTER(trigdata->tg_event)) {
elog(ERROR,"PredicateGeneralTrigger: Trigger not fired after event");
}
rel = trigdata->tg_relation;
tupdesc1 = trigdata->tg_relation->rd_att;
// check trigger parameters !!
trigger = trigdata->tg_trigger;
nargs = trigger->tgnargs;
args = trigger->tgargs;
trigdata = NULL;
/* connect to the database */
SPI_connect();
SPI_finish();
elog(NOTICE,"General trigger finished");
return PointerGetDatum(rettuple);
}