介紹PostgreSQL12/GeenPlum7的操作符“+”的實現機制。首先以select id1+id2 from t;為例解釋其結構體之間的關系。
1、SeqScanState順序掃描狀態結構
SeqScanState為順序掃描的節點狀態結構,內有成員StateState ss:掃描狀態信息,該結構有PlanState ps,有用的信息在這里。PlanState ps為計劃節點狀態結構,內有重要的計算節點信息Plan *plan和條件過濾計算步驟ExprState qual、投影信息ProjectionInfo *ps_ProjInfo。
Plan結構中有2個重要成員鏈表:targetlist投影信息列表和qual過濾條件列表。這里僅關注投影,因為id1+id2在投影中。targetlist實際上是2個TargetEntry,其中resno表示投影結果位于的結果列序號,resname為結果列名。Expr* expr指向Var結構,表示需要的是哪一列,varattno為用戶定義表列的列序號。
接著看投影結構,PlanState中的ps_ProjInfo,內有重要成員ExprState pi_state,表示進行投影計算的步驟描述。pi_state有成員ExprEvalStep steps數組,對表達式計算的步驟描述。本例中有4步,分別為EEOP_SCAN_FETCHSOM、EEOP_SCAN_VAR、EEOP_SCAN_VAR、EEOP_FUNCEXPR_STRICT。由函數ExecInterpExpr執行。
進行+符號計算的步驟是最后一步,其代碼如下:
可以看到,計算前會對參數進行NULL校驗,若由一個參數是NULL,則退出。
-
結構
+關注
關注
1文章
119瀏覽量
21996 -
SQL
+關注
關注
1文章
783瀏覽量
45167
發布評論請先 登錄
LTM8053怎么使用PG那個引腳?
rtthread控制STM32L476的PG7 PG8拉高拉低沒反應是怎么回事?
GP10/GP20/GM10重點功能--WT連接(WT1800R/WT500/WT300E)

DK_START_GW2A-LV18PG256C8I7_V2.0用戶指南
邏輯異或運算符在Python中的用法
技術干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析運算符與優先級

評論