Esta seção descreve os detalhes de baixo nível da interface para uma função de gatilho de evento. Estas informações são necessárias apenas quando se escreve funções de gatilho de evento em C. Se estiver sendo usada uma linguagem de alto nível, estes detalhes serão tratados pela própria linguagem. Geralmente, deve-se considerar o uso de uma linguagem procedural antes de escrever gatilhos de evento em C. A documentação de cada linguagem procedural explica como escrever gatilho de evento nesta linguagem.
As funções de gatilho de evento devem usar a interface do gerenciador de função “versão 1”.
Quando uma função é chamada pelo gerenciador de gatilhos de evento,
ela não recebe nenhum argumento normal, mas é passado um ponteiro
“context” apontando para uma estrutura
EventTriggerData.
As funções em C podem verificar se foram chamadas
pelo gerenciador de gatilhos de evento ou não, executando a macro:
CALLED_AS_EVENT_TRIGGER(fcinfo)
que se expande para:
((fcinfo)->context != NULL && IsA((fcinfo)->context, EventTriggerData))
Se retornar o valor verdade, então será seguro converter
fcinfo->context para o tipo de dados
EventTriggerData *, e usar a estrutura apontada
por EventTriggerData.
A função não deve alterar a estrutura
EventTriggerData, ou qualquer um dos dados
para os quais ela aponta.
A estrutura struct EventTriggerData
é definida no arquivo de cabeçalho
commands/event_trigger.h:
typedef struct EventTriggerData
{
NodeTag type;
const char *event; /* nome do evento */
Node *parsetree; /* árvore de análise */
CommandTag tag; /* etiqueta do comando */
} EventTriggerData;
onde os membros são definidos da seguinte forma:
type
Sempre T_EventTriggerData.
event
Descreve o evento para o qual a função é chamada, um entre
"login", "ddl_command_start",
"ddl_command_end", "sql_drop",
"table_rewrite".
Veja Visão geral do comportamento de gatilho de evento para conhecer
o significado desses eventos.
parsetreePonteiro para a árvore de análise do comando. Veja o código-fonte do PostgreSQL para obter detalhes. A estrutura da árvore de análise está sujeita a alteração sem prévio aviso.
tag
A etiqueta do comando associada ao evento para o qual o gatilho
de evento é executado, por exemplo,
"CREATE FUNCTION".
Uma função de gatilho de evento deve retornar um ponteiro
NULL (e não um valor
SQL nulo, ou seja, não se deve definir
isNull como verdade).