4.7.3 edmSQL構文解析情報

edmSQL文を構文解析して,構文解析情報をクライアントのファイルおよびメモリに出力します。構文解析情報は,実行したedmSQL文の情報および構文解析時に出力されたメッセージの情報です。

構文解析情報には,次の2種類があります。

<この項の構成>
(1) edmSQL構文解析情報ファイル
(2) 構文解析結果メッセージ

(1) edmSQL構文解析情報ファイル

edmSQL構文解析情報ファイルの出力方法および出力される情報について説明します。

出力方法
edmSQL構文解析情報ファイルを出力する場合は,次の環境変数の指定が必要です。
  • DBR_EQL_PARSELOG
    出力する場合は,この環境変数にONを設定します。なお,デフォルトはOFFです。したがって,この環境変数を設定していない場合,edmSQL構文解析情報ファイルは出力されません。
  • DBR_EQL_PARSELOG_DIR
    edmSQL構文解析情報ファイルの出力パスを指定します。なお,デフォルトは実行ファイルと同じパスになります。指定したパスが存在しない場合は,edmSQL構文情報ファイルは出力されません。
    文書空間で使用する文字コード種別がUTF-8の場合,印刷可能なASCIIコードで記述できる値を設定してください。
edmSQL構文解析情報ファイルのファイル名
edmSQL構文解析情報ファイルのファイル名は,日時を基に,次のように決定されます。なお,ファイル名は,マルチスレッド対応とシングルスレッド対応の場合で異なります。
形式
(マルチスレッド対応の場合)

EDMEQLINFOxxxxxxxxxxxxx_yyyyyyyy_zzzzzzzz.log
- EDMEQLINFO:プレフィクス
- xxxxxxxxxxxxx(13バイト):日時から生成された値
- yyyyyyyy(8バイト):スレッドIDで生成した値
- zzzzzzzz(8バイト):プロセスIDで生成した値

(シングルスレッド対応の場合)

EDMEQLINFOxxxxxxxxxxxxx_yyyyyyyy.log
- EDMEQLINFO:プレフィクス
- xxxxxxxxxxxxx(13バイト):日時から生成された値
- yyyyyyyy(8バイト):プロセスIDで生成した値

説明
例えば,2000年1月1日 午後6時30分1.111秒に出力する場合,xxxxxxxxxxxxxは「0101183001111」になります(年の値は含まれません)。
なお,出力したファイルの名称は,詳細メッセージ(KMBR22021-E)に出力されます。詳細メッセージについては,マニュアル「DocumentBroker Version 3 メッセージ」を参照してください。
edmSQL構文解析情報ファイルに出力される内容
ファイルには,次の場合に,CdbrEqlStatement::Executeメソッドで出力される構文解析情報が出力されます。
  • 構文解析を実行した時に構文解析エラーが検出された場合
  • 構文解析を実行した時にワーニングが検出された場合
なお,構文解析を実行したedmSQL文が正しい構文である場合は,ファイルは出力されません。
次に,edmSQL構文解析情報ファイルの出力形式を,次の図に示します。なお,出力形式は,マルチスレッド対応の場合とシングルスレッド対応の場合で異なります。

図4-2 edmSQL構文解析情報ファイルの出力形式

[図データ]
  1. ヘッダー情報が29カラムで出力されます。
  2. 次のように出力されます。マルチスレッド対応の場合とシングルスレッド対応の場合で出力内容が異なります。

    [図データ]

    文字の下の数字はカラム数です。
  3. 「Input edmSQL >」は15カラムで出力されます。「実行するedmSQL文」は,任意の指定したedmSQL文の長さです。
  4. 「Error」は,10カラムで出力されます。空白が2カラム出力されて,コードを表す数字が4カラムで出力され,「コードに対応したメッセージ」が任意の長さで出力されます。
    出力されるメッセージの内容と対処方法については,「付録B edmSQLの構文解析エラー情報」を参照してください。

(2) 構文解析結果メッセージ

メソッドをコールした時に出力される構文解析結果メッセージについて説明します。

必要な設定
このメッセージは,CdbrEqlStatement::Executeメソッドで,出力引数ppParseMessageを指定した場合に出力されます。なお,ppParseMessageを指定しないでこのメソッドをコールした場合は,エラーが発生しても,メッセージは出力されません。
また,ほかの詳細メッセージとは異なり,環境変数「DBR_EQL_PARSELOG」にOFFを指定した場合も,引数を指定すれば,メッセージが取得できます。
返却されるメッセージの内容
返却されるメッセージの内容については,マニュアル「DocumentBroker Version 3 メッセージ」を参照してください。なお,構文解析したedmSQL文の構文が正しい場合に,ppParseMessageを指定しているときは,指定した領域にNULLが設定されて返却されます。
構文解析中にエラーまたはワーニングが検出された場合,この領域に返却されるメッセージは最初に検出したエラーまたはワーニングに関するメッセージです。
構文解析のトレースを確認する場合は,「(1)edmSQL構文解析情報ファイル」を参照して,トレース内容をファイルに出力して確認してください。
構文解析結果メッセージを取得したエラー処理の例
次に,構文解析結果メッセージを取得する場合の,エラー処理の例を示します。

DmaBoolean brc = DMA_FALSE;
pDmaString_T pParseMessage = NULL;
DmaInteger32 i32MajorCode = ( -1 );
DmaInteger32 i32MinorCode = ( -1 );
 
brc = cEql->Execute( &pParseMessage );
 
if ( DMA_TRUE != brc ) {
 //エラー処理
 i32MajorCode = GetLastError( &i32MinorCode );
 if ( ( ERR_DBR == i32MajorCode ) &&
      ( ERR_EQL_BAD_STATEMENT == i32MinorCode ) )
 {
   //構文解析エラーを表示
   printf( "構文解析エラー:%s¥n", pParseMessage );
   dbrDelete( pParseMessage );
   pParseMessage = NULL;
   goto ErrorExit;
 }
}