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()を使うために、以下のコールバック機能を書き込まなければなりません:
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は、コールバックが読み取り、バッファーに記憶することができるバイトの最大ナンバーとなります。(それはより少ないバイトを読み取ることができますが、より多くのバイトを読み取るべきではありません。)
戻り値は読み取ったバイトの数ですが、データを読み取ることが出来なかったデータがあった時には、これが(EOFを示す)ゼロとなります。エラーがあると、ゼロ未満の値を戻します。
void local_infile_end(void *ptr)
停止機能。これは、local_infile_read()がゼロ(EOF)またはエラーを戻した後に一度呼び出されます。この機能は、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コードの中に呼び出し、ポインターをコールバック機能に渡した後、LOAD
DATA LOCAL
INFILEステートメントを、(例えば、mysql_query()を使って)発行することができます。).クライアントライブラリは自動的にコールバックを呼び出します。LOAD
DATA LOCAL
INFILE中に規定されたファイル名は、第2パラメータとしてlocal_infile_init()コールバックに第2パラメータとして渡されます。
MySQL
4.1.2.にmysql_set_local_infile_handler()機能が追加されました。
戻り値
なし。
エラー
なし。
