Ajouter des fonctions à MySQL
<<<
Fonctions utilisateur : appeler des fonctions simples Appeler des fonctions utilisateurs pour les groupements
>>>

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.1 Fonctions utilisateur : appeler des fonctions simples

La fonction principale doit être déclarée comme illustrée ici. Notez que le type de retour et les paramètres diffèrent, suivant que vous voulez déclarer une fonction SQL XXX() qui retournera une STRING , un INTEGER ou un REAL dans la commande CREATE FUNCTION :

Pour les fonctions de chaînes STRING :

char *xxx(UDF_INIT *initid, UDF_ARGS *args,
          char *result, unsigned long *length,
          char *is_null, char *error);
Pour les fonctions d'entiers INTEGER :

long long xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
Pour les fonctions de nombres à virgule flottante REAL :

double xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
Les fonctions d'initialisation et de terminaison sont déclarées comme ceci :

my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

void xxx_deinit(UDF_INIT *initid);
Le paramètre initid est passé aux trois fonctions. Il pointe sur une structure UDF_INIT qui est utilisée pour communiquer des informations entre les fonctions. Les membres de la structure UDF_INIT sont ceux qui sont listés ci-dessous. La fonction d'initialisation doit préparer les membres qu'elle veut, et notamment leur donner une valeur initiale (pour utiliser les valeurs par défaut, laissez le membre intact) :
    my_bool maybe_null
    xxx_init() doit remplacer maybe_null par 1 si xxx() peut retourner NULL . La valeur par défaut est 1 si l'un des arguments n'est déclaré comme maybe_null .
    unsigned int decimals
    Le nombre de décimales. La valeur par défaut est le nombre maximum de décimales dans l'argument passé à la fonction. Par exemple, vis la fonction reçoit 1.34 , 1.345 et 1.3 , ce nombre sera 3, car 1.345 a 3 décimales.
    unsigned int max_length
    La taille maximale de la chaîne résultat. La valeur par défaut dépend du type de résultat de la fonction. Pour les fonctions de chaînes, la valeur par défaut est la taille du plus grand argument. Pour les fonctions entières, la valeur est de 21 chiffres. Pour les fonctions à nombre à virgule flottante, la valeur est de 13, plus le nombre de décimales indiquées par initid->decimals . Pour les fonctions numériques, la taille inclut le signe et le séparateur décimal.

    Si vous voulez retourner un BLOB , vous devez donner à ce membre la valeur de 65 ko ou 16 Mo; cet espace mémoire ne sera pas alloué, mais utilisé pour décider quel type de colonne utiliser, si il y a un besoin de stockage temporaire.

    char *ptr
    Un pointeur que la fonction peut utiliser pour ses besoins propres. Par exemple, la fonction peut utiliser initid->ptr pour transférer de la mémoire allouée entre les trois fonctions. En xxx_init() , allouez de la mémoire, et assignez la à ce pointeur :
    
    initid->ptr = allocated_memory;
    
    En xxx() et xxx_deinit() , utilisez initid->ptr pour exploiter ou supprimer la mémoire.

<< Fonctions utilisateur : appeler des fonctions simples >>
Ajouter des fonctions à MySQL Ajouter une nouvelle fonction définie par l'utilisateur ( UDF ) Appeler des fonctions utilisateurs pour les groupements