9.2.2.3 Обработка аргументов
Параметр args указывает на структуру UDF_ARGS, содержащую перечисленные
ниже поля:
unsigned int arg_count
-
Количество аргументов. Это значение следует проверять в функции
инициализации, если необходимо, чтобы функция вызывалась с определенным
количеством аргументов. Например:
if (args->arg_count != 2)
{
strcpy(message,"XXX() requires two arguments");
return 1;
}
enum Item_result *arg_type
-
Тип для каждого аргумента. Возможные значения типа:
STRING_RESULT
,
INT_RESULT
и REAL_RESULT
. Чтобы контролировать принадлежность аргументов к
нужному типу и возвращать ошибку, если это не так, следует проверить
массив arg_type
в функции инициализации. Например:
if (args->arg_type[0] != STRING_RESULT ||
args->arg_type[1] != INT_RESULT)
{
strcpy(message,"XXX() requires a string and an integer");
return 1;
}
В качестве альтернативы требованию, чтобы аргументы были определенного
типа, можно использовать функцию инициализации для назначения элементам
arg_type
выбранных типов. В этом случае MySQL будет приводить аргументы к
этим типам для каждого вызова xxx()
. Например, чтобы указать на приведение
первых двух аргументов к строковому и целочисленному типам, выполните в
xxx_init()
:
args->arg_type[0] = STRING_RESULT;
args->arg_type[1] = INT_RESULT;
char **args
-
args->args
передает в функцию инициализации информацию общего характера об
аргументах, с которыми была вызвана функция. Для константного аргумента i
args->args[i]
указывает на значение аргумента (ниже приведены инструкции о
том, как правильно получать доступ к значениям). Для неконстантого
аргумента args->args[i]
есть 0
. Константный аргумент - это выражение, в
котором используются только константы, вроде 3
или 4*7-2
или SIN(3.14)
.
Неконстантный аргумент - это выражение, ссылающееся на значения, которые
могут изменяться от строки к строке, такие как имена столбцов или
обращения к функциям с неконстантными аргументами.
Для каждого вызова главной функции args->args
содержит фактические аргументы, переданные для
обрабатываемой в данный момент строки.
Функции могут ссылаться на аргумент i
следующим образом:
unsigned long *lengths
-
Для функции инициализации массив
lengths
указывает максимальную длину
строки для каждого аргумента. Изменять этот массив нельзя. При каждом
вызове главной функции lengths
содержит фактические длины всех строковых
аргументов, переданных для обрабатываемой в текущий момент строки. Для
типов аргументов INT_RESULT
или REAL_RESULT
lengths
также содержит
максимальную длину аргумента (как для функции инициализации).
Add your own comment.