
回复
一条包含函数的SQL语句,在MySQL中会经过: 客户端发送
,服务器连接
,语法解析
,语句执行的过程
。
调试源码,分析函数的具体执行过程,在客户端,执行select to_char(‘test’) from dual
。
跟踪堆栈:pthread_start
→handle_one_connection
→do_handle_one_connect
→do_command
→dispatch_command
,确定SQL函数的执行入口为dispatch_command
调试跟踪SQL内部执行过程为:
分析堆栈信息,确定SQL函数主要执行过程为:
SQL_PARSE堆栈:
SQL_RESOLVER堆栈:
SQL_EXCUTOR 堆栈:
SQL_PARSE: SQL解析生成AST语法的语法树,to_char函数,实际中已解析为Item_func_to_char
的语法树节点。
SQL_RESOLVER: 准备阶段prepare,初始化赋值,如Item_func_to_char::resolve_type
设定函数转换后的数据类型。
SQL_EXCUTOR: 执行阶段,执行to_char函数功能,通过Item_func_to_char::val_str
,实际功能处理过程。
本文转载自公众号:GreatSQL社区