ITEEDU

27.2.3.3. UDF参量处理

args 参数指向列着结构元的 UDF_ARGS 结构:

  • unsigned int arg_count

    参量个数。如果你需要你的函数带着某个数目的参量被调用,在初始化函数检查这个值,例如:

    if (args->arg_count != 2)
    {
        strcpy(message,"XXX() requires two arguments");
        return 1;
    }
    
  • enum Item_result *arg_type

    一个指针,对每个参量指向包含类型的一个数列。可能的类型值是STRING_RESULT, INT_RESULT 和 REAL_RESULT。

    要确信一个参量是给定类型的,并且如果不是的话就返回一个错误,请检查初始化函数中的arg_type数列。比如:

    if (args->arg_type[0] != STRING_RESULT ||
        args->arg_type[1] != INT_RESULT)
    {
        strcpy(message,"XXX() requires a string and an integer");
        return 1;
    }
    

    要求你函数的参量是某一类型的另一方法是,使用初始化函数设置arg_type元素为你想要的类型。对所有对xxx()的调用而言,这会导致MySQL强制参量为这些类型。比如,要指定投两个参量强制成字符串和整数,在xxx_init()中分别:

    args->arg_type[0] = STRING_RESULT;
    args->arg_type[1] = INT_RESULT;
    
  • char **args

    args->args 与初始化函数做有关传到你函数的参量的一般情况做通讯。对于常参量i,args->args[i] 指向参量值。(看下面的说明了解如何妥善地访问这个值)。对非-常参量,args->args[i] 为 0。一个常参量为仅使用参量的表达式,如 3 或 4*7-2 或 SIN(3.14)。一个非常 参量是一个行与行不同的表达式,如,列名或带非-常参量调用的函数。

    对主函数的每次调用,args->args 包含为每个当前处理的行传递的实际参量。

    如下使用参量i的函数:

    • 给一个STRING_RESULT 型的参量作为一个字符串加一个长度,可以允许所有二进制数或任意长度的数处理。字符串内容作为args->args[i] 而字符串长度为args->lengths[i]。你不能采用null结尾的字符串。

    • 对一个INT_RESULT型的参量,你必须转换args->args[i] 为一个long long 值:

      long long int_val;
      int_val = *((long long*) args->args[i]);
      
    • 对一个REAL_RESULT型参量,你必须转换args->args[i]为一个双精度值:

      double    real_val;
      real_val = *((double*) args->args[i]);
      
  • unsigned long *lengths

    对初始化函数,lengths数列表示对每个参量的最大字符串长度。你不要改变它。对主函数的每次调用,lengths包含了对当前处理行传递的任何字符串 参量的实际长度。对于INT_RESULT 或 REAL_RESULT类型的参量,lengths 仍包含参量的最大长度(对初始化函数)。