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的調度)