From 2226b4189bb4ccfcc53917a8695d24e91ff2f950 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 8 Aug 2021 16:55:51 +0200 Subject: [PATCH] Change SeqScan node to contain Scan node This makes the structure of all Scan-derived nodes the same, independent of whether they have additional fields. Discussion: https://www.postgresql.org/message-id/flat/c1097590-a6a4-486a-64b1-e1f9cc0533ce@enterprisedb.com --- src/backend/executor/nodeSeqscan.c | 4 ++-- src/backend/nodes/readfuncs.c | 2 +- src/backend/optimizer/plan/createplan.c | 6 +++--- src/backend/optimizer/plan/setrefs.c | 10 +++++----- src/include/nodes/plannodes.h | 5 ++++- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 066f9ae37e..4d2bf16a6f 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -151,7 +151,7 @@ ExecInitSeqScan(SeqScan *node, EState *estate, int eflags) */ scanstate->ss.ss_currentRelation = ExecOpenScanRelation(estate, - node->scanrelid, + node->scan.scanrelid, eflags); /* and create slot with the appropriate rowtype */ @@ -169,7 +169,7 @@ ExecInitSeqScan(SeqScan *node, EState *estate, int eflags) * initialize child expressions */ scanstate->ss.ps.qual = - ExecInitQual(node->plan.qual, (PlanState *) scanstate); + ExecInitQual(node->scan.plan.qual, (PlanState *) scanstate); return scanstate; } diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 77d082d8b4..0dd1ad7dfc 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -1833,7 +1833,7 @@ _readSeqScan(void) { READ_LOCALS_NO_FIELDS(SeqScan); - ReadCommonScan(local_node); + ReadCommonScan(&local_node->scan); READ_DONE(); } diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index d3f8639a40..0738d7055c 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -2855,7 +2855,7 @@ create_seqscan_plan(PlannerInfo *root, Path *best_path, scan_clauses, scan_relid); - copy_generic_path_info(&scan_plan->plan, best_path); + copy_generic_path_info(&scan_plan->scan.plan, best_path); return scan_plan; } @@ -5369,13 +5369,13 @@ make_seqscan(List *qptlist, Index scanrelid) { SeqScan *node = makeNode(SeqScan); - Plan *plan = &node->plan; + Plan *plan = &node->scan.plan; plan->targetlist = qptlist; plan->qual = qpqual; plan->lefttree = NULL; plan->righttree = NULL; - node->scanrelid = scanrelid; + node->scan.scanrelid = scanrelid; return node; } diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index b145c5f45f..e50624c465 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -516,12 +516,12 @@ set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset) { SeqScan *splan = (SeqScan *) plan; - splan->scanrelid += rtoffset; - splan->plan.targetlist = - fix_scan_list(root, splan->plan.targetlist, + splan->scan.scanrelid += rtoffset; + splan->scan.plan.targetlist = + fix_scan_list(root, splan->scan.plan.targetlist, rtoffset, NUM_EXEC_TLIST(plan)); - splan->plan.qual = - fix_scan_list(root, splan->plan.qual, + splan->scan.plan.qual = + fix_scan_list(root, splan->scan.plan.qual, rtoffset, NUM_EXEC_QUAL(plan)); } break; diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h index 98a4c73f93..ec9a8b0c81 100644 --- a/src/include/nodes/plannodes.h +++ b/src/include/nodes/plannodes.h @@ -348,7 +348,10 @@ typedef struct Scan * sequential scan node * ---------------- */ -typedef Scan SeqScan; +typedef struct SeqScan +{ + Scan scan; +} SeqScan; /* ---------------- * table sample scan node -- 2.39.5