介紹PostgreSQL12/GeenPlum7的操作符“+”的實現(xiàn)機制。首先以select id1+id2 from t;為例解釋其結(jié)構(gòu)體之間的關(guān)系。
1、SeqScanState順序掃描狀態(tài)結(jié)構(gòu)

SeqScanState為順序掃描的節(jié)點狀態(tài)結(jié)構(gòu),內(nèi)有成員StateState ss:掃描狀態(tài)信息,該結(jié)構(gòu)有PlanState ps,有用的信息在這里。PlanState ps為計劃節(jié)點狀態(tài)結(jié)構(gòu),內(nèi)有重要的計算節(jié)點信息Plan *plan和條件過濾計算步驟ExprState qual、投影信息ProjectionInfo *ps_ProjInfo。
Plan結(jié)構(gòu)中有2個重要成員鏈表:targetlist投影信息列表和qual過濾條件列表。這里僅關(guān)注投影,因為id1+id2在投影中。targetlist實際上是2個TargetEntry,其中resno表示投影結(jié)果位于的結(jié)果列序號,resname為結(jié)果列名。Expr* expr指向Var結(jié)構(gòu),表示需要的是哪一列,varattno為用戶定義表列的列序號。
接著看投影結(jié)構(gòu),PlanState中的ps_ProjInfo,內(nèi)有重要成員ExprState pi_state,表示進行投影計算的步驟描述。pi_state有成員ExprEvalStep steps數(shù)組,對表達式計算的步驟描述。本例中有4步,分別為EEOP_SCAN_FETCHSOM、EEOP_SCAN_VAR、EEOP_SCAN_VAR、EEOP_FUNCEXPR_STRICT。由函數(shù)ExecInterpExpr執(zhí)行。
進行+符號計算的步驟是最后一步,其代碼如下:

可以看到,計算前會對參數(shù)進行NULL校驗,若由一個參數(shù)是NULL,則退出。
-
結(jié)構(gòu)
+關(guān)注
關(guān)注
1文章
119瀏覽量
22432 -
SQL
+關(guān)注
關(guān)注
1文章
807瀏覽量
46965
發(fā)布評論請先 登錄
GP9303/GP9303M:高性能模擬到PWM轉(zhuǎn)換器的技術(shù)剖析
深入解析GP8101/GP8101M:PWM轉(zhuǎn)模擬電壓轉(zhuǎn)換器的卓越之選
GP8101/GP8101M:PWM轉(zhuǎn)模擬信號轉(zhuǎn)換器的卓越之選
基于TinySwitch-4 TNY288PG的12W電源設(shè)計解析
探索Microchip dsPIC33FJ12GP201/202:高性能16位數(shù)字信號控制器
探索PI7C9X2G312GP:高性能PCIe 2 3 - 端口/12 - 通道數(shù)據(jù)包交換機
C語言指針p、*p、&p、*&p、&*p分別代表什么
如何在TensorFlow Lite Micro中添加自定義操作符(2)
如何在TensorFlow Lite Micro中添加自定義操作符(1)
C語言位操作符
AES和SM4算法的可重構(gòu)分析
rtthread控制STM32L476的PG7 PG8拉高拉低沒反應(yīng)是怎么回事?
橫河GP20溫升記錄儀外部存儲使用方法 實現(xiàn)數(shù)據(jù)冗余
PG12/GP7操作符+的實現(xiàn)
評論