初始化节点时每个节点的estate指向一样的东西吗以及estate的作用?
发布日期:2021-06-29 18:53:33
浏览次数:2
分类:技术文章
本文共 3276 字,大约阅读时间需要 10 分钟。
文章目录
初始化节点时每个节点的estate指向一样的东西吗?
- 其实肯定一样的
- 因为初始化节点的最外层是被这个函数包裹着
PlanState *ExecInitNode(Plan *node, EState *estate, int eflags){
- 那这个estate到底起到什么作用呢?
- 例如在ExecInitNestLoop中
- 这个estate会在
- ExecAssignExprContext(estate, &nlstate->js.ps); - ExecInitResultTupleSlotTL(estate, &nlstate->js.ps); - ExecInitNullTupleSlot(estate, ExecGetResultType(innerPlanState(nlstate)));
- 上面三个地方用到。
-
下面这个函数似乎给出了estate的作用哦!
-
有点想要在estate->es_tupleTable这个list上面加一点TupleTableSlots
- 然后把这个槽赋给planstate->ps_ResultTupleSlot
-
有意思的是他的第一个参数不就是list **吗!!
/* ---------------- * ExecInitResultTupleSlotTL * * Initialize result tuple slot, using the plan node's targetlist. * ---------------- */voidExecInitResultTupleSlotTL(EState *estate, PlanState *planstate){ bool hasoid; TupleDesc tupDesc; if (ExecContextForcesOids(planstate, &hasoid)) { /* context forces OID choice; hasoid is now set correctly */ } else { /* given free choice, don't leave space for OIDs in result tuples */ hasoid = false; } tupDesc = ExecTypeFromTL(planstate->plan->targetlist, hasoid); planstate->ps_ResultTupleSlot = ExecAllocTableSlot(&estate->es_tupleTable, tupDesc);}
- ExecInitScanTupleSlot更是直接的展示了
- 我认识的一个真理
- 每一个节点的容器都是放在estate->es_tupleTable中的啊!
/* ---------------- * ExecInitScanTupleSlot * ---------------- */voidExecInitScanTupleSlot(EState *estate, ScanState *scanstate, TupleDesc tupledesc){ scanstate->ss_ScanTupleSlot = ExecAllocTableSlot(&estate->es_tupleTable, tupledesc); scanstate->ps.scandesc = tupledesc;}/* -------------------------------- * ExecAllocTableSlot * * Create a tuple table slot within a tuple table (which is just a List). * -------------------------------- */TupleTableSlot *ExecAllocTableSlot(List **tupleTable, TupleDesc desc){ TupleTableSlot *slot = MakeTupleTableSlot(desc); *tupleTable = lappend(*tupleTable, slot); return slot;}
MakeTupleTableSlot
/* -------------------------------- * MakeTupleTableSlot * * Basic routine to make an empty TupleTableSlot. If tupleDesc is * specified the slot's descriptor is fixed for it's lifetime, gaining * some efficiency. If that's undesirable, pass NULL. * -------------------------------- */TupleTableSlot *MakeTupleTableSlot(TupleDesc tupleDesc){ Size sz; TupleTableSlot *slot; /* * When a fixed descriptor is specified, we can reduce overhead by * allocating the entire slot in one go. */ if (tupleDesc) sz = MAXALIGN(sizeof(TupleTableSlot)) + MAXALIGN(tupleDesc->natts * sizeof(Datum)) + MAXALIGN(tupleDesc->natts * sizeof(bool)); else sz = sizeof(TupleTableSlot); slot = palloc0(sz); slot->type = T_TupleTableSlot; slot->tts_isempty = true; slot->tts_shouldFree = false; slot->tts_shouldFreeMin = false; slot->tts_tuple = NULL; slot->tts_fixedTupleDescriptor = tupleDesc != NULL; slot->tts_tupleDescriptor = tupleDesc; slot->tts_mcxt = CurrentMemoryContext; slot->tts_buffer = InvalidBuffer; slot->tts_nvalid = 0; slot->tts_values = NULL; slot->tts_isnull = NULL; slot->tts_mintuple = NULL; if (tupleDesc != NULL) { slot->tts_values = (Datum *) (((char *) slot) + MAXALIGN(sizeof(TupleTableSlot))); slot->tts_isnull = (bool *) (((char *) slot) + MAXALIGN(sizeof(TupleTableSlot)) + MAXALIGN(tupleDesc->natts * sizeof(Datum))); PinTupleDesc(tupleDesc); } return slot;}
转载地址:https://cyj666.blog.csdn.net/article/details/108418178 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月05日 04时51分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java.File类常用方法
2019-04-30
java中 == 与equals()的区别
2019-04-30
【日常学习】origin入门 保姆级教程
2019-04-30
【踩坑指南】ROS
2019-04-30
【学习随记】Word域代码相关
2019-04-30
MongoDB入门简记
2019-04-30
软件工程习题——第七周:面向对象设计-1
2019-04-30
软件工程习题——第七周:面向对象设计-2
2019-04-30
软件工程习题——第八周:编码实现
2019-04-30
软件工程习题——第八周:敏捷开发方法
2019-04-30
软件工程习题——第九周:软件测试-1
2019-04-30
软件工程习题——第九周:软件测试-2
2019-04-30
软件工程习题——第十周:项目管理
2019-04-30
软件工程习题——第十周:CMM(能力成熟度模型)
2019-04-30
软件工程习题——第十一周:软件开发工具与环境
2019-04-30
Jupyter Notebook使用
2019-04-30
Matplotlib学习笔记
2019-04-30
Numpy学习笔记
2019-04-30
Pandas学习笔记
2019-04-30
Hadoop学习笔记:一、认识大数据生态体系
2019-04-30