DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info.gz) UDF arguments

Info Catalog (mysql.info.gz) UDF aggr (mysql.info.gz) Adding UDF (mysql.info.gz) UDF return values
 
 25.2.2.3 Argument Processing
 ............................
 
 The `args' parameter points to a `UDF_ARGS' structure that has the
 members listed here:
 
 `unsigned int arg_count'
      The number of arguments.  Check this value in the initialization
      function if you want your function to be called with a particular
      number of arguments.  For example:
 
           if (args->arg_count != 2)
           {
               strcpy(message,"XXX() requires two arguments");
               return 1;
           }
 
 `enum Item_result *arg_type'
      The types for each argument.  The possible type values are
      `STRING_RESULT', `INT_RESULT', and `REAL_RESULT'.
 
      To make sure that arguments are of a given type and return an
      error if they are not, check the `arg_type' array in the
      initialization function.  For example:
 
           if (args->arg_type[0] != STRING_RESULT ||
               args->arg_type[1] != INT_RESULT)
           {
               strcpy(message,"XXX() requires a string and an integer");
               return 1;
           }
 
      As an alternative to requiring your function's arguments to be of
      particular types, you can use the initialization function to set
      the `arg_type' elements to the types you want.  This causes MySQL
      to coerce arguments to those types for each call to `xxx()'.  For
      example, to specify coercion of the first two arguments to string
      and integer, do this in `xxx_init()':
 
           args->arg_type[0] = STRING_RESULT;
           args->arg_type[1] = INT_RESULT;
 
 `char **args'
      `args->args' communicates information to the initialization
      function about the general nature of the arguments your function
      was called with.  For a constant argument `i', `args->args[i]'
      points to the argument value.  (See below for instructions on how
      to access the value properly.)  For a non-constant argument,
      `args->args[i]' is `0'.  A constant argument is an expression that
      uses only constants, such as `3' or `4*7-2' or `SIN(3.14)'.  A
      non-constant argument is an expression that refers to values that
      may change from row to row, such as column names or functions that
      are called with non-constant arguments.
 
      For each invocation of the main function, `args->args' contains the
      actual arguments that are passed for the row currently being
      processed.
 
      Functions can refer to an argument `i' as follows:
 
         * An argument of type `STRING_RESULT' is given as a string
           pointer plus a length, to allow handling of binary data or
           data of arbitrary length.  The string contents are available
           as `args->args[i]' and the string length is
           `args->lengths[i]'.  You should not assume that strings are
           null-terminated.
 
         * For an argument of type `INT_RESULT', you must cast
           `args->args[i]' to a `long long' value:
 
                long long int_val;
                int_val = *((long long*) args->args[i]);
 
         * For an argument of type `REAL_RESULT', you must cast
           `args->args[i]' to a `double' value:
 
                double    real_val;
                real_val = *((double*) args->args[i]);
 
 `unsigned long *lengths'
      For the initialization function, the `lengths' array indicates the
      maximum string length for each argument. You should not change
      these.  For each invocation of the main function, `lengths'
      contains the actual lengths of any string arguments that are
      passed for the row currently being processed.  For arguments of
      types `INT_RESULT' or `REAL_RESULT', `lengths' still contains the
      maximum length of the argument (as for the initialization
      function).
 
Info Catalog (mysql.info.gz) UDF aggr (mysql.info.gz) Adding UDF (mysql.info.gz) UDF return values
automatically generated byinfo2html