(mysql.info.gz) UDF calling
Info Catalog
(mysql.info.gz) Adding UDF
(mysql.info.gz) Adding UDF
(mysql.info.gz) UDF aggr
25.2.2.1 UDF Calling Sequences for simple functions
...................................................
The main function should be declared as shown here. Note that the
return type and parameters differ, depending on whether you will
declare the SQL function `XXX()' to return `STRING', `INTEGER', or
`REAL' in the `CREATE FUNCTION' statement:
For `STRING' functions:
char *xxx(UDF_INIT *initid, UDF_ARGS *args,
char *result, unsigned long *length,
char *is_null, char *error);
For `INTEGER' functions:
long long xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
For `REAL' functions:
double xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
The initialization and deinitialization functions are declared like
this:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void xxx_deinit(UDF_INIT *initid);
The `initid' parameter is passed to all three functions. It points to a
`UDF_INIT' structure that is used to communicate information between
functions. The `UDF_INIT' structure members follow. The
initialization function should fill in any members that it wishes to
change. (To use the default for a member, leave it unchanged.):
`my_bool maybe_null'
`xxx_init()' should set `maybe_null' to `1' if `xxx()' can return
`NULL'. The default value is `1' if any of the arguments are
declared `maybe_null'.
`unsigned int decimals'
The number of decimals. The default value is the maximum number
of decimals in the arguments passed to the main function. (For
example, if the function is passed `1.34', `1.345', and `1.3', the
default would be 3, because `1.345' has 3 decimals.
`unsigned int max_length'
The maximum length of the string result. The default value
differs depending on the result type of the function. For string
functions, the default is the length of the longest argument. For
integer functions, the default is 21 digits. For real functions,
the default is 13 plus the number of decimals indicated by
`initid->decimals'. (For numeric functions, the length includes
any sign or decimal point characters.)
If you want to return a blob, you can set this to 65KB or 16MB;
this memory is not allocated but used to decide which column type
to use if there is a need to temporary store the data.
`char *ptr'
A pointer that the function can use for its own purposes. For
example, functions can use `initid->ptr' to communicate allocated
memory between functions. In `xxx_init()', allocate the memory
and assign it to this pointer:
initid->ptr = allocated_memory;
In `xxx()' and `xxx_deinit()', refer to `initid->ptr' to use or
deallocate the memory.
Info Catalog
(mysql.info.gz) Adding UDF
(mysql.info.gz) Adding UDF
(mysql.info.gz) UDF aggr
automatically generated byinfo2html