2007年05月23日
ESQL/C "Callback Function"
Updated: 2007/09/28 - ESQL/C 3.0日本語マニュアルのPDFを掲載
INFORMIX ESQL/C version 2.9やESQL/C 3.0の日本語マニュアル PDFに、コールバック関数という機能が紹介されています。これを使うと、例えば、指定した制限時間を越えても実行が終わらないSQLを強制的に終了させる、というような操作が可能になります。
使い方はだいたいこんな感じです。
1.制限時間を超過した時のチェック処理を行う関数 (コールバック関数) を用意する。
この関数は、ESQL/Cの組み込み関数で登録しておくと、制限時間を超過した時にESQL/Cライブラリーから呼び出されるようになります(これが「コールバック関数」という名前の由来です)。コールバック関数の中では、主に、以下の処理のためのコードを用意しておきます。
2. コールバック関数を、制限時間とともに ESQL/C実行時ライブラリー内に登録する。
ESQL/Cのソースコード内で、組み込み関数sqlbreakcallback() を呼び出して登録します。
後は、ESQL/C ソースコードをコンパイルして実行するだけですね。
詳しくは、$INFORMIXDIR/demo/esqlc/timeout.ec を見てください。
INFORMIX ESQL/C version 2.9やESQL/C 3.0の日本語マニュアル PDFに、コールバック関数という機能が紹介されています。これを使うと、例えば、指定した制限時間を越えても実行が終わらないSQLを強制的に終了させる、というような操作が可能になります。
使い方はだいたいこんな感じです。
1.制限時間を超過した時のチェック処理を行う関数 (コールバック関数) を用意する。
この関数は、ESQL/Cの組み込み関数で登録しておくと、制限時間を超過した時にESQL/Cライブラリーから呼び出されるようになります(これが「コールバック関数」という名前の由来です)。コールバック関数の中では、主に、以下の処理のためのコードを用意しておきます。
* 現在のデータベース・サーバー側の処理状況を調べる
ESQL/Cの組み込み関数 sqldone() を使います。本当にまだSQLの処理中だったような時には、sqldoneの戻り値に-439 が返ってきます。なお、コールバック関数の中でSQLを実行したりすることは許可されていません。もし、SQLを実行した場合、エラーになりますが、そのときのエラー番号も -439です。ちょっと混乱します。
* 処理状況により、必要に応じてデータベース・サーバー側に処理の中断を指示する。
サーバー処理の中断には、ESQL/Cの組み込み関数 sqlbreak() を使います。
* その他必要な後処理を行う。
処理が中断されたことをアプリケーションコードに知らせるためのフラグがあればそれを立てる、など。
2. コールバック関数を、制限時間とともに ESQL/C実行時ライブラリー内に登録する。
ESQL/Cのソースコード内で、組み込み関数sqlbreakcallback() を呼び出して登録します。
後は、ESQL/C ソースコードをコンパイルして実行するだけですね。
詳しくは、$INFORMIXDIR/demo/esqlc/timeout.ec を見てください。
コールバック関数を知ったのはつい最近なのですが、マニュアルを見たら、実はESQL/C version 7.2から実装されていたようです。もし、手元にESQL/C verison 7.2 のマニュアル(日本語版が出ているのはこのバージョンくらいですね..)があったら読んでみてください。お持ちでない方はこちらを...
ESQL/C 3.0の日本語マニュアル PDF
ESQL/C 2.90の英語マニュアル
12章の36ページ目あたりから、コールバック関数の使い方を含め、データベースサーバーの制御用の関数が紹介されています。sqgetdbs() とか、結構使えそうです。
ESQL/C 3.0の日本語マニュアル PDF
ESQL/C 2.90の英語マニュアル
12章の36ページ目あたりから、コールバック関数の使い方を含め、データベースサーバーの制御用の関数が紹介されています。sqgetdbs() とか、結構使えそうです。
Posted by oninit at 22:20│Comments(0)
│ちょっと細かいテックネタ
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。