暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss CStoreScan算子

openGauss小助手 2021-10-26
681

CStoreScan算子用于扫描基础表,按顺序扫描基础表,对应的代码源文件是“veccstore.cpp”;CStoreScan算子对应的主要数据结构是CStoreScanState,CStoreScanState继承于ScanState。具体定义代码如下:

typedef struct CStoreScanState : ScanState {

Relation ss_currentDeltaRelation;

Relation ss_partition_parent;

TableScanDesc ss_currentDeltaScanDesc;

bool ss_deltaScan;

bool ss_deltaScanEnd;

VectorBatch* m_pScanBatch;

VectorBatch* m_pCurrentBatch;

CStoreScanRunTimeKeyInfo* m_pScanRunTimeKeys;

int m_ScanRunTimeKeysNum;

bool m_ScanRunTimeKeysReady;

CStore* m_CStore;

CStoreScanKey csss_ScanKeys;

int csss_NumScanKeys;

bool m_fSimpleMap;

bool m_fUseColumnRef;

vecqual_func jitted_vecqual;

bool m_isReplicaTable; /*复制表标记符*/

} CStoreScanState;

CStoreScan算子的相关函数包括:ExecInitCStoreScan(初始化节点)、ExecCStoreScan(执行节点)、ExecEndCStoreScan(退出节点)、ExecReScanCStoreScan(重置节点)。

ExecInitCStoreScan函数用于初始化CStoreScan算子。主要执行流程如下。

(1) 创建并初始化CStoreScan算子,为节点创建表达式上下文。
(2) 调用ExecAssignVectorForExprEval函数进行投影表达式的初始化。
(3) 调用ExecInitResultTupleSlot函数和ExecInitScanTupleSlot函数分别初始化用于投影结果和用于扫描的slot。
(4) 打开扫描表,调用ExecAssignResultTypeFromTL函数和ExecBuildVecProjectionInfo函数分别初始化结果扫描描述符和创建投影结构。

ExecCStoreScan函数是CStoreScan算子的主体函数,通过迭代的方式获取全部结果元组。

ExecEndCStoreScan函数用于在算子执行结束后清理CStoreScan算子。主要执行流程是:首先获取节点信息(包括Relation、ScanDesc),之后释放表达式上下文、元组,最后关闭相应的partition、relation。

ExecReScanCStoreScan函数用于重新执行扫描计划。主要执行流程是:首先重置runtime关键词,关闭当前节点partition信息,初始化接下来的partition信息,最后重置CStoreScan算子。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论