DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info) udf-calling

Info Catalog (mysql.info) adding-udf (mysql.info) adding-udf (mysql.info) udf-aggr-calling
 
 24.2.4.1 UDF Calling Sequences for Simple Functions
 ...................................................
 
 This section describes the different functions that you need to define
 when you create a simple UDF.   adding-udf, describes the order
 in which MySQL calls these functions.
 
 The main `xxx()' function should be declared as shown in this section.
 Note that the return type and parameters differ, depending on whether
 you declare the SQL function `XXX()' to return `STRING', `INTEGER', or
 `REAL' in the `CREATE FUNCTION' statement:
 
 For `STRING' functions:
 
      char *xxx(UDF_INIT *initid, UDF_ARGS *args,
                char *result, unsigned long *length,
                char *is_null, char *error);
 
 For `INTEGER' functions:
 
      long long xxx(UDF_INIT *initid, UDF_ARGS *args,
                    char *is_null, char *error);
 
 For `REAL' functions:
 
      double xxx(UDF_INIT *initid, UDF_ARGS *args,
                    char *is_null, char *error);
 
 The initialization and deinitialization functions are declared like
 this:
 
      my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 
      void xxx_deinit(UDF_INIT *initid);
 
 The `initid' parameter is passed to all three functions. It points to a
 `UDF_INIT' structure that is used to communicate information between
 functions. The `UDF_INIT' structure members follow. The initialization
 function should fill in any members that it wishes to change. (To use
 the default for a member, leave it unchanged.)
 
    * `my_bool maybe_null'
 
      `xxx_init()' should set `maybe_null' to `1' if `xxx()' can return
      `NULL'. The default value is `1' if any of the arguments are
      declared `maybe_null'.
 
    * `unsigned int decimals'
 
      The number of decimal digits to the right of the decimal point.
      The default value is the maximum number of decimal digits in the
      arguments passed to the main function. (For example, if the
      function is passed `1.34', `1.345', and `1.3', the default would
      be 3, because `1.345' has 3 decimal digits.
 
    * `unsigned int max_length'
 
      The maximum length of the result. The default `max_length' value
      differs depending on the result type of the function. For string
      functions, the default is the length of the longest argument. For
      integer functions, the default is 21 digits. For real functions,
      the default is 13 plus the number of decimal digits indicated by
      `initid->decimals'. (For numeric functions, the length includes
      any sign or decimal point characters.)
 
      If you want to return a blob value, you can set `max_length' to
      65KB or 16MB. This memory is not allocated, but the value is used
      to decide which data type to use if there is a need to temporarily
      store the data.
 
    * `char *ptr'
 
      A pointer that the function can use for its own purposes.  For
      example, functions can use `initid->ptr' to communicate allocated
      memory among themselves. `xxx_init()' should allocate the memory
      and assign it to this pointer:
 
           initid->ptr = allocated_memory;
 
      In `xxx()' and `xxx_deinit()', refer to `initid->ptr' to use or
      deallocate the memory.
 
    * `my_bool const_item'
 
      `xxx_init()' should set `const_item' to `1' if `xxx()' always
      returns the same value and to `0' otherwise.
 
Info Catalog (mysql.info) adding-udf (mysql.info) adding-udf (mysql.info) udf-aggr-calling
automatically generated byinfo2html