druid 源码阅读(六)Druid SqlParser 介绍
1、Druid SqlParser 组成
Druid SQL Parser 主要分为三个模块:Parser、AST、Visitor
parser 是将输入文本转换为 ast(抽象语法树)。
AST 是 Abstract Syntax Tree,翻译为抽象语法树,是将 SQL 当中的语法结构解析为树的结构,如
select * from t where id=1;可以解析为 select, * , t , id=1,每个都是一个节点,便于我们对这个 sql 进行处理。
Visitor 是一个接口,可以自定义他的实现用以达到我们自己对抽象语法树的遍历处理。
2、SqlParser
使用如下代码可以将 sql 字符串解析为 SQLStatement。SQLSelectStatement 是 SQLStatement 的一个实现,代表这是个 SELECT 语句。
查看 SQLSelectStatement 的属性:
管网上说:SQLSelectStatement 包含一个 SQLSelect,SQLSelect 包含一个 SQLSelectQuery,都是组成的关系。SQLSelectQuery 有主要的两个派生类,分别是 SQLSelectQueryBlock 和 SQLUnionQuery。
我们直接看下 SQLSelectQueryBlock 的属性,获取下看看:
从代码中可以看出来我们可以通过 SQLSelectQueryBlock 获取 sql 中对应的属性。
3、Visitor
Druid SqlParser 使用访问者模型可以对抽象语法树进行遍历处理,具体可以参考官方例子:
SQL_Parser_Demo_visitor · alibaba/druid Wiki (github.com)
4、总结
Druid SqlParser 可以让我们非常方便的解析 SQL 并对 SQL 进行处理,Druid 也据此建立了 SQL 火墙技术。
评论