24.4.2.4 UDF Return Values and Error Handling

The initialization function should return 0
if no error occurred and 1 otherwise. If an
error occurs, xxx_init() should store a
null-terminated error message in the
message parameter. The message is returned
to the client. The message buffer is
MYSQL_ERRMSG_SIZE characters long, but you
should try to keep the message to less than 80 characters so
that it fits the width of a standard terminal screen.

The return value of the main function xxx()
is the function value, for long long and
double functions. A string function should
return a pointer to the result and set
*length to the length (in bytes) of the
return value. For example:

memcpy(result, "result string", 13);
*length = 13;

MySQL passes a buffer to the xxx() function
using the result parameter. This buffer is
sufficiently long to hold 255 characters, which can be
multibyte characters. The xxx() function
can store the result in this buffer if it fits, in which case
the return value should be a pointer to the buffer. If the
function stores the result in a different buffer, it should
return a pointer to that buffer.

If your string function does not use the supplied buffer (for
example, if it needs to return a string longer than 255
characters), you must allocate the space for your own buffer
with malloc() in your
xxx_init() function or your
xxx() function and free it in your
xxx_deinit() function. You can store the
allocated memory in the ptr slot in the
UDF_INIT structure for reuse by future
xxx() calls. See
Section 24.4.2.1, “UDF Calling Sequences for Simple Functions”.

To indicate a return value of NULL in the
main function, set *is_null to
1:

*is_null = 1;

To indicate an error return in the main function, set
*error to 1:

*error = 1;

If xxx() sets *error to
1 for any row, the function value is
NULL for the current row and for any
subsequent rows processed by the statement in which
XXX() was invoked.
(xxx() is not even called for subsequent
rows.)