Spec-Zone.ru › MySQL Connectors 1.0

5.4.71 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);

Описание

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

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

int
local_infile_init(void **ptr, const char *filename, void *userdata);

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

Функция инициализации должна возвращать ноль в случае успеха и ненулевое значение в случае ошибки.

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

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

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

void
local_infile_end(void *ptr)

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

int
local_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 и передачи указателей на ваши функции обратного вызова, вы можете выполнить запрос (например, используя mysql_real_query() или mysql_query()). Библиотека клиента автоматически вызовет ваши функции обратного вызова. Имя файла, указанное в запросе, будет передано как второй параметр функции local_infile_init() обратного вызова.

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

Нет.

Ошибки

Нет.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/c-api-5.7-en/mysql-set-local-infile-handler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API