1.MySQL中执行一条SQL的总体流程
一条包含函数的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内部执行过程为:
2.SQL函数执行过程
分析堆栈信息,确定SQL函数主要执行过程为:
- SQL_PARSE 语法解析
- SQL_RESOLVER prepare准备执行
- SQL_EXCUTOR 具体执行函数
SQL_PARSE堆栈:
1 To_char_instantiator::instantiate(To_char_instantiator * const this, THD * thd, PT_item_list * args) (/home/bob/work/percona-server/sql/item_create.cc:785)
2 (anonymous namespace)::Function_factory<To_char_instantiator>::create_func((anonymous namespace)::Function_factory<To_char_instantiator> * const this, THD * thd, LEX_STRING function_name, PT_item_list * item_list) (/home/bob/work/percona-server/sql/item_create.cc:1203)
3 PTI_function_call_generic_ident_sys::itemize(PTI_function_call_generic_ident_sys * const this, Parse_context * pc, Item ** res) (/home/bob/work/percona-server/sql/parse_tree_items.cc:259)
4 PTI_expr_with_alias::itemize(PTI_expr_with_alias * const this, Parse_context * pc, Item ** res) (/home/bob/work/percona-server/sql/parse_tree_items.cc:337)
5 PT_item_list::contextualize(PT_item_list * const this, Parse_context