cniSqlCreateReadOnlyPathExpression

创建不可修改的 SqlPathExpression 对象,此对象表示路径参数所指定的路径。不可修改意味着,如果路径元素尚未存在,则浏览的路径不会创建这些路径元素。此函数将指针返回到 PathExpression 对象,从而用作浏览路径的函数(即 cniSqlNavigatePath 系列)的输入。

创建此表达式时会产生开销,因此如果您要对每个消息是使用同一路径表达式,则应调用一次此函数,并且应在调用 cniSqlNavigate 时对每个消息使用返回的 CciSqlPathExpression*。您可以在不同于创建 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 或空字符串),则 returnCode 设置为 CCI_INV_ESQL_PATH_EXPR。
nodeObject(输入)
指定 ESQL 路径表达式所属的消息流处理节点。此指针被传递到 cniCreateNodeContext 实施函数。该参数不能为 NULL。
dataSourceName(输入)
如果语句引用外部数据库,则它是要使用的 ODBC 数据源名称。NULL 是允许的。
path(输入)
此指针指向以 NULL 结束的 CciChars 字符串。它按 ESQL 字段引用语法图所定义的那样指定要创建的 ESQL 路径表达式,但它不能包含本地 ESQL 变量、ESQL 引用变量、用户定义的函数、ESQL 名称空间常量,这是因为它们无法进行声明。然而,如果它可以在 compute 节点中的一行 ESQL 路径中完成,则它应该可以在此 API 中使用。该参数不能为 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, /*we do not reference Database*/
                            ucsPathExpressionString);
}
注: 此样本假设对 NODE_CONTEXT_ST 结构进行更改,我们在其中添加了字段 CciSqlPathExpression* pathExpression;

然后,我们可以在 _Switch_evaluate 函数中使用该 CciSqlPathExpression

CciElement* targetElement = cniSqlNavigatePath(
                           NULL,
                          ((NODE_CONTEXT_ST *)context)->pathExpression,
                           message,
                                                        destinationList, 
                                                        exceptionList, 
                           NULL, /*we do not reference any output trees*/
                           NULL,
                           NULL);
使用此方法(而不是使用 cniFirstChil、cniNextSibling 等)具有以下优点:
  • 路径更动态 - 路径字符串可以在部署时确定,例如,根据节点属性来确定(我们可以在 cniSetAttribute 实施函数中创建 CciSqlPathExpression)。
  • 当浏览至此元素时,我们仅作一次函数调用(而非多次)。当目标元素在树结构的深处时,此优点将更明显。
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
as08031_