在mysql中添加新源文件,以及 如何…
来源:互联网 发布:父亲写的散文诗 知乎 编辑:程序博客网 时间:2024/05/08 12:05
本文主要介绍如何在mysql 中添加新的源文件以及如何在客户端打印列表信息。这两个内容没有必然的联系,这里放在一起介绍主要是因为这两个功能我是一起尝试的。
1.添加新源文件
mysql5.5的编译是基于cmake来进行的,所以当添加新的源文件的时候,需要在对应源码目录的cmake配置文件CMakeList.txt中添加新源文件的信息。
本例中添加的新文件是gaoshow.h 和gaoshow.cc, 它们都在sql源码目录下。
编辑sql源码目录下的CMakeList.txt,大约第39行处找到变量定义 “SET(SQL_SHARED_SOURCES”在其后的列表的末尾添加gaoshow.cc (cmake中只需要添加.cc文件,不需要添加.h头文件)。
2.添加“客户端打印列表信息”的功能
这个功能基于之前的博文《如何在修改mysql代码添加新命令》:http://hi.baidu.com/gao1738/blog/item/716e1aeb3e0a5a0b6c22eb46
在《如何在修改mysql代码添加新命令》中我添加了一条新的命令"DISPATCH ADD",现在在该命令的命令处理代码处:
sql_parse.cc中的 “mysql_execute_command”函数中的“caseSQLCOM_DISPATCH_ADD:”。具体修改后的处理代码如下:
if (!strcmp(lex->dispatch_message,"gao"))
“show_dispatch_info” 函数定义在新填的源文件中:
这个头文件需要在sql_parse.cc中被include
#ifndef GAO_SHOW#define GAO_SHOW
bool show_dispatch_info(THD *thd, char *message);
#endif
#include "sql_parse.h"
#include "gaoshow.h"
#include <my_dir.h>
bool show_dispatch_info(THD *thd, char *message)
{
}
3.
这里我们直接使用《如何在修改mysql代码添加新命令》中定义的测试用例, 执行结果如下:
==============================================================================TEST
--------------------------------------------------------------------------
worker[1] Using MTR_BUILD_THREAD 300, with reserved ports13000..13009
DISPATCH ADD gao;
message
gao
show variables like 'node_type';
Variable_name
node_type
main.gao
4.打印多行数据
打印多行的过程和打印一行很类似, 也是通过protocol对象, 也是先设置并发送数据的metadata,然后一行一行发送,发送具体一行的代码可以参考sql/sql_class.cc中1895行的send_data函数。下面是一个简单的实例:
bool show_dispatch_info(THD *thd, const char *message){