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);
初期化関数。これは、必要な設定を実行する、データファイルを開く、データ構造を割り当てるなどのために 1 回呼び出されます。最初の 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) またはエラーを返したあとに 1 回呼び出されます。この関数内では、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 バイト長で、NULL 終端文字列としてメッセージを書き込みます。
戻り値はエラー番号です。
一般に、ほかのコールバックは ptr
によって指示されるデータ構造にエラーメッセージを格納するため、local_infile_error()
はそこから error_msg
にメッセージをコピーできます。
C コードで mysql_set_local_infile_handler()
を呼び出し、ポインタをコールバック関数に渡したあとに、LOAD DATA LOCAL INFILE
ステートメントを発行できます (たとえば、mysql_query()
を使用して)。クライアントライブラリは自動的にコールバックを呼び出します。LOAD DATA LOCAL INFILE
は、local_infile_init()
コールバックに 2 番目のパラメータとして渡されます。
戻り値
なし。
エラー
なし。