Adding a New User-Defined Function
2812
double xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
DECIMAL
functions return string values and should be declared the same way as
STRING
functions.
ROW
functions are not implemented.
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 decimal digits to the right of the decimal point. The default value is the maximum
number of decimal digits 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 decimal digits.
For arguments that have no fixed number of decimals, the
decimals
value is set to 31, which is 1
more than the maximum number of decimals permitted for the
DECIMAL
,
FLOAT
, and
DOUBLE
data
types.
A
decimals
value of 31 is used for arguments in cases such as a
FLOAT
or
DOUBLE
column
declared without an explicit number of decimals (for example,
FLOAT
rather than
FLOAT(10,3)
)
and for floating-point constants such as
1345E-3
. It is also used for string and other nonnumber
arguments that might be converted within the function to numeric form.
The value to which the
decimals
member is initialized is only a default. It can be changed within the
function to reflect the actual calculation performed. The default is determined such that the largest
number of decimals of the arguments is used. If the number of decimals is 31 for even one of the
arguments, that is the value used for
decimals
.
•
unsigned int max_length
The maximum length of the result. The default
max_length
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 decimal
digits indicated by
initid->decimals
. (For numeric functions, the length includes any sign or
decimal point characters.)
If you want to return a blob value, you can set
max_length
to 65KB or 16MB. This memory is not
allocated, but the value is used to decide which data type to use if there is a need to temporarily
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 among themselves.
xxx_init()
should 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.
Summary of Contents for 5.0
Page 1: ...MySQL 5 0 Reference Manual ...
Page 18: ...xviii ...
Page 60: ...40 ...
Page 396: ...376 ...
Page 578: ...558 ...
Page 636: ...616 ...
Page 844: ...824 ...
Page 1234: ...1214 ...
Page 1427: ...MySQL Proxy Scripting 1407 ...
Page 1734: ...1714 ...
Page 1752: ...1732 ...
Page 1783: ...Configuring Connector ODBC 1763 ...
Page 1793: ...Connector ODBC Examples 1773 ...
Page 1839: ...Connector Net Installation 1819 2 You must choose the type of installation to perform ...
Page 2850: ...2830 ...
Page 2854: ...2834 ...
Page 2928: ...2908 ...
Page 3000: ...2980 ...
Page 3122: ...3102 ...
Page 3126: ...3106 ...
Page 3174: ...3154 ...
Page 3232: ...3212 ...