ここでは、集計 UDF 関数を作成する際に定義する必要があるさまざまな関数について説明します。
注意: 以下に示す関数は MySQL 4.1.1 では必要ありません。また使用されることもありません。MySQL 4.0 および MySQL 4.1.1 の両方で動作するようなコードを作成する場合にこれらの関数を定義します。
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
この関数は、MySQL が新しいグループの最初の行を見つけたときに呼び出されます。この関数では、内部の集計変数をリセットし、渡された引数をグループの最初の引数として設定する必要があります。
多くの場合、この処理はすべての変数をリセットすることで内部的に実装します(たとえば、xxx_clear()
を呼び出してから xxx_add()
を呼び出します)。
次の関数は、MySQL 4.1.1 以降でのみ必要です。
char *xxx_clear(UDF_INIT *initid, char *is_null, char *error);
この関数は、MySQL
が集計結果をリセットする必要があるときに呼び出されます。この関数は新しいグループが始まるたびに呼び出されますが、一致するレコードがなかったクエリの値をリセットするために呼び出される場合もあります。is_null
は、xxx_clear()
を呼び出す前に
CHAR(0)
を参照するように設定されます。
何らかの異常が発生した場合、error
の参照先に 1 バイトを保存できます。
char *xxx_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
この関数は、同じグループに属する 2 番目以降のすべてのレコードについて呼び出されます。この関数では、UDF_ARGS の値を内部集計変数に加算する必要があります。
xxx()
関数は、単純 UDF
関数を定義するときと同じように宣言する必要があります。
See 項13.2.2.1. 「単純関数の場合の UDF の呼び出し手順」。
この関数は、グループのすべてのレコードが処理されたときに呼び出されます。通常はこの関数で
args
変数にアクセスする必要はまったくなく、内部集計変数に基づいて値を返します。
xxx_reset()
および
xxx_add()
では、引数の処理はすべて、通常の UDF
と同じように実行する必要があります。 See
項13.2.2.3. 「引数の処理」。
xxx()
では、戻り値の処理を、通常の UDF
と同じように実行する必要があります。 See
項13.2.2.4. 「戻り値およびエラー処理」。
is_null
および error
へのポインタ引数は、xxx_reset()
、xxx_clear()
、xxx_add()
、および
xxx()
への呼び出しですべて同じです。この引数を使用して、エラーが発生したこと、または
xxx()
関数が NULL
を返す必要があるかどうかを記憶できます。注意:
*error
には文字列は格納できません。これは 1
バイトフラグです。
is_null
は、グループごとにリセットされます(xxx_clear()
を呼び出す前でも)。error
はリセットされることはありません。
isnull
または error
が xxx()
の後に設定された場合、MySQL
はグループ関数の結果として
NULL
を返します。
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.