Sequência de Chamadas UDF para Funções Agregadas
Aqui segue uma descrição das diferentes funções que você precisa definir quando você quer criar uma função UDF agregada.
Note que a seguinte função NÃO é necessária ou usada pelo MariaDB. Você ainda pode manter a definição de sua função se você quiser o seu código funcinonando com o MariaDB e MariaDB
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Esta função é chamada quando o MariaDB encontra a primiera linha em um novo grupo. Na função você deve zerar quaisquer variáveis sumárias internas e então definir o argumento dados como o primeiro argumento no grupo.
Em muitos casos isto é implementado internamente zerando todas as variáveis (por exemplo, chamando xxx_clear()
e então chamando xxx_add()
.
A seguinte função só é exigida pelo MariaDB e acima:
char *xxx_clear(UDF_INIT *initid, char *is_null, char *error);
Esta função é chamada quando o MariaDB precisa de zerar o resumo dos resultados. Ele será chamado no começo de cada grupo novo mas também pode ser chamado para zerar os valores para uma consulta que não tiver registros coincidentes. is_null
será definido para apontar para CHAR(0)
antes de chamar xxx_clear()
.
Você pode usar o ponteiro error
para armazenar um byte se alguma coisa der errado.
char *xxx_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Esta função é chamada por todas as linhas que pertencem ao mesmo grupo, exceto na primeira linha. Nesta você deve adicionar o valor em UDF_ARGS a sua variavel sumária interna.
A função xxx()
deve ser declarada da mesma forma que você define uam função UDF simples. Leia "Sequência de Chamadas UDF para Funções Simples".
A função é chamada quando todas as linhas no grupo tem sido processada. Normamente você nunca deve acessar a variável args
aqui mas retornar o seu valor baseado em sua variável sumária interna.
Todos os argumentos processados em xxx_reset()
e xxx_add()
devem ser feito de forma idêntica as UDF's normais. Leia "Processando Argumentos".
O tratamento do valor de retorno em xxx()
deve ser feito de forma idêntica a uma UDF normal. Leia "Valor de Retorno e Tartamento de Erros".
O argumento ponteiro para is_null
e error
é o mesmo para todas as chamadas xxx_reset()
, xxx_clear()
, xxx_add()
e xxx()
. Você pode utilizar isto para lembrar que você obteve um erro ou se a função xxx()
deve retornar NULL
. Note que você não deve armazenar uma string em *error
! Ela é um parâmetro de apenas 1 byte!
is_null
é zerado para cada grupo (antes de chamar xxx_clear()
). error
nunca é zerado.
Se isnull
ou error
são definidos depois de xxx()
então o MariaDB retornará NULL
como o rsultado para a função do grupo.