Spec-Zone .ru
спецификации, руководства, описания, API

21.8.7.64. mysql_set_local_infile_handler()

void mysql_set_local_infile_handler(MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), int (*local_infile_read)(void *, char *, unsigned int), void (*local_infile_end)(void *), int (*local_infile_error)(void *, char*, unsigned int), void *userdata);

Описание

Эта функция устанавливает обратные вызовы, которые будут использоваться во время выполнения LOAD DATA LOCAL INFILE операторы. Это позволяет прикладным программам осуществить контроль над локальным (сторона клиента) чтение файла данных. Параметрами является обработчик соединения, ряд указателей на функции обратного вызова, и указателя на область данных, которую обратные вызовы могут использовать, чтобы поделиться информацией.

Использовать mysql_set_local_infile_handler(), следует записать следующие функции обратного вызова:

intlocal_infile_init(void **ptr, const char *filename, void *userdata);

Функция инициализации. Это вызывают однажды сделать любую необходимую установку, открыть файл данных, выделить структуры данных, и т.д. Первое void** параметром является указатель на указатель. Можно установить указатель (то есть, *ptr) к значению, которое передадут к каждому из других обратных вызовов (как a void*). Обратные вызовы могут использовать, это указало на значение, чтобы поддержать информацию о состоянии. userdata параметром является то же самое значение, к которому передают mysql_set_local_infile_handler().

Сделайте нуль возврата функции инициализации для успеха, ненулевого для ошибки.

intlocal_infile_read(void *ptr, char *buf, unsigned int buf_len);

Функция считывания данных. Это вызывают неоднократно, чтобы считать файл данных. buf точки к буферу, где данные чтения хранятся, и buf_len максимальное количество байтов, которые обратный вызов может считать и сохранить в буфере. (Это может считать меньше байтов, но не должно читать больше.)

Возвращаемое значение является числом чтения байтов, или нулем, когда больше данных не могло быть считано (это указывает на EOF). Возвратите значение меньше чем нуль, если ошибка происходит.

voidlocal_infile_end(void *ptr)

Функция завершения. Это вызывают однажды после local_infile_read() возвратил нуль (EOF) или ошибку. В пределах этой функции освободите любую память, выделенную local_infile_init() и выполните любую другую необходимую уборку. Это вызывается, даже если функция инициализации возвращает ошибку.

intlocal_infile_error(void *ptr,                   char *error_msg,                   unsigned int error_msg_len);

Функция обработки ошибок. Это вызывают, чтобы заставить текстовое сообщение об ошибке возвращаться к пользователю в случае, если любая из Ваших других функций возвращает ошибку. error_msg точки к буферу, в который сообщение пишется, и error_msg_len длина буфера. Запишите сообщение как завершенную нулем строку, самое большее error_msg_len-1 байт длиной.

Возвращаемое значение является кодом ошибки.

Как правило, другие обратные вызовы хранят сообщение об ошибке в структуре данных, которой указывают ptr, так, чтобы local_infile_error() может скопировать сообщение оттуда в error_msg.

После вызова mysql_set_local_infile_handler() в Вашем коде C и указателях передачи на Ваши функции обратного вызова, Вы можете тогда проблема a LOAD DATA LOCAL INFILE оператор (например, при использовании mysql_query()). Клиентская библиотека автоматически вызывает Ваши обратные вызовы. Имя файла, определенное в LOAD DATA LOCAL INFILE будет передан как второй параметр к local_infile_init() обратный вызов.

Возвращаемые значения

Ни один.

Ошибки

Ни один.