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