Les fichiers qui implémentent des fonctions utilisateurs
doivent être compilés et installés sur le même hôte que
celui du serveur. Ce processus est décrit plus bas, avec le
fichier udf_example.cc
qui est inclut
dans les sources MySQL. Ce fichier contient les fonctions
suivantes :
metaphon()
retourne la version
métaphone de la chaîne en argument. C'est une technique
proche du soundex, mais elle est bien plus optimisée pour
l'anglais.
myfunc_double()
retourne la moyenne des
codes ASCII des caractères de la chaîne passée en
argument.
myfunc_int()
retourne la somme de
tailles des arguments.
sequence([const int])
retourne une
séquence, commen¸ant à partir du nombre choisit ou 1,
si aucun nombre n'a été fourni.
lookup()
retourne l'adresse IP
numérique d'un hôte.
reverse_lookup()
retourne le nom
d'hôte pour une adresse IP. Cette fonction peut être
appelée avec une chaîne au format
"xxx.xxx.xxx.xxx"
ou quatre nombres.
Un fichier dynamiquement chargé doit être compilé sous la forme d'un objet partagé, grâce à une commande comme celle-ci :
shell> gcc -shared -o udf_example.so myfunc.cc
Vous pouvez facilement trouver les options correctes pour la
compilation en exécutant cette commande dans le dossier
sql
de votre installation source :
shell> make udf_example.o
Vous devez exécuter une commande de compilation similaire à
celle que le make
affiche, sauf que vous
devrez supprimer l'option -c
près de la
fin de la ligne, et ajouter -o
udf_example.so
à la fin de la ligne. Sur certains
systèmes, vous devrez aussi supprimer -c
de la commande).
Une fois que vous compilez un objet partagés contenant des
fonctions utilisateurs, vous devez les installer, et prévenir
le serveur MYSQL. Compiler un objet partagé avec
udf_example.cc
produit un fichier qui
s'appelle udf_example.so
(le nom exact
peut varier suivant la plate-forme). Copiez ce fichier dans
l'un des dossiers utilisé par ld
, tel que
/usr/lib
. Par exemple,
/etc/ld.so.conf
.
Sur de nombreux systèmes, vous pouvez faire pointer la
variable d'environnement LD_LIBRARY
ou
LD_LIBRARY_PATH
pour qu'elle pointe dans le
dossier où vous avez vos fichiers de fonctions. Le manuel de
dlopen
vous indiquera quelle variable
utiliser sur votre système. Vous devriez indiquer cette
valeur dans les options de démarrage de
mysql.server
et
safe_mysqld
, et redémarrer
mysqld
.
Après que la bibliothèque ait été installée, indiquez à
mysqld
ces nouvelles fonctions avec ces
commandes :
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";
Les fonctions peuvent être effacées plus tard avec
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;
Les commandes CREATE FUNCTION
et
DROP FUNCTION
modifient la table système
func
dans la base mysql
.
Le nom de la fonction, son type et le nom de la bibliothèque
partagée sont alors sauvés dans la table. Vous devez avoir
les droits de INSERT
et
DELETE
dans la base
mysql
pour ajouter et effacer des
fonctions.
Vous ne devez pas utiliser la commande CREATE
FUNCTION
pour ajouter une fonction qui a déjà
été créée. Si vous devez reinstaller une fonction, vous
devez la supprimer avec la commande DROP
FUNCTION
puis la reinstaller avec CREATE
FUNCTION
. Vous devrez faire cela, par exemple, si
vous recompilez une nouvelle version de votre fonction, pour
que mysqld
utilise cette nouvelle version.
Sinon, le serveur va continuer à utiliser l'ancienne version.
Les fonctions actives sont rechargées à chaque fois que le
serveur démarre, à moins que vous ne démarriez le serveur
mysqld
avec l'option
--skip-grant-tables
. Dans ce cas,
l'initialisation des fonctions utilisateurs sont ignorées, et
ces fonctions sont inutilisables. Une fonction active doit
avoir été créée avec CREATE FUNCTION
et
pas supprimée avec DROP FUNCTION
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.