cniSqlCreateReadOnlyPathExpression

Erstellt ein nicht änderbares SqlPathExpression-Objekt, das den durch das Pfadargument angegebenen Pfad darstellt. Nicht änderbar bedeutet, dass der Pfad, zu dem navigiert wird, keine Pfadelemente erstellt, wenn sie noch nicht vorhanden sind. Diese Funktion gibt einen Zeiger auf das Objekt PathExpression zurück, das als Eingabe für die Funktionen verwendet wird, die zu dem Pfad, d. h. zur cniSqlNavigatePath-Familie, navigieren.

Das Erstellen des Ausdrucks ist mit einem Aufwand verbunden. Wenn also für jede Nachricht derselbe Pfadausdruck verwendet werden soll, sollte diese Funktion einmal aufgerufen werden und der Ausdruck CciSqlPathExpression*, der zurückgegeben wird, sollte in einem Aufruf an niSqlNavigate für jede Nachricht verwendet werden. Es ist möglich, den Ausdruck CciSqlPathExpression* auf einem anderen Thread zu verwenden, als dem, in dem er erstellt wurde.

Syntax

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

Parameters

Rückkehrcode (Ausgabe)
Die Eingabe eines Nullzeigers bedeutet, dass der benutzerdefinierte Knoten nicht für Fehler zuständig sein möchte. Alle Ausnahmebedingungen, die bei der Ausführung dieses Aufrufs ausgegeben werden, werden beim nächsten vorgeschalteten Knoten im Nachrichtenfluss erneut ausgegeben. Wenn die Eingabe nicht NULL ist, gibt die Ausgabe den Erfolgsstatus des Aufrufs an. Wenn bei der Ausführung eine Ausnahmebedingung auftritt, wird als Wert für '*returnCode' bei der Ausgabe CCI_EXCEPTION festgelegt. Rufen Sie cciGetLastExceptionData für Details der Ausnahmebedingung auf. Wenn ein ungültiger nodeObject-Parameter übergeben wurde, wird der Rückkehrcode auf CCI_INV_NODE_OBJECT gesetzt. Wenn ein ungültiger Pfadparameter, wie z. B. NULL oder eine leere Zeichenfolge, übergeben wurde, wird der Rückkehrcode auf CCI_INV_ESQL_PATH_EXPR gesetzt.
nodeObject (Eingabe)
Gibt den Verarbeitungsknoten des Nachrichtenflusses an, dem der ESQL-Pfadausdruck angehört. Dieser Zeiger wird an die Implementierungsfunktion cniCreateNodeContext übermittelt. Dieser Parameter darf nicht NULL sein.
dataSourceName (Eingabe)
Der ODBC-Datenquellenname, der verwendet wird, wenn die Anweisung auf eine externe Datenbank verweist. NULL ist zulässig.
path (Eingabe)
Zeiger auf eine mit NULL beendete Zeichenfolge von 'CciChars'. Dadurch wird der ESQL-Pfadausdruck angegeben, der erstellt werden soll, wie vom Syntaxdiagramm der ESQL-Feldreferenz definiert. Allerdings kann er keine lokalen ESQL-Variablen, ESQL-Referenzvariablen, benutzerdefinierte Funktionen und ESQL-Namespace-Konstanten enthalten, da diese nicht deklariert werden können. Kann dieser Vorgang in einem einzeiligen ESQL-Pfad in einem Rechenknoten ausgeführt werden, dann sollte dies mit dieser API ebenfalls möglich sein. Dieser Parameter darf nicht NULL sein.

Rückgabewerte

Bei Erfolg wird die Adresse des Objekts 'SQLPathExpression' zurückgegeben. Wenn ein Fehler auftritt wird CCI_NULL_ADDR zurückgegeben, und der Rückkehrcodeparameter gibt die Fehlerursache an. Sobald 'SQLPathExpression' nicht mehr benötigt wird (normalerweise wenn der Knoten gelöscht wurde), sollte es gelöscht werden, indem cniSqlDeletePathExpression aufgerufen wird.

Beispiel

Im Knotenbeispiel zum Umschalten wird gezeigt, wie mit Hilfe von Funktionen wie cniFirstChild zu einem Syntaxelement navigiert werden kann. Der folgende Code kann verwendet werden, um dasselbe Ergebnis zu erzielen.

In der Funktion '_Switch_createNodeContext' wird CciSqlPathExpression für die spätere Verwendung erstellt.

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString = "InputBody.Request.type";
        /* Pfadzeichenfolge in Unicode konvertieren*/
        cciMbsToUcs(
                  NULL,
                  mbPathExpressionString,
                  ucsPathExpressionString,
                  32,
                  BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                    cniSqlCreateReadOnlyPathExpression(
                            NULL,
                            nodeObject,
                            NULL,/*es wird nicht auf die Datenbank verwiesen*/
                            ucsPathExpressionString);
}
Anmerkung: Dies setzt eine Änderung zur Struktur NODE_CONTEXT_ST voraus, wo das Feld 'CciSqlPathExpression* pathExpression' hinzugefügt wird;

Dann kann CciSqlPathExpression in der Funktion '_Switch_evaluate' verwendet werden.

CciElement* targetElement = cniSqlNavigatePath(
                           NULL,
                          ((NODE_CONTEXT_ST *)context)->pathExpression,
                           message,
                           destinationList, 
                           exceptionList, 
                           NULL, /*auf Ausgabebaumstrukturen wird nicht verwiesen*/
                           NULL,
                           NULL);
Das Verwenden dieser Methode im Gegensatz zu 'cniFirstChild', 'cniNextSibling' usw. hat folgende Vorteile:
  • Der Pfad ist dynamischer - die Pfadzeichenfolge kann zum Zeitpunkt des Implementierens festgelegt werden, z. B. auf einem Knotenattribut basierend (CciSqlPathExpression kann in der Implementierungsfunktion cniSetAttribute erstellt werden).
  • Während der Navigation zum Element wird nur ein Funktionsaufruf anstatt mehrerer gemacht. Dies wird deutlicher, wenn sich das Zielelement weit innerhalb der Baumstruktur befindet.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as08031_