mysql是命令行客户端程序 ,交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。
入口函数
int main(int argc, char *argv[]) {
if (get_options(argc, (char **)argv)) { //获取密码
my_end(0);
return EXIT_FAILURE;
}
//连接服务器
if (sql_connect(current_host, current_db, current_user, opt_password,opt_silent)) {
quick = 1; // Avoid history
status.exit_status = 1;
mysql_end(-1);
}
status.exit_status = read_and_execute(!status.batch); //读取命令并执行
mysql_end(0); //关闭连接
}
//读取命令并执行
static int read_and_execute(bool interactive) {
for (;;) {
//从输入流中读取一行并返回它
line = readline(prompt);
//将line复制到buffer,检查并执行
if(add_line(glob_buffer,line,line_length,&in_string,&ml_comment,status.line _buff ?
status.line_buff->truncated : 0))
break;
}
}
//将line复制到buffer,检查并执行
static bool add_line(String &buffer, char *line, size_t line_length,
char *in_string, bool *ml_comment, bool truncated) {
if (started_with_nothing) {
if (com_go(&buffer, 0) > 0) // 执行sql语句
DBUG_RETURN(1);
buffer.length(0);
}
}
执行流程