MySQL 3.23 中文参考手册 |
|
|
|
| 2004-02-12 MySQL 译者:晏子 http://www.mysql.com/doc.html |
|
| |
增加一个新的原生函数的过程在下面描述。注意,你不能往一个二进制分发中加入新函数,因为该过程涉及修改MySQL源代码。你必须从源代码分发自行编译MySQL。也要注意,如果你迁移到MySQL的其他版本(例如,当一个新版本被释放时),你将需要用新版本重复该过程。
为了加入一个新的原生MySQL函数,遵循这些步骤:
在“lex.h”加入1行,它在sql_functions[]数组中定义函数名。
在“sql_yacc.yy”加入2行。一行指出示yacc应该定义的预处理器符号(这应该加在文件的开始),然后定义函数参数并且将一个具有这些参数“项目”加到simple_expr语法分析规则中。有一个例子,检查在“sql_yacc.yy 所有的SOUNDEX出现看看它使怎样做的。
在“item_func.h”中,声明一个继承Item_num_func或Item_str_func的类,取决于你的函数是返回一个数字或是一个字符串。
在“item_func.cc”,增加下列声明之一,取决于你是正在定义一个数字或是字符串函数:
double Item_func_newname::val()
longlong Item_func_newname::val_int()
String *Item_func_newname::Str(String *str)
你也可能应该定义下列函数:
void Item_func_newname::fix_length_and_dec()
这个函数至少应该基于给定的参数计算max_length,max_length是函数可以返回的字符的最大数目。如果主函数不能返回一个NULL值,这个函数也应该设置maybe_null = 0。函数可以通过检查参数的maybe_null变量以便检查函数参数的任何一个是否能返回NULL。
所有函数必须是线程安全的(thread-safed)。
对字符串函数,已知有一些额外的考虑:
String *str参数提供一个可以用来保存结果的字符串缓冲区。
函数应该返回保存结果的字符串。
所有的当前字符串函数试图避免分配任何内存,除非绝对必要!
|
| |
|
|
| |
|
发表评论
关闭窗口
|
|
|
|