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 plates-formes, (Linux inclus) vous pouvez charger une bibliothèque 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 terminaison 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 terminaison 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 |