初期化関数は、エラーがない場合は
0
、エラーが発生した場合は
1
を返す必要があります。エラーが発生した場合、xxx_init()
は message
パラメータにヌルで終端されたエラーメッセージを格納する必要があります。このメッセージがクライアントに返されます。メッセージバッファの長さは
MYSQL_ERRMSG_SIZE
文字ですが、標準の端末画面の幅に合わせて、80
文字未満でメッセージを作成するように努力する必要があります。
long long
関数および
double
関数の場合、関数
xxx()
の戻り値が関数値になります。文字列関数の場合、結果を参照するポインタを返し、その文字列長を
length
引数に格納する必要があります。
戻り値の内容と長さは、以下のように設定します。
memcpy(result, "result string", 13); *length = 13;
calc 関数には、255 バイトの result
バッファが渡されます。返す値がこの大きさに収まる場合は、そのメモリ割り当てについて心配する必要はありません。
文字列関数が 255
バイトより長い文字列を返す必要がある場合、xxx_init()
関数または xxx()
関数で
malloc()
を使用してそのための領域を割り当て、xxx_deinit()
関数でそれを解放する必要があります。割り当てたメモリを
UDF_INIT
構造体の
ptr
スロットに保存しておけば、将来
xxx()
が呼び出されたときにそのメモリを再利用できます。
See 項13.2.2.1. 「単純関数の場合の UDF の呼び出し手順」。
関数で戻り値が NULL
であることを示すには、is_null
に 1
を設定します。
*is_null = 1;
関数がエラーを返すことを示すには、error
に 1
を設定します。
*error = 1;
xxx()
が、いずれかのレコードの処理で
*error
に 1
を設定した場合、カレントレコードおよび
XXX()
を呼び出したステートメントが処理するそれ以降のレコードについて、関数値が
NULL
になります(それ以降のレコードでは
xxx()
の呼び出しも行われません)。注意:MySQL
3.22.10
より古いバージョンでは、*error
および *is_null
の両方に値を設定する必要があります。
*error = 1; *is_null = 1;
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.