関数は以下に示すように宣言する必要があります。注意:
戻り値の型およびパラメータは、CREATE
FUNCTION
ステートメントで SQL 関数
XXX()
の戻り値を
STRING
、INTEGER
、または
REAL
のどの型で返すと宣言するかによって異なります。
STRING
関数の場合は以下のように宣言します。
char *xxx(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error);
INTEGER
関数の場合は以下のように宣言します。
long long xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
REAL
関数の場合は以下のように宣言します。
double xxx(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
初期化関数および終了関数は以下のように宣言します。
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void xxx_deinit(UDF_INIT *initid);
initid
パラメータは、上記の 3
つの関数すべてに渡されます。UDF_INIT
構造体を参照しており、関数間のデータの受け渡しに使用されます。UDF_INIT
構造体のメンバを以下に示します。初期化関数では、必要に応じてメンバの値を変更します(メンバのデフォルト値を使用する場合はそのままにしておきます)。
my_bool maybe_null
xxx_init()
は、xxx()
が NULL
を返す可能性がある場合は
maybe_null
を 1
に設定する必要がある。maybe_null
と宣言されている引数が存在する場合は、デフォルト値は
1
である。
unsigned int decimals
小数点以下桁数。デフォルト値は、関数に渡される引数の最大の小数点以下桁数(たとえば、1.34
、1.345
、および
1.3
を渡された場合、1.345
の小数点以下桁数が 3
で一番大きいので、デフォルト値は 3
になる)。
unsigned int max_length
戻り値の文字列表現の最大長。関数の戻り値の型によってデフォルト値は異なる。文字列関数の場合、デフォルトは最長の引数の長さ。整数関数の場合、デフォルトは
21 桁。実数関数の場合、デフォルトは 13 に
initid->decimals
で示される小数点以下桁数を加算した値(数値関数の場合、この長さには符号や小数点が含まれる)。
BLOB 型の値を返す場合、このメンバの値を 65K または 16M に設定できる。このメモリは割り当てられないが、一時的にデータを格納する必要が生じた場合、どのカラム型を使用するかを判断するために使用できる。
char *ptr
関数が独自の用途に使用できるポインタ。たとえば、関数は
initid->ptr
を使用して、割り当てられたメモリを関数間で受け渡すことができる。xxx_init()
では、以下のようにメモリを割り当て、その値をこのポインタに代入する。
initid->ptr = allocated_memory;
xxx()
および
xxx_deinit()
は、initid->ptr
を参照してメモリを使用したり、解放します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.