Параметр 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 следующим
образом:
Аргумент типа
STRING_RESULT
передается в виде указателя
на строку плюс длина, чтобы
обеспечить обработку
двоичных данных или данных
произвольной длины.
Содержимое строки доступно
посредством
args->args[i], а длина
строки представляет собой
args->lengths[i]. Не
следует исходить из
предположения, что символ
\0 отмечает конец
строки.
Для аргумента типа
INT_RESULT необходимо
привести args->args[i]
к значению типа long
long:
long long int_val; int_val = *((long long*) args->args[i]);
Для аргумента типа
REAL_RESULT необходимо
привести args->args[i]
к значению типа
double:
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
Для функции инициализации
массив lengths указывает
максимальную длину строки для
каждого аргумента. Изменять
этот массив нельзя. При каждом
вызове главной функции
lengths содержит
фактические длины всех
строковых аргументов,
переданных для обрабатываемой
в текущий момент строки. Для
типов аргументов
INT_RESULT или
REAL_RESULT lengths
также содержит максимальную
длину аргумента (как для
функции инициализации).
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.
© 1995-2005 MySQL AB. All rights reserved.
