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

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

評(píng)論