Cette section décrit les détails bas niveau de l'interface pour une fonction trigger sur événement bas niveau. Ces informations sont seulement nécessaires si vous écrivez des fonctions triggers sur événement en C. Si vous utilisez un langage de plus haut niveau, ces détails sont gérés pour vous. Dans la plupart des cas, vous devriez songer sérieusement à utiliser un langage procédural avant d'écrire vos triggers sur événement en C. La documentation de chaque langage procédurale explique comment écrire un trigger sur événement dans ce langage.
Les fonctions de trigger sur événement doivent utiliser l'interface du gestionnaire de fonctions « version 1 ».
Quand une fonction est appelée par le gestionnaire de triggers sur événement,
elle ne reçoit aucun argument normal mais un pointeur « context »
lui est fourni. Il pointe vers une structure de type
EventTriggerData
. Les fonctions C peuvent vérifier
si elles ont été appelées par le gestionnaire de triggers sur événement en
exécutant la macro :
CALLED_AS_EVENT_TRIGGER(fcinfo)
qui vaut en fait :
((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
Si cela renvoie la valeur true, alors il est possible de convertir
fcinfo->context
vers le type EventTriggerData
*
et d'utiliser la structure pointée
EventTriggerData
. La fonction ne doit
pas modifier la structure
EventTriggerData
ou toute donnée qu'elle fournit.
struct EventTriggerData
est défini dans
commands/event_trigger.h
:
typedef struct EventTriggerData { NodeTag type; const char *event; /* event name */ Node *parsetree; /* parse tree */ CommandTag tag; /* command tag */ } EventTriggerData;
dont les membres sont définis ainsi :
type
Always T_EventTriggerData
.
event
Décrit l'événement pour lequel la fonction a été appelée. Ce sera soit
"ddl_command_start"
, soit "ddl_command_end"
,
soit "sql_drop"
, soit "table_rewrite"
.
Voir Section 40.1 pour la signification de
ces événements.
parsetree
Un pointeur vers l'arbre d'analyse de la commande. Vérifiez le code source de PostgreSQL pour les détails. La structure de l'arbre d'analyse est sujet à modification sans notification.
tag
La balise de la commande associée avec l'événement pour lequel le trigger
sur événement est exécuté, par exemple "CREATE FUNCTION"
.
Une fonction trigger sur événement doit renvoyer un pointeur
NULL
(et pas une valeur SQL NULL,
autrement dit ne pas configurer isNull
à true).