Esta sección describe las distintas funciones que necesita definir cuando crea un UDF simple. Sección 27.2.3, “Añadir una nueva función definida por el usuario” describe el orden en que MySQL llama a estas funciones.
La función principal xxx()
debe declararse
como se muestra en esta sección. Tenga en cuenta que el tipo
de retorno y los parámetros difieren, dependiendo de si
declara la función SQL XXX()
para retornar
STRING
, INTEGER
, o
REAL
en el comando CREATE
FUNCTION
:
Para funciones STRING
:
char *xxx(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);
Para funciones INTEGER
:
long long xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Para funciones REAL
:
double xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Las funciones de inicialización y deinicialización se declaran así:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
El parámetro initid
se pasa a las tres
funciones. Apunta a la estructura UDF_INIT
que se usa para comunicar información entre funciones. Los
mienbros de la estructura UDF_INIT
se
muestran a continuación. La función de inicialización debe
rellenar cualquier miembro que quiera cambiar. (Para usar el
valor por defecto de un miembro no lo cambie.)
my_bool maybe_null
xxx_init()
debe asignar a
maybe_null
1
si
xxx()
puede retornar
NULL
. El valor por defecto es
1
si alguno de los argumentos se
declaran maybe_null
.
unsigned int decimals
El número de decimales. El valor por defecto es el
número máximo de decimales en los argumentos pasados a
la función principal. (Por ejemplo, si a la función se
pasa 1.34
, 1.345
, y
1.3
, el valor por defecto es 3, ya que
1.345
tiene 3 decimales.
unsigned int max_length
Longitud máxima del resultado. El valor por defecto
max_length
difiere en función del tipo
de resultado de la función. Para funciones de cadenas de
caracteres, el valor por defecto es el argumento más
largo. Para funciones enteras, el valor por defecto es de
21 dígitos. Para funciones reales, el valor por defecto
es 13 mas el número de decimales indicados por
initid->decimals
. (Para funciones
numéricas, la longitud incluye cualquier signo o
carácter de punto decimal.)
Si quiere retornar un valor blob, puede asignar a
max_length
de 65KB a 16MB. Esta memoria
no se reserva, pero el valor se usa para decidir qué tipo
de columna usar si hay una necesidad de almacenar los
datos temporalmente.
char *ptr
Puntero que la función puede usar para su propio
propósito. Por ejemplo, las funciones pueden usar
initid->ptr
para comunicar memoria
reservada entre ellos. xxx_init()
debe
reservar la memoria y asignarla al puntero:
initid->ptr = allocated_memory;
En xxx()
y
xxx_deinit()
, refiérase a
initid->ptr
para usar o liberar la
memoria.
É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.