MySQL

:: DEVELOPER ZONE

Login / Register

  • MySQL.com
  • Developer Zone
  • Partners
  • Online Shop
  • Downloads
  • Documentation
  • Forums
  • Lists
  • Bugs
  • Events
  • User Groups
  • Guilds
  • Blogs
  • Support
  • Resources
  • Books
  • FAQ

Справочное руководство по MySQL 4.0. :: 9 Расширение MySQL :: 9.2 Добавление новых функций в MySQL :: 9.2.2 Добавление новой определяемой пользователем функции :: 9.2.2.2 Последовательность вызова UDF для агрегатных функций

  • Overview
  • MySQL Reference Manual
  • MaxDB Documentation
  • Connectors

Search the MySQL manual:


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

  • 9.2.2 Добавление новой определяемой пользователем функции
  • 9.2.2.1 Последовательность вызова UDF для простых функций
  • 9.2.2.2 Последовательность вызова UDF для агрегатных функций
  • 9.2.2.3 Обработка аргументов
  • 9.2.2.4 Возвращаемые значения и обработка ошибок
  • 9.2.2.5 Компиляция и установка определяемых пользователем функций

Get the MySQL Language Reference and MySQL Administrator's Guide from MySQL Press!


Learn about new MySQL releases, technical articles, events and more.

Subscribe to the monthly MySQL Newsletter!


Previous / Next / Up / Table of Contents

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 Раздел 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.

Top / Previous / Next / Up / Table of Contents

© 1995-2005 MySQL AB. All rights reserved.

  • About MySQL
  • Careers
  • Site Map
  • Contact Us
  • Legal
  • Privacy Policy
  • Trademark Info
  • No Software Patents!