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
иначе.