基于TiDB SQL parser 的实现 TiDB SQL parser 的功能是把 SQL 语句按照 SQL 语法规则进行解析,将文本转换成抽象语法树,另外 TiDB SQL parser 支持将语法树转换成 SQL 文本,因此可以通过修改语法树结构达到修改 SQL 文本的目的。 1. 通过 TiDB SQL 解析器将 SQL 解析成语法树 解析出的语法树大致如下,其中"......
Parser:SQL 语法解析器,产生 AST 由AST 做映射判断是否有 PlanCache(v8.4 之前仅支持 session 级别的 plan cache,之后支持了 instance 级别的 plan cache),如果可以直接将 cached 的 physical plan refill 参数之后即可使用。 Build Plan:常规 AST 结构到逻辑计划的构建过程 Logical Plan 有两条路可以走,其中 Sta...
其中,SQL Parser的功能是把SQL语句按照SQL语法规则进行解析,将文本转换成抽象语法树(AST),这部分功能需要些背景知识才能比较容易理解,我尝试做下相关知识的介绍,希望能对读懂这部分代码有点帮助。 TiDB是使用goyacc根据预定义的SQL语法规则文件parser.y生成SQL语法解析器。我们可以在TiDB的Makefile文件中看到这个过程,...
基于TiDB SQL parser 的实现 TiDB SQL parser 的功能是把 SQL 语句按照 SQL 语法规则进行解析,将文本转换成抽象语法树,另外 TiDB SQL parser 支持将语法树转换成 SQL 文本,因此可以通过修改语法树结构达到修改 SQL 文本的目的。 1. 通过 TiDB SQL 解析器将 SQL 解析成语法树 解析出的语法树大致如下,其中"......
TiDB SQL parser 的功能是把 SQL 语句按照 SQL 语法规则进行解析,将文本转换成抽象语法树,另外 TiDB SQL parser 支持将语法树转换成 SQL文本,因此可以通过修改语法树结构达到修改SQL文本的目的。 1. 通过 TiDB SQL 解析器将 SQL 解析成语法树 解析出的语法树大致如下,其中"..." 代表之前存在多级。
Parser:SQL 语法解析器,产生 AST 由AST 做映射判断是否有 PlanCache(v8.4 之前仅支持 session 级别的 plan cache,之后支持了 instance 级别的 plan cache),如果可以直接将 cached 的 physical plan refill 参数之后即可使用。 Build Plan:常规 AST 结构到逻辑计划的构建过程 Logical Plan 有两条路可以走,其中 Sta...
TiDB 是使用 goyacc 根据预定义的 SQL 语法规则文件 parser.y 生成SQL 语法解析器。我们可以在 TiDB 的 Makefile 文件中看到这个过程,先 build goyacc 工具,然后使用 goyacc 根据parser.y 生成解析器 parser.go: goyacc: $(GOBUILD) -o bin/goyacc parser/goyacc/main.go parser: goyacc bin/goyacc -...
基于TiDB SQL parser 的实现 TiDB SQL parser 的功能是把 SQL 语句按照 SQL 语法规则进行解析,将文本转换成抽象语法树,另外 TiDB SQL parser 支持将语法树转换成 SQL文本,因此可以通过修改语法树结构达到修改 SQL 文本的目的。 1. 通过 TiDB SQL 解析器将 SQL 解析成语法树 ...
Parser 模块在整个 TiDB 生态中担任 SQL 解析的任务。TiDB 兼容 MySQL 也有赖于 Parser 对使用 MySQL 语法构造出的 SQL 语句的解析。这篇文章会首先简单聊一下 Parser 解析中比较重要的词法解析与语法解析两个过程。然后说说如何修改Parser 模块以兼容新的关键字,这也算是理解 Parser 模块的原理之后的一点实践。
TiDB是一个开源分布式数据库,并使用Rust编写的TiKV存储数据,其中TiDB是一个SQL语法解析层,本文使用MockDB模拟本地存储数据,从语法解析到实际存储操作进行分析一张数据表是如何建出来的。 过程如下: 首先我们得有一个建表语句 TiDB拿到一个SQL语句之后,首先需要使用Parser进行语法解析 ...