Change SeqScan node to contain Scan node
authorPeter Eisentraut
Sun, 8 Aug 2021 14:55:51 +0000 (16:55 +0200)
committerPeter Eisentraut
Sun, 8 Aug 2021 16:46:34 +0000 (18:46 +0200)
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
src/backend/nodes/readfuncs.c
src/backend/optimizer/plan/createplan.c
src/backend/optimizer/plan/setrefs.c
src/include/nodes/plannodes.h

index 066f9ae37e0b17714547d7144783f0b195106d78..4d2bf16a6fd56dafea8c82463b952039872110a0 100644 (file)
@@ -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;
 }
index 77d082d8b488f9abf237286d05f4ea5fe6d41cf4..0dd1ad7dfce73346e0972cab7b889aa5b8e75feb 100644 (file)
@@ -1833,7 +1833,7 @@ _readSeqScan(void)
 {
    READ_LOCALS_NO_FIELDS(SeqScan);
 
-   ReadCommonScan(local_node);
+   ReadCommonScan(&local_node->scan);
 
    READ_DONE();
 }
index d3f8639a40865c3a4ccbb33f8df0c2457991fcdd..0738d7055c952fc1d413886fcca3d2edcd2baf41 100644 (file)
@@ -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;
 }
index b145c5f45fd7bf9d734faa2e990de2c6d50f107e..e50624c465eea9a874e0ae50405531bdd5291a15 100644 (file)
@@ -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;
index 98a4c73f939e4c66543bacd5edcaf7e0a9cd4eeb..ec9a8b0c819f15a959d75608bacc2efd77fbda4a 100644 (file)
@@ -348,7 +348,10 @@ typedef struct Scan
  *     sequential scan node
  * ----------------
  */
-typedef Scan SeqScan;
+typedef struct SeqScan
+{
+   Scan        scan;
+} SeqScan;
 
 /* ----------------
  *     table sample scan node