cniSqlCreateReadOnlyPathExpression

Crea un oggetto SqlPathExpression non modificabile che rappresenta il percorso specificato dal relativo argomento. Non modificabile significa che i percorsi in cui è stata eseguita la navigazione non creano elementi di percorsi se questi non sono già esistenti. Questa funzione restituisce un puntatore all'oggetto PathExpression che viene utilizzato come input delle funzioni che eseguono la navigazione del percorso, ovvero la famiglia cniSqlNavigatePath.

Si verifica un sovraccarico nella creazione dell'espressione; quindi, se per ogni messaggio deve essere utilizzata la stessa espressione del percorso, allora questa funzione deve essere richiamata una volta e CciSqlPathExpression* che viene restituito deve essere utilizzato in una chiamata a cniSqlNavigate per ciascun messaggio. E' possibile utilizzare CciSqlPathExpression* su un thread diverso da quello creato.

Sintassi

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

Parametri

returnCode (output)
Un input del puntatore NULL indica che il nodo definito dall'utente non intende gestire gli errori. Eventuali eccezioni generate durante l'esecuzione di questa chiamata, verranno generate nuovamente nel nodo successivo a monte del flusso. Se l'input è diverso da NULL, l'output indicherà lo stato positivo della chiamata. Se durante l'esecuzione si verifica un'eccezione, *returnCode verrà impostato su CCI_EXCEPTION nell'output. Per informazioni dettagliate relative all'eccezione, richiamare cciGetLastExceptionData. Se è stato passato un parametro nodeObject non valido, returnCode verrà impostato su CCI_INV_NODE_OBJECT. Se è stato passato un parametro di percorso non valido, quale una stringa vuota o NULL, returnCode è impostato su CCI_INV_ESQL_PATH_EXPR.
nodeObject (input)
Specifica il nodo di elaborazione del flusso di messaggi a cui apparterrà l'espressione di percorso ESQL. Tale puntatore viene trasferito alla funzione di implementazione cniCreateNodeContext. Questo parametro non deve essere NULL.
dataSourceName (input)
Il nome di origine dei dati ODBC da utilizzare se l'istruzione fa riferimento a un database esterno. NULL è consentito.
path (input)
Puntatore ad una stringa terminata con NULL di CciChars. Specifica l'espressione del percorso ESQL da creare come definito dal diagramma della sintassi di riferimento del campo ESQL, eccetto che non può includere le variabili ESQL locali, le variabili di riferimento ESQL, le funzioni definite dall'utente e le costanti di spazio dei nomi ESQL, in quanto non possono essere dichiarate. Tuttavia, se ciò può essere specificato in un percorso ESQL di una riga in un nodo Compute, allora sarà possibile con questa API. Questo parametro non deve essere NULL.

Valori di restituzione

Se ha esito positivo, viene restituito l'indirizzo dell'oggetto SQLPathExpression. Se si verifica un errore, viene restituito CCI_NULL_ADDR e il parametro codice di ritorno indica il motivo dell'errore. Una volta che non si ha più necessità di SQLPathExpression, (solitamente quando il nodo viene eliminato) eseguirne l'eliminazione richiamando cniSqlDeletePathExpression.

Esempio

L'esempio del nodo switch mostra come navigare in un elemento di sintassi utilizzando funzioni come cniFirstChild. Il codice riportato di seguito può essere utilizzato per raggiungere lo stesso risultato.

Nella funzione _Switch_createNodeContext viene creato CciSqlPathExpression da utilizzare in un secondo momento.

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString = "InputBody.Request.type";
        /* converte la stringa percorso in unicode*/
        cciMbsToUcs(
                  NULL,
                  mbPathExpressionString,
                  ucsPathExpressionString,
                  32,
                  BIP_DEF_COMP_CCSID);
        
        p->pathExpression = 
                    cniSqlCreateReadOnlyPathExpression(
                            NULL,
                            nodeObject,
                            NULL, /*non si fa riferimento a Database*/
                            ucsPathExpressionString);
}
Nota: Questo assume una modifica nello struct NODE_CONTEXT_ST in cui viene aggiunto il campo CciSqlPathExpression* pathExpression;

E' possibile quindi utilizzare CciSqlPathExpression nella funzione _Switch_evaluate.

CciElement* targetElement = cniSqlNavigatePath(
                           NULL,
                          ((NODE_CONTEXT_ST *)context)->pathExpression,
                           message,
                           destinationList,
                           exceptionList,
                           NULL, /*non si fa riferimento ad alcuna struttura ad albero di output*/
                           NULL,
                           NULL);
Utilizzando tale metodo, in contrapposizione all'uso di cniFirstChild, cniNextSibling e così via, si hanno i seguenti vantaggi:
  • Il percorso è più dinamico – la stringa percorso potrebbe essere determinata in fase di distribuzione; ad esempio, in base ad un attributo nodo (si potrebbe creare CciSqlPathExpression nella funzione di implementazione cniSetAttribute).
  • Mentre si esegue la navigazione all'elemento, viene eseguita un'unica chiamata alla funzione anziché diverse. Ciò è più evidente quando l'elemento di destinazione è all'interno della struttura ad albero.
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as08031_