path 引数により指定されたパスを表す、修正不可能な SqlPathExpression オブジェクトを作成します。 修正不可能とは、パスのエレメントがまだ存在していないなら、パスをナビゲートしてもそれらのエレメントが作成されるわけではないという意味です。 この関数は、PathExpression オブジェクトへのポインターを戻します。これは、パスをナビゲートする関数、すなわち cniSqlNavigatePath ファミリーへの入力として使用されます。
式の作成にはオーバーヘッドが伴うため、すべてのメッセージに同じパス式が使用される場合には、この関数を 1 回呼び出し、戻された CciSqlPathExpression* を使用して、niSqlNavigate をそれぞれのメッセージごとに呼び出すようにします。 CciSqlPathExpression* は、作成元のスレッドとは異なるスレッドでも使用可能です。
CciSqlPathExpression* cniSqlCreateReadOnlyPathExpression( int* returnCode, CciNode* nodeObject, CciChar* dataSourceName, CciChar* path );
成功した場合、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, /*we do not reference Database*/ ucsPathExpressionString); }
その後、その CciSqlPathExpression を _Switch_evaluate 関数で使用できます。
CciElement* targetElement = cniSqlNavigatePath( NULL, ((NODE_CONTEXT_ST *)context)->pathExpression, message, destinationList, exceptionList, NULL, /*we do not reference any output trees*/ NULL, NULL);