Estoy tratando de escribir una función personalizada definida por el usuario para mysql así que tomé la función str_ucwords desde http://www.mysqludf.org/index.php como un ejemplo para construir la mía.propercase mysql udf
my_bool str_ucwords_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
/* make sure user has provided exactly one string argument */
if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT || args->args[0] == NULL)
{
strcpy(message,"str_ucwords requires one string argument");
return 1;
}
/* str_ucwords() will not be returning null */
initid->maybe_null=0;
return 0;
}
char *str_ucwords(UDF_INIT *initid, UDF_ARGS *args,
char *result, unsigned long *res_length,
char *null_value, char *error)
{
int i;
int new_word = 0;
// copy the argument string into result
strncpy(result, args->args[0], args->lengths[0]);
*res_length = args->lengths[0];
// capitalize the first character of each word in the string
for (i = 0; i < *res_length; i++)
{
if (my_isalpha(&my_charset_latin1, result[i]))
{
if (!new_word)
{
new_word = 1;
result[i] = my_toupper(&my_charset_latin1, result[i]);
}
}
else
{
new_word = 0;
}
}
return result;
}
Esto funciona bien si trato select str_ucwords("test string");
pero si trato de seleccionar unos campos de una base de datos como select str_ucwords(name) from name;
no consigo nada volvió.
¿Cómo cambio esta función para que pueda extraer datos de los campos en la base de datos?
Ya he intentado eliminar args->arg_type[0] != STRING_RESULT
de la función init.