ITEEDU

27.2.3.4. UDF返回值和错误处理

如果没有错误发生,初始化函数应该返回0,否则就返回1。如果有错误发生,xxx_init() 应该在message 参数存储一个以null结尾的错误消息。该消息被返回给客户端。消息缓冲区是 MYSQL_ERRMSG_SIZE 字符长度,但你应该试着把消息保持在少于80个字符,以便它能适合标准终端屏幕的宽度。

对于long long 和 double 类型的函数,主函数 xxx()的返回返回值是函数值。字符函数返回一个指向结果的指针,并且设置 *result 和 *length  为返回值的内容和长度。例如:

memcpy(result, "result string", 13);
*length = 13;

被传给 xxx() 函数的结果缓冲区是 255 字节长。如果你的结果适合这个长度,你就不需要担心对结果的内存分配。

如果字符串函数需要返回一个超过255字节的字符串,你必须用 malloc() 在你的 xxx_init() 函数或者 xxx() 函数里为字符串分配空间,并且在 xxx_deinit() 函数里释放此空间。你可以将已分配内存存储在 UDF_INIT  结构里的 ptr  位置以备将来 xxx() 调用。请参阅27.2.3.1节,“UDF 对简单函数的调用顺序”

要在主函数中指明一个 NULL 的返回值,设置 *is_null 为 1 :

*is_null = 1;

要在主函数中指明错误返回,设置 *error 为 1 :

*error = 1;

如果 xxx() 对任意行设置 *error 为 1  ,对于任何 XXX()被调用的语句处理的当前行和随后的任意行,该函数值为 NULL (甚至都不为随后的行调用 xxx())。