Kapitel 10: MySQL erweitern 613
long long int_val;
int_val = *((long long*) args->args[i]);
• Bei einem Argument des Typs REAL_RESULT m¨ussen Sie args->args[i]
zu einem double-Wert machen (cast):
double real_val;
real_val = *((double*) args->args[i]);
unsigned long *lengths
Bei der Initialisierungsfunktion gibt das lengths-Array die maximale Zeichen-
kettenl¨ange jedes Arguments an. Bei jedem Aufruf der Hauptfunktion enth¨alt
lengths die tats¨achlichen L¨angen jeglicher Zeichenketten-Argumente, die f¨ur
die momentan verarbeitete Zeile ¨ubergeben werden. Bei Argumenten des Typs
INT_RESULT oder REAL_RESULT enth¨alt lengths immer noch die maximale
L¨ange des Arguments (wie bei der Initialisierungsfunktion).
10.1.2.3 R¨uckgabewerte und Fehlerbehandlung
Die Initialisierungsfunktion sollte 0 zur¨uckgeben, wenn kein Fehler auftrat, ansonsten
1. Wenn ein Fehler auftritt, sollte xxx_init() eine null-terminierte Fehlermeldung
im message-Parameter enthalten. Die Meldung wird an den Client ¨ubergeben. Der
Meldungspuffer ist MYSQL_ERRMSG_SIZE Zeichen lang, aber Sie sollten versuchen,
die Meldung kleiner als 80 Zeichen zu halten, damit sie auf die Anzeigebreite eines
Standard-Terminals passt.
Der R¨uckgabewert der Hauptfunktion xxx() ist der Funktionswert, bei long long- und
double-Funktionen. Eine Zeichenkettenfunktion sollte einen Zeiger auf das Ergebnis und
die L¨ange der Zeichenkette in den length-Argumenten zur¨uckgeben.
Setzen Sie diese auf die Inhalte und L¨ange des R¨uckgabewerts. Beispiel:
memcpy(result, "ergebnis_zeichenkette", 13);
*length = 13;
Der result-Puffer, der an die Berechnungsfunktionen ¨ubergeben wird, ist 255 Byte Groß.
Wenn Ihr Ergebnis dort hinein passt, m¨ussen Sie sich um die Speicherzuweisung f¨ur Ergeb-
nisse nicht k¨ummern.
Wenn Ihre Zeichenketten-Funktion eine Zeichenkette zur¨uckgeben muss, die l¨anger als 255
Bytes ist, m¨ussen Sie den Platz daf¨ur mit malloc() in Ihrer xxx_init()-Funktion oder Ihrer
xxx()-Funktion zuweisen und in Ihrer xxx_deinit()-Funktion freigeben. Sie k¨onnen den
zugewiesenen Speicher im ptr-Slot in der UDF_INIT-Struktur f¨ur erneute Benutzung durch
zuk¨unftige xxx()-Aufrufe speichern. Siehe Abschnitt 10.1.2.1 [UDF calling], Seite 610.
Um einen R¨uckgabewert von NULL in der Hauptfunktion anzuzeigen, setzen Sie is_null
auf 1:
*is_null = 1;
Um eine Fehlerr¨uckgabe in der Hauptfunktion anzuzeigen, setzen Sie den error-Parameter
auf 1:
*error = 1;
Wenn xxx() *error f¨ur beliebige Zeilen auf 1 setzt, ist der Funktionswert der aktuellen Zeile
NULL, was auch f¨ur nachfolgende Zeilen gilt, die von dem Statement verarbeitet werden, in
Comentarios a estos manuales