在mysql客户端添加新的 客户端命令

在mysql中命令分为两大类, 一类是在客户端解析执行的,如help, quit等, 另一类是在服务端解析(执行)的,如select,insert等。 注:在客户端执行的,有的也要调用服务端。

本文主要介绍如何给mysql客户端添加新的客户端命令。
用例: 添加一个命令 exec_plan (\E), 功能是类似于命令go,把用户敲入的命令简单处理后发送到服务端执行。
修改代码: client/mysql.cc

首先在客户端命令列表中添加 新命令: mysql.cc 294行的 static COMMANDS commands[] 数组。
在其中添加:
  {"execplan", 'E', com_exec_plan, 1,
    "Use execution plan to execute the command."},
对于这个COMMANDS结构的解释可以参考 287行的结构体定义:
  287 typedef struct {
  288    const char *name;                       
  289    char cmd_char;                             
  290    int (*func)(String *str,char *);
  291    bool takes_params;                     
  292    const char *doc;                         
  293 } COMMANDS;

添加实现方法-----com_exec_plan
在mysql.cc的开始处大约246行处添加方法声明: (这里集中声明了绝大部分的客户方法实现函数)
com_exec_plan(String *str, char *) , 注: 参数的类型和数量是固定的,所有的实习方法基本都一样。

在mysql.cc中添加方法定义:
2764 static int
2765 com_exec_plan(String *buffer __attribute__((unused)), char *line)
2766 {
2767    int length= 0;
2768
2769    if (!line || !strlen(line))
2770    {
2771        put_info("Execution plan must be followed by a query", INFO_ERROR);
2772        return 0;
2773    }
2774
2775    length= strlen(line);
2776
2777    return com_go(buffer, line);
2778 
2779 }

测试
在mysql命令行中敲入如下命令:
mysql>help;
这个命令的返回结果中可以看到我们的新命令exec_plan;
mysql> show databases \E
注: \E就是 我们新添加进去的
可以看到show databases这条命令被正确执行了。

问题
只能用\E, 还无法直接用exec_plan。。。。 还在研究中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值