9.2.2.2 Последовательность вызова UDF для агрегатных функций
9.2.2.2 Последовательность вызова UDF для агрегатных функций
Ниже приведено описание функций, которые необходимо определить при
создании агрегатной 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 section 9.2.2.1 Последовательность вызова UDF для простых функций).
Вызов этой функции происходит, когда все строки в группе обработаны.
Обычно функция не должна обращаться к переменной args, а возвращаемое
значение должно базироваться на внутренних накопительных переменных.
Какая бы то ни было, обработка аргументов в xxx_reset() и xxx_add() должна
проводиться точно так же, как для нормальных UDF-функций (see section 9.2.2.3 Обработка аргументов).
Организация возврата значений в xxx() эквивалентна используемой для
нормальной UDF (see section 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 в качестве результата групповой функции.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий
|