|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает различные функции, которые Вы должны определить, когда Вы создаете простой UDF. Раздел 22.3.2, "Добавляя Новую Определяемую пользователем Функцию", описывает порядок, в котором MySQL вызывает эти функции.
Основное xxx() функция должна быть объявлена как показано в этом разделе. Отметьте,
что тип возврата и параметры отличаются, в зависимости от того, объявляете ли Вы функцию SQL XXX() возвратиться STRING, INTEGER, или REAL в CREATE
FUNCTION оператор:
Для 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);
DECIMAL
строковые значения возврата функций и должны быть объявлены тем же самым путем как STRING функции. ROW функции не реализуются.
Инициализация и функции deinitialization объявляются как это:
my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);void xxx_deinit(UDF_INIT *initid);
initid параметр передают ко всем трем функциям. Это указывает на a 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 десятичных цифры.
Для параметров, у которых нет никакого постоянного числа десятичных чисел, decimals
значение устанавливается в 31, который является еще 1 чем максимальное количество десятичных чисел,
разрешенных для DECIMAL, FLOAT, и DOUBLE типы данных. В MySQL 5.7 это значение доступно как
константа NOT_FIXED_DEC в mysql_com.h
заголовочный файл.
A decimals значение 31 используется для параметров в случаях, таких как
a FLOAT
или DOUBLE столбец, объявленный без явного числа десятичных чисел
(например, FLOAT вместо FLOAT(10,3)) и для
констант с плавающей точкой такой как 1345E-3. Это также используется
для строки и других параметров нечисла, которые могли бы быть преобразованы в пределах функции в
числовую форму.
Значение то, к который decimals элемент инициализируется, только
значение по умолчанию. Это может быть изменено в пределах функции, чтобы отразить фактическое
выполняемое вычисление. Значение по умолчанию решается так, что, что наибольшее число десятичных
чисел параметров используется. Если число десятичных чисел NOT_FIXED_DEC для даже одного из параметров, который является
значением, используемым для decimals.
unsigned int max_length
Максимальная длина результата. Значение по умолчанию max_length
значение отличается в зависимости от типа результата функции. Для строковых функций значение по
умолчанию является длиной самого длинного параметра. Для целочисленных функций значение по умолчанию
является 21 цифрой. Для реальных функций значение по умолчанию 13 плюс число десятичных цифр,
обозначенных initid->decimals. (Для числовых функций длина включает
любой знак или символы десятичной точки.)
Если Вы хотите возвратить значение блоба, можно установить max_length к
65 Кбитам или 16 МБ. Эта память не выделяется, но значение используется, чтобы решить который тип
данных использовать, если есть потребность временно хранить данные.
char *ptr
Указатель, который функция может использовать в ее собственных целях. Например, функции могут
использовать initid->ptr передавать выделенную память между собой.
xxx_init() должен выделить память и присвоить это этому указателю:
initid->ptr = allocated_memory;
В xxx() и xxx_deinit(), обратитесь к initid->ptr использовать или освобождать память.
my_bool const_item
xxx_init() должен установить const_item к
1 если xxx() всегда возвращает то же самое
значение и 0 иначе.