1、表扫描函数的参数传递通过TableScanDescData,函数内层将扫描到的记录存储到HeapScanDesc.rs_ctup中,然后将该成员内容传递给slot中。
2、内部处理时会将TableScanDescData转换成HeapScanDesc类型,其第一个成员变量是TableScanDescData类型,方便类型强制转换。
3、HeapScanDesc结构成员:
TableScanDescData rs_base:描述符中AM独立部分
BlockNumber rs_nblocks:表中总共有多少数据页
BlockNumber rs_startblock:从哪一页开始进行扫描
BlockNumber rs_numblocks:最多扫描多少页,范围扫描中使用
boolrs_inited;该扫描描述符是否已初始化,第一个记录时初始化,扫描后面的不再初始化,从上一次保存的数据页中取下一个记录
BlockNumber rs_cblock:当前扫描的文件页页号
Bufferrs_cbuf:当前扫描的内存页页号
BufferAccessStrategy rs_strategy:扫描策略,使用哪种内存描述符获取方法:
参考:
https://blog.csdn.net/yanzongshuai/article/details/103659270
https://blog.csdn.net/yanzongshuai/article/details/103795628
https://blog.csdn.net/yanzongshuai/article/details/103798038
https://blog.csdn.net/yanzongshuai/article/details/103828829
https://blog.csdn.net/yanzongshuai/article/details/103839702
HeapTupleData rs_ctup:扫描到的记录存储到这个位置
int rs_cindex:扫描的记录索引号
int rs_ntuples:该页中总共有多少记录
OffsetNumber rs_vistuples[MaxHeapTuplesPerPage]:page at a time下该页所有可见记录的索引号保存在这个数组中。
关于扫描方向:
ForwardScanDirection:向前
BackwardScanDirection:向后
NoMovementScanDirection:重新获取记录
这里的方向和理解的有点不一样,需注意。