CdbrEqlStatement::Executeメソッド

機能

設定済みedmSQL文の実行

形式

DmaBoolean Execute (
 ppDmaString_T     ppParseMessage = NULL)

詳細

検索(edmSQL文)を実行するメソッドです。CdbrEqlStatement::Setメソッドで登録されているedmSQL文に,CdbrEqlStatement::SetObjParamメソッド,CdbrEqlStatement::SetOIIDParamメソッドまたはCdbrEqlStatement::SetParamメソッドで設定された?パラメタの値を設定してSQL文を生成し,実行します。

edmSQL文が正常に実行できた場合,CdbrEqlStatement::Initializeメソッドの初期値(デフォルト値は-1で全件取得するという意味)またはCdbrEqlStatement::ChangeGetObjCountメソッドで設定される件数分の検索結果を取得して,クライアントに保持します。ただし,この時点では検索結果をクライアントに保持するだけなので,その取得にはCdbrEqlStatement::GetResultメソッドを使用してください。

注※
このような処理をするのは,CdbrEqlStatement::GetResultメソッドの1回目のコール時に,サーバと通信しなくても結果を取得できるようにするためです(通信によるオーバヘッドを1回分削減できる)。2回目以降(結果の継続取得時)はサーバと通信して,結果を取得します。

 

次に示すメソッドがコールされていない状態でこのメソッドをコールした場合は,エラーになります。

戻り値がDMA_FALSEの場合,検索(edmSQL文)実行後の内容は保証できません。

edmSQL文中の?パラメタに関する注意
edmSQL文中に?パラメタが存在する場合,CdbrEqlStatement::SetObjParamメソッド,CdbrEqlStatement::SetOIIDParamメソッドまたはCdbrEqlStatement::SetParamメソッドで設定された値でSQL文を実行しますが,edmSQL文中の?パラメタと設定された?パラメタの情報に不整合がある場合の動作を次に示します。
  • edmSQL文中の?パラメタの値が未設定の場合
    NULLを仮定して動作します。
  • edmSQL文中の?パラメタの個数より大きいインデクス(出現順)で値が設定されている場合
    エラーになり,major_codeとしてERR_DMA,minor_codeとしてEDMRC_QPARAM_INDEX_OUT_OF_RANGEが返却されます。
  • 指定できるデータ型以外の値が設定されている場合
    エラーになり,major_codeとしてERR_DMA,minor_codeとしてEDMRC_QPARAM_BAD_VALUEが返却されます。
edmSQL文のエラーチェックについて
構文解析中にedmSQL文のエラーを検出した場合には,major_codeとしてERR_DBR,minor_codeとしてERR_EQL_BAD_STATEMENTが返却され,edmSQL文の構文解析の実行結果メッセージがppParseMessageに設定されます。ただし,ppParseMessageが指定されていない(省略したまたはNULLを指定した)場合は,メッセージは設定されません。ppParseMessageが指定されていて,構文解析が正常に終了した場合にはNULLが設定されます。なお,ppParseMessageがポイントするメモリは,ユーザプログラムでdbrDelete関数を使用して解放してください。
構文にエラーがあった場合の対処については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ 解説」の「4. オブジェクトの検索」を参照してください。
edmSQLのキャッシュ機能について
一度実行したedmSQL文の構文解析の実行結果は,キャッシュされます。そして,次に実行するedmSQL文と照合され,すでにキャッシュされている情報と同内容であると,解析済みの情報が再利用されます。このため,一度構文解析したedmSQL文を再度,構文解析するときには処理が高速になります。キャッシュされた情報は,同一のセッション内で保持されます。
edmSQLの制限について
「dbrProp_」で始まるクラスライブラリ固有のプロパティは,edmSQL文に指定できません。また,Binary型,Float型,DataTime型のデータに関する処理は未サポートです。このようなedmSQLの制限については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ 解説」の「4. オブジェクトの検索」を参照してください。また,最終的に実行されるSQLのバイト長制限など,実行可能なSQL文については,データベースの仕様に従います。データベース仕様の詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。
アクセス制御機能に関する注意
  • アクセス制御機能を利用するかどうかは,設定されているアクセス制御モードに従います。
  • アクセス制御機能付き検索モードで実行する場合,アクセス制御に必要な情報が,内部的に検索条件のSELECT句に追加されます。このため,取得できるプロパティ数は,アクセス制御機能なし検索を実行する場合よりも少なくなります。
