Spec-Zone .ru
спецификации, руководства, описания, API
|
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 multi-byte 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
23.3.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.)