П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 179513 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 77429 раз(а).

Учебник HTML.
Просмотров 75110 раз(а).

Руководство по PHP5.
Просмотров 46147 раз(а).

Хостинг через призму DNS.
Просмотров 53383 раз(а).

Подборка текстов стандартных документов.
Просмотров 46131 раз(а).

Учебник PHP - Самоучитель
Просмотров 52293 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 52841 раз(а).

Внешние атаки...
Просмотров 42759 раз(а).

Учебник PHP.
Просмотров 38276 раз(а).

SSI в примерах.
Просмотров 28379 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 9. Расширение MySQL
Пред.     След.

9.2. Добавление новых функций в MySQL
9.2.2. Добавление новой определяемой пользователем функции

9.2.2.1. Последовательность вызова UDF для простых функций

Главная функция должна быть определена, как это показано здесь. Обратите внимание на то, что тип возвращаемого значения и параметры варьируются в зависимости от того, как определена SQL-функция XXX() в команде CREATE FUNCTION - как возвращающая STRING, INTEGER или REAL:

Для STRING-функций:

char *xxx(UDF_INIT *initid, UDF_ARGS *args,
char *result, unsigned long *length,
char *is_null, char *error);

Для INTEGER-функций:

long long xxx(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error);

Для REAL-функций:

double xxx(UDF_INIT *initid, UDF_ARGS *args,
 char *is_null, char *error);

Функции инициализации и деинициализации объявляются следующим образом:

my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

void xxx_deinit(UDF_INIT *initid);

Параметр initid передается всем трем функциям. Он указывает на структуру UDF_INIT, используемую для передачи информации между функциями. Поля структуры UDF_INIT перечислены ниже. Функция инициализации должна заполнять все поля, которые ей следует изменить (чтобы использовать для поля значение по умолчанию, его необходимо оставить в неизменном виде):

  • my_bool maybe_null

    xxx_init() должна устанавливать maybe_null в 1, если xxx() может возвращать NULL. Значение по умолчанию будет 1, если хоть один аргумент объявлен как maybe_null.

  • unsigned int decimals

    Количество знаков после запятой. По умолчанию используется максимальное количество знаков для аргументов, переданных в основную функцию. (Например, если функции передаются 1,34, 1,345 и 1,3, то значением по умолчанию будет 3, поскольку 1,345 имеет 3 знака после запятой.

  • unsigned int max_length

    Максимальная длина строкового результата. Значение по умолчанию зависит от типа результата функции. Для строковых функций по умолчанию используется размер наиболее длинного аргумента. Для целочисленных функций значение по умолчанию составляет 21 цифру. Для вещественных функций по умолчанию берется 13 плюс количество знаков после запятой, которое задается initid->decimals (для числовых функций длина включает знак и символ десятичной точки). Если требуется возвращать значение типа BLOB, то поле можно установить равным либо 65 Kб либо 16 Mб; эта память не распределяется, а применяется для определения того, какой использовать тип столбцов, если понадобится временно хранить данные.

  • char *ptr

    Указатель, используемый функцией по своему усмотрению. Например, функции могут применять initid->ptr для передачи между функциями распределенной памяти. В xxx_init() память распределяется и назначается этому указателю:

    initid->ptr = allocated_memory;
    

    В xxx() и xxx_deinit() должны обращаться к initid->ptr для использования или освобождения памяти.


Назад Начало Главы Начало Раздела Начало Подраздела Вперед

Пред. Глава След. Глава
Глава 8. Интерфейсы для MySQL Начало Книги Приложение A. Проблемы и распространенные ошибки


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru