diff options
Diffstat (limited to 'contrib/spi/insert_username.c')
-rw-r--r-- | contrib/spi/insert_username.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/contrib/spi/insert_username.c b/contrib/spi/insert_username.c index cd0fdfc0bba..b53d5e40884 100644 --- a/contrib/spi/insert_username.c +++ b/contrib/spi/insert_username.c @@ -7,71 +7,71 @@ */ #include "executor/spi.h" /* this is what you need to work with SPI */ -#include "commands/trigger.h" /* -"- and triggers */ +#include "commands/trigger.h" /* -"- and triggers */ #include "miscadmin.h" /* for GetPgUserName() */ -HeapTuple insert_username (void); +HeapTuple insert_username(void); HeapTuple -insert_username () +insert_username() { - Trigger *trigger; /* to get trigger name */ + Trigger *trigger; /* to get trigger name */ int nargs; /* # of arguments */ Datum newval; /* new value of column */ - char **args; /* arguments */ - char *relname; /* triggered relation name */ + char **args; /* arguments */ + char *relname; /* triggered relation name */ Relation rel; /* triggered relation */ HeapTuple rettuple = NULL; TupleDesc tupdesc; /* tuple description */ int attnum; - /* sanity checks from autoinc.c */ + /* sanity checks from autoinc.c */ if (!CurrentTriggerData) elog(ERROR, "insert_username: triggers are not initialized"); if (TRIGGER_FIRED_FOR_STATEMENT(CurrentTriggerData->tg_event)) elog(ERROR, "insert_username: can't process STATEMENT events"); if (TRIGGER_FIRED_AFTER(CurrentTriggerData->tg_event)) elog(ERROR, "insert_username: must be fired before event"); - + if (TRIGGER_FIRED_BY_INSERT(CurrentTriggerData->tg_event)) rettuple = CurrentTriggerData->tg_trigtuple; else if (TRIGGER_FIRED_BY_UPDATE(CurrentTriggerData->tg_event)) rettuple = CurrentTriggerData->tg_newtuple; else elog(ERROR, "insert_username: can't process DELETE events"); - + rel = CurrentTriggerData->tg_relation; relname = SPI_getrelname(rel); - + trigger = CurrentTriggerData->tg_trigger; nargs = trigger->tgnargs; if (nargs != 1) elog(ERROR, "insert_username (%s): one argument was expected", relname); - + args = trigger->tgargs; tupdesc = rel->rd_att; - + CurrentTriggerData = NULL; - - attnum = SPI_fnumber (tupdesc, args[0]); - - if ( attnum < 0 ) + + attnum = SPI_fnumber(tupdesc, args[0]); + + if (attnum < 0) elog(ERROR, "insert_username (%s): there is no attribute %s", relname, args[0]); - if (SPI_gettypeid (tupdesc, attnum) != TEXTOID) - elog(ERROR, "insert_username (%s): attribute %s must be of TEXT type", - relname, args[0]); - - /* create fields containing name */ - newval = PointerGetDatum (textin (GetPgUserName ())); - - /* construct new tuple */ - rettuple = SPI_modifytuple (rel, rettuple, 1, &attnum, &newval, NULL); - if ( rettuple == NULL ) - elog (ERROR, "insert_username (%s): %d returned by SPI_modifytuple", - relname, SPI_result); - - pfree (relname); + if (SPI_gettypeid(tupdesc, attnum) != TEXTOID) + elog(ERROR, "insert_username (%s): attribute %s must be of TEXT type", + relname, args[0]); + + /* create fields containing name */ + newval = PointerGetDatum(textin(GetPgUserName())); + + /* construct new tuple */ + rettuple = SPI_modifytuple(rel, rettuple, 1, &attnum, &newval, NULL); + if (rettuple == NULL) + elog(ERROR, "insert_username (%s): %d returned by SPI_modifytuple", + relname, SPI_result); + + pfree(relname); return (rettuple); } |