Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  mysql_set_local_infile_handler()

23.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() を使うには、次のコールバック関数を書く必要があります。

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 番目のパラメータとして渡されます。

戻り値

なし。

エラー

なし。


User Comments
Sign Up Login You must be logged in to post a comment.