Reformat some node comments
authorPeter Eisentraut <peter@eisentraut.org>
Sat, 2 Jul 2022 10:33:07 +0000 (12:33 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Sat, 2 Jul 2022 10:47:15 +0000 (12:47 +0200)
Reformat some comments in node field definitions to avoid long lines.

This makes room for per-field annotations in a future patch to
generate node support functions automatically.

Discussion: https://www.postgresql.org/message-id/c5906b07-220a-a3d4-8ff3-8ee593009424@enterprisedb.com

src/include/nodes/parsenodes.h
src/include/nodes/pathnodes.h
src/include/nodes/plannodes.h
src/include/nodes/primnodes.h

index 73f635b4553b04a4da9c6fd309e9574cb3298e23..f93d86654877cc4cc5bb9206749de6c1bd817310 100644 (file)
@@ -123,7 +123,8 @@ typedef struct Query
 
        QuerySource querySource;        /* where did I come from? */
 
-       uint64          queryId;                /* query identifier (can be set by plugins) */
+       /* query identifier (can be set by plugins) */
+       uint64          queryId;
 
        bool            canSetTag;              /* do I set the command result tag? */
 
index a6e5db4eecc29e6d07280929aa439c17ba700382..b88cfb8dc03d69f328a6597dc4e6a20db5b7f298 100644 (file)
@@ -226,8 +226,8 @@ struct PlannerInfo
         * even when using the hash table for lookups; this simplifies life for
         * GEQO.
         */
-       List       *join_rel_list;      /* list of join-relation RelOptInfos */
-       struct HTAB *join_rel_hash; /* optional hashtable for join relations */
+       List       *join_rel_list;
+       struct HTAB *join_rel_hash;
 
        /*
         * When doing a dynamic-programming-style join search, join_rel_level[k]
@@ -329,11 +329,16 @@ struct PlannerInfo
         */
        List       *update_colnos;
 
-       /* Fields filled during create_plan() for use in setrefs.c */
-       AttrNumber *grouping_map;       /* for GroupingFunc fixup */
-       List       *minmax_aggs;        /* List of MinMaxAggInfos */
+       /*
+        * Fields filled during create_plan() for use in setrefs.c
+        */
+       /* for GroupingFunc fixup */
+       AttrNumber *grouping_map;
+       /* List of MinMaxAggInfos */
+       List       *minmax_aggs;
 
-       MemoryContext planner_cxt;      /* context holding PlannerInfo */
+       /* context holding PlannerInfo */
+       MemoryContext planner_cxt;
 
        Cardinality total_table_pages;  /* # of pages in all non-dummy tables of
                                                                         * query */
@@ -369,9 +374,12 @@ struct PlannerInfo
        Relids          curOuterRels;   /* outer rels above current node */
        List       *curOuterParams; /* not-yet-assigned NestLoopParams */
 
-       /* These fields are workspace for setrefs.c */
-       bool       *isAltSubplan;       /* array corresponding to glob->subplans */
-       bool       *isUsedSubplan;      /* array corresponding to glob->subplans */
+       /*
+        * These fields are workspace for setrefs.c.  Each is an array
+        * corresponding to glob->subplans.
+        */
+       bool       *isAltSubplan;
+       bool       *isUsedSubplan;
 
        /* optional private data for join_search_hook, e.g., GEQO */
        void       *join_search_private;
@@ -678,21 +686,37 @@ typedef struct RelOptInfo
 
        RelOptKind      reloptkind;
 
-       /* all relations included in this RelOptInfo */
-       Relids          relids;                 /* set of base relids (rangetable indexes) */
+       /*
+        * all relations included in this RelOptInfo; set of base relids
+        * (rangetable indexes)
+        */
+       Relids          relids;
 
-       /* size estimates generated by planner */
-       Cardinality rows;                       /* estimated number of result tuples */
+       /*
+        * size estimates generated by planner
+        */
+       /* estimated number of result tuples */
+       Cardinality rows;
 
-       /* per-relation planner control flags */
-       bool            consider_startup;       /* keep cheap-startup-cost paths? */
-       bool            consider_param_startup; /* ditto, for parameterized paths? */
-       bool            consider_parallel;      /* consider parallel paths? */
+       /*
+        * per-relation planner control flags
+        */
+       /* keep cheap-startup-cost paths? */
+       bool            consider_startup;
+       /* ditto, for parameterized paths? */
+       bool            consider_param_startup;
+       /* consider parallel paths? */
+       bool            consider_parallel;
 
-       /* default result targetlist for Paths scanning this relation */
-       struct PathTarget *reltarget;   /* list of Vars/Exprs, cost, width */
+       /*
+        * default result targetlist for Paths scanning this relation; list of
+        * Vars/Exprs, cost, width
+        */
+       struct PathTarget *reltarget;
 
-       /* materialization information */
+       /*
+        * materialization information
+        */
        List       *pathlist;           /* Path structures */
        List       *ppilist;            /* ParamPathInfos used in pathlist */
        List       *partial_pathlist;   /* partial Paths */
@@ -701,79 +725,132 @@ typedef struct RelOptInfo
        struct Path *cheapest_unique_path;
        List       *cheapest_parameterized_paths;
 
-       /* parameterization information needed for both base rels and join rels */
-       /* (see also lateral_vars and lateral_referencers) */
-       Relids          direct_lateral_relids;  /* rels directly laterally referenced */
-       Relids          lateral_relids; /* minimum parameterization of rel */
+       /*
+        * parameterization information needed for both base rels and join rels
+        * (see also lateral_vars and lateral_referencers)
+        */
+       /* rels directly laterally referenced */
+       Relids          direct_lateral_relids;
+       /* minimum parameterization of rel */
+       Relids          lateral_relids;
 
-       /* information about a base rel (not set for join rels!) */
+       /*
+        * information about a base rel (not set for join rels!)
+        */
        Index           relid;
-       Oid                     reltablespace;  /* containing tablespace */
-       RTEKind         rtekind;                /* RELATION, SUBQUERY, FUNCTION, etc */
-       AttrNumber      min_attr;               /* smallest attrno of rel (often <0) */
-       AttrNumber      max_attr;               /* largest attrno of rel */
-       Relids     *attr_needed;        /* array indexed [min_attr .. max_attr] */
-       int32      *attr_widths;        /* array indexed [min_attr .. max_attr] */
-       List       *lateral_vars;       /* LATERAL Vars and PHVs referenced by rel */
-       Relids          lateral_referencers;    /* rels that reference me laterally */
-       List       *indexlist;          /* list of IndexOptInfo */
-       List       *statlist;           /* list of StatisticExtInfo */
-       BlockNumber pages;                      /* size estimates derived from pg_class */
+       /* containing tablespace */
+       Oid                     reltablespace;
+       /* RELATION, SUBQUERY, FUNCTION, etc */
+       RTEKind         rtekind;
+       /* smallest attrno of rel (often <0) */
+       AttrNumber      min_attr;
+       /* largest attrno of rel */
+       AttrNumber      max_attr;
+       /* array indexed [min_attr .. max_attr] */
+       Relids     *attr_needed;
+       /* array indexed [min_attr .. max_attr] */
+       int32      *attr_widths;
+       /* LATERAL Vars and PHVs referenced by rel */
+       List       *lateral_vars;
+       /* rels that reference me laterally */
+       Relids          lateral_referencers;
+       /* list of IndexOptInfo */
+       List       *indexlist;
+       /* list of StatisticExtInfo */
+       List       *statlist;
+       /* size estimates derived from pg_class */
+       BlockNumber pages;
        Cardinality tuples;
        double          allvisfrac;
-       Bitmapset  *eclass_indexes; /* Indexes in PlannerInfo's eq_classes list of
-                                                                * ECs that mention this rel */
+
+       /*
+        * Indexes in PlannerInfo's eq_classes list of ECs that mention this rel
+        */
+       Bitmapset  *eclass_indexes;
        PlannerInfo *subroot;           /* if subquery */
        List       *subplan_params; /* if subquery */
-       int                     rel_parallel_workers;   /* wanted number of parallel workers */
-       uint32          amflags;                /* Bitmask of optional features supported by
-                                                                * the table AM */
-
-       /* Information about foreign tables and foreign joins */
-       Oid                     serverid;               /* identifies server for the table or join */
-       Oid                     userid;                 /* identifies user to check access as */
-       bool            useridiscurrent;        /* join is only valid for current user */
+       /* wanted number of parallel workers */
+       int                     rel_parallel_workers;
+       /* Bitmask of optional features supported by the table AM */
+       uint32          amflags;
+
+       /*
+        * Information about foreign tables and foreign joins
+        */
+       /* identifies server for the table or join */
+       Oid                     serverid;
+       /* identifies user to check access as */
+       Oid                     userid;
+       /* join is only valid for current user */
+       bool            useridiscurrent;
        /* use "struct FdwRoutine" to avoid including fdwapi.h here */
        struct FdwRoutine *fdwroutine;
        void       *fdw_private;
 
-       /* cache space for remembering if we have proven this relation unique */
-       List       *unique_for_rels;    /* known unique for these other relid
-                                                                        * set(s) */
-       List       *non_unique_for_rels;        /* known not unique for these set(s) */
-
-       /* used by various scans and joins: */
-       List       *baserestrictinfo;   /* RestrictInfo structures (if base rel) */
-       QualCost        baserestrictcost;       /* cost of evaluating the above */
-       Index           baserestrict_min_security;      /* min security_level found in
-                                                                                        * baserestrictinfo */
-       List       *joininfo;           /* RestrictInfo structures for join clauses
-                                                                * involving this rel */
-       bool            has_eclass_joins;       /* T means joininfo is incomplete */
-
-       /* used by partitionwise joins: */
-       bool            consider_partitionwise_join;    /* consider partitionwise join
-                                                                                                * paths? (if partitioned rel) */
-       Relids          top_parent_relids;      /* Relids of topmost parents (if "other"
-                                                                        * rel) */
-
-       /* used for partitioned relations: */
-       PartitionScheme part_scheme;    /* Partitioning scheme */
-       int                     nparts;                 /* Number of partitions; -1 if not yet set; in
-                                                                * case of a join relation 0 means it's
-                                                                * considered unpartitioned */
-       struct PartitionBoundInfoData *boundinfo;       /* Partition bounds */
-       bool            partbounds_merged;      /* True if partition bounds were created
-                                                                        * by partition_bounds_merge() */
-       List       *partition_qual; /* Partition constraint, if not the root */
-       struct RelOptInfo **part_rels;  /* Array of RelOptInfos of partitions,
-                                                                        * stored in the same order as bounds */
-       Bitmapset  *live_parts;         /* Bitmap with members acting as indexes into
-                                                                * the part_rels[] array to indicate which
-                                                                * partitions survived partition pruning. */
-       Relids          all_partrels;   /* Relids set of all partition relids */
-       List      **partexprs;          /* Non-nullable partition key expressions */
-       List      **nullable_partexprs; /* Nullable partition key expressions */
+       /*
+        * cache space for remembering if we have proven this relation unique
+        */
+       /* known unique for these other relid set(s) */
+       List       *unique_for_rels;
+       /* known not unique for these set(s) */
+       List       *non_unique_for_rels;
+
+       /*
+        * used by various scans and joins:
+        */
+       /* RestrictInfo structures (if base rel) */
+       List       *baserestrictinfo;
+       /* cost of evaluating the above */
+       QualCost        baserestrictcost;
+       /* min security_level found in baserestrictinfo */
+       Index           baserestrict_min_security;
+       /* RestrictInfo structures for join clauses involving this rel */
+       List       *joininfo;
+       /* T means joininfo is incomplete */
+       bool            has_eclass_joins;
+
+       /*
+        * used by partitionwise joins:
+        */
+       /* consider partitionwise join paths? (if partitioned rel) */
+       bool            consider_partitionwise_join;
+       /* Relids of topmost parents (if "other" rel) */
+       Relids          top_parent_relids;
+
+       /*
+        * used for partitioned relations:
+        */
+       /* Partitioning scheme */
+       PartitionScheme part_scheme;
+
+       /*
+        * Number of partitions; -1 if not yet set; in case of a join relation 0
+        * means it's considered unpartitioned
+        */
+       int                     nparts;
+       /* Partition bounds */
+       struct PartitionBoundInfoData *boundinfo;
+       /* True if partition bounds were created by partition_bounds_merge() */
+       bool            partbounds_merged;
+       /* Partition constraint, if not the root */
+       List       *partition_qual;
+
+       /*
+        * Array of RelOptInfos of partitions, stored in the same order as bounds
+        */
+       struct RelOptInfo **part_rels;
+
+       /*
+        * Bitmap with members acting as indexes into the part_rels[] array to
+        * indicate which partitions survived partition pruning.
+        */
+       Bitmapset  *live_parts;
+       /* Relids set of all partition relids */
+       Relids          all_partrels;
+       /* Non-nullable partition key expressions */
+       List      **partexprs;
+       /* Nullable partition key expressions */
+       List      **nullable_partexprs;
 } RelOptInfo;
 
 /*
@@ -836,56 +913,93 @@ struct IndexOptInfo
 {
        NodeTag         type;
 
-       Oid                     indexoid;               /* OID of the index relation */
-       Oid                     reltablespace;  /* tablespace of index (not table) */
-       RelOptInfo *rel;                        /* back-link to index's table */
-
-       /* index-size statistics (from pg_class and elsewhere) */
-       BlockNumber pages;                      /* number of disk pages in index */
-       Cardinality tuples;                     /* number of index tuples in index */
-       int                     tree_height;    /* index tree height, or -1 if unknown */
-
-       /* index descriptor information */
-       int                     ncolumns;               /* number of columns in index */
-       int                     nkeycolumns;    /* number of key columns in index */
-       int                *indexkeys;          /* column numbers of index's attributes both
-                                                                * key and included columns, or 0 */
-       Oid                *indexcollations;    /* OIDs of collations of index columns */
-       Oid                *opfamily;           /* OIDs of operator families for columns */
-       Oid                *opcintype;          /* OIDs of opclass declared input data types */
-       Oid                *sortopfamily;       /* OIDs of btree opfamilies, if orderable */
-       bool       *reverse_sort;       /* is sort order descending? */
-       bool       *nulls_first;        /* do NULLs come first in the sort order? */
-       bytea     **opclassoptions; /* opclass-specific options for columns */
-       bool       *canreturn;          /* which index cols can be returned in an
-                                                                * index-only scan? */
-       Oid                     relam;                  /* OID of the access method (in pg_am) */
-
-       List       *indexprs;           /* expressions for non-simple index columns */
-       List       *indpred;            /* predicate if a partial index, else NIL */
-
-       List       *indextlist;         /* targetlist representing index columns */
-
-       List       *indrestrictinfo;    /* parent relation's baserestrictinfo
-                                                                        * list, less any conditions implied by
-                                                                        * the index's predicate (unless it's a
-                                                                        * target rel, see comments in
-                                                                        * check_index_predicates()) */
-
-       bool            predOK;                 /* true if index predicate matches query */
-       bool            unique;                 /* true if a unique index */
-       bool            immediate;              /* is uniqueness enforced immediately? */
-       bool            hypothetical;   /* true if index doesn't really exist */
-
-       /* Remaining fields are copied from the index AM's API struct: */
-       bool            amcanorderbyop; /* does AM support order by operator result? */
-       bool            amoptionalkey;  /* can query omit key for the first column? */
-       bool            amsearcharray;  /* can AM handle ScalarArrayOpExpr quals? */
-       bool            amsearchnulls;  /* can AM search for NULL/NOT NULL entries? */
-       bool            amhasgettuple;  /* does AM have amgettuple interface? */
-       bool            amhasgetbitmap; /* does AM have amgetbitmap interface? */
-       bool            amcanparallel;  /* does AM support parallel scan? */
-       bool            amcanmarkpos;   /* does AM support mark/restore? */
+       /* OID of the index relation */
+       Oid                     indexoid;
+       /* tablespace of index (not table) */
+       Oid                     reltablespace;
+       /* back-link to index's table */
+       RelOptInfo *rel;
+
+       /*
+        * index-size statistics (from pg_class and elsewhere)
+        */
+       /* number of disk pages in index */
+       BlockNumber pages;
+       /* number of index tuples in index */
+       Cardinality tuples;
+       /* index tree height, or -1 if unknown */
+       int                     tree_height;
+
+       /*
+        * index descriptor information
+        */
+       /* number of columns in index */
+       int                     ncolumns;
+       /* number of key columns in index */
+       int                     nkeycolumns;
+
+       /*
+        * column numbers of index's attributes both key and included columns, or
+        * 0
+        */
+       int                *indexkeys;
+       /* OIDs of collations of index columns */
+       Oid                *indexcollations;
+       /* OIDs of operator families for columns */
+       Oid                *opfamily;
+       /* OIDs of opclass declared input data types */
+       Oid                *opcintype;
+       /* OIDs of btree opfamilies, if orderable */
+       Oid                *sortopfamily;
+       /* is sort order descending? */
+       bool       *reverse_sort;
+       /* do NULLs come first in the sort order? */
+       bool       *nulls_first;
+       /* opclass-specific options for columns */
+       bytea     **opclassoptions;
+       /* which index cols can be returned in an index-only scan? */
+       bool       *canreturn;
+       /* OID of the access method (in pg_am) */
+       Oid                     relam;
+       /* expressions for non-simple index columns */
+       List       *indexprs;
+       /* predicate if a partial index, else NIL */
+       List       *indpred;
+
+       /* targetlist representing index columns */
+       List       *indextlist;
+
+       /*
+        * parent relation's baserestrictinfo list, less any conditions implied by
+        * the index's predicate (unless it's a target rel, see comments in
+        * check_index_predicates())
+        */
+       List       *indrestrictinfo;
+
+       /* true if index predicate matches query */
+       bool            predOK;
+       /* true if a unique index */
+       bool            unique;
+       /* is uniqueness enforced immediately? */
+       bool            immediate;
+       /* true if index doesn't really exist */
+       bool            hypothetical;
+
+       /*
+        * Remaining fields are copied from the index AM's API struct
+        * (IndexAmRoutine)
+        */
+       bool            amcanorderbyop;
+       bool            amoptionalkey;
+       bool            amsearcharray;
+       bool            amsearchnulls;
+       /* does AM have amgettuple interface? */
+       bool            amhasgettuple;
+       /* does AM have amgetbitmap interface? */
+       bool            amhasgetbitmap;
+       bool            amcanparallel;
+       /* does AM have ammarkpos interface? */
+       bool            amcanmarkpos;
        /* Rather than include amapi.h here, we declare amcostestimate like this */
        void            (*amcostestimate) ();   /* AM's cost estimator */
 };
