Protokoll Spezifikation 1.2 30.07.2001 Client -> Server Nachdem die SSL-gesicherte Verbindung des Clients zu dem Server aufgebaut wurde, ist der Server bereit, die Anfragen des Clients entgegenzunehmen. Der Client sendet zu Beginn der Verbindung den Pfad zur Datenbank, den Usernamen und das Passwort. Die einzelnen Felder werden dabei jeweils durch ein 0-Zeichen getrennt. Die Zeichen muessen nicht maskiert werden, weil der 0-Char in dem Pfad, dem Passwort und dem Usernamen nicht vorkommen darf. Der Client schickt als Anfrage ein SQL-Statement. Beendet wird das Statement mit zwei aufeinanderfolgenden 0-Char (d.h. Char-Value = 0). Da der 0-Character in dem SQL-92 und SQL-99-Syntax nicht vorkommt, muss er nicht maskiert werden. Bsp: Client Server connect() -> accept() connection established "path/to/database.db\0" -> "username\0" -> "password\0" -> "SELECT FOO FROM BAR\0" -> wait(); "\0" -> processQuery("SELECT FOO FROM BAR") Nachdem der Server die 0-Chars gelesen hat, beginnt er, die Anfrage zu bearbeiten, d.h. das Statement auf der Datenbank auszufuehren. Anschliessend werden die Ergebnisse an den Client gesandt. Nach dem Abschluss der Bearbeitung des SQL-Queries kann das naechste Query gelesen werden. Um den Link zu schliessen sendet der Client zwei aufeinenderfolgende 01-Chars, die ebenfalls in dem Syntax von SQL nicht vorkommen. Server -> Client: Der Server liefert die Ergebnisse als ASCII-Strom. Das Format sieht dabei wie folgt aus: @ % Spaltenname1 : Spaltenname2 : Spaltenname3 : ... : SpaltennameN ; SQL-Typ1 : SQL-Typ2 : SQL-Typ3 : ... : SQL-TypN ; Value1-1 : Value2-1 : Value3-1 : ... : ValueN-1 ; ... Value1-M : Value2-M : Value3-M : ... : ValueN-M ; # Zeichenerklaerung: ... beliebige fortfuehrung in der Richtung : Byte-Wert 00 ; Byte-Wert 01 # Byte-Wert 02 @ Byte-Wert 03 ^ Byte-Wert 05 & Byte-Wert 06 % Byte-Wert 07 Codetransparenz wird erzielt durch die Verwendung des Maskerierungszeichens '\' mit dem Byte-Wert 04 Maskeriert werden folgende Zeichen: : mit \: ; mit \; # mit \# @ mit \@ \ mit \\ ^ mit \^ & mit \& % mit \% Ebendso Zeichen 08-31, Reserved for Future Use. : ist als Trennzeichen zwischen Spalten einer Zeile zu verstehen. ; ist als Trennzeichen zwischen Zeilen zu verstehen. @ ist als Startzeichen zu verstehen. # ist als Endezeichen zu verstehen. ^ ist Error-Zeichen, und wird weiter unten erklaert. & ist Char, der fuer Update gebraucht wird. % ist Char, der ein ResultSet als Antwort darstellt Zeichen 07-32 reserved for future use. Beispiel: Client Server "SELECT FOO FROM BAR;" -> <- "@ID:NAME:PLZ;INT:VARCHAR:CHAR(5);5:LeeChuck:;10:no name \#:12233;# Im Fehlerfall wird zurueckgeliefert: @ ^ Error-Message ; SQL-State ; Error-Code ; # ^ ist ein Zeichen mit Byte-Code 05. Die Error-Message ist der von der Datenbank generierte Fehler. Die Meldung ist ein String. SQL-State ist der Zustand des SQL-Queries als int. Error-Code ist der Fehlercode von der DB als int. Falls das Statement ein Update-, Insert-, Delete-Statement war, dann ist Antwort folgende: @ & UpdateCount ; # & ist Zeichen 06.