Le paramètre args
pointe sur une structure
UDF_ARGS
qui dispose des membre suivants :
unsigned int arg_count
Le nombre d'arguments. Vérifiez cette valeur dans la fonction d'initialisation, si vous voulez que votre fonction soit appelée avec un nombre particulier d'arguments. Par exemple :
if (args->arg_count != 2) { strcpy(message,"XXX() requires two arguments"); return 1; }
enum Item_result *arg_type
Le type de chaque argument. Les valeurs possibles pour
chaque type sont STRING_RESULT
,
INT_RESULT
et
REAL_RESULT
.
Pour s'assurer que les arguments sont d'un type donné, et
retourner une erreur dans le cas contraire, vérifiez le
tableau arg_type
durant la fonction
d'initialisation. Par exemple :
if (args->arg_type[0] != STRING_RESULT || args->arg_type[1] != INT_RESULT) { strcpy(message,"XXX() requires a string and an integer"); return 1; }
Comme alternative à l'imposition d'un type particulier
pour les arguments des fonctions, vous pouvez utiliser la
fonction pour qu'elle modifie le type des arguments et
donne aux valeurs de arg_type
le type
que vous souhaitez. Cela fait que MYSQL va forcer les
arguments à un type donnée, pour chaque appel de la
fonction xxx()
. Par exemple, pour
forcer le type des deux premiers arguments en chaîne et
entier, vous pouvez utiliser la fonction d'initialisation
xxx_init()
:
args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT;
char **args
args->args
communique les
informations à la fonction d'initialisation, ainsi que la
nature des arguments avec laquelle elle a été appelée.
Pour un argument constant i
,
args->args[i]
pointe sur la valeur
de l'argument. Voir plus bas pour les instructions
d'accès à cette valeur. Pour les valeurs non constantes,
args->args[i]
vaut
0
. Un argument constant est une
expression qui utilise des constantes, comme
3
ou 4*7-2
ou
SIN(3.14)
. Un argument non-constant est
une expression qui fait référence aux valeurs qui
peuvent changer de ligne en ligne, par exemple des noms de
colonnes ou des fonctions qui sont appelées avec des
arguments non-constants.
Pour chaque invocation de la fonction principale,
args->args
contient les arguments
réels qui sont passés à la ligne qui sera traitée.
Les fonctions peuvent faire référence à un argument
i
comme ceci :
Un argument de type STRING_RESULT
est donné sous la forme d'un pointeur de chaîne,
plus une longueur, pour permettre la gestion des
données binaires ou des données de taille
arbitraire. Le contenu des chaînes est disponible
avec l'expression args->args[i]
et la taille de la chaîne est
args->lengths[i]
. Ne supposez
pas que les chaînes sont terminés par le caractère
nul.
Pour un argument de type
INT_RESULT
, vous devez transtyper
la valeur args->args[i]
en
valeur long long
:
long long int_val; int_val = *((long long*) args->args[i]);
Pour un argument de type
REAL_RESULT
, vous devez transtyper
la valeur args->args[i]
en
valeur double
:
double real_val; real_val = *((double*) args->args[i]);
unsigned long *lengths
Pour une fonction d'initialisation, le tableau
lengths
indique la taille maximale des
chaînes pour chaque argument. Vous ne devez pas les
modifier. Pour chaque appel de la fonction principale,
lengths
contient la taille réelle de
toutes les chaînes arguments qui sont passé pour la
ligne traitée. Pour les arguments de type
INT_RESULT
ou
REAL_RESULT
, lengths
contient toujours la taille maximale de l'argument (comme
pour la fonction d'initialisation).
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.