@@ -902,19 +1016,35 @@ typedef struct ForeignKeyOptInfo
 {
        NodeTag         type;
 
-       /* Basic data about the foreign key (fetched from catalogs): */
-       Index           con_relid;              /* RT index of the referencing table */
-       Index           ref_relid;              /* RT index of the referenced table */
-       int                     nkeys;                  /* number of columns in the foreign key */
-       AttrNumber      conkey[INDEX_MAX_KEYS]; /* cols in referencing table */
-       AttrNumber      confkey[INDEX_MAX_KEYS];        /* cols in referenced table */
-       Oid                     conpfeqop[INDEX_MAX_KEYS];      /* PK = FK operator OIDs */
-
-       /* Derived info about whether FK's equality conditions match the query: */
-       int                     nmatched_ec;    /* # of FK cols matched by ECs */
-       int                     nconst_ec;              /* # of these ECs that are ec_has_const */
-       int                     nmatched_rcols; /* # of FK cols matched by non-EC rinfos */
-       int                     nmatched_ri;    /* total # of non-EC rinfos matched to FK */
+       /*
+        * Basic data about the foreign key (fetched from catalogs):
+        */
+
+       /* RT index of the referencing table */
+       Index           con_relid;
+       /* RT index of the referenced table */
+       Index           ref_relid;
+       /* number of columns in the foreign key */
+       int                     nkeys;
+       /* cols in referencing table */
+       AttrNumber      conkey[INDEX_MAX_KEYS];
+       /* cols in referenced table */
+       AttrNumber      confkey[INDEX_MAX_KEYS];
+       /* PK = FK operator OIDs */
+       Oid                     conpfeqop[INDEX_MAX_KEYS];
+
+       /*
+        * Derived info about whether FK's equality conditions match the query:
+        */
+
+       /* # of FK cols matched by ECs */
+       int                     nmatched_ec;
+       /* # of these ECs that are ec_has_const */
+       int                     nconst_ec;
+       /* # of FK cols matched by non-EC rinfos */
+       int                     nmatched_rcols;
+       /* total # of non-EC rinfos matched to FK */
+       int                     nmatched_ri;
        /* Pointer to eclass matching each column's condition, if there is one */
        struct EquivalenceClass *eclass[INDEX_MAX_KEYS];
        /* Pointer to eclass member for the referencing Var, if there is one */
@@ -934,12 +1064,23 @@ typedef struct StatisticExtInfo
 {
        NodeTag         type;
 
-       Oid                     statOid;                /* OID of the statistics row */
-       bool            inherit;                /* includes child relations */
-       RelOptInfo *rel;                        /* back-link to statistic's table */
-       char            kind;                   /* statistics kind of this entry */
-       Bitmapset  *keys;                       /* attnums of the columns covered */
-       List       *exprs;                      /* expressions */
+       /* OID of the statistics row */
+       Oid                     statOid;
+
+       /* includes child relations */
+       bool            inherit;
+
+       /* back-link to statistic's table */
+       RelOptInfo *rel;
+
+       /* statistics kind of this entry */
+       char            kind;
+
+       /* attnums of the columns covered */
+       Bitmapset  *keys;
+
+       /* expressions */
+       List       *exprs;
 } StatisticExtInfo;
 
 /*
@@ -1119,12 +1260,21 @@ typedef enum VolatileFunctionStatus
 typedef struct PathTarget
 {
        NodeTag         type;
-       List       *exprs;                      /* list of expressions to be computed */
-       Index      *sortgrouprefs;      /* corresponding sort/group refnos, or 0 */
-       QualCost        cost;                   /* cost of evaluating the expressions */
-       int                     width;                  /* estimated avg width of result tuples */
-       VolatileFunctionStatus has_volatile_expr;       /* indicates if exprs contain
-                                                                                                * any volatile functions. */
+
+       /* list of expressions to be computed */
+       List       *exprs;
+
+       /* corresponding sort/group refnos, or 0 */
+       Index      *sortgrouprefs;
+
+       /* cost of evaluating the expressions */
+       QualCost        cost;
+
+       /* estimated avg width of result tuples */
+       int                     width;
+
+       /* indicates if exprs contain any volatile functions */
+       VolatileFunctionStatus has_volatile_expr;
 } PathTarget;
 
 /* Convenience macro to get a sort/group refno from a PathTarget */
