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.

Retornar