2025年mysql的imi文件_MySQL源代码

mysql的imi文件_MySQL源代码MySQL 版本 5 7 14 代码查看工具 VSCode 安装插件 Bracket Pair Colorizer 2 C C for Visual Studio Code Chinese Simplified Language Pack for VS Code Code Runner

大家好,我是讯享网,很高兴认识大家。

MySQL版本5.7.14

代码查看工具:VSCode

安装插件:

Bracket Pair Colorizer 2

C/C++ for Visual Studio Code

Chinese (Simplified) Language Pack for VS Code

Code Runner

ESLint

GitLens

One Dark Pro

Prettier Formatter

Sass

Vetur

vscode-icons

如果是要用VSCode跟代码的话,必须要装C/C++环境,直接按住CTRL + 鼠标右键,就能跳转到对应的代码

第一次跟C++的代码,如果有错误的地方可以指出来,大家一起进步。

暂时先把读代码划分成三个块:语句执行、work执行机制、blong与redo机制,目前暂时先读语句执行部分,其他部分需要C++一些功底,耗时会比较长,暂时不打算深入研究

---------------------------- 开始跟代码----------------------

代码导读:https://blog.csdn.net//article/details/

代码跟踪记录:

sql/conn_handler/connection_handler_manager.cc

Connection_handler_manager::process_new_connection(Channel_info* channel_info)

process_new_connection方法中调用了add_connection方法,我们来找一下该方法中的关键代码

sql/conn_handler/connection_handler_per_thread.cc

bool Per_thread_connection_handler::add_connection(Channel_info* channel_info)

add_connection中调用了handle_connection,而且还是比较容易忽略的地方

------------------------------------------------------------

error= mysql_thread_create(key_thread_one_connection, &id,

&connection_attrib,

handle_connection,

(void*) channel_info);

------------------------------------------------------------

mysql_thread_create的原貌:

#ifdefHAVE_PSI_THREAD_INTERFACE

#definemysql_thread_create(K,P1,P2,P3,P4)\

inline_mysql_thread_create(K, P1, P2, P3, P4)

#else

#definemysql_thread_create(K,P1,P2,P3,P4)\

my_thread_create(P1, P2, P3, P4)

#endif

---------------------------------------------------------

int my_thread_create(my_thread_handle *thread, const my_thread_attr_t *attr, my_start_routine func, void *arg){

struct thread_start_parameter *par;

unsigned int  stack_size;

par= (struct thread_start_parameter *)malloc(sizeof(*par));

par->func= func;

thread->handle= (HANDLE)_beginthreadex(NULL, stack_size, win_thread_start,

par, 0, &thread->thread);

}

---------------------------------------------------------

extern "C" void *handle_connection(void *arg)

{

while (thd_connection_alive(thd))

{

if (do_command(thd))

break;

}

}

sql/sql_parse.cc :

相关方法:

-----------------------------

bool do_command(THD *thd)

{


讯享网

....

rc= thd->get_protocol()->get_command(&com_data, &command);

.......

return_value= dispatch_command(thd, &com_data, command);

thd->get_protocol_classic()->get_packet()->shrink(

thd->variables.net_buffer_length);

.........

}

-------------------------------------

bool dispatch_command(THD *thd, const COM_DATA *com_data, enum enum_server_command command)

dispatch_command关键代码:

switch (command){

caseCOM_INIT_DB:

.....

caseCOM_STMT_EXECUTE:

{

mysqld_stmt_execute(thd, com_data->com_stmt_execute.stmt_id,

com_data->com_stmt_execute.flags,

com_data->com_stmt_execute.params,

com_data->com_stmt_execute.params_length);

break;

}

caseCOM_STMT_FETCH:

{

mysqld_stmt_fetch(thd, com_data->com_stmt_fetch.stmt_id,

com_data->com_stmt_fetch.num_rows);

break;

}

case COM_QUERY:

{

DBUG_ASSERT(thd->m_digest == NULL);

thd->m_digest= & thd->m_digest_state;

thd->m_digest->reset(thd->m_token_array, max_digest_length);

if (alloc_query(thd, com_data->com_query.query,

com_data->com_query.length))

break;// fatal error is set

MYSQL_QUERY_START(const_cast(thd->query().str), thd->thread_id(),

(char *) (thd->db().str ? thd->db().str : ""),

(char *) thd->security_context()->priv_user().str,

(char *) thd->security_context()->host_or_ip().str);

..............

}

然后在下面就会出现语法解析的方法

mysql_parse

语法树解析关键代码:

sql/sql_parse.cc :

void mysql_parse(THD *thd, Parser_state *parser_state){

.................

if (query_cache.send_result_to_client(thd, thd->query()) <= 0)

{

LEX *lex= thd->lex;

const char *found_semicolon;

bool err= thd->get_stmt_da()->is_error();

if (!err)

{

err=parse_sql(thd, parser_state, NULL);

if (!err)

err= invoke_post_parse_rewrite_plugins(thd, false);

found_semicolon= parser_state->m_lip.found_semicolon;

}

.................

}

小讯
上一篇 2025-03-21 15:03
下一篇 2025-02-10 15:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/76020.html