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 MySQL 4.1.1. Você ainda pode manter a definição de sua função se você quiser o seu código funcinonando com o MySQL 4.0 e MySQL 4.1.1
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Esta função é chamada quando o MySQL 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 MySQL 4.1.1 e acima:
char *xxx_clear(UDF_INIT *initid, char *is_null, char *error);
Esta função é chamada quando o MySQL 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. See
Secção 14.2.2.1, “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. See
Secção 14.2.2.3, “Processando Argumentos”.
O tratamento do valor de retorno em xxx()
deve ser feito de forma idêntica a uma UDF normal. See
Secção 14.2.2.4, “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 MySQL
retornará NULL
como o rsultado para a
função do grupo.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.