args
パラメータは、UDF_ARGS
構造体を参照します。そのメンバを以下に示します。
unsigned int arg_count
引数の数。作成した関数を呼び出すときに引数の数が決まっている場合は、初期化関数でこの値をチェックする。たとえば、以下のように指定する。
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
enum Item_result *arg_type
各引数の型。型を表す値として設定できるのは、STRING_RESULT
、INT_RESULT
、および
REAL_RESULT
である。
引数が指定した型であることを確認し、一致しない場合にエラーを返すには、初期化関数で
arg_type
配列をチェックする。たとえば、以下のように指定する。
if (args->arg_type[0] != STRING_RESULT || args->arg_type[1] != INT_RESULT) { strcpy(message,"XXX() requires a string and an integer"); return 1; }
関数の引数を特定の型で渡すように要求する代わりに、初期化関数を使用して
arg_type
の各要素に希望する型を設定する方法もある。これにより、MySQL
は、xxx()
を呼び出すたびに強制的に引数をその型に変換する。たとえば、最初の
2
つの引数を文字列と整数で渡すように指定するには、xxx_init()
で以下の処理を行う。
args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
char **args
args->args
は、関数が呼び出されたときに渡された引数の一般的な性質について初期化関数に情報を伝達する。i
番目の引数が定数の場合、args->args[i]
は引数の値への参照である(値にアクセスする正しい方法については以下の手順を参照)。非定数の場合、args->args[i]
は 0
である。定数引数は、3
、4*7-2
、または
SIN(3.14)
など、定数だけを使用する式である。非定数引数は、カラム名、または非定数引数を使用して呼び出される関数など、レコードごとに変化する可能性がある値を参照する式である。
関数を呼び出すたびに、args->args
に、現在処理中のレコードに関して渡される実際の引数が設定される。
関数は i
番目の引数を以下のように参照する。
STRING_RESULT
型の引数は、文字列へのポインタとその長さとして渡され、バイナリデータまたは可変長のデータを処理できる。実際の文字列は
args->args[i]
で参照し、文字列の長さは
args->lengths[i]
と表す。文字列がヌルで終端されていると仮定することは不適切である。
INT_RESULT
型の引数の場合、args->args[i]
をキャストして long long
型の値を取得する必要がある。
long long int_val; int_val = *((long long*) args->args[i]);
REAL_RESULT
型の引数の場合、args->args[i]
をキャストして double
型の値を取得する必要がある。
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
初期化関数の呼び出し時は、lengths
配列の要素は対応する引数の最大文字列長を示す。この値は変更せず、そのままにしておく必要がある。関数を呼び出すたびに、lengths
に、現在処理中のレコードに関して渡される文字列引数の実際の長さが設定される。(初期化関数の呼び出し時は)引数が
INT_RESULT
型または
REAL_RESULT
型である場合も、lengths
には引数の最大長が格納される。
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.