PostgreSQL 源码解读(197)- 查询#112(排序#5 - mergeruns)
本节继续介绍排序的实现,上一节介绍了tuplesort_performsort,下面介绍该函数调用的mergeruns函数,该函数归并所有已完成的初次runs.
PostgreSQL 源码解读(196)- 浮点数比较
众所周知,计算机是以二进制方式存储数据,而浮点数在序列化为二进制时可能会出现精度丢失(IEEE 754标准),对于数据库实现来说,会引入一个问题,那就是那么两个浮点数之间在比较时在数据库是如何实现的?
PostgreSQL 源码解读(195)- 查询#111(排序#4 - 实现)
本节继续介绍排序的实现,上一节介绍了tuplesort_begin_heap/tuplesort_puttupleslot,本节介绍的函数是tuplesort_performsort.
PostgreSQL 源码解读(194)- 查询#110(排序#3 - 实现)
本节继续介绍排序的实现,上一节介绍了ExecSort,本节介绍该函数中调用的排序的具体实现函数,本节是第一部分,包括tuplesort_begin_heap/tuplesort_puttupleslot.
PostgreSQL 源码解读(193)- 查询#109(排序#2 - ExecSort)
本节继续介绍排序的实现,上一节介绍了ExecInitSort,本节主要介绍排序的实现函数ExecSort.
PostgreSQL 源码解读(192)- 查询#108(排序#1 - ExecInitSort)
本节介绍排序的实现,排序的实现函数是ExecSort,与聚合函数类似,也有要一个初始化的过程ExecInitSort,本节主要介绍该函数的实现.
PostgreSQL 源码解读(191)- 查询#107(聚合函数#12 - agg_retrieve_direct)
本节继续介绍聚合函数的实现,主要介绍了不使用Hash算法的情况下聚合函数的实现,在这种情况下会先排序后执行聚合,在ExecAgg节点执行前,已完成排序的操作.下面介绍在已完成排序的情况下聚合的实现,主要实现函数是ExecAgg->agg_retrieve_direct.
PostgreSQL 源码解读(190)- 查询#106(聚合函数#11 - finalize_aggregate)
本节继续介绍聚合函数的实现,主要介绍了agg_retrieve_hash_table函数中与投影相关的实现逻辑,主要是finalize_aggregates->finalize_aggregate.
PostgreSQL 源码解读(189)- 查询#105(聚合函数#10 - agg_retrieve_hash_table)
本节继续介绍聚合函数的实现,主要介绍了agg_retrieve_hash_table函数中与投影相关的实现逻辑,包括函数prepare_projection_slot/finalize_aggregates/project_aggregates.
PostgreSQL 源码解读(188)- 查询#104(聚合函数#9 - ExecAgg Review)
本节对ExecAgg函数进行初步的Review,梳理相关实现逻辑.
PostgreSQL 源码解读(187)- 查询#103(聚合函数#8 - Struct Review)
本节继续介绍聚合函数的实现,主要是Review涉及到的相关数据结构.包括AggState/AggStatePerAgg/AggStatePerTrans/AggStatePerGroup/AggStatePerPhase/AggStatePerHash.
PostgreSQL 源码解读(186)- 查询#102(聚合函数#7-advance_aggregates)
本节继续介绍聚合函数的实现,主要是函数ExecAgg->agg_fill_hash_table->advance_aggregates函数的处理逻辑. 该函数为每一个输入tuple推进每个聚合的转换状态,比如avg聚合,则把tuple中相应的列值加入到总和中,同时计数器加1,结果值会保存在内存上下文中,返回值是aggstate->phase->evaltrans->resvalue & aggstate->phase->evaltrans->resnull.
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.
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等结构体 /* -----------------