Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.