O parâmetro args
aponta para uma estrutura
UDF_ARGS
que tem os mambros listados
abaixo:
unsigned int arg_count
O número de argumentos. Verifique o valor na função de inicialização se você quiser que ssua função seja chamada com um número específico de argumentos. For exemplo:
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
enum Item_result *arg_type
Os tipos para cada argumento. Os valores de tipos
possíveis são STRING_RESULT
,
INT_RESULT
, e
REAL_RESULT
.
Para ter certeza que os argumentos são de um tipo dado e
retornar um erro se não forem, verifique o vetor
arg_type
na função de
inicialização. Por exemplo:
if (args->arg_type[0] != STRING_RESULT || args->arg_type[1] != INT_RESULT) { strcpy(message,"XXX() requires a string and an integer"); return 1; }
Como uma alternativa para exigir que os argumentos de sua
função sejam de um tipo específico, você pode usar a
função de inicialização para definir o elemento
arg_type
com o tipo que você quiser.
Isto faz com que o MySQL converta argumentos para aqueles
tipo a cada chamada de xxx()
. Por
exemplo, para fazer conversão dos dois primeiros
argumentos para string e integer, faça isto com
xxx_init()
:
args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
char **args
args->args
informa a função de
inicialização sobre a natureza geral dos argumentos
chamados com sua função. Para um argumento constante
i
, args->args[i]
aponta para o valor do argumento. (Veja abaixo sobre
instruções de como acessar o valor de forma apropriada).
Para um argumento não constante,
args->args[i]
é
0
. Um argumento constante é uma
expressão é uma expressão que utiliza apenas constante,
tais como 3
ou 4*7-2
ou SIN(3.14)
. Um argumento não
constante é uma expressão que refere a valores que podem
alterar a cada linha, tais como nomes de coluna ou
funções que são chamadas com argumentos não contantes.
Para cada chamada da função principal,
args->args
contém os argumentos
atuais que são passados pela linhas sendo processadas
atualmente.
As funções podem se referir a um argumento
i
como a seguir:
Um argumento do tipo
STRING_RESULT
é dado como um
apontador string mais um tamanho, para permitir o
tratamento de dados binários de tamanho
arbitrário. Os conteúdo da string estão
disponíveis como
args->args[i]
e o tamanho da
string é args->lengths[i]
.
Você não deve assumir aue as strings são
terminadas em null.
Para um argumnto do tipo
INT_RESULT
, você deve converter
args->args[i]
para um valor
long long
:
long long int_val; int_val = *((long long*) args->args[i]);
Para um argumento do tipo
REAL_RESULT
, você deve converter
args->args[i]
para um valor
double
:
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
Para a função de inicialização, o vetor
lengths
indica o tamanho máximo da
string para cada argumento. Você não deve alterá-los.
Para cada chamada da função principal,
lengths
contém o tamanho atual de
quaisquer argumentos string que são passados para a linha
sendo processada atualmente. Para argumentos do tipo
INT_RESULT
ou
REAL_RESULT
, lengths
ainda contém o tamanho máximo do argumento (como para a
função de inicialização).
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.