@@ -1189,24 +1339,32 @@ typedef struct Path
 {
        NodeTag         type;
 
-       NodeTag         pathtype;               /* tag identifying scan/join method */
+       /* tag identifying scan/join method */
+       NodeTag         pathtype;
 
-       RelOptInfo *parent;                     /* the relation this path can build */
-       PathTarget *pathtarget;         /* list of Vars/Exprs, cost, width */
+       /* the relation this path can build */
+       RelOptInfo *parent;
 
-       ParamPathInfo *param_info;      /* parameterization info, or NULL if none */
+       /* list of Vars/Exprs, cost, width */
+       PathTarget *pathtarget;
 
-       bool            parallel_aware; /* engage parallel-aware logic? */
-       bool            parallel_safe;  /* OK to use as part of parallel plan? */
-       int                     parallel_workers;       /* desired # of workers; 0 = not parallel */
+       /* parameterization info, or NULL if none */
+       ParamPathInfo *param_info;
+
+       /* engage parallel-aware logic? */
+       bool            parallel_aware;
+       /* OK to use as part of parallel plan? */
+       bool            parallel_safe;
+       /* desired # of workers; 0 = not parallel */
+       int                     parallel_workers;
 
        /* estimated size/costs for path (see costsize.c for more info) */
        Cardinality rows;                       /* estimated number of result tuples */
        Cost            startup_cost;   /* cost expended before fetching any tuples */
        Cost            total_cost;             /* total cost (assuming all tuples fetched) */
 
-       List       *pathkeys;           /* sort ordering of path's output */
-       /* pathkeys is a List of PathKey nodes; see above */
+       /* sort ordering of path's output; a List of PathKey nodes; see above */
+       List       *pathkeys;
 } Path;
 
 /* Macro for extracting a path's parameterization relids; beware double eval */
@@ -2072,22 +2230,29 @@ typedef struct RestrictInfo
 {
        NodeTag         type;
 
-       Expr       *clause;                     /* the represented clause of WHERE or JOIN */
+       /* the represented clause of WHERE or JOIN */
+       Expr       *clause;
 
-       bool            is_pushed_down; /* true if clause was pushed down in level */
+       /* true if clause was pushed down in level */
+       bool            is_pushed_down;
 
-       bool            outerjoin_delayed;      /* true if delayed by lower outer join */
+       /* true if delayed by lower outer join */
+       bool            outerjoin_delayed;
 
-       bool            can_join;               /* see comment above */
+       /* see comment above */
+       bool            can_join;
 
-       bool            pseudoconstant; /* see comment above */
+       /* see comment above */
+       bool            pseudoconstant;
 
-       bool            leakproof;              /* true if known to contain no leaked Vars */
+       /* true if known to contain no leaked Vars */
+       bool            leakproof;
 
-       VolatileFunctionStatus has_volatile;    /* to indicate if clause contains
-                                                                                        * any volatile functions. */
+       /* to indicate if clause contains any volatile functions. */
+       VolatileFunctionStatus has_volatile;
 
-       Index           security_level; /* see comment above */
+       /* see comment above */
+       Index           security_level;
 
        /* The set of relids (varnos) actually referenced in the clause: */
        Relids          clause_relids;
@@ -2101,45 +2266,84 @@ typedef struct RestrictInfo
        /* The relids used in the clause that are nullable by lower outer joins: */
        Relids          nullable_relids;
 
-       /* These fields are set for any binary opclause: */
-       Relids          left_relids;    /* relids in left side of clause */
-       Relids          right_relids;   /* relids in right side of clause */
+       /*
+        * Relids in the left/right side of the clause.  These fields are set for
+        * any binary opclause.
+        */
+       Relids          left_relids;
+       Relids          right_relids;
 
-       /* This field is NULL unless clause is an OR clause: */
-       Expr       *orclause;           /* modified clause with RestrictInfos */
+       /*
+        * Modified clause with RestrictInfos.  This field is NULL unless clause
+        * is an OR clause.
+        */
+       Expr       *orclause;
 
-       /* This field is NULL unless clause is potentially redundant: */
-       EquivalenceClass *parent_ec;    /* generating EquivalenceClass */
+       /*
+        * Generating EquivalenceClass.  This field is NULL unless clause is
+        * potentially redundant.
+        */
+       EquivalenceClass *parent_ec;
 
-       /* cache space for cost and selectivity */
-       QualCost        eval_cost;              /* eval cost of clause; -1 if not yet set */
-       Selectivity norm_selec;         /* selectivity for "normal" (JOIN_INNER)
-                                                                * semantics; -1 if not yet set; >1 means a
-                                                                * redundant clause */
-       Selectivity outer_selec;        /* selectivity for outer join semantics; -1 if
-                                                                * not yet set */
+       /*
+        * cache space for cost and selectivity
+        */
 
-       /* valid if clause is mergejoinable, else NIL */
-       List       *mergeopfamilies;    /* opfamilies containing clause operator */
+       /* eval cost of clause; -1 if not yet set */
+       QualCost        eval_cost;
 
-       /* cache space for mergeclause processing; NULL if not yet set */
-       EquivalenceClass *left_ec;      /* EquivalenceClass containing lefthand */
-       EquivalenceClass *right_ec; /* EquivalenceClass containing righthand */
-       EquivalenceMember *left_em; /* EquivalenceMember for lefthand */
-       EquivalenceMember *right_em;    /* EquivalenceMember for righthand */
-       List       *scansel_cache;      /* list of MergeScanSelCache structs */
+       /*
+        * selectivity for "normal" (JOIN_INNER) semantics; -1 if not yet set; >1
+        * means a redundant clause
+        */
+       Selectivity norm_selec;
+       /* selectivity for outer join semantics; -1 if not yet set */
+       Selectivity outer_selec;
+
+       /*
+        * opfamilies containing clause operator; valid if clause is
+        * mergejoinable, else NIL
+        */
+       List       *mergeopfamilies;
 
-       /* transient workspace for use while considering a specific join path */
-       bool            outer_is_left;  /* T = outer var on left, F = on right */
+       /*
+        * cache space for mergeclause processing; NULL if not yet set
+        */
 
-       /* valid if clause is hashjoinable, else InvalidOid: */
-       Oid                     hashjoinoperator;       /* copy of clause operator */
+       /* EquivalenceClass containing lefthand */
+       EquivalenceClass *left_ec;
+       /* EquivalenceClass containing righthand */
+       EquivalenceClass *right_ec;
+       /* EquivalenceMember for lefthand */
+       EquivalenceMember *left_em;
+       /* EquivalenceMember for righthand */
+       EquivalenceMember *right_em;
+       /* list of MergeScanSelCache structs */
+       List       *scansel_cache;
 
-       /* cache space for hashclause processing; -1 if not yet set */
-       Selectivity left_bucketsize;    /* avg bucketsize of left side */
-       Selectivity right_bucketsize;   /* avg bucketsize of right side */
-       Selectivity left_mcvfreq;       /* left side's most common val's freq */
-       Selectivity right_mcvfreq;      /* right side's most common val's freq */
+       /*
+        * transient workspace for use while considering a specific join path; T =
+        * outer var on left, F = on right
+        */
+       bool            outer_is_left;
+
+       /*
+        * copy of clause operator; valid if clause is hashjoinable, else
+        * InvalidOid
+        */
+       Oid                     hashjoinoperator;
+
+       /*
+        * cache space for hashclause processing; -1 if not yet set
+        */
+       /* avg bucketsize of left side */
+       Selectivity left_bucketsize;
+       /* avg bucketsize of right side */
+       Selectivity right_bucketsize;
+       /* left side's most common val's freq */
+       Selectivity left_mcvfreq;
+       /* right side's most common val's freq */
+       Selectivity right_mcvfreq;
 
        /* hash equality operators used for memoize nodes, else InvalidOid */
        Oid                     left_hasheqoperator;
@@ -2198,10 +2402,18 @@ typedef struct MergeScanSelCache
 typedef struct PlaceHolderVar
 {
        Expr            xpr;
-       Expr       *phexpr;                     /* the represented expression */
-       Relids          phrels;                 /* base relids syntactically within expr src */
-       Index           phid;                   /* ID for PHV (unique within planner run) */
-       Index           phlevelsup;             /* > 0 if PHV belongs to outer query */
+
+       /* the represented expression */
+       Expr       *phexpr;
+
+       /* base relids syntactically within expr src */
+       Relids          phrels;
+
+       /* ID for PHV (unique within planner run) */
+       Index           phid;
+
+       /* > 0 if PHV belongs to outer query */
+       Index           phlevelsup;
 } PlaceHolderVar;
 
 /*
@@ -2360,7 +2572,7 @@ typedef struct AppendRelInfo
         * child column is dropped or doesn't exist in the parent.
         */
        int                     num_child_cols; /* length of array */
-       AttrNumber *parent_colnos;      /* array of parent attnos, or zeroes */
+       AttrNumber *parent_colnos;
 
        /*
         * We store the parent table's OID here for inheritance, or InvalidOid for
@@ -2428,12 +2640,23 @@ typedef struct PlaceHolderInfo
 {
        NodeTag         type;
 
-       Index           phid;                   /* ID for PH (unique within planner run) */
-       PlaceHolderVar *ph_var;         /* copy of PlaceHolderVar tree */
-       Relids          ph_eval_at;             /* lowest level we can evaluate value at */
-       Relids          ph_lateral;             /* relids of contained lateral refs, if any */
-       Relids          ph_needed;              /* highest level the value is needed at */
-       int32           ph_width;               /* estimated attribute width */
+       /* ID for PH (unique within planner run) */
+       Index           phid;
+
+       /* copy of PlaceHolderVar tree */
+       PlaceHolderVar *ph_var;
+
+       /* lowest level we can evaluate value at */
+       Relids          ph_eval_at;
+
+       /* relids of contained lateral refs, if any */
+       Relids          ph_lateral;
+
+       /* highest level the value is needed at */
+       Relids          ph_needed;
+
+       /* estimated attribute width */
+       int32           ph_width;
 } PlaceHolderInfo;
 
 /*
@@ -2445,13 +2668,26 @@ typedef struct MinMaxAggInfo
 {
        NodeTag         type;
 
-       Oid                     aggfnoid;               /* pg_proc Oid of the aggregate */
-       Oid                     aggsortop;              /* Oid of its sort operator */
-       Expr       *target;                     /* expression we are aggregating on */
-       PlannerInfo *subroot;           /* modified "root" for planning the subquery */
-       Path       *path;                       /* access path for subquery */
-       Cost            pathcost;               /* estimated cost to fetch first row */
-       Param      *param;                      /* param for subplan's output */
+       /* pg_proc Oid of the aggregate */
+       Oid                     aggfnoid;
+
+       /* Oid of its sort operator */
+       Oid                     aggsortop;
+
+       /* expression we are aggregating on */
+       Expr       *target;
+
+       /* modified "root" for planning the subquery */
+       PlannerInfo *subroot;
+
+       /* access path for subquery */
+       Path       *path;
+
+       /* estimated cost to fetch first row */
+       Cost            pathcost;
+
+       /* param for subplan's output */
+       Param      *param;
 } MinMaxAggInfo;
 
 /*
index 0ea9a22dfb72282b59a02869704090e5bb405066..d5c0ebe859d7f3e8d81f792192aca0b5e6bb3767 100644 (file)
@@ -274,14 +274,29 @@ typedef struct Append
 typedef struct MergeAppend
 {
        Plan            plan;
-       Bitmapset  *apprelids;          /* RTIs of appendrel(s) formed by this node */
+
+       /* RTIs of appendrel(s) formed by this node */
+       Bitmapset  *apprelids;
+
        List       *mergeplans;
+
        /* these fields are just like the sort-key info in struct Sort: */
-       int                     numCols;                /* number of sort-key columns */
-       AttrNumber *sortColIdx;         /* their indexes in the target list */
-       Oid                *sortOperators;      /* OIDs of operators to sort them by */
-       Oid                *collations;         /* OIDs of collations */
-       bool       *nullsFirst;         /* NULLS FIRST/LAST directions */
+
+       /* number of sort-key columns */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *sortColIdx;
+
+       /* OIDs of operators to sort them by */
+       Oid                *sortOperators;
+
+       /* OIDs of collations */
+       Oid                *collations;
+
+       /* NULLS FIRST/LAST directions */
+       bool       *nullsFirst;
+
        /* Info for run-time subplan pruning; NULL if we're not doing that */
        struct PartitionPruneInfo *part_prune_info;
 } MergeAppend;
@@ -297,14 +312,24 @@ typedef struct MergeAppend
 typedef struct RecursiveUnion
 {
        Plan            plan;
-       int                     wtParam;                /* ID of Param representing work table */
+
+       /* ID of Param representing work table */
+       int                     wtParam;
+
        /* Remaining fields are zero/null in UNION ALL case */
-       int                     numCols;                /* number of columns to check for
-                                                                * duplicate-ness */
-       AttrNumber *dupColIdx;          /* their indexes in the target list */
-       Oid                *dupOperators;       /* equality operators to compare with */
+
+       /* number of columns to check for duplicate-ness */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *dupColIdx;
+
+       /* equality operators to compare with */
+       Oid                *dupOperators;
        Oid                *dupCollations;
-       long            numGroups;              /* estimated number of groups in input */
+
+       /* estimated number of groups in input */
+       long            numGroups;
 } RecursiveUnion;
 
 /* ----------------
@@ -777,13 +802,26 @@ typedef struct NestLoopParam
 typedef struct MergeJoin
 {
        Join            join;
-       bool            skip_mark_restore;      /* Can we skip mark/restore calls? */
-       List       *mergeclauses;       /* mergeclauses as expression trees */
+
+       /* Can we skip mark/restore calls? */
+       bool            skip_mark_restore;
+
+       /* mergeclauses as expression trees */
+       List       *mergeclauses;
+
        /* these are arrays, but have the same length as the mergeclauses list: */
-       Oid                *mergeFamilies;      /* per-clause OIDs of btree opfamilies */
-       Oid                *mergeCollations;    /* per-clause OIDs of collations */
-       int                *mergeStrategies;    /* per-clause ordering (ASC or DESC) */
-       bool       *mergeNullsFirst;    /* per-clause nulls ordering */
+
+       /* per-clause OIDs of btree opfamilies */
+       Oid                *mergeFamilies;
+
+       /* per-clause OIDs of collations */
+       Oid                *mergeCollations;
+
+       /* per-clause ordering (ASC or DESC) */
+       int                *mergeStrategies;
+
+       /* per-clause nulls ordering */
+       bool       *mergeNullsFirst;
 } MergeJoin;
 
 /* ----------------
@@ -821,21 +859,38 @@ typedef struct Memoize
 {
        Plan            plan;
 
-       int                     numKeys;                /* size of the two arrays below */
-
-       Oid                *hashOperators;      /* hash operators for each key */
-       Oid                *collations;         /* collations for each key */
-       List       *param_exprs;        /* cache keys in the form of exprs containing
-                                                                * parameters */
-       bool            singlerow;              /* true if the cache entry should be marked as
-                                                                * complete after we store the first tuple in
-                                                                * it. */
-       bool            binary_mode;    /* true when cache key should be compared bit
-                                                                * by bit, false when using hash equality ops */
-       uint32          est_entries;    /* The maximum number of entries that the
-                                                                * planner expects will fit in the cache, or 0
-                                                                * if unknown */
-       Bitmapset  *keyparamids;        /* paramids from param_exprs */
+       /* size of the two arrays below */
+       int                     numKeys;
+
+       /* hash operators for each key */
+       Oid                *hashOperators;
+
+       /* collations for each key */
+       Oid                *collations;
+
+       /* cache keys in the form of exprs containing parameters */
+       List       *param_exprs;
+
+       /*
+        * true if the cache entry should be marked as complete after we store the
+        * first tuple in it.
+        */
+       bool            singlerow;
+
+       /*
+        * true when cache key should be compared bit by bit, false when using
+        * hash equality ops
+        */
+       bool            binary_mode;
+
+       /*
+        * The maximum number of entries that the planner expects will fit in the
+        * cache, or 0 if unknown
+        */
+       uint32          est_entries;
+
+       /* paramids from param_exprs */
+       Bitmapset  *keyparamids;
 } Memoize;
 
 /* ----------------
@@ -845,11 +900,21 @@ typedef struct Memoize
 typedef struct Sort
 {
        Plan            plan;
-       int                     numCols;                /* number of sort-key columns */
-       AttrNumber *sortColIdx;         /* their indexes in the target list */
-       Oid                *sortOperators;      /* OIDs of operators to sort them by */
-       Oid                *collations;         /* OIDs of collations */
-       bool       *nullsFirst;         /* NULLS FIRST/LAST directions */
+
+       /* number of sort-key columns */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *sortColIdx;
+
+       /* OIDs of operators to sort them by */
+       Oid                *sortOperators;
+
+       /* OIDs of collations */
+       Oid                *collations;
+
+       /* NULLS FIRST/LAST directions */
+       bool       *nullsFirst;
 } Sort;
 
 /* ----------------
@@ -871,9 +936,15 @@ typedef struct IncrementalSort
 typedef struct Group
 {
        Plan            plan;
-       int                     numCols;                /* number of grouping columns */
-       AttrNumber *grpColIdx;          /* their indexes in the target list */
-       Oid                *grpOperators;       /* equality operators to compare with */
+
+       /* number of grouping columns */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *grpColIdx;
+
+       /* equality operators to compare with */
+       Oid                *grpOperators;
        Oid                *grpCollations;
 } Group;
 
@@ -894,18 +965,39 @@ typedef struct Group
 typedef struct Agg
 {
        Plan            plan;
-       AggStrategy aggstrategy;        /* basic strategy, see nodes.h */
-       AggSplit        aggsplit;               /* agg-splitting mode, see nodes.h */
-       int                     numCols;                /* number of grouping columns */
-       AttrNumber *grpColIdx;          /* their indexes in the target list */
-       Oid                *grpOperators;       /* equality operators to compare with */
+
+       /* basic strategy, see nodes.h */
+       AggStrategy aggstrategy;
+
+       /* agg-splitting mode, see nodes.h */
+       AggSplit        aggsplit;
+
+       /* number of grouping columns */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *grpColIdx;
+
+       /* equality operators to compare with */
+       Oid                *grpOperators;
        Oid                *grpCollations;
-       long            numGroups;              /* estimated number of groups in input */
-       uint64          transitionSpace;        /* for pass-by-ref transition data */
-       Bitmapset  *aggParams;          /* IDs of Params used in Aggref inputs */
+
+       /* estimated number of groups in input */
+       long            numGroups;
+
+       /* for pass-by-ref transition data */
+       uint64          transitionSpace;
+
+       /* IDs of Params used in Aggref inputs */
+       Bitmapset  *aggParams;
+
        /* Note: planner provides numGroups & aggParams only in HASHED/MIXED case */
-       List       *groupingSets;       /* grouping sets to use */
-       List       *chain;                      /* chained Agg/Sort nodes */
+
+       /* grouping sets to use */
+       List       *groupingSets;
+
+       /* chained Agg/Sort nodes */
+       List       *chain;
 } Agg;
 
 /* ----------------
@@ -915,28 +1007,71 @@ typedef struct Agg
 typedef struct WindowAgg
 {
        Plan            plan;
-       Index           winref;                 /* ID referenced by window functions */
-       int                     partNumCols;    /* number of columns in partition clause */
-       AttrNumber *partColIdx;         /* their indexes in the target list */
-       Oid                *partOperators;      /* equality operators for partition columns */
-       Oid                *partCollations; /* collations for partition columns */
-       int                     ordNumCols;             /* number of columns in ordering clause */
-       AttrNumber *ordColIdx;          /* their indexes in the target list */
-       Oid                *ordOperators;       /* equality operators for ordering columns */
-       Oid                *ordCollations;      /* collations for ordering columns */
-       int                     frameOptions;   /* frame_clause options, see WindowDef */
-       Node       *startOffset;        /* expression for starting bound, if any */
-       Node       *endOffset;          /* expression for ending bound, if any */
-       List       *runCondition;       /* qual to help short-circuit execution */
-       List       *runConditionOrig;   /* runCondition for display in EXPLAIN */
+
+       /* ID referenced by window functions */
+       Index           winref;
+
+       /* number of columns in partition clause */
+       int                     partNumCols;
+
+       /* their indexes in the target list */
+       AttrNumber *partColIdx;
+
+       /* equality operators for partition columns */
+       Oid                *partOperators;
+
+       /* collations for partition columns */
+       Oid                *partCollations;
+
+       /* number of columns in ordering clause */
+       int                     ordNumCols;
+
+       /* their indexes in the target list */
+       AttrNumber *ordColIdx;
+
+       /* equality operators for ordering columns */
+       Oid                *ordOperators;
+
+       /* collations for ordering columns */
+       Oid                *ordCollations;
+
+       /* frame_clause options, see WindowDef */
+       int                     frameOptions;
+
+       /* expression for starting bound, if any */
+       Node       *startOffset;
+
+       /* expression for ending bound, if any */
+       Node       *endOffset;
+
+       /* qual to help short-circuit execution */
+       List       *runCondition;
+
+       /* runCondition for display in EXPLAIN */
+       List       *runConditionOrig;
+
        /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
-       Oid                     startInRangeFunc;       /* in_range function for startOffset */
-       Oid                     endInRangeFunc; /* in_range function for endOffset */
-       Oid                     inRangeColl;    /* collation for in_range tests */
-       bool            inRangeAsc;             /* use ASC sort order for in_range tests? */
-       bool            inRangeNullsFirst;      /* nulls sort first for in_range tests? */
-       bool            topWindow;              /* false for all apart from the WindowAgg
-                                                                * that's closest to the root of the plan */
+
+       /* in_range function for startOffset */
+       Oid                     startInRangeFunc;
+
+       /* in_range function for endOffset */
+       Oid                     endInRangeFunc;
+
+       /* collation for in_range tests */
+       Oid                     inRangeColl;
+
+       /* use ASC sort order for in_range tests? */
+       bool            inRangeAsc;
+
+       /* nulls sort first for in_range tests? */
+       bool            inRangeNullsFirst;
+
+       /*
+        * false for all apart from the WindowAgg that's closest to the root of
+        * the plan
+        */
+       bool            topWindow;
 } WindowAgg;
 
 /* ----------------
@@ -946,10 +1081,18 @@ typedef struct WindowAgg
 typedef struct Unique
 {
        Plan            plan;
-       int                     numCols;                /* number of columns to check for uniqueness */
-       AttrNumber *uniqColIdx;         /* their indexes in the target list */
-       Oid                *uniqOperators;      /* equality operators to compare with */
-       Oid                *uniqCollations; /* collations for equality comparisons */
+
+       /* number of columns to check for uniqueness */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *uniqColIdx;
+
+       /* equality operators to compare with */
+       Oid                *uniqOperators;
+
+       /* collations for equality comparisons */
+       Oid                *uniqCollations;
 } Unique;
 
 /* ------------
@@ -981,16 +1124,35 @@ typedef struct Gather
 typedef struct GatherMerge
 {
        Plan            plan;
-       int                     num_workers;    /* planned number of worker processes */
-       int                     rescan_param;   /* ID of Param that signals a rescan, or -1 */
+
+       /* planned number of worker processes */
+       int                     num_workers;
+
+       /* ID of Param that signals a rescan, or -1 */
+       int                     rescan_param;
+
        /* remaining fields are just like the sort-key info in struct Sort */
-       int                     numCols;                /* number of sort-key columns */
-       AttrNumber *sortColIdx;         /* their indexes in the target list */
-       Oid                *sortOperators;      /* OIDs of operators to sort them by */
-       Oid                *collations;         /* OIDs of collations */
-       bool       *nullsFirst;         /* NULLS FIRST/LAST directions */
-       Bitmapset  *initParam;          /* param id's of initplans which are referred
-                                                                * at gather merge or one of it's child node */
+
+       /* number of sort-key columns */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *sortColIdx;
+
+       /* OIDs of operators to sort them by */
+       Oid                *sortOperators;
+
+       /* OIDs of collations */
+       Oid                *collations;
+
+       /* NULLS FIRST/LAST directions */
+       bool       *nullsFirst;
+
+       /*
+        * param id's of initplans which are referred at gather merge or one of
+        * it's child node
+        */
+       Bitmapset  *initParam;
 } GatherMerge;
 
 /* ----------------
@@ -1024,16 +1186,31 @@ typedef struct Hash
 typedef struct SetOp
 {
        Plan            plan;
-       SetOpCmd        cmd;                    /* what to do, see nodes.h */
-       SetOpStrategy strategy;         /* how to do it, see nodes.h */
-       int                     numCols;                /* number of columns to check for
-                                                                * duplicate-ness */
-       AttrNumber *dupColIdx;          /* their indexes in the target list */
-       Oid                *dupOperators;       /* equality operators to compare with */
+
+       /* what to do, see nodes.h */
+       SetOpCmd        cmd;
+
+       /* how to do it, see nodes.h */
+       SetOpStrategy strategy;
+
+       /* number of columns to check for duplicate-ness */
+       int                     numCols;
+
+       /* their indexes in the target list */
+       AttrNumber *dupColIdx;
+
+       /* equality operators to compare with */
+       Oid                *dupOperators;
        Oid                *dupCollations;
-       AttrNumber      flagColIdx;             /* where is the flag column, if any */
-       int                     firstFlag;              /* flag value for first input relation */
-       long            numGroups;              /* estimated number of groups in input */
+
+       /* where is the flag column, if any */
+       AttrNumber      flagColIdx;
+
+       /* flag value for first input relation */
+       int                     firstFlag;
+
+       /* estimated number of groups in input */
+       long            numGroups;
 } SetOp;
 
 /* ----------------
@@ -1062,13 +1239,27 @@ typedef struct LockRows
 typedef struct Limit
 {
        Plan            plan;
-       Node       *limitOffset;        /* OFFSET parameter, or NULL if none */
-       Node       *limitCount;         /* COUNT parameter, or NULL if none */
-       LimitOption limitOption;        /* limit type */
-       int                     uniqNumCols;    /* number of columns to check for similarity  */
-       AttrNumber *uniqColIdx;         /* their indexes in the target list */
-       Oid                *uniqOperators;      /* equality operators to compare with */
-       Oid                *uniqCollations; /* collations for equality comparisons */
+
+       /* OFFSET parameter, or NULL if none */
+       Node       *limitOffset;
+
+       /* COUNT parameter, or NULL if none */
+       Node       *limitCount;
+
+       /* limit type */
+       LimitOption limitOption;
+
+       /* number of columns to check for similarity  */
+       int                     uniqNumCols;
+
+       /* their indexes in the target list */
+       AttrNumber *uniqColIdx;
+
+       /* equality operators to compare with */
+       Oid                *uniqOperators;
+
+       /* collations for equality comparisons */
+       Oid                *uniqCollations;
 } Limit;
 
 
@@ -1223,13 +1414,24 @@ typedef struct PartitionPruneInfo
 typedef struct PartitionedRelPruneInfo
 {
        NodeTag         type;
-       Index           rtindex;                /* RT index of partition rel for this level */
-       Bitmapset  *present_parts;      /* Indexes of all partitions which subplans or
-                                                                * subparts are present for */
-       int                     nparts;                 /* Length of the following arrays: */
-       int                *subplan_map;        /* subplan index by partition index, or -1 */
-       int                *subpart_map;        /* subpart index by partition index, or -1 */
-       Oid                *relid_map;          /* relation OID by partition index, or 0 */
+
+       /* RT index of partition rel for this level */
+       Index           rtindex;
+
+       /* Indexes of all partitions which subplans or subparts are present for */
+       Bitmapset  *present_parts;
+
+       /* Length of the following arrays: */
+       int                     nparts;
+
+       /* subplan index by partition index, or -1 */
+       int                *subplan_map;
+
+       /* subpart index by partition index, or -1 */
+       int                *subpart_map;
+
+       /* relation OID by partition index, or 0 */
+       Oid                *relid_map;
 
        /*
         * initial_pruning_steps shows how to prune during executor startup (i.e.,
@@ -1239,8 +1441,9 @@ typedef struct PartitionedRelPruneInfo
         */
        List       *initial_pruning_steps;      /* List of PartitionPruneStep */
        List       *exec_pruning_steps; /* List of PartitionPruneStep */
-       Bitmapset  *execparamids;       /* All PARAM_EXEC Param IDs in
-                                                                * exec_pruning_steps */
+
+       /* All PARAM_EXEC Param IDs in exec_pruning_steps */
+       Bitmapset  *execparamids;
 } PartitionedRelPruneInfo;
 
 /*
index 51505eee85dfff7446defaf4d4e401e96f3f7d1a..732c00c0985e433876e0adc1b066f8da00b5d2e0 100644 (file)
@@ -63,14 +63,27 @@ typedef enum OnCommitAction
 typedef struct RangeVar
 {
        NodeTag         type;
-       char       *catalogname;        /* the catalog (database) name, or NULL */
-       char       *schemaname;         /* the schema name, or NULL */
-       char       *relname;            /* the relation/sequence name */
-       bool            inh;                    /* expand rel by inheritance? recursively act
-                                                                * on children? */
-       char            relpersistence; /* see RELPERSISTENCE_* in pg_class.h */
-       Alias      *alias;                      /* table alias & optional column aliases */
-       int                     location;               /* token location, or -1 if unknown */
+
+       /* the catalog (database) name, or NULL */
+       char       *catalogname;
+
+       /* the schema name, or NULL */
+       char       *schemaname;
+
+       /* the relation/sequence name */
+       char       *relname;
+
+       /* expand rel by inheritance? recursively act on children? */
+       bool            inh;
+
+       /* see RELPERSISTENCE_* in pg_class.h */
+       char            relpersistence;
+
+       /* table alias & optional column aliases */
+       Alias      *alias;
+
+       /* token location, or -1 if unknown */
+       int                     location;
 } RangeVar;
 
 typedef enum TableFuncType
@@ -195,19 +208,38 @@ typedef struct Expr
 typedef struct Var
 {
        Expr            xpr;
-       int                     varno;                  /* index of this var's relation in the range
-                                                                * table, or INNER_VAR/OUTER_VAR/etc */
-       AttrNumber      varattno;               /* attribute number of this var, or zero for
-                                                                * all attrs ("whole-row Var") */
-       Oid                     vartype;                /* pg_type OID for the type of this var */
-       int32           vartypmod;              /* pg_attribute typmod value */
-       Oid                     varcollid;              /* OID of collation, or InvalidOid if none */
-       Index           varlevelsup;    /* for subquery variables referencing outer
-                                                                * relations; 0 in a normal var, >0 means N
-                                                                * levels up */
-       Index           varnosyn;               /* syntactic relation index (0 if unknown) */
-       AttrNumber      varattnosyn;    /* syntactic attribute number */
-       int                     location;               /* token location, or -1 if unknown */
+
+       /*
+        * index of this var's relation in the range table, or
+        * INNER_VAR/OUTER_VAR/etc
+        */
+       int                     varno;
+
+       /*
+        * attribute number of this var, or zero for all attrs ("whole-row Var")
+        */
+       AttrNumber      varattno;
+
+       /* pg_type OID for the type of this var */
+       Oid                     vartype;
+       /* pg_attribute typmod value */
+       int32           vartypmod;
+       /* OID of collation, or InvalidOid if none */
+       Oid                     varcollid;
+
+       /*
+        * for subquery variables referencing outer relations; 0 in a normal var,
+        * >0 means N levels up
+        */
+       Index           varlevelsup;
+
+       /* syntactic relation index (0 if unknown) */
+       Index           varnosyn;
+       /* syntactic attribute number */
+       AttrNumber      varattnosyn;
+
+       /* token location, or -1 if unknown */
+       int                     location;
 } Var;
 
 /*
@@ -329,26 +361,66 @@ typedef struct Param
 typedef struct Aggref
 {
        Expr            xpr;
-       Oid                     aggfnoid;               /* pg_proc Oid of the aggregate */
-       Oid                     aggtype;                /* type Oid of result of the aggregate */
-       Oid                     aggcollid;              /* OID of collation of result */
-       Oid                     inputcollid;    /* OID of collation that function should use */
-       Oid                     aggtranstype;   /* type Oid of aggregate's transition value */
-       List       *aggargtypes;        /* type Oids of direct and aggregated args */
-       List       *aggdirectargs;      /* direct arguments, if an ordered-set agg */
-       List       *args;                       /* aggregated arguments and sort expressions */
-       List       *aggorder;           /* ORDER BY (list of SortGroupClause) */
-       List       *aggdistinct;        /* DISTINCT (list of SortGroupClause) */
-       Expr       *aggfilter;          /* FILTER expression, if any */
-       bool            aggstar;                /* true if argument list was really '*' */
-       bool            aggvariadic;    /* true if variadic arguments have been
-                                                                * combined into an array last argument */
-       char            aggkind;                /* aggregate kind (see pg_aggregate.h) */
-       Index           agglevelsup;    /* > 0 if agg belongs to outer query */
-       AggSplit        aggsplit;               /* expected agg-splitting mode of parent Agg */
-       int                     aggno;                  /* unique ID within the Agg node */
-       int                     aggtransno;             /* unique ID of transition state in the Agg */
-       int                     location;               /* token location, or -1 if unknown */
+
+       /* pg_proc Oid of the aggregate */
+       Oid                     aggfnoid;
+
+       /* type Oid of result of the aggregate */
+       Oid                     aggtype;
+
+       /* OID of collation of result */
+       Oid                     aggcollid;
+
+       /* OID of collation that function should use */
+       Oid                     inputcollid;
+
+       /* type Oid of aggregate's transition value */
+       Oid                     aggtranstype;
+
+       /* type Oids of direct and aggregated args */
+       List       *aggargtypes;
+
+       /* direct arguments, if an ordered-set agg */
+       List       *aggdirectargs;
+
+       /* aggregated arguments and sort expressions */
+       List       *args;
+
+       /* ORDER BY (list of SortGroupClause) */
+       List       *aggorder;
+
+       /* DISTINCT (list of SortGroupClause) */
+       List       *aggdistinct;
+
+       /* FILTER expression, if any */
+       Expr       *aggfilter;
+
+       /* true if argument list was really '*' */
+       bool            aggstar;
+
+       /*
+        * true if variadic arguments have been combined into an array last
+        * argument
+        */
+       bool            aggvariadic;
+
+       /* aggregate kind (see pg_aggregate.h) */
+       char            aggkind;
+
+       /* > 0 if agg belongs to outer query */
+       Index           agglevelsup;
+
+       /* expected agg-splitting mode of parent Agg */
+       AggSplit        aggsplit;
+
+       /* unique ID within the Agg node */
+       int                     aggno;
+
+       /* unique ID of transition state in the Agg */
+       int                     aggtransno;
+
+       /* token location, or -1 if unknown */
+       int                     location;
 } Aggref;
 
 /*
@@ -378,12 +450,21 @@ typedef struct Aggref
 typedef struct GroupingFunc
 {
        Expr            xpr;
-       List       *args;                       /* arguments, not evaluated but kept for
-                                                                * benefit of EXPLAIN etc. */
-       List       *refs;                       /* ressortgrouprefs of arguments */
-       List       *cols;                       /* actual column positions set by planner */
-       Index           agglevelsup;    /* same as Aggref.agglevelsup */
-       int                     location;               /* token location */
+
+       /* arguments, not evaluated but kept for benefit of EXPLAIN etc. */
+       List       *args;
+
+       /* ressortgrouprefs of arguments */
+       List       *refs;
+
+       /* actual column positions set by planner */
+       List       *cols;
+
+       /* same as Aggref.agglevelsup */
+       Index           agglevelsup;
+
+       /* token location */
+       int                     location;
 } GroupingFunc;
 
 /*
@@ -548,14 +629,30 @@ typedef struct NamedArgExpr
 typedef struct OpExpr
 {
        Expr            xpr;
-       Oid                     opno;                   /* PG_OPERATOR OID of the operator */
-       Oid                     opfuncid;               /* PG_PROC OID of underlying function */
-       Oid                     opresulttype;   /* PG_TYPE OID of result value */
-       bool            opretset;               /* true if operator returns set */
-       Oid                     opcollid;               /* OID of collation of result */
-       Oid                     inputcollid;    /* OID of collation that operator should use */
-       List       *args;                       /* arguments to the operator (1 or 2) */
-       int                     location;               /* token location, or -1 if unknown */
+
+       /* PG_OPERATOR OID of the operator */
+       Oid                     opno;
+
+       /* PG_PROC OID of underlying function */
+       Oid                     opfuncid;
+
+       /* PG_TYPE OID of result value */
+       Oid                     opresulttype;
+
+       /* true if operator returns set */
+       bool            opretset;
+
+       /* OID of collation of result */
+       Oid                     opcollid;
+
+       /* OID of collation that operator should use */
+       Oid                     inputcollid;
+
+       /* arguments to the operator (1 or 2) */
+       List       *args;
+
+       /* token location, or -1 if unknown */
+       int                     location;
 } OpExpr;
 
 /*
@@ -605,15 +702,30 @@ typedef OpExpr NullIfExpr;
 typedef struct ScalarArrayOpExpr
 {
        Expr            xpr;
-       Oid                     opno;                   /* PG_OPERATOR OID of the operator */
-       Oid                     opfuncid;               /* PG_PROC OID of comparison function */
-       Oid                     hashfuncid;             /* PG_PROC OID of hash func or InvalidOid */
-       Oid                     negfuncid;              /* PG_PROC OID of negator of opfuncid function
-                                                                * or InvalidOid.  See above */
-       bool            useOr;                  /* true for ANY, false for ALL */
-       Oid                     inputcollid;    /* OID of collation that operator should use */
-       List       *args;                       /* the scalar and array operands */
-       int                     location;               /* token location, or -1 if unknown */
+
+       /* PG_OPERATOR OID of the operator */
+       Oid                     opno;
+
+       /* PG_PROC OID of comparison function */
+       Oid                     opfuncid;
+
+       /* PG_PROC OID of hash func or InvalidOid */
+       Oid                     hashfuncid;
+
+       /* PG_PROC OID of negator of opfuncid function or InvalidOid.  See above */
+       Oid                     negfuncid;
+
+       /* true for ANY, false for ALL */
+       bool            useOr;
+
+       /* OID of collation that operator should use */
+       Oid                     inputcollid;
+
+       /* the scalar and array operands */
+       List       *args;
+
+       /* token location, or -1 if unknown */
+       int                     location;
 } ScalarArrayOpExpr;
 
 /*