Appeler des fonctions utilisateurs pour les groupements
<<<
Traitement des arguments Valeurs de retour et gestion d'erreurs.
>>>

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.3 Traitement des arguments

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

<< Traitement des arguments >>
Appeler des fonctions utilisateurs pour les groupements Ajouter une nouvelle fonction définie par l'utilisateur ( UDF ) Valeurs de retour et gestion d'erreurs.