cniSqlCreateReadOnlyPathExpression

path 引数により指定されたパスを表す SqlPathExpression オブジェクトを作成します。パスのエレメントがまだ存在していないなら、パスをナビゲートしてもそれらのエレメントは作成されません。 この関数は、PathExpression オブジェクトへのポインターを戻します。これは、パスをナビゲートする関数、すなわち cniSqlNavigatePath ファミリーへの入力として使用されます。

式の作成にはオーバーヘッドが伴うため、すべてのメッセージに同じパス式が使用される場合には、この関数を 1 回呼び出し、戻された CciSqlPathExpression* を使用して、cniSqlNavigate をそれぞれのメッセージごとに呼び出すようにします。 作成されたスレッドとは別のスレッド上にある CciSqlPathExpression* を使用することができます。

構文

CciSqlPathExpression* cniSqlCreateReadOnlyPathExpression(
	   int*     returnCode,
     CciNode* nodeObject,
     CciChar* dataSourceName,
     CciChar* path );

パラメーター

returnCode (出力)
NULL ポインターを入力すると、ユーザー定義ノードがエラーを処理しないことを示します。この呼び出しの実行時にスローされた例外は、フロー内の次のアップストリーム・ノードに対して再度スローされます。 入力が NULL でない場合、出力は呼び出しの成功状況を示します。 実行時に例外が発生する場合、出力時に *returnCode が CCI_EXCEPTION に設定されます。 cciGetLastExceptionData を呼び出すと、例外の詳細が提供されます。 無効な nodeObject パラメーターが渡された場合、returnCode は CCI_INV_NODE_OBJECT に設定されます。NULL や空ストリングなどの無効な path パラメーターが渡された場合、returnCode は CCI_INV_ESQL_PATH_EXPR に設定されます。
nodeObject (入力)
ESQL パス式を所有するメッセージ・フロー処理ノードを指定します。 このポインターは、cniCreateNodeContext インプリメンテーション関数に渡されます。このパラメーターは NULL にはできません。
dataSourceName (入力)
ステートメントが外部データベースを参照する場合に使用される ODBC データ・ソース名。NULL が許可されています。
path (入力)
CciChar の NULL 終了ストリングへのポインター。このパラメーターは、ESQL フィールド参照構文図の定義に従って作成されることになる ESQL パス式を指定します。ローカル ESQL 変数、ESQL 参照変数、ユーザー定義関数、ESQL 名前空間定数は宣言できないため、含めることができません。このパラメーターは NULL にはできません。

戻り値

成功した場合、SQLPathExpression オブジェクトのアドレスが戻されます。 エラーが発生した場合、CCI_NULL_ADDR が戻され、戻りコード・パラメーターがエラーの理由を示します。 SQLPathExpression が不要になったら (通常はノードが削除されるとき)、cniSqlDeletePathExpression を呼び出してそれを削除します。

Switch ノードのサンプルは、cniFirstChild のような関数を使用して構文エレメントにナビゲートする方法を示しています。 以下のコードを使用すると、同じ結果が得られます。

後で使用できるよう、_Switch_createNodeContext 関数で CciSqlPathExpression を作成します。

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString = "InputBody.Request.type";
        /* convert our path string to unicode*/
        cciMbsToUcs(
                  NULL,
                  mbPathExpressionString,
                  ucsPathExpressionString,
                  32,
                  BIP_DEF_COMP_CCSID);
        
        p->pathExpression = 
                    cniSqlCreateReadOnlyPathExpression(
                            NULL,
                            nodeObject,
                            NULL, /* do not reference Database*/
                            ucsPathExpressionString);
}

このコードは、フィールド CciSqlPathExpression* pathExpression を NODE_CONTEXT_ST 構造に追加することを前提にしています。

ここで、その CciSqlPathExpression を _Switch_evaluate 関数で使用できます。

CciElement* targetElement = cniSqlNavigatePath(
                           NULL,
                          ((NODE_CONTEXT_ST *)context)->pathExpression,
                           message,
                           localEnvironment,
                           exceptionList,
                           NULL, /* do not reference any output trees*/
                           NULL,
                           NULL);
このアプローチは、cniFirstChild および cniNextSibling などの関数は使用しませんが、以下に示すような有利な点があります。
  • パスが一層動的なものになります。ノード・プロパティーを基に、パス・ストリングをデプロイ時に決定できるかもしれません (CciSqlPathExpressioncniSetAttribute インプリメンテーション関数に作成できるかもしれません)。
  • エレメントへのナビゲート中、関数呼び出しは 1 回だけ行われます。ターゲット・エレメントがツリー構造の下位にある場合に、この技法はいっそう明らかになります。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:44:36

as08031_