Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




Справочное руководство по MySQL

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 в качестве результата групповой функции.


Поиск по документации:



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |