Sequência de Chamadas UDF para Funções Simples
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 definirmaybe_null
com1
sexxx()
pode retornarNULL
. O valor padrão é1
se qualquer um dos argumentos são declarados comomaybe_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
e1.3
, o padrão seria 3, pois1.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. Naxxx_init()
, aloca a memória e a atribui a este ponteiro:initid->ptr = allocated_memory;
Em
xxx()
exxx_deinit()
, se refira ainitid->ptr
para usar ou liberar a memória.