Voici une description des différentes fonctions que vous devez définir pour réaliser des calculs sur des regroupements, avec une fonction utilisateur :
Notez que ce qui suit n'est pas demandé ou utilisé par MySQL 4.1.1. Vous pouvez conserver cette définition pour assurer la compatibilité entre MySQL 4.0 et MySQL 4.1.1.
char *xxx_reset(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Cette fonction est appelée lorsque MySQL trouve la première ligne dans un nouveau groupe. Dans cette fonction, vous devez remettre à zéro des variables internes de sommaire, puis indique le nouvel argument comme premier membre du nouveau groupe.
Dans de nombreuses situations, cela se fait en interne en
remettant à zéro toutes les variables, et en appelant
xxx_add()
.
Cette fonction n'est demandée que par MySQL 4.1.1 et plus récent :
char *xxx_clear(UDF_INIT *initid, char *is_null, char *error);
Cette fonction est appelée à chaque fois qu'une ligne qui appartient à un groupe est trouvée, hormis la première ligne. Durant cette fonction, vous devez ajouter les données dans votre variable interne de sommaire.
Vous pouvez utiliser le pointeur error
pour
stocker un octet si quelque chose n'a pas fonctionné.
char *xxx_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
Cette fonction est appelée pour toutes les lignes du même
groupe, hormis pour la première ligne. Dans cette dernière,
vous devez ajouter la valeur dans UDF_ARGS
pour vos variables internes.
La fonction xxx()
doit être déclarée de
manière identique à celle d'un fonction utilisateur simple.
See Section 27.2.3.1, « Fonctions utilisateur : appeler des fonctions simples ».
Cette fonction est appelée lorsque toutes les lignes d'un
groupe ont été traitées. Vous ne devez normalement pas
accéder à la variable args
ici, mais
retourner votre valeur, à partir des valeurs du sommaire
interne.
Tous les traitements des arguments de
xxx_reset()
et xxx_add()
doivent être fait d'une manière similaire à celle des
fonctions UDF
normales. See
Section 27.2.3.3, « Traitement des arguments ».
La gestion de la valeur retournée par
xxx()
doit être identique à celle d'une
fonction utilisateur classique. See
Section 27.2.3.4, « Valeurs de retour et gestion d'erreurs. ».
Le pointeur argument de is_null
et
error
sont les mêmes pour tous les appels
de xxx_reset()
,
xxx_add()
et xxx()
. Vous
pouvez utiliser ces valeur pour vous rappeler si vous avez
rencontré une erreur, ou si la fonction
xxx()
doit retourner
NULL
. Notez que vous ne devez pas stocker
de chaîne dans *error
! C'est un conteneur
d'un seul octet!
is_null
est remis à zéro pour chaque
(avant d'appeler xxx_reset()
.
error
n'est jamais remis à zéro.
Si isnull
ou error
sont
modifiés après xxx()
, alors MySQL va
retourner NULL
comme résultat de la
fonction de groupement.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.