初期化関数は、エラーが発生しなかった場合は 0
、およびそうでない場合は 1
を返します。エラーが発生した場合、xxx_init()
は message
パラメータに NULL で終わるエラーメッセージを格納します。メッセージはクライアントに返されます。メッセージバッファーの長さは MYSQL_ERRMSG_SIZE
文字ですが、標準の端末画面の幅にメッセージが収まるように、メッセージを 80 文字未満に維持するようにしてください。
long long
関数および double
関数の場合、メイン関数 xxx()
の戻り値は関数値です。文字列関数は結果へのポインタを返し、*length
を戻り値の (バイト単位の) 長さに設定します。例:
memcpy(result, "result string", 13);
*length = 13;
MySQL は、result
パラメータを使用してバッファーを xxx()
関数に渡します。このバッファーは 255 文字を保持するための十分な長さがあり、マルチバイト文字も保持できます。xxx()
関数はこのバッファーに結果を格納でき (結果が収まる場合)、その場合は戻り値にそのバッファーへのポインタを設定してください。関数が別のバッファーに結果を格納する場合は、そのバッファーへのポインタを返します。
文字列関数で提供されたバッファーを使用しない場合 (たとえば、255 文字より長い文字列を返す必要がある場合)、xxx_init()
関数または xxx()
関数で malloc()
を使用して独自のバッファーの領域を割り当て、xxx_deinit()
関数でその領域を解放する必要があります。以降の xxx()
の呼び出しで再利用できるように、割り当てられたメモリーを UDF_INIT
構造体の ptr
スロットに格納できます。セクション24.3.2.1「単純な関数のための UDF の呼び出しシーケンス」を参照してください。
メイン関数で戻り値が NULL
であることを示すには、*is_null
を 1
に設定します。
*is_null = 1;
メイン関数でエラーを返すことを示すには、*error
を 1
に設定します。
*error = 1;
xxx()
がいずれかの行で *error
に 1
を設定した場合、XXX()
が呼び出されたステートメントによって処理される現在の行および後続の行の関数値は NULL
です。(後続の行では xxx()
は呼び出されません。)