TDDL的optimizer层主要完成三部分的工作:
- 将parser分析得到的statement转化为可以优化的AST语法树
- 对AST语法树做Cost Based优化
- 根据优化后的AST语法树生成查询计划
本篇文档主要介绍第1点中AST语法树相关的结构。
parser层输出的结构是SQLStatement接口,能够通过SQLASTVisitor接口访问。
optimizer层要做的第一个工作,就是将parser层的SQLStatement数据结构转换为optimizer层的可优化AST语法树结构。相关的核心结构如下:
- CobarSqlAnalysisResult - 是关联parser层SQLStatement结构和optimizer层ASTNode结构的连接点。它根据SQLStatement的类型创建不同的visitor,生成ASTNode层次结构
- MySqlSelectVisitor - 访问DMLSelectStatement内部结构,生成对应的QueryTreeNode结构
- ASTNode结构 - 包含了查询的所有原信息,能通过toDataNodeExecutor()方法生成查询计划