23.2.2 Ajouter une nouvelle fonction définie par l'utilisateur ( UDF )
23.2 Ajouter des fonctions à MySQL
23 Etendre MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Fonctions utilisateur : appeler des fonctions simples . Appeler des fonctions utilisateurs pour les groupements . Traitement des arguments . Valeurs de retour et gestion d'erreurs. ->Compiler et installer des fonctions utilisateurs
|
23.2.2.5 Compiler et installer des fonctions utilisateurs
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
.
|