Syntaxe de CREATE FUNCTION/DROP FUNCTION <<< |
Ajouter une nouvelle fonction définie par l'utilisateur (UDF) | Ajouter de nouvelles fonctions natives >>> |
23.2 Ajouter des fonctions à MySQL 23 Etendre MySQL Manuel de Référence MySQL 4.1 : Version Française . Syntaxe de CREATE FUNCTION/DROP FUNCTION ->Ajouter une nouvelle fonction définie par l'utilisateur (UDF) . Ajouter de nouvelles fonctions natives |
23.2.2 Ajouter une nouvelle fonction définie par l'utilisateur (UDF)
Pour que le mécanisme UDF fonctionne, les fonctions doivent êtres écrites en C ou C++ et votre système doit supporter le chargement dynamique. Les sources de MySQL incluent un fichier sql/udf_example.cc qui définit 5 nouvelles fonctions. Consultez ce fichier pour voir comment marchent les conventions d'appels des UDF. Pour que mysqld puisse utiliser les fonctions UDF, vous devez configurer MySQL avec l'option --with-mysqld-ldflags=-rdynamic . La raison est que sur diverses plate-formes, (Linux inclus) vous pouvez charger une librairie dynamique (avec dlopen() ) depuis un programme statique lié, que vous pouvez obtenir si vous utilisez l'option --with-mysql-ldflags=-all-static . Si vous voulez utiliser une UDF qui nécessite un accès aux symboles de mysqld (comme l'exemple methaphone dans sql/udf_example.cc qui utilise default_charset_info ), vous devez lier le programme avec -rdynamic (voir man dlopen ).Pour chaque fonction que vous voulez utiliser dans SQL, vous devez définir les fonctions correspondantes en C (ou C++). Dans la discussion ci-dessous, le nom ``xxx'' est utilisé comme un exemple de nom de fonction. Pour faire la différence entre l'usage de SQL et de C/C++, XXX() (majuscules) indique l'appel d'une fonction SQL et xxx() (minuscules) indique l'appel d'une fonction C/C++. Les fonctions C/C++ que vous écrivez pour l'implémentation de l'interface de XXX() sont :
Si xxx_init() retourne une erreur, la requête SQL est annulée avec un message d'erreur et la fonction principale et la fonction de dés-initialisation ne sont pas appelées. Autrement, la fonction principale xxx() est appelée une fois pour chaque ligne. Après que toutes les lignes aient été traitées, la fonction de dés-initialisation xxx_deinit() est appelée pour procéder aux nettoyages requis. Pour les fonctions d'agrégat (comme SUM() ), vous pouvez également ajouter les fonctions suivantes :
Sommaire : |
<< | Ajouter une nouvelle fonction définie par l'utilisateur (UDF) | >> |
Syntaxe de CREATE FUNCTION/DROP FUNCTION | Ajouter des fonctions à MySQL | Ajouter de nouvelles fonctions natives |