0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PG12/GP7操作符+的实现

微云疏影 来源:yzsDBA 作者:yzsDBA 2022-04-07 15:18 次阅读

介绍PostgreSQL12/GeenPlum7的操作符“+”的实现机制。首先以select id1+id2 from t;为例解释其结构体之间的关系。

1、SeqScanState顺序扫描状态结构

pYYBAGJOkCuAYUQ8AALmT_8aCh8976.jpg

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执行。

进行+符号计算的步骤是最后一步,其代码如下:

poYBAGJOkCuARnBeAAEwe0FA0aQ264.jpg

可以看到,计算前会对参数进行NULL校验,若由一个参数是NULL,则退出。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 结构
    +关注

    关注

    1

    文章

    117

    浏览量

    21552
  • SQL
    SQL
    +关注

    关注

    1

    文章

    753

    浏览量

    44017
收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用元服务开发-仓颉基础数据类型整数类型

    (十进制)。 整数类型支持的操作 整数类型默认支持的操作符包括:算术操作符、位操作符、关系操作符、自增和自减
    发表于 09-13 14:55

    鸿蒙原生应用元服务开发-仓颉基础数据类型布尔类型

    let b: Bool = false 布尔类型支持的操作 布尔类型支持的操作符包括:逻辑操作符(逻辑非!,逻辑与 &&,逻辑或 ||)、部分关系操作符
    发表于 09-09 09:57

    c语言中从左到右结合怎么看

    在C语言中,操作符的结合性(Associativity)是指当操作符在表达式中连续出现时,它们如何与操作数结合的顺序。对于大多数二元操作符(即需要两个
    的头像 发表于 08-20 11:42 598次阅读

    FPGA学习笔记---基本语法

    3、信号类型:wire, reg, tri等 4、参数定义:parameter 5、运算操作符:各种逻辑操作符、移位操作符、算数操作符等 6、比较判断:if ... else, ca
    发表于 06-23 14:58

    专业双向收音机GP328操作说明

    电子发烧友网站提供《专业双向收音机GP328操作说明.pdf》资料免费下载
    发表于 05-15 18:21 2次下载

    便携式收音机GP300操作说明

    电子发烧友网站提供《便携式收音机GP300操作说明.pdf》资料免费下载
    发表于 05-15 18:19 0次下载

    “+”操作符的使用技巧

    这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。
    的头像 发表于 12-28 13:27 488次阅读

    oracle中拼接字符串函数

    , string2) 其中,string1 和 string2 是需要连接的字符串参数。 除了 CONCAT 函数,Oracle 还提供了一些其他的字符串拼接函数和操作符,这些函数和操作符可以根据具体的要求和情况来
    的头像 发表于 12-06 09:49 2735次阅读

    sql的where条件多个and顺序

    在SQL中,WHERE子句用于过滤查询结果以提供符合特定条件的记录。当有多个AND操作符时,WHERE子句的顺序并不会影响查询结果,但是正确的AND操作符顺序可以提高查询的可读性和性能。 首先,我们
    的头像 发表于 11-23 11:33 3683次阅读

    sql怎么在where条件判断

    在SQL中,WHERE条件用于筛选符合特定条件的记录。它提供了一种在查询中过滤数据的方法,使您能够根据所需的特定条件对查询结果进行更精确的控制。 在WHERE子句中,您可以使用各种操作符和函数来构建
    的头像 发表于 11-23 11:30 1802次阅读

    sql语句where条件查询

    的细节,包括使用的操作符、条件的组合、多张表的查询、条件的性能优化等方面。 首先,让我们了解一下WHERE子句中常用的操作符。在SQL中,常用的操作符包括: 比较操作符: 等于(=):
    的头像 发表于 11-23 11:28 1081次阅读

    数据库having的用法

    进行筛选,并且它可以使用的操作符包括比较操作符(如等于、大于、小于等)、逻辑操作符(如AND、OR、NOT)以及数学运算 (如加、减、乘、除)。 在介绍HAVING的用法之前,我们先
    的头像 发表于 11-23 11:21 2514次阅读

    Verilog基础:介绍几个常用的按位操作符

    操作符是对二进制位进行操作的运算。以下是一些常用的位操作符
    的头像 发表于 11-09 10:59 1582次阅读

    Verilog基础:几个常用的按位操作符

    操作符是对二进制位进行操作的运算
    的头像 发表于 11-09 10:57 1263次阅读

    请问C语言文件中的预处理操作符#和##各有什么作用?

    C语言文件中的预处理操作符#和##各有什么作用?
    发表于 11-06 08:09