PostgreSQL 源码解读(185)- 查询#101(聚合函数#6-simplehash)
上几节介绍了哈希表的相关实现,主要是"simplehash.h"文件以及"simplehash.h"中的SH_INSERT实现,本节继续介绍聚合函数实现中使用的"simplehash",包括TupleHashTableHash和TupleHashTableMatch.这两个函数会替换simplehash的SH_HASH_KEY/SH_EQUAL
PostgreSQL 源码解读(184)- 查询#100(聚合函数#5-simplehash)
上几节介绍了ExecAgg函数以及相关函数的实现逻辑,其中涉及到哈希表的操作,调用了tuplehash_insert等函数,这些函数的定义和实现位于"simplehash.h"文件中,下面简单介绍"simplehash.h"文件中的内容.
PostgreSQL 源码解读(183)- 查询#99(聚合函数#4-ExecAgg)
本节简单介绍了PostgreSQL执行聚合函数的实现,主要实现函数是ExecAgg.这里继续介绍ExecAgg中调用的函数ExecAgg->agg_retrieve_hash_table,本节介绍了主逻辑,细节中的投影/获取最终结果操作在下一节介绍.
PostgreSQL 源码解读(182)- 查询#98(聚合函数#3-ExecAgg)
本节简单介绍了PostgreSQL执行聚合函数的实现,主要实现函数是ExecAgg.这里先行介绍ExecAgg->agg_fill_hash_table函数,其他子函数后续再行介绍.
PostgreSQL 源码解读(181)- 查询#97(聚合函数#2-ExecInitAgg)
本节简单介绍了PostgreSQL执行聚合函数时的初始化工作,主要实现函数是ExecInitAgg.
王國維:人間嗜好之研究
王國維:《人間詞話》之前菜
《复仇者联盟4》观感:不推荐
可能是希望越大,失望越大吧。《复仇者联盟4》令人失望,除了《黑豹》和《惊奇队长》,其他漫威的电影一部不落全部看过,复联4作为收官之作在不及格之列。1.情节拖沓:相对于复联3的紧张明快,复联4的情节就显得十分的拖沓,而且拖沓的情节把商业片故事性不强,逻辑有缺陷这样的毛病都暴露出来了;2.人物刻画不够丰满:打酱油的太多了,没有重点,钢铁侠死的太快了,渲染力和感染力明显不行。总的来说,该片全程有尿点,商
PostgreSQL 源码解读(180)- 内核研发#4(如何实现自定义系统函数)
本节以实现Oracle中的add_months函数为例介绍如何通过改造内核实现自定义系统函数.
PostgreSQL 源码解读(179)- 查询#96(语法分析:gram.y)#4
本节继续介绍PostgreSQL的语法分析定义文件gram.y的第四部分User subroutines(用户自定义例程).Bison输入文件的组成: %{ Declarations %} Definitions %% Productions %% User subroutines 一、User subroutines用户自定义例程会原封不动的拷贝到gram.c文件中,详细请参考
PostgreSQL 源码解读(178)- 查询#95(聚合函数)#1相关数据结构
本节简单介绍了PostgreSQL执行聚合函数所使用的相关数据结构,包括AggState,AggStatePerAgg,AggStatePerTrans,AggStatePerGroup,AggStatePerPhase和AggStatePerHash. 一、数据结构AggState聚合函数执行时状态结构体,内含AggStatePerAgg等结构体 /* -----------------
PostgreSQL DBA(34) - (HashAggregate vs GroupAggregate)
PostgreSQL数据库中,聚合函数如max/min/count等有两种实现方式:HashAggregate与GroupAggregate.本节简单介绍这两者的区别.案例一 首先我们看一个案例:测试表: drop table if exists t_agg; create table t_agg(bh varchar(20),c1 int,c2 int,c3 int,c4 int,c5
PostgreSQL 源码解读(177)- 内核研发#3(如何添加系统字段)#3
本节继续处理上一节给出的任务,重点介绍第三部分:实现,这一部分实现了类似CURRENT_DATE函数的功能. 一、实现实现部分,涉及到转换SQLValueFunction(在gram.y中把新增的列zz_sysdate设置为SQLValueFunction),解析SQLValueFunction以及PG的一些内部处理.转换SQLValueFunctionSQLValueFunction转换在文件
PostgreSQL 源码解读(176)- 查询#94(语法分析:gram.y)#3
本节继续介绍PostgreSQL的语法分析定义文件gram.y的第三部分Productions(产生式).Bison输入文件的组成: %{ Declarations %} Definitions %% Productions %% User subroutines 一、ProductionsProductions即产生式,这是用户编写的语法产生式,产生式的书写格式如下: S -
PostgreSQL 源码解读(175)- 查询#93(语法分析:gram.y)#2
本节继续介绍PostgreSQL的语法分析定义文件gram.y的第二部分Definitions.Bison输入文件的组成: %{ Declarations %} Definitions %% Productions %% User subroutines 一、DefinitionsDefinitions在Bison的作用与Flex中的功能也差不多,在这个段定义一些Bison专有变
PostgreSQL 源码解读(174)- 内核研发#2(如何添加系统字段)#2
本节继续处理上一节给出的任务,重点介绍第二部分:输出,实现结果投影列名称命名为sysdate
PostgreSQL 源码解读(173)- 查询#92(语法分析:gram.y)#1
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的语法分析定义文件gram.y,该文件位于目录src/backend/parser中.如前所述,PG利用Bison对语法进行分析,Bison输入文件由以下四部分组成: %{ Declarations %} Definitions %%
PostgreSQL 源码解读(172)- 内核研发#1(如何添加系统字段)#1
经过这么多源码的洗礼,下面让我们动手把玩PostgreSQL一把.第一个任务是希望添加一个系统字段,该字段输出的为当前日期(与PG的CURRENT_DATE日期函数输出一致).我们假定该字段名称为zz_sysdate(之所以zz打头是为了方便起见,把该字段放在PG其他字段之后),客户端输出的名称为sysdate.下面对这个任务进行分解,总的来说有几个工作需要完成:1.输入:让PG可以识别zz_sy
PostgreSQL 源码解读(171)- 查询#91(PG中的词法定义:scanner.l)#4
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的词法定义文件(Flex输入文件),在文件src/backend/parser/scan.l中.如前所述,Flex输入文件由四部分组成: %{ Declarations %} Definitions %% Rules %% Us
PostgreSQL 源码解读(170)- 查询#90(PG中的词法定义:scanner.l)#3
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的词法定义文件(Flex输入文件),在文件src/backend/parser/scan.l中.如前所述,Flex输入文件由四部分组成: %{ Declarations %} Definitions %% Rules %% Us
PostgreSQL 源码解读(169)- 查询#89(PG中的词法定义:scanner.l)#2
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析. 本节介绍了PostgreSQL的词法定义文件(Flex输入文件)的第二部分Definitions.