Ниже приведено описание функций, которые необходимо определить при создании агрегатной UDF-функции.
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
Эта функция вызывается, когда MySQL находит первую строку в новой группе. В функции необходимо сбросить все внутренние переменные, в которых накапливаются значения, и затем установить переданный аргумент как первый аргумент в группе.
Во многих случаях это реализуется
путем сброса всех переменных и
последующего вызова
xxx_add().
char *xxx_add(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);
Эта функция вызывается для всех
строк, принадлежащих к одной
группе, за исключением первой. В
функции к внутренней
накопительной переменной следует
добавить значение UDF_ARGS.
Функция xxx() должна быть
объявлена точно так же, как это
делается при определении простой
UDF-функции (see Раздел 9.2.2.1, «Последовательность вызова UDF для простых функций»).
Вызов этой функции происходит,
когда все строки в группе
обработаны. Обычно функция не
должна обращаться к переменной
args, а возвращаемое
значение должно базироваться на
внутренних накопительных
переменных.
Какая бы то ни было, обработка
аргументов в xxx_reset() и
xxx_add() должна
проводиться точно так же, как для
нормальных UDF-функций (see
Раздел 9.2.2.3, «Обработка аргументов»).
Организация возврата значений в
xxx() эквивалентна
используемой для нормальной UDF (see
Раздел 9.2.2.4, «Возвращаемые значения и обработка ошибок»).
Аргументы-указатели
is_null и error
одинаковы для всех вызовов
xxx_reset(), xxx_add()
и xxx(). Их можно
использовать для запоминания
того, что произошла ошибка, или
когда функция xxx()
должна возвращать NULL.
Заметьте, что сохранять строку в
*error нельзя! Это всего
лишь 1-байтовый флаг!
is_null сбрасывается для
каждой группы (перед вызовом
xxx_reset()). error не
сбрасывается никогда.
Если is_null или
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.
© 1995-2005 MySQL AB. All rights reserved.