オブジェクトを削除するメソッドと同時に実行する場合の注意
RemoveObjectメソッドやDeleteVersionメソッドなどのオブジェクトを削除するメソッドと同時に実行する場合,次の点に注意してください。
  • オブジェクトを削除するメソッドを実行してそのトランザクションが完了する前に,削除したオブジェクトに対しこのメソッドを実行すると,major_codeとしてERR_DMA,minor_codeとしてDMARC_NOT_FOUNDが返却されます。

引数

ppParseMessage

edmSQL文の構文解析の実行結果メッセージを格納する領域へのアドレスを指定します。

アドレスが指定されていない場合(NULLを指定した場合)には,構文解析でedmSQL文のエラーが検出されてもメッセージは設定されません。

省略した場合にはNULLを指定したときと同じ動作をします。

戻り値

DMA_TRUE  正常終了

DMA_FALSE 異常終了

戻り値の詳細

major_codeminor_code説明対処
ERR_CORBACORBAの戻り値が設定されます。CORBAでエラーが発生しました。ユーザプログラムでは対処できません。エラー情報として文字列の値を取得して,ユーザプログラムを終了してください。
ERR_DBERR_DB_DEADLOCK_OCCURREDデータベースでデッドロックが発生しました。時間を置いて,再度実行してください。
ERR_DBERR_DB_FAILEDデータベースで障害が発生しました。syslogを参照して,障害の原因を取り除いてください。
ERR_DBERR_DB_LOCKEDオブジェクトがロックされています。時間を置いて,再度実行してください。
ERR_DBRERR_EQL_BAD_STATEMENT不正なedmSQL文を実行しようとしました。edmSQL文を見直してください。必要に応じて構文解析結果情報を取得してください。
ERR_DBRERR_EQL_NOT_INITIALIZE初期化が実行されていません。初期化を実行してください。
ERR_DBRERR_EQL_STATEMENT_NOT_SET実行するedmSQL文が登録されていません。CdbrEqlStatement::Setメソッドで実行するedmSQL文を登録してください。
ERR_DBRERR_INVALID_STATUSセッションの状態が不正です。一つのセッションに同時に複数のメソッド処理要求が出されています。一つのセッションに対しては,一度に一つの処理要求しか出さないように見直してください。
ERR_DBRERR_SESSION_NOT_CONNECTセッションが接続されていません。セッションを接続してください。
ERR_DMADMARC_NO_MEMORYメモリ不足で実行できません。メモリを増設してください。またはメモリを大量に消費しているアプリケーションを停止させて,処理を再実行してください。
ERR_DMADMARC_NOT_SUPPORTEDこのセッションまたはオブジェクトではサポートされていないメソッドです。
または,サポートされていないデータ型です。
この操作は実行できません。
ERR_DMADMARC_TIMEOUT制限時間を超過しました。タイムアウトしました。
ERR_DMADMARC_UNEXPECTED予期しないエラーが発生しました。処理を終了してください。
ERR_DMAEDMRC_NOT_INTRANSACTIONトランザクション外でメソッドが呼ばれました。Beginメソッドの呼び出し後に,この操作を実行してください。
ERR_DMAEDMRC_QPARAM_BAD_VALUE?パラメタの設定で指定した値が,不正である可能性があります。設定した?パラメタの値,データ型を見直してください。
ERR_DMAEDMRC_QPARAM_INDEX_OUT_OF_RANGE?パラメタの設定で指定した値の個数を超える出現順序が指定されています。?パラメタの設定を見直して,正しい出現順序を指定してください。