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.
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.