Der Parameter args
verweist auf eine
UDF_ARGS
-Struktur mit folgenden
Bestandteilen:
unsigned int arg_count
Die Anzahl der Argumente. Diesen Wert muss die Initialisierungsfunktion prüfen, wenn Ihre Funktion mit einer bestimmten Anzahl von Argumenten aufgerufen werden muss. Zum Beispiel:
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
enum Item_result *arg_type
Ein Zeiger auf ein Array, das die Argumenttypen enthält.
Mögliche Typwerte sind STRING_RESULT
,
INT_RESULT
und
REAL_RESULT
.
Um sicherzustellen, dass die Argumente einen bestimmten
Typ haben, und um einen Fehler auszulösen, wenn der Typ
nicht stimmt, muss die Initialisierungsfunktion das Array
arg_type
betrachten. Zum Beispiel:
if (args->arg_type[0] != STRING_RESULT || args->arg_type[1] != INT_RESULT) { strcpy(message,"XXX() requires a string and an integer"); return 1; }
Anstatt zu verlangen, dass die Funktionsargumente
bestimmte Typen haben, können Sie auch mit der
Initialisierungsfunktion die
arg_type
-Elemente auf die gewünschten
Typen einstellen. Dies veranlasst MySQL, den Argumenten
bei jedem Aufruf von xxx()
die
richtigen Typen aufzuzwingen. Um beispielsweise aus dem
ersten Argument einen String und aus dem zweiten einen
Integer zu machen, muss Ihre
xxx_init()
-Funktion Folgendes tun:
args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
char **args
args->args
informiert die
Initialisierungsfunktion über das Wesen der an Ihre
Funktion übergebenen Argumente. Bei einem
Konstantenargument i
verweist
args->args[i]
auf den Argumentwert.
(Wie Sie richtig auf diesen Wert zugreifen, erfahren Sie
weiter unten.) Bei einem Nichtkonstantenargument ist
args->args[i]
gleich
0
. Ein Konstantenargument ist ein
Ausdruck, der nur Konstanten verwendet, wie beispielsweise
3
oder 4*7-2
oder
SIN(3.14)
. Ein Nichtkonstantenargument
ist ein Ausdruck, der auf Werte verweist, die sich von
Zeile zu Zeile ändern können, wie etwa Spaltennamen oder
Funktionen, die mit Nichtkonstantenargumenten aufgerufen
werden.
Für jeden Aufruf der Hauptfunktion enthält
args->args
die Argumente, die
tatsächlich an die in Bearbeitung befindliche Zeile
übergeben werden.
Funktionen können folgendermaßen auf ein Argument
i
verweisen:
Ein Argument vom Typ STRING_RESULT
wird als String-Zeiger mit einer Längenangabe
übergeben, damit auch Binärdaten oder Daten von
beliebiger Länge verarbeitet werden können. Der
String-Inhalt ist als
args->args[i]
und die Länge des
Strings als args->lengths[i]
angegeben. Bitte setzen Sie nicht voraus, dass Strings
mit null beendet werden.
Bei Argumenten vom Typ INT_RESULT
müssen Sie args->args[i]
in
einen long long
-Wert umwandeln:
long long int_val; int_val = *((long long*) args->args[i]);
Bei Argumenten vom Typ REAL_RESULT
müssen Sie args->args[i]
in
einen double
-Wert umwandeln:
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
Für die Initialisierungsfunktion zeigt das Array
lengths
die maximale String-Länge für
jedes Argument an. Diese sollten Sie nicht ändern. Für
jeden Aufruf der Hauptfunktion enthält
lengths
die tatsächlichen Längen der
String-Argumente, die an die in Bearbeitung befindliche
Zeile übergeben werden. Für Argumente der Typen
INT_RESULT
oder
REAL_RESULT
enthält
lengths
immer noch die maximale Länge
des Arguments (wie für die Initialisierungsfunktion).
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.