VecNestLoop算子对应的主要数据结构是VecNestLoopState,VecNestLoopState继承于NestLoopState。具体定义代码如下:
struct VecNestLoopState : public NestLoopState {
void* vecNestLoopRuntime;
vecqual_func jitted_vecqual;
vecqual_func jitted_joinqual;
};
VecNestLoop算子的相关函数包括:ExecInitVecNestLoop(初始化节点)、ExecVecNestLoop(执行节点)、ExecEndVecNestLoop(退出节点)、ExecReScanVecNestLoop(重置节点)。
ExecInitVecNestLoop函数用于初始化VecNestLoop执行算子。主要执行流程如下。
(1) 初始化VecNestLoop执行算子。
(2) 为节点创建表达式上下文,分别处理左右子树,得到外执行计划节点和内执行计划节点。
(3) 初始化元组和投影信息。
ExecVecNestLoop函数是执行VecNestLoop的主体函数,通过执行VecNestLoop状态机,并获得结果元组。
ExecEndVecNestLoop函数用于在执行结束时清理VecNestLoop算子。主要执行流程是:首先释放表达式上下文,之后清空元组,最后清空子计划节点。
ExecReScanVecNestLoop函数用于重新执行扫描计划。主要执行流程是:首先把VecNestLoop计划节点转换成外计划执行节点,之后判断外计划执行节点的chgParam是否为空,若chgParam为空,则重新扫描节点。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




