El parámetro args
apunta a una estructura
UDF_ARGS
que tiene los miembros listados a
continuación:
unsigned int arg_count
Número de argumentos. Chequee este valor en la función de inicialización si necesita que su función sea llamada con un número particular de argumentos. Por ejemplo:
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
enum Item_result *arg_type
Puntero a una matriz conteniendo los tipos para cada
argumento. Los tipos posibles son
STRING_RESULT
,
INT_RESULT
, y
REAL_RESULT
.
Par asegurar que los argumentos sean de un tipo dado y
retorne un error si no lo son, chequee la matriz
arg_type
en la función de
inicialización. Por ejemplo:
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 alternativa a requerir que los argumentos de la
función sean de un tipo particular, puede usar la
función de inicialización para asignar los elementos
arg_type
con los tipos que quiera. Esto
hace que MySQL fuerce a los argumentos a los tipos para
cada llamada de xxx()
. Por ejemplo,
para especificar que los primeros dos argumentos se
fuercen a una cadena de caracteres de enteros,
respectivamente, haga lo siguiente en
xxx_init()
:
args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
char **args
args->args
comunica información a
la función de inicialización acerca de la naturaleza
general de los argumentos pasados a la función. Para un
argumento constante i
,
args->args[i]
apunta al valor del
argumento. (Consulte a continuación instrucciones sobre
cómo acceder al valor apropiadamente.) Para argumentos no
constantes, args->args[i]
es
0
. Un argumento constante es una
expresión que usa sólo constantes, como
3
o 4*7-2
o
SIN(3.14)
. Un argumento no constante es
una expresión que se refiere a valores que pueden cambiar
de registro a registro, tales como nombres de columna o
funciones que se llaman con argumentos no constantes.
Para cada invocación de la función principal,
args->args
contiene los argumentos
que se pasan para el registro que está procesando.
Las funciones pueden referirse a un argumento
i
como se muestra:
Un argumento de tipo
STRING_RESULT
se da como puntero
a una cadena de caracteres más una longitud, para
permitir tratar datos binarios o datos
arbitráriamente largos. Los contenidos de la cadena
de caracteres están disponibles como
args->args[i]
y la longitud de
la cadena es args->lengths[i]
.
No debe asumir que las cadenas de caracteres están
terminadas por null.
Para un argumento de tipo
INT_RESULT
, debe convertir
args->args[i]
a un valor
long long
:
long long int_val; int_val = *((long long*) args->args[i]);
Para un argumento de tipo
REAL_RESULT
, debe convertir
args->args[i]
a un valor
double
:
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
Para la función de inicialización, la matriz
lengths
indica la longitud máxima de
cadena de caracteres para cada argumento. No debe cambiar
este valor. Para cada invocación de la función principal
lengths
contiene las longitudes reales
de cualquier argumento de cadenas de caracteres que se
pasa al registro en proceso. Para argumentos de tipos
INT_RESULT
o
REAL_RESULT
, lengths
contiene la longitud máxima del argumento (como para la
función de inicialización).
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.