| 24.2.2 Ajouter une nouvelle fonction définie par l'utilisateur ( UDF )
 24.2 Ajouter des fonctions à MySQL
 24 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
 
 
 | 
  24.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
  : Pour les fonctions d'entiers  
INTEGER
  :| 
char *xxx(UDF_INIT *initid, UDF_ARGS *args,char *result, unsigned long *length,
 char *is_null, char *error);
 | 
 Pour les fonctions de nombres à virgule flottante  
REAL
  :| 
long long 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 :| 
double xxx(UDF_INIT *initid, UDF_ARGS *args,char *is_null, char *error);
 | 
 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 xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 void xxx_deinit(UDF_INIT *initid);
 | 
 
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 :  
En  
xxx()
  et  
xxx_deinit()
 , utilisez  
initid->ptr
  pour exploiter ou
supprimer la mémoire.| 
initid->ptr = allocated_memory;
 | 
 |