Parser
作用(翻译官):做语法、词法的解析,将Sql字符串转化为AST树
核心:SqlParser#invokeParser
其底层会调用AstBuilder做解析
AstBuilder:父类SqlBaseVisitor 定义了所有的Sql操作,AstBuilder重写了这些操作的实现
SqlBaseParser 针对所有操作都定义了对应的 StatementContext对象,如AddColumnContext等
AST是一颗树,节点是Node,每一个操作都是Node的子类,同时每个操作都有对应的实例。SqlQueryExecution
跟查询比较紧急的是Query类,其是Node的子类
对输入的表达式做解析
DescribeInputRewrite#visitDescribeInput
小结
parser 模块做的事情相对简单明了,就是将Sql语句转化为AST树
代码的话主要是调用底层Antlr4,由于这块设计是使用的访问者设计模式,因此代码跟踪起来可能不太容易
Analyzer
作用(校验):检查查询的目标资源是否存在以及是否有相对应的权限
同时会连接元数据库查询目标资源的元数据,此数据不仅用于做检查,还会用于后面的查询优化
核心:Analyzer#analyze
阶段:初始化SqlQueryExecution对象时(在此时同时会初始化每一个Task的调度)