MySQL源码分析之SQL函数执行

本文详细探讨了MySQL执行包含函数的SQL语句的整个过程,从客户端发送到服务器连接,再到语法解析和语句执行。重点分析了SQL函数在dispatch_command中的执行入口,并进一步分解了SQL解析(SQL_PARSE)、准备执行(SQL_RESOLVER)和具体执行(SQL_EXCUTOR)三个关键步骤,深入理解了函数如何在MySQL中运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值