介绍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浏览量
22423 -
SQL
+关注
关注
1文章
807浏览量
46934
发布评论请先 登录
基于TinySwitch-4 TNY288PG的12W电源设计解析
8N3PG10MBKI - 161:多功能LVPECL合成器的技术剖析
探索Microchip dsPIC33FJ12GP201/202:高性能16位数字信号控制器
探索PI7C9X2G312GP:高性能PCIe 2 3 - 端口/12 - 通道数据包交换机
C语言指针p、*p、&p、*&p、&*p分别代表什么
如何在TensorFlow Lite Micro中添加自定义操作符(2)
如何在TensorFlow Lite Micro中添加自定义操作符(1)
AES和SM4算法的可重构分析
rtthread控制STM32L476的PG7 PG8拉高拉低没反应是怎么回事?
横河GP20温升记录仪外部存储使用方法 实现数据冗余
linux系统awk特殊字符命令详解
GP8891CS 的应用指南
PG12/GP7操作符+的实现
评论