Presto 原始碼剖析

2022-03-30 08:28:11 字數 682 閱讀 9688

作用(翻譯官):做語法、詞法的解析,將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#analyze

階段:初始化sqlqueryexecution物件時(在此時同時會初始化每乙個task的排程)

原始碼剖析 Hashtable 原始碼剖析

hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...

Erlang hotwheels原始碼剖析

整體構架 janus transport sup 實質為transport,supervisor,client instance supervisor 每個tcp會話建立乙個transport程序來處理對應客戶端的請求。janus topman sup 實質為topman,worker,topic ...