Spec-Zone.ru › MySQL Connectors 1.0

5.4.78 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-8.0-en/mysql-set-local-infile-handler.html

Spec-Zone.ru

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