CustomScan节点的targetlist、qual、custom_exprs是依赖于谁
发布日期:2021-06-29 18:53:31 浏览次数:2 分类:技术文章

本文共 1892 字,大约阅读时间需要 6 分钟。

文章目录

CustomScan节点的targetlist、qual、custom_exprs是依赖于谁

  • 答案:
    • 依赖于custom_scan_tlist
static voidset_customscan_references(PlannerInfo *root,						  CustomScan *cscan,						  int rtoffset){
ListCell *lc; /* Adjust scanrelid if it's valid */ if (cscan->scan.scanrelid > 0) cscan->scan.scanrelid += rtoffset; if (cscan->custom_scan_tlist != NIL || cscan->scan.scanrelid == 0) {
/* Adjust tlist, qual, custom_exprs to reference custom scan tuple */ indexed_tlist *itlist = build_tlist_index(cscan->custom_scan_tlist); cscan->scan.plan.targetlist = (List *) fix_upper_expr(root, (Node *) cscan->scan.plan.targetlist, itlist, INDEX_VAR, rtoffset); cscan->scan.plan.qual = (List *) fix_upper_expr(root, (Node *) cscan->scan.plan.qual, itlist, INDEX_VAR, rtoffset); cscan->custom_exprs = (List *) fix_upper_expr(root, (Node *) cscan->custom_exprs, itlist, INDEX_VAR, rtoffset); pfree(itlist); /* custom_scan_tlist itself just needs fix_scan_list() adjustments */ cscan->custom_scan_tlist = fix_scan_list(root, cscan->custom_scan_tlist, rtoffset); } else {
/* Adjust tlist, qual, custom_exprs in the standard way */ cscan->scan.plan.targetlist = fix_scan_list(root, cscan->scan.plan.targetlist, rtoffset); cscan->scan.plan.qual = fix_scan_list(root, cscan->scan.plan.qual, rtoffset); cscan->custom_exprs = fix_scan_list(root, cscan->custom_exprs, rtoffset); } /* Adjust child plan-nodes recursively, if needed */ foreach(lc, cscan->custom_plans) {
lfirst(lc) = set_plan_refs(root, (Plan *) lfirst(lc), rtoffset); } /* Adjust custom_relids if needed */ if (rtoffset > 0) {
Bitmapset *tempset = NULL; int x = -1; while ((x = bms_next_member(cscan->custom_relids, x)) >= 0) tempset = bms_add_member(tempset, x + rtoffset); cscan->custom_relids = tempset; }}

转载地址:https://cyj666.blog.csdn.net/article/details/108411919 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Path和 RelOptInfo结构体的感悟
下一篇:pg的后台进程有些啥?

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月09日 06时31分04秒