当前位置:Gxlcms > 数据库问题 > 跟随一条insert语句, 进入TiDB的源码世界(上)

跟随一条insert语句, 进入TiDB的源码世界(上)

时间:2021-07-01 10:21:17 帮助过:29人阅读

 我们看看cc.dispatch的实现

 技术图片

 

query类型的sql在 clientConn.handleQuery 里面处理:

技术图片

 

 一连串调用之后来到了session.execute, 我们看看实现:

技术图片

 

 session.execute里面做了这几件事:

  1. 通过语法和词法分析将sql解析为抽象语法树,进而生成一个InsertStmt结构体;

    语法分析和词法分析使用的是go语言版的yacc和lex;

    tidb用了一个工具ebnf2y(EBNF文法转 .y文件)将mysql的sql BNF文法转为了 parser.y,可以参见 github.com\pingcap\parser\parser.y;

    值得一提的是,pingcap将sql解析器从tidb独立出来,可以方便的供其他项目使用;

  2. 优化sql, 生成执行计划;

    

  3. 执行sql;

    对于 insert 语句,将数据插入到 kv 中;

    tidb-server 中 mock kv 是直接把键值对保存在了 go 语言版的 leveldb 中;

 我们看看Insert语句对应的结构体:

技术图片

限于篇幅,暂时讲到这里,下篇我们一起进入 session.executeStatement 函数;

看 tidb 是怎样将列数据编码为 kv,插入到 go leveldb 中的;

 

跟随一条insert语句, 进入TiDB的源码世界(上)

标签:举例   时间戳   session   ssi   src   客户端   成本   一起   抽象语法树   

人气教程排行