A função principal deve ser declarada como mostrado aqui.
Note que o tipo retornado e os parâmetros diferem, dependendo
se você irá declarar a função SQL XXX()
para retornar STRING
,
INTEGER
, ou REAL
na
instrução CREATE FUNCTION
:
Para funções STRING
:
char *xxx(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);
Para funções INTEGER
:
long long xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Para funções REAL
:
double xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
As funções de inicialização e finalização são declaradas desta forma:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
O parâmetro initid
é passado para todas
as três funções. Ela aponta para uma estrutura
UDF_INIT
que é usada para passar
informações entre as funções. Os membros da estrutura
UDF_INIT
são listados abaixo. A função
de inicialização deve estar em todos os menbros que desejam
ser alterados. (Para utilizar o padrão para um membro,
deixe-o inalterado.):
my_bool maybe_null
xxx_init()
deve definir
maybe_null
com 1
se
xxx()
pode retornar
NULL
. O valor padrão é
1
se qualquer um dos argumentos são
declarados como maybe_null
.
unsigned int decimals
Número de decimais. O valor padrão é o número máximo
de deciamis no argumento passado na função principal.
(Por exemplo, se a função é passada function is passed
1.34
, 1.345
e
1.3
, o padrão seria 3, pois
1.345
tem 3 decimais.
unsigned int max_length
O tamanho máximo de um resultado string. O valor padrão
difere dependendo do tipo de resultado da função. Para
funções strings, o padrão é o temanho do maior
argumento. Para funções do tipo inteiro, o padrão é 21
digitos. Para funções do tipo real, o padrão é 13 mais
o número de decimais indicados por
initid->decimals
. (Para funções
numéricas, o tamanho inclui qualquer caracter de sinal ou
ponto decimal.)
Se você quiser retornar um blon, você pode definí-lo com 65K ou 16M; esta memória não é alocada, mas usada para decidir qual tipo de coluna utilizar se houver necessidade dese armazenar dados temporários.
char *ptr
Um ponteiro que a função pode usar para o seus
propósitos. Por exemplo, funções pode usar
initid->ptr
para comunicar memórias
alocadas entre funções. Na
xxx_init()
, aloca a memória e a
atribui a este ponteiro:
initid->ptr = allocated_memory;
Em xxx()
e
xxx_deinit()
, se refira a
initid->ptr
para usar ou liberar a
memória.
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.