Dateien, die UDFs implementieren, müssen auf dem Serverhost
kompiliert und installert werden. Dies wird weiter unten für
die Beispiel-UDF-Datei sql/udf_example.cc
aus der MySQL-Quelldistribution beschrieben.
Die nachfolgenden Instruktionen gelten für Unix. Anleitungen für Windows finden Sie weiter unten in diesem Abschnitt.
Die Datei udf_example.cc
enthält die
folgenden Funktionen:
Die Funktion metaphon()
gibt einen
Metaphon-String aus dem String-Argument zurück. Dieser
ist so etwas wie ein Soundex-String, allerdings besser auf
die englische Sprache zugeschnitten.
Die Funktion myfunc_double()
gibt die
Summe der ASCII-Werte der in ihren Argumenten enthaltenen
Zeichen geteilt durch die Summe der Längen dieser
Argumente zurück.
Die Funktion myfunc_int()
gibt die
Summe der Längen ihrer Argumente zurück.
Die Funktion sequence([const int])
gibt
eine Sequenz zurück, die ab der gegebenen Zahl oder, wenn
keine gegeben wurde, ab 1 beginnt.
Die Funktion lookup()
gibt die
IP-Nummer eines Hostnamens zurück.
Die Funktion reverse_lookup()
gibt den
Hostnamen zu einer IP-Nummer zurück. Diese Funktion kann
entweder mit einem einzigen String-Argument der Form
'xxx.xxx.xxx.xxx'
oder mit vier Zahlen
aufgerufen werden.
Eine Datei, die dynamisch zu laden sein soll, sollte als Sharable Object-Datei mit einem Befehl wie diesem kompiliert werden:
shell> gcc -shared -o udf_example.so udf_example.cc
Wenn Sie gcc benutzen, müsste sich
udf_example.so
auch mit einem einfacheren
Befehl anlegen lassen:
shell> make udf_example.so
Die richtigen Compiler-Optionen für Ihr System finden Sie
einfach heraus, indem Sie folgenden Befehl im
sql
-Verzeichnis Ihres MySQL-Quellbaums
laufen lassen:
shell> make udf_example.o
Sie sollten einen ähnlichen Compile-Befehl geben, wie ihn
make anzeigt, allerdings ohne die Option
-c
am Zeilenende. Stattdessen fügen Sie die
Option -o udf_example.so
hinzu. (Auf manchen
Systemen müssen Sie eventuell die Option -c
im Befehl beibehalten.)
Nachdem Sie ein Shared Object für UDFs kompiliert haben,
müssen Sie es installieren und MySQL mitteilen, dass es da
ist. Wenn Sie ein Shared Object aus
udf_example.cc
kompilieren, entsteht eine
Datei, die ungefähr udf_example.so
heißt (der genaue Name ist plattformabhängig). Diese Datei
kopieren Sie in das Plug-In-Verzeichnis des Servers, das Sie
anhand der Systemvariablen plugin_dir
herausfinden können.
(Hinweis: Dies ist eine
Änderung in MySQL 5.1. In früheren Versionen von MySQL
konnte das Shared Object in jedem Verzeichnis liegen, das der
dynamische Linker Ihres Systems untersuchte.)
Auf manchen Systemen erkennt das Programm
ldconfig, das den dynamischen Linker
konfiguriert, ein Shared Object nur dann, wenn sein Name mit
lib
anfängt. In solchen Fällen sollten
Sie eine Datei wie udf_example.so
in
libudf_example.so
umbenennen.
Auf Windows können Sie benutzerdefinierte Funktionen wie folgt kompilieren:
Zuerst benötigen Sie das BitKeeper-Quellarchiv für MySQL 5.1. Siehe Abschnitt 2.8.3, „Installation vom Entwicklungs-Source-Tree“.
In diesem Quellarchiv suchen Sie im Verzeichnis
VC++Files/examples/udf_example
nach
den Dateien udf_example.def
,
udf_example.dsp
und
udf_example.dsw
.
Außerdem schauen Sie im Quellarchiv in das Verzeichnis
sql
und kopieren daraus die Datei
udf_example.cc
in das
VC++Files/examples/udf_example
-Verzeichnis.
Dann benennen Sie die Datei in
udf_example.cpp
um.
Öffnen Sie die Datei udf_example.dsw
mit Visual Studio VC++ und kompilieren Sie damit die UDFs
als ganz normales Projekt.
Sobald die Shared Object-Datei installiert ist, teilen Sie mysqld die neuen Funktionen mit folgenden Anweisungen mit:
mysql>CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
mysql>CREATE FUNCTION myfunc_double RETURNS REAL SONAME 'udf_example.so';
mysql>CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so';
mysql>CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so';
mysql>CREATE FUNCTION reverse_lookup
->RETURNS STRING SONAME 'udf_example.so';
mysql>CREATE AGGREGATE FUNCTION avgcost
->RETURNS REAL SONAME 'udf_example.so';
Zum Löschen von Funktionen verwenden Sie DROP
FUNCTION
:
mysql>DROP FUNCTION metaphon;
mysql>DROP FUNCTION myfunc_double;
mysql>DROP FUNCTION myfunc_int;
mysql>DROP FUNCTION lookup;
mysql>DROP FUNCTION reverse_lookup;
mysql>DROP FUNCTION avgcost;
Die Anweisungen CREATE FUNCTION
und
DROP FUNCTION
nehmen Änderungen in der
Systemtabelle func
in der
mysql
-Datenbank vor. Der Name, Typ und
Shared Library-Name werden in dieser Tabelle gespeichert.
Daher benötigen Sie INSERT
- und
DELETE
-Rechte für die
mysql
-Datenbank, um dort Funktionen
anzulegen und zu löschen.
Bitte verwenden Sie CREATE FUNCTION
nicht,
um eine Funktion hinzuzufügen, die bereits angelegt ist. Wenn
Sie eine Funktion neu installieren müssen, entfernen Sie sie
mit DROP FUNCTION
und installieren sie dann
mit CREATE FUNCTION
neu. Das müssen Sie
beispielsweise tun, wenn Sie eine neue Version Ihrer Funktion
installieren, damit auch mysqld von der
neuen Version weiß. Ansonsten würde der Server weiterhin die
alte Version verwenden.
Eine aktive Funktion ist eine Funktion, die mit
CREATE FUNCTION
geladen, aber nicht mit
DROP FUNCTION
entfernt wurde. Alle aktiven
Funktionen werden bei jedem Serverstart neu geladen, es sei
denn, Sie fahren mysqld mit der Option
--skip-grant-tables
hoch. In diesem Fall wird
die UDF-Initialisierung übersprungen und die UDFs stehen
nicht zur Verfügung.
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.