cniSqlCreateReadOnlyPathExpression

Crea un objeto SqlPathExpression no modificable que representa la vía de acceso especificada por el argumento de la vía de acceso. No modificable significa que la vía de acceso recorrida no creará elementos de vía de acceso si éstos no existen. Esta función devuelve un puntero al objeto PathExpression que se utiliza como entrada a las funciones que recorren la vía de acceso, es decir, la familia cniSqlNavigatePath.

Al crear la expresión se genera una carga general, de forma que si la misma expresión de vía de acceso se va a utilizar para cada mensaje, entonces esta función debe llamarse una vez y el objeto CciSqlPathExpression* que se devuelve debe utilizarse en una llamada a niSqlNavigate para cada mensaje. Es posible utilizar CciSqlPathExpression* en una hebra distinta de la que se ha creado.

Sintaxis

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

Parámetros

returnCode (salida)
Una entrada de puntero NULL significa que el nodo definido por el usuario no desea tratar los errores. Las excepciones emitidas durante la ejecución de esta llamada se volverán a emitir en el nodo ascendente siguiente del flujo. Si la entrada no es NULL, la salida significará el estado de éxito de la llamada. Si se produce una excepción durante la ejecución, *returnCode se establecerá en CCI_EXCEPTION en la salida. Una llamada a cciGetLastExceptionData proporcionará los detalles de la excepción. Si se ha pasado un parámetro nodeObject no válido, returnCode se establecerá en CCI_INV_NODE_OBJECT. Si se ha pasado un parámetro de vía de acceso no válido, como NULL o una serie de caracteres vacía, returnCode se establece en CCI_INV_ESQL_PATH_EXPR.
nodeObject (entrada)
Especifica el nodo de proceso de flujo de mensajes que será el propietario de la expresión de vía de acceso ESQL. Este puntero se pasa a la función de implementación cniCreateNodeContext. Este parámetro no puede ser NULL.
dataSourceName (entrada)
Nombre de origen de datos ODBC a utilizar si la sentencia hace referencia a una base de datos externa. Se permite el valor NULL.
path (entrada)
Puntero a una serie terminada en NULL de CciChars. Especifica la expresión de vía de acceso ESQL a crear tal como lo define el diagrama de sintaxis de referencia de campo ESQL, excepto que no puede incluir variables ESQL locales, variables de referencia ESQL, funciones definidas por el usuario ni constantes de espacio de nombres ESQL, porque no se pueden declarar. Sin embargo, si puede hacerse en una vía de acceso ESQL de una línea en un nodo Compute, entonces debe ser posible con esta API. Este parámetro no puede ser NULL.

Valores de retorno

Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del objeto SQLPathExpression. Si se produce un error, se devuelve CCI_NULL_ADDR y el parámetro del código de retorno indica el motivo del error. Una vez ya no se necesita SQLPathExpression, (normalmente cuando se suprime el nodo) debe suprimirse llamando a cniSqlDeletePathExpression.

Ejemplo

El ejemplo de nodo Switch muestra cómo navegar hasta un elemento de sintaxis utilizando funciones como cniFirstChild. Podría utilizarse el siguiente código para alcanzar el mismo resultado.

En la función _Switch_createNodeContext, creamos CciSqlPathExpression para utilizarlo posteriormente.

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString = "InputBody.Request.type";
        /* convertir la serie de vía de acceso a unicode*/
        cciMbsToUcs(
                  NULL,
                  mbPathExpressionString,
                  ucsPathExpressionString,
                  32,
                  BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                    cniSqlCreateReadOnlyPathExpression(
                            NULL,
                            nodeObject,
                            NULL, /*no se hace referencia a base de datos*/
                            ucsPathExpressionString);
}
Nota: Esto supone un cambio en la estructura de NODE_CONTEXT_ST, donde añadimos el campo CciSqlPathExpression* pathExpression;

Entonces podemos utilizar CciSqlPathExpression en la función _Switch_evaluate.

CciElement* targetElement = cniSqlNavigatePath(
                           NULL,
                          ((NODE_CONTEXT_ST *)context)->pathExpression,
                           message,
                           destinationList,
                           exceptionList,
                           NULL, /*no se hace referencia a ningún árbol de salida*/
                           NULL,
                           NULL);
La utilización de este método en lugar de utilizar cniFirstChild, cniNextSibling etc., tiene las siguientes ventajas:
  • La vía de acceso es más dinámica – la serie de vía de acceso podría determinarse en el momento del despliegue, por ej., basándose en un atributo de nodo (podríamos crear CciSqlPathExpression en nuestra función de implementación cniSetAttribute).
  • Al desplazarnos al elemento, realizamos una llamada a función en lugar de varias. Esta mejora es más visible cuando el elemento de destino se encuentra en un nivel profundo dentro de la estructura de árbol.
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
as08031_