]> granicus.if.org Git - postgresql/blob - src/include/nodes/relation.h
Improve cost estimation for aggregates and window functions.
[postgresql] / src / include / nodes / relation.h
1 /*-------------------------------------------------------------------------
2  *
3  * relation.h
4  *        Definitions for planner's internal data structures.
5  *
6  *
7  * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/nodes/relation.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef RELATION_H
15 #define RELATION_H
16
17 #include "access/sdir.h"
18 #include "nodes/bitmapset.h"
19 #include "nodes/params.h"
20 #include "nodes/parsenodes.h"
21 #include "storage/block.h"
22
23
24 /*
25  * Relids
26  *              Set of relation identifiers (indexes into the rangetable).
27  */
28 typedef Bitmapset *Relids;
29
30 /*
31  * When looking for a "cheapest path", this enum specifies whether we want
32  * cheapest startup cost or cheapest total cost.
33  */
34 typedef enum CostSelector
35 {
36         STARTUP_COST, TOTAL_COST
37 } CostSelector;
38
39 /*
40  * The cost estimate produced by cost_qual_eval() includes both a one-time
41  * (startup) cost, and a per-tuple cost.
42  */
43 typedef struct QualCost
44 {
45         Cost            startup;                /* one-time cost */
46         Cost            per_tuple;              /* per-evaluation cost */
47 } QualCost;
48
49 /*
50  * Costing aggregate function execution requires these statistics about
51  * the aggregates to be executed by a given Agg node.  Note that transCost
52  * includes the execution costs of the aggregates' input expressions.
53  */
54 typedef struct AggClauseCosts
55 {
56         int                     numAggs;                /* total number of aggregate functions */
57         int                     numOrderedAggs; /* number that use DISTINCT or ORDER BY */
58         QualCost        transCost;              /* total per-input-row execution costs */
59         Cost            finalCost;              /* total costs of agg final functions */
60         Size            transitionSpace;        /* space for pass-by-ref transition data */
61 } AggClauseCosts;
62
63
64 /*----------
65  * PlannerGlobal
66  *              Global information for planning/optimization
67  *
68  * PlannerGlobal holds state for an entire planner invocation; this state
69  * is shared across all levels of sub-Queries that exist in the command being
70  * planned.
71  *----------
72  */
73 typedef struct PlannerGlobal
74 {
75         NodeTag         type;
76
77         ParamListInfo boundParams;      /* Param values provided to planner() */
78
79         List       *paramlist;          /* to keep track of cross-level Params */
80
81         List       *subplans;           /* Plans for SubPlan nodes */
82
83         List       *subrtables;         /* Rangetables for SubPlan nodes */
84
85         List       *subrowmarks;        /* PlanRowMarks for SubPlan nodes */
86
87         Bitmapset  *rewindPlanIDs;      /* indices of subplans that require REWIND */
88
89         List       *finalrtable;        /* "flat" rangetable for executor */
90
91         List       *finalrowmarks;      /* "flat" list of PlanRowMarks */
92
93         List       *resultRelations;    /* "flat" list of integer RT indexes */
94
95         List       *relationOids;       /* OIDs of relations the plan depends on */
96
97         List       *invalItems;         /* other dependencies, as PlanInvalItems */
98
99         Index           lastPHId;               /* highest PlaceHolderVar ID assigned */
100
101         Index           lastRowMarkId;  /* highest PlanRowMark ID assigned */
102
103         bool            transientPlan;  /* redo plan when TransactionXmin changes? */
104 } PlannerGlobal;
105
106 /* macro for fetching the Plan associated with a SubPlan node */
107 #define planner_subplan_get_plan(root, subplan) \
108         ((Plan *) list_nth((root)->glob->subplans, (subplan)->plan_id - 1))
109
110
111 /*----------
112  * PlannerInfo
113  *              Per-query information for planning/optimization
114  *
115  * This struct is conventionally called "root" in all the planner routines.
116  * It holds links to all of the planner's working state, in addition to the
117  * original Query.      Note that at present the planner extensively modifies
118  * the passed-in Query data structure; someday that should stop.
119  *----------
120  */
121 typedef struct PlannerInfo
122 {
123         NodeTag         type;
124
125         Query      *parse;                      /* the Query being planned */
126
127         PlannerGlobal *glob;            /* global info for current planner run */
128
129         Index           query_level;    /* 1 at the outermost Query */
130
131         struct PlannerInfo *parent_root;        /* NULL at outermost Query */
132
133         /*
134          * simple_rel_array holds pointers to "base rels" and "other rels" (see
135          * comments for RelOptInfo for more info).      It is indexed by rangetable
136          * index (so entry 0 is always wasted).  Entries can be NULL when an RTE
137          * does not correspond to a base relation, such as a join RTE or an
138          * unreferenced view RTE; or if the RelOptInfo hasn't been made yet.
139          */
140         struct RelOptInfo **simple_rel_array;           /* All 1-rel RelOptInfos */
141         int                     simple_rel_array_size;  /* allocated size of array */
142
143         /*
144          * simple_rte_array is the same length as simple_rel_array and holds
145          * pointers to the associated rangetable entries.  This lets us avoid
146          * rt_fetch(), which can be a bit slow once large inheritance sets have
147          * been expanded.
148          */
149         RangeTblEntry **simple_rte_array;       /* rangetable as an array */
150
151         /*
152          * join_rel_list is a list of all join-relation RelOptInfos we have
153          * considered in this planning run.  For small problems we just scan the
154          * list to do lookups, but when there are many join relations we build a
155          * hash table for faster lookups.  The hash table is present and valid
156          * when join_rel_hash is not NULL.      Note that we still maintain the list
157          * even when using the hash table for lookups; this simplifies life for
158          * GEQO.
159          */
160         List       *join_rel_list;      /* list of join-relation RelOptInfos */
161         struct HTAB *join_rel_hash; /* optional hashtable for join relations */
162
163         /*
164          * When doing a dynamic-programming-style join search, join_rel_level[k]
165          * is a list of all join-relation RelOptInfos of level k, and
166          * join_cur_level is the current level.  New join-relation RelOptInfos are
167          * automatically added to the join_rel_level[join_cur_level] list.
168          * join_rel_level is NULL if not in use.
169          */
170         List      **join_rel_level; /* lists of join-relation RelOptInfos */
171         int                     join_cur_level; /* index of list being extended */
172
173         List       *init_plans;         /* init SubPlans for query */
174
175         List       *cte_plan_ids;       /* per-CTE-item list of subplan IDs */
176
177         List       *eq_classes;         /* list of active EquivalenceClasses */
178
179         List       *canon_pathkeys; /* list of "canonical" PathKeys */
180
181         List       *left_join_clauses;          /* list of RestrictInfos for
182                                                                                  * mergejoinable outer join clauses
183                                                                                  * w/nonnullable var on left */
184
185         List       *right_join_clauses;         /* list of RestrictInfos for
186                                                                                  * mergejoinable outer join clauses
187                                                                                  * w/nonnullable var on right */
188
189         List       *full_join_clauses;          /* list of RestrictInfos for
190                                                                                  * mergejoinable full join clauses */
191
192         List       *join_info_list; /* list of SpecialJoinInfos */
193
194         List       *append_rel_list;    /* list of AppendRelInfos */
195
196         List       *rowMarks;           /* list of PlanRowMarks */
197
198         List       *placeholder_list;           /* list of PlaceHolderInfos */
199
200         List       *query_pathkeys; /* desired pathkeys for query_planner(), and
201                                                                  * actual pathkeys afterwards */
202
203         List       *group_pathkeys; /* groupClause pathkeys, if any */
204         List       *window_pathkeys;    /* pathkeys of bottom window, if any */
205         List       *distinct_pathkeys;          /* distinctClause pathkeys, if any */
206         List       *sort_pathkeys;      /* sortClause pathkeys, if any */
207
208         List       *minmax_aggs;        /* List of MinMaxAggInfos */
209
210         List       *initial_rels;       /* RelOptInfos we are now trying to join */
211
212         MemoryContext planner_cxt;      /* context holding PlannerInfo */
213
214         double          total_table_pages;              /* # of pages in all tables of query */
215
216         double          tuple_fraction; /* tuple_fraction passed to query_planner */
217         double          limit_tuples;   /* limit_tuples passed to query_planner */
218
219         bool            hasInheritedTarget;             /* true if parse->resultRelation is an
220                                                                                  * inheritance child rel */
221         bool            hasJoinRTEs;    /* true if any RTEs are RTE_JOIN kind */
222         bool            hasHavingQual;  /* true if havingQual was non-null */
223         bool            hasPseudoConstantQuals; /* true if any RestrictInfo has
224                                                                                  * pseudoconstant = true */
225         bool            hasRecursion;   /* true if planning a recursive WITH item */
226
227         /* These fields are used only when hasRecursion is true: */
228         int                     wt_param_id;    /* PARAM_EXEC ID for the work table */
229         struct Plan *non_recursive_plan;        /* plan for non-recursive term */
230
231         /* These fields are workspace for createplan.c */
232         Relids          curOuterRels;   /* outer rels above current node */
233         List       *curOuterParams; /* not-yet-assigned NestLoopParams */
234
235         /* optional private data for join_search_hook, e.g., GEQO */
236         void       *join_search_private;
237 } PlannerInfo;
238
239
240 /*
241  * In places where it's known that simple_rte_array[] must have been prepared
242  * already, we just index into it to fetch RTEs.  In code that might be
243  * executed before or after entering query_planner(), use this macro.
244  */
245 #define planner_rt_fetch(rti, root) \
246         ((root)->simple_rte_array ? (root)->simple_rte_array[rti] : \
247          rt_fetch(rti, (root)->parse->rtable))
248
249
250 /*----------
251  * RelOptInfo
252  *              Per-relation information for planning/optimization
253  *
254  * For planning purposes, a "base rel" is either a plain relation (a table)
255  * or the output of a sub-SELECT or function that appears in the range table.
256  * In either case it is uniquely identified by an RT index.  A "joinrel"
257  * is the joining of two or more base rels.  A joinrel is identified by
258  * the set of RT indexes for its component baserels.  We create RelOptInfo
259  * nodes for each baserel and joinrel, and store them in the PlannerInfo's
260  * simple_rel_array and join_rel_list respectively.
261  *
262  * Note that there is only one joinrel for any given set of component
263  * baserels, no matter what order we assemble them in; so an unordered
264  * set is the right datatype to identify it with.
265  *
266  * We also have "other rels", which are like base rels in that they refer to
267  * single RT indexes; but they are not part of the join tree, and are given
268  * a different RelOptKind to identify them.  Lastly, there is a RelOptKind
269  * for "dead" relations, which are base rels that we have proven we don't
270  * need to join after all.
271  *
272  * Currently the only kind of otherrels are those made for member relations
273  * of an "append relation", that is an inheritance set or UNION ALL subquery.
274  * An append relation has a parent RTE that is a base rel, which represents
275  * the entire append relation.  The member RTEs are otherrels.  The parent
276  * is present in the query join tree but the members are not.  The member
277  * RTEs and otherrels are used to plan the scans of the individual tables or
278  * subqueries of the append set; then the parent baserel is given Append
279  * and/or MergeAppend paths comprising the best paths for the individual
280  * member rels.  (See comments for AppendRelInfo for more information.)
281  *
282  * At one time we also made otherrels to represent join RTEs, for use in
283  * handling join alias Vars.  Currently this is not needed because all join
284  * alias Vars are expanded to non-aliased form during preprocess_expression.
285  *
286  * Parts of this data structure are specific to various scan and join
287  * mechanisms.  It didn't seem worth creating new node types for them.
288  *
289  *              relids - Set of base-relation identifiers; it is a base relation
290  *                              if there is just one, a join relation if more than one
291  *              rows - estimated number of tuples in the relation after restriction
292  *                         clauses have been applied (ie, output rows of a plan for it)
293  *              width - avg. number of bytes per tuple in the relation after the
294  *                              appropriate projections have been done (ie, output width)
295  *              reltargetlist - List of Var and PlaceHolderVar nodes for the values
296  *                                              we need to output from this relation.
297  *                                              List is in no particular order, but all rels of an
298  *                                              appendrel set must use corresponding orders.
299  *                                              NOTE: in a child relation, may contain RowExpr or
300  *                                              ConvertRowtypeExpr representing a whole-row Var.
301  *              pathlist - List of Path nodes, one for each potentially useful
302  *                                 method of generating the relation
303  *              cheapest_startup_path - the pathlist member with lowest startup cost
304  *                                                              (regardless of its ordering)
305  *              cheapest_total_path - the pathlist member with lowest total cost
306  *                                                        (regardless of its ordering)
307  *              cheapest_unique_path - for caching cheapest path to produce unique
308  *                                                         (no duplicates) output from relation
309  *
310  * If the relation is a base relation it will have these fields set:
311  *
312  *              relid - RTE index (this is redundant with the relids field, but
313  *                              is provided for convenience of access)
314  *              rtekind - distinguishes plain relation, subquery, or function RTE
315  *              min_attr, max_attr - range of valid AttrNumbers for rel
316  *              attr_needed - array of bitmapsets indicating the highest joinrel
317  *                              in which each attribute is needed; if bit 0 is set then
318  *                              the attribute is needed as part of final targetlist
319  *              attr_widths - cache space for per-attribute width estimates;
320  *                                        zero means not computed yet
321  *              indexlist - list of IndexOptInfo nodes for relation's indexes
322  *                                      (always NIL if it's not a table)
323  *              pages - number of disk pages in relation (zero if not a table)
324  *              tuples - number of tuples in relation (not considering restrictions)
325  *              subplan - plan for subquery (NULL if it's not a subquery)
326  *              subrtable - rangetable for subquery (NIL if it's not a subquery)
327  *              subrowmark - rowmarks for subquery (NIL if it's not a subquery)
328  *
329  *              Note: for a subquery, tuples and subplan are not set immediately
330  *              upon creation of the RelOptInfo object; they are filled in when
331  *              set_base_rel_pathlist processes the object.
332  *
333  *              For otherrels that are appendrel members, these fields are filled
334  *              in just as for a baserel.
335  *
336  * The presence of the remaining fields depends on the restrictions
337  * and joins that the relation participates in:
338  *
339  *              baserestrictinfo - List of RestrictInfo nodes, containing info about
340  *                                      each non-join qualification clause in which this relation
341  *                                      participates (only used for base rels)
342  *              baserestrictcost - Estimated cost of evaluating the baserestrictinfo
343  *                                      clauses at a single tuple (only used for base rels)
344  *              joininfo  - List of RestrictInfo nodes, containing info about each
345  *                                      join clause in which this relation participates (but
346  *                                      note this excludes clauses that might be derivable from
347  *                                      EquivalenceClasses)
348  *              has_eclass_joins - flag that EquivalenceClass joins are possible
349  *              index_outer_relids - only used for base rels; set of outer relids
350  *                                      that participate in indexable joinclauses for this rel
351  *              index_inner_paths - only used for base rels; list of InnerIndexscanInfo
352  *                                      nodes showing best indexpaths for various subsets of
353  *                                      index_outer_relids.
354  *
355  * Note: Keeping a restrictinfo list in the RelOptInfo is useful only for
356  * base rels, because for a join rel the set of clauses that are treated as
357  * restrict clauses varies depending on which sub-relations we choose to join.
358  * (For example, in a 3-base-rel join, a clause relating rels 1 and 2 must be
359  * treated as a restrictclause if we join {1} and {2 3} to make {1 2 3}; but
360  * if we join {1 2} and {3} then that clause will be a restrictclause in {1 2}
361  * and should not be processed again at the level of {1 2 3}.)  Therefore,
362  * the restrictinfo list in the join case appears in individual JoinPaths
363  * (field joinrestrictinfo), not in the parent relation.  But it's OK for
364  * the RelOptInfo to store the joininfo list, because that is the same
365  * for a given rel no matter how we form it.
366  *
367  * We store baserestrictcost in the RelOptInfo (for base relations) because
368  * we know we will need it at least once (to price the sequential scan)
369  * and may need it multiple times to price index scans.
370  *----------
371  */
372 typedef enum RelOptKind
373 {
374         RELOPT_BASEREL,
375         RELOPT_JOINREL,
376         RELOPT_OTHER_MEMBER_REL,
377         RELOPT_DEADREL
378 } RelOptKind;
379
380 typedef struct RelOptInfo
381 {
382         NodeTag         type;
383
384         RelOptKind      reloptkind;
385
386         /* all relations included in this RelOptInfo */
387         Relids          relids;                 /* set of base relids (rangetable indexes) */
388
389         /* size estimates generated by planner */
390         double          rows;                   /* estimated number of result tuples */
391         int                     width;                  /* estimated avg width of result tuples */
392
393         /* materialization information */
394         List       *reltargetlist;      /* Vars to be output by scan of relation */
395         List       *pathlist;           /* Path structures */
396         struct Path *cheapest_startup_path;
397         struct Path *cheapest_total_path;
398         struct Path *cheapest_unique_path;
399
400         /* information about a base rel (not set for join rels!) */
401         Index           relid;
402         Oid                     reltablespace;  /* containing tablespace */
403         RTEKind         rtekind;                /* RELATION, SUBQUERY, or FUNCTION */
404         AttrNumber      min_attr;               /* smallest attrno of rel (often <0) */
405         AttrNumber      max_attr;               /* largest attrno of rel */
406         Relids     *attr_needed;        /* array indexed [min_attr .. max_attr] */
407         int32      *attr_widths;        /* array indexed [min_attr .. max_attr] */
408         List       *indexlist;          /* list of IndexOptInfo */
409         BlockNumber pages;
410         double          tuples;
411         struct Plan *subplan;           /* if subquery */
412         List       *subrtable;          /* if subquery */
413         List       *subrowmark;         /* if subquery */
414
415         /* used by various scans and joins: */
416         List       *baserestrictinfo;           /* RestrictInfo structures (if base
417                                                                                  * rel) */
418         QualCost        baserestrictcost;               /* cost of evaluating the above */
419         List       *joininfo;           /* RestrictInfo structures for join clauses
420                                                                  * involving this rel */
421         bool            has_eclass_joins;               /* T means joininfo is incomplete */
422
423         /* cached info about inner indexscan paths for relation: */
424         Relids          index_outer_relids;             /* other relids in indexable join
425                                                                                  * clauses */
426         List       *index_inner_paths;          /* InnerIndexscanInfo nodes */
427
428         /*
429          * Inner indexscans are not in the main pathlist because they are not
430          * usable except in specific join contexts.  We use the index_inner_paths
431          * list just to avoid recomputing the best inner indexscan repeatedly for
432          * similar outer relations.  See comments for InnerIndexscanInfo.
433          */
434 } RelOptInfo;
435
436 /*
437  * IndexOptInfo
438  *              Per-index information for planning/optimization
439  *
440  *              indexkeys[], indexcollations[], opfamily[], and opcintype[]
441  *              each have ncolumns entries.
442  *
443  *              sortopfamily[], reverse_sort[], and nulls_first[] likewise have
444  *              ncolumns entries, if the index is ordered; but if it is unordered,
445  *              those pointers are NULL.
446  *
447  *              Zeroes in the indexkeys[] array indicate index columns that are
448  *              expressions; there is one element in indexprs for each such column.
449  *
450  *              For an ordered index, reverse_sort[] and nulls_first[] describe the
451  *              sort ordering of a forward indexscan; we can also consider a backward
452  *              indexscan, which will generate the reverse ordering.
453  *
454  *              The indexprs and indpred expressions have been run through
455  *              prepqual.c and eval_const_expressions() for ease of matching to
456  *              WHERE clauses. indpred is in implicit-AND form.
457  */
458 typedef struct IndexOptInfo
459 {
460         NodeTag         type;
461
462         Oid                     indexoid;               /* OID of the index relation */
463         Oid                     reltablespace;  /* tablespace of index (not table) */
464         RelOptInfo *rel;                        /* back-link to index's table */
465
466         /* statistics from pg_class */
467         BlockNumber pages;                      /* number of disk pages in index */
468         double          tuples;                 /* number of index tuples in index */
469
470         /* index descriptor information */
471         int                     ncolumns;               /* number of columns in index */
472         int                *indexkeys;          /* column numbers of index's keys, or 0 */
473         Oid                *indexcollations;    /* OIDs of collations of index columns */
474         Oid                *opfamily;           /* OIDs of operator families for columns */
475         Oid                *opcintype;          /* OIDs of opclass declared input data types */
476         Oid                *sortopfamily;       /* OIDs of btree opfamilies, if orderable */
477         bool       *reverse_sort;       /* is sort order descending? */
478         bool       *nulls_first;        /* do NULLs come first in the sort order? */
479         Oid                     relam;                  /* OID of the access method (in pg_am) */
480
481         RegProcedure amcostestimate;    /* OID of the access method's cost fcn */
482
483         List       *indexprs;           /* expressions for non-simple index columns */
484         List       *indpred;            /* predicate if a partial index, else NIL */
485
486         bool            predOK;                 /* true if predicate matches query */
487         bool            unique;                 /* true if a unique index */
488         bool            hypothetical;   /* true if index doesn't really exist */
489         bool            amcanorderbyop; /* does AM support order by operator result? */
490         bool            amoptionalkey;  /* can query omit key for the first column? */
491         bool            amsearchnulls;  /* can AM search for NULL/NOT NULL entries? */
492         bool            amhasgettuple;  /* does AM have amgettuple interface? */
493         bool            amhasgetbitmap; /* does AM have amgetbitmap interface? */
494 } IndexOptInfo;
495
496
497 /*
498  * EquivalenceClasses
499  *
500  * Whenever we can determine that a mergejoinable equality clause A = B is
501  * not delayed by any outer join, we create an EquivalenceClass containing
502  * the expressions A and B to record this knowledge.  If we later find another
503  * equivalence B = C, we add C to the existing EquivalenceClass; this may
504  * require merging two existing EquivalenceClasses.  At the end of the qual
505  * distribution process, we have sets of values that are known all transitively
506  * equal to each other, where "equal" is according to the rules of the btree
507  * operator family(s) shown in ec_opfamilies, as well as the collation shown
508  * by ec_collation.  (We restrict an EC to contain only equalities whose
509  * operators belong to the same set of opfamilies.      This could probably be
510  * relaxed, but for now it's not worth the trouble, since nearly all equality
511  * operators belong to only one btree opclass anyway.  Similarly, we suppose
512  * that all or none of the input datatypes are collatable, so that a single
513  * collation value is sufficient.)
514  *
515  * We also use EquivalenceClasses as the base structure for PathKeys, letting
516  * us represent knowledge about different sort orderings being equivalent.
517  * Since every PathKey must reference an EquivalenceClass, we will end up
518  * with single-member EquivalenceClasses whenever a sort key expression has
519  * not been equivalenced to anything else.      It is also possible that such an
520  * EquivalenceClass will contain a volatile expression ("ORDER BY random()"),
521  * which is a case that can't arise otherwise since clauses containing
522  * volatile functions are never considered mergejoinable.  We mark such
523  * EquivalenceClasses specially to prevent them from being merged with
524  * ordinary EquivalenceClasses.  Also, for volatile expressions we have
525  * to be careful to match the EquivalenceClass to the correct targetlist
526  * entry: consider SELECT random() AS a, random() AS b ... ORDER BY b,a.
527  * So we record the SortGroupRef of the originating sort clause.
528  *
529  * We allow equality clauses appearing below the nullable side of an outer join
530  * to form EquivalenceClasses, but these have a slightly different meaning:
531  * the included values might be all NULL rather than all the same non-null
532  * values.      See src/backend/optimizer/README for more on that point.
533  *
534  * NB: if ec_merged isn't NULL, this class has been merged into another, and
535  * should be ignored in favor of using the pointed-to class.
536  */
537 typedef struct EquivalenceClass
538 {
539         NodeTag         type;
540
541         List       *ec_opfamilies;      /* btree operator family OIDs */
542         Oid                     ec_collation;   /* collation, if datatypes are collatable */
543         List       *ec_members;         /* list of EquivalenceMembers */
544         List       *ec_sources;         /* list of generating RestrictInfos */
545         List       *ec_derives;         /* list of derived RestrictInfos */
546         Relids          ec_relids;              /* all relids appearing in ec_members */
547         bool            ec_has_const;   /* any pseudoconstants in ec_members? */
548         bool            ec_has_volatile;        /* the (sole) member is a volatile expr */
549         bool            ec_below_outer_join;    /* equivalence applies below an OJ */
550         bool            ec_broken;              /* failed to generate needed clauses? */
551         Index           ec_sortref;             /* originating sortclause label, or 0 */
552         struct EquivalenceClass *ec_merged; /* set if merged into another EC */
553 } EquivalenceClass;
554
555 /*
556  * If an EC contains a const and isn't below-outer-join, any PathKey depending
557  * on it must be redundant, since there's only one possible value of the key.
558  */
559 #define EC_MUST_BE_REDUNDANT(eclass)  \
560         ((eclass)->ec_has_const && !(eclass)->ec_below_outer_join)
561
562 /*
563  * EquivalenceMember - one member expression of an EquivalenceClass
564  *
565  * em_is_child signifies that this element was built by transposing a member
566  * for an inheritance parent relation to represent the corresponding expression
567  * on an inheritance child.  These elements are used for constructing
568  * inner-indexscan paths for the child relation (other types of join are
569  * driven from transposed joininfo-list entries) and for constructing
570  * MergeAppend paths for the whole inheritance tree.  Note that the EC's
571  * ec_relids field does NOT include the child relation.
572  *
573  * em_datatype is usually the same as exprType(em_expr), but can be
574  * different when dealing with a binary-compatible opfamily; in particular
575  * anyarray_ops would never work without this.  Use em_datatype when
576  * looking up a specific btree operator to work with this expression.
577  */
578 typedef struct EquivalenceMember
579 {
580         NodeTag         type;
581
582         Expr       *em_expr;            /* the expression represented */
583         Relids          em_relids;              /* all relids appearing in em_expr */
584         bool            em_is_const;    /* expression is pseudoconstant? */
585         bool            em_is_child;    /* derived version for a child relation? */
586         Oid                     em_datatype;    /* the "nominal type" used by the opfamily */
587 } EquivalenceMember;
588
589 /*
590  * PathKeys
591  *
592  * The sort ordering of a path is represented by a list of PathKey nodes.
593  * An empty list implies no known ordering.  Otherwise the first item
594  * represents the primary sort key, the second the first secondary sort key,
595  * etc.  The value being sorted is represented by linking to an
596  * EquivalenceClass containing that value and including pk_opfamily among its
597  * ec_opfamilies.  The EquivalenceClass tells which collation to use, too.
598  * This is a convenient method because it makes it trivial to detect
599  * equivalent and closely-related orderings. (See optimizer/README for more
600  * information.)
601  *
602  * Note: pk_strategy is either BTLessStrategyNumber (for ASC) or
603  * BTGreaterStrategyNumber (for DESC).  We assume that all ordering-capable
604  * index types will use btree-compatible strategy numbers.
605  */
606
607 typedef struct PathKey
608 {
609         NodeTag         type;
610
611         EquivalenceClass *pk_eclass;    /* the value that is ordered */
612         Oid                     pk_opfamily;    /* btree opfamily defining the ordering */
613         int                     pk_strategy;    /* sort direction (ASC or DESC) */
614         bool            pk_nulls_first; /* do NULLs come before normal values? */
615 } PathKey;
616
617 /*
618  * Type "Path" is used as-is for sequential-scan paths, as well as some other
619  * simple plan types that we don't need any extra information in the path for.
620  * For other path types it is the first component of a larger struct.
621  *
622  * Note: "pathtype" is the NodeTag of the Plan node we could build from this
623  * Path.  It is partially redundant with the Path's NodeTag, but allows us
624  * to use the same Path type for multiple Plan types where there is no need
625  * to distinguish the Plan type during path processing.
626  */
627
628 typedef struct Path
629 {
630         NodeTag         type;
631
632         NodeTag         pathtype;               /* tag identifying scan/join method */
633
634         RelOptInfo *parent;                     /* the relation this path can build */
635
636         /* estimated execution costs for path (see costsize.c for more info) */
637         Cost            startup_cost;   /* cost expended before fetching any tuples */
638         Cost            total_cost;             /* total cost (assuming all tuples fetched) */
639
640         List       *pathkeys;           /* sort ordering of path's output */
641         /* pathkeys is a List of PathKey nodes; see above */
642 } Path;
643
644 /*----------
645  * IndexPath represents an index scan over a single index.
646  *
647  * 'indexinfo' is the index to be scanned.
648  *
649  * 'indexclauses' is a list of index qualification clauses, with implicit
650  * AND semantics across the list.  Each clause is a RestrictInfo node from
651  * the query's WHERE or JOIN conditions.
652  *
653  * 'indexquals' has the same structure as 'indexclauses', but it contains
654  * the actual indexqual conditions that can be used with the index.
655  * In simple cases this is identical to 'indexclauses', but when special
656  * indexable operators appear in 'indexclauses', they are replaced by the
657  * derived indexscannable conditions in 'indexquals'.
658  *
659  * 'indexorderbys', if not NIL, is a list of ORDER BY expressions that have
660  * been found to be usable as ordering operators for an amcanorderbyop index.
661  * Note that these are not RestrictInfos, just bare expressions, since they
662  * generally won't yield booleans.  The list will match the path's pathkeys.
663  * Also, unlike the case for quals, it's guaranteed that each expression has
664  * the index key on the left side of the operator.
665  *
666  * 'isjoininner' is TRUE if the path is a nestloop inner scan (that is,
667  * some of the index conditions are join rather than restriction clauses).
668  * Note that the path costs will be calculated differently from a plain
669  * indexscan in this case, and in addition there's a special 'rows' value
670  * different from the parent RelOptInfo's (see below).
671  *
672  * 'indexscandir' is one of:
673  *              ForwardScanDirection: forward scan of an ordered index
674  *              BackwardScanDirection: backward scan of an ordered index
675  *              NoMovementScanDirection: scan of an unordered index, or don't care
676  * (The executor doesn't care whether it gets ForwardScanDirection or
677  * NoMovementScanDirection for an indexscan, but the planner wants to
678  * distinguish ordered from unordered indexes for building pathkeys.)
679  *
680  * 'indextotalcost' and 'indexselectivity' are saved in the IndexPath so that
681  * we need not recompute them when considering using the same index in a
682  * bitmap index/heap scan (see BitmapHeapPath).  The costs of the IndexPath
683  * itself represent the costs of an IndexScan plan type.
684  *
685  * 'rows' is the estimated result tuple count for the indexscan.  This
686  * is the same as path.parent->rows for a simple indexscan, but it is
687  * different for a nestloop inner scan, because the additional indexquals
688  * coming from join clauses make the scan more selective than the parent
689  * rel's restrict clauses alone would do.
690  *----------
691  */
692 typedef struct IndexPath
693 {
694         Path            path;
695         IndexOptInfo *indexinfo;
696         List       *indexclauses;
697         List       *indexquals;
698         List       *indexorderbys;
699         bool            isjoininner;
700         ScanDirection indexscandir;
701         Cost            indextotalcost;
702         Selectivity indexselectivity;
703         double          rows;                   /* estimated number of result tuples */
704 } IndexPath;
705
706 /*
707  * BitmapHeapPath represents one or more indexscans that generate TID bitmaps
708  * instead of directly accessing the heap, followed by AND/OR combinations
709  * to produce a single bitmap, followed by a heap scan that uses the bitmap.
710  * Note that the output is always considered unordered, since it will come
711  * out in physical heap order no matter what the underlying indexes did.
712  *
713  * The individual indexscans are represented by IndexPath nodes, and any
714  * logic on top of them is represented by a tree of BitmapAndPath and
715  * BitmapOrPath nodes.  Notice that we can use the same IndexPath node both
716  * to represent a regular IndexScan plan, and as the child of a BitmapHeapPath
717  * that represents scanning the same index using a BitmapIndexScan.  The
718  * startup_cost and total_cost figures of an IndexPath always represent the
719  * costs to use it as a regular IndexScan.      The costs of a BitmapIndexScan
720  * can be computed using the IndexPath's indextotalcost and indexselectivity.
721  *
722  * BitmapHeapPaths can be nestloop inner indexscans.  The isjoininner and
723  * rows fields serve the same purpose as for plain IndexPaths.
724  */
725 typedef struct BitmapHeapPath
726 {
727         Path            path;
728         Path       *bitmapqual;         /* IndexPath, BitmapAndPath, BitmapOrPath */
729         bool            isjoininner;    /* T if it's a nestloop inner scan */
730         double          rows;                   /* estimated number of result tuples */
731 } BitmapHeapPath;
732
733 /*
734  * BitmapAndPath represents a BitmapAnd plan node; it can only appear as
735  * part of the substructure of a BitmapHeapPath.  The Path structure is
736  * a bit more heavyweight than we really need for this, but for simplicity
737  * we make it a derivative of Path anyway.
738  */
739 typedef struct BitmapAndPath
740 {
741         Path            path;
742         List       *bitmapquals;        /* IndexPaths and BitmapOrPaths */
743         Selectivity bitmapselectivity;
744 } BitmapAndPath;
745
746 /*
747  * BitmapOrPath represents a BitmapOr plan node; it can only appear as
748  * part of the substructure of a BitmapHeapPath.  The Path structure is
749  * a bit more heavyweight than we really need for this, but for simplicity
750  * we make it a derivative of Path anyway.
751  */
752 typedef struct BitmapOrPath
753 {
754         Path            path;
755         List       *bitmapquals;        /* IndexPaths and BitmapAndPaths */
756         Selectivity bitmapselectivity;
757 } BitmapOrPath;
758
759 /*
760  * TidPath represents a scan by TID
761  *
762  * tidquals is an implicitly OR'ed list of qual expressions of the form
763  * "CTID = pseudoconstant" or "CTID = ANY(pseudoconstant_array)".
764  * Note they are bare expressions, not RestrictInfos.
765  */
766 typedef struct TidPath
767 {
768         Path            path;
769         List       *tidquals;           /* qual(s) involving CTID = something */
770 } TidPath;
771
772 /*
773  * ForeignPath represents a scan of a foreign table
774  */
775 typedef struct ForeignPath
776 {
777         Path            path;
778         /* use struct pointer to avoid including fdwapi.h here */
779         struct FdwPlan *fdwplan;
780 } ForeignPath;
781
782 /*
783  * AppendPath represents an Append plan, ie, successive execution of
784  * several member plans.
785  *
786  * Note: it is possible for "subpaths" to contain only one, or even no,
787  * elements.  These cases are optimized during create_append_plan.
788  * In particular, an AppendPath with no subpaths is a "dummy" path that
789  * is created to represent the case that a relation is provably empty.
790  */
791 typedef struct AppendPath
792 {
793         Path            path;
794         List       *subpaths;           /* list of component Paths */
795 } AppendPath;
796
797 #define IS_DUMMY_PATH(p) \
798         (IsA((p), AppendPath) && ((AppendPath *) (p))->subpaths == NIL)
799
800 /*
801  * MergeAppendPath represents a MergeAppend plan, ie, the merging of sorted
802  * results from several member plans to produce similarly-sorted output.
803  */
804 typedef struct MergeAppendPath
805 {
806         Path            path;
807         List       *subpaths;           /* list of component Paths */
808         double          limit_tuples;   /* hard limit on output tuples, or -1 */
809 } MergeAppendPath;
810
811 /*
812  * ResultPath represents use of a Result plan node to compute a variable-free
813  * targetlist with no underlying tables (a "SELECT expressions" query).
814  * The query could have a WHERE clause, too, represented by "quals".
815  *
816  * Note that quals is a list of bare clauses, not RestrictInfos.
817  */
818 typedef struct ResultPath
819 {
820         Path            path;
821         List       *quals;
822 } ResultPath;
823
824 /*
825  * MaterialPath represents use of a Material plan node, i.e., caching of
826  * the output of its subpath.  This is used when the subpath is expensive
827  * and needs to be scanned repeatedly, or when we need mark/restore ability
828  * and the subpath doesn't have it.
829  */
830 typedef struct MaterialPath
831 {
832         Path            path;
833         Path       *subpath;
834 } MaterialPath;
835
836 /*
837  * UniquePath represents elimination of distinct rows from the output of
838  * its subpath.
839  *
840  * This is unlike the other Path nodes in that it can actually generate
841  * different plans: either hash-based or sort-based implementation, or a
842  * no-op if the input path can be proven distinct already.      The decision
843  * is sufficiently localized that it's not worth having separate Path node
844  * types.  (Note: in the no-op case, we could eliminate the UniquePath node
845  * entirely and just return the subpath; but it's convenient to have a
846  * UniquePath in the path tree to signal upper-level routines that the input
847  * is known distinct.)
848  */
849 typedef enum
850 {
851         UNIQUE_PATH_NOOP,                       /* input is known unique already */
852         UNIQUE_PATH_HASH,                       /* use hashing */
853         UNIQUE_PATH_SORT                        /* use sorting */
854 } UniquePathMethod;
855
856 typedef struct UniquePath
857 {
858         Path            path;
859         Path       *subpath;
860         UniquePathMethod umethod;
861         List       *in_operators;       /* equality operators of the IN clause */
862         List       *uniq_exprs;         /* expressions to be made unique */
863         double          rows;                   /* estimated number of result tuples */
864 } UniquePath;
865
866 /*
867  * All join-type paths share these fields.
868  */
869
870 typedef struct JoinPath
871 {
872         Path            path;
873
874         JoinType        jointype;
875
876         Path       *outerjoinpath;      /* path for the outer side of the join */
877         Path       *innerjoinpath;      /* path for the inner side of the join */
878
879         List       *joinrestrictinfo;           /* RestrictInfos to apply to join */
880
881         /*
882          * See the notes for RelOptInfo to understand why joinrestrictinfo is
883          * needed in JoinPath, and can't be merged into the parent RelOptInfo.
884          */
885 } JoinPath;
886
887 /*
888  * A nested-loop path needs no special fields.
889  */
890
891 typedef JoinPath NestPath;
892
893 /*
894  * A mergejoin path has these fields.
895  *
896  * Unlike other path types, a MergePath node doesn't represent just a single
897  * run-time plan node: it can represent up to four.  Aside from the MergeJoin
898  * node itself, there can be a Sort node for the outer input, a Sort node
899  * for the inner input, and/or a Material node for the inner input.  We could
900  * represent these nodes by separate path nodes, but considering how many
901  * different merge paths are investigated during a complex join problem,
902  * it seems better to avoid unnecessary palloc overhead.
903  *
904  * path_mergeclauses lists the clauses (in the form of RestrictInfos)
905  * that will be used in the merge.
906  *
907  * Note that the mergeclauses are a subset of the parent relation's
908  * restriction-clause list.  Any join clauses that are not mergejoinable
909  * appear only in the parent's restrict list, and must be checked by a
910  * qpqual at execution time.
911  *
912  * outersortkeys (resp. innersortkeys) is NIL if the outer path
913  * (resp. inner path) is already ordered appropriately for the
914  * mergejoin.  If it is not NIL then it is a PathKeys list describing
915  * the ordering that must be created by an explicit Sort node.
916  *
917  * materialize_inner is TRUE if a Material node should be placed atop the
918  * inner input.  This may appear with or without an inner Sort step.
919  */
920
921 typedef struct MergePath
922 {
923         JoinPath        jpath;
924         List       *path_mergeclauses;          /* join clauses to be used for merge */
925         List       *outersortkeys;      /* keys for explicit sort, if any */
926         List       *innersortkeys;      /* keys for explicit sort, if any */
927         bool            materialize_inner;              /* add Materialize to inner? */
928 } MergePath;
929
930 /*
931  * A hashjoin path has these fields.
932  *
933  * The remarks above for mergeclauses apply for hashclauses as well.
934  *
935  * Hashjoin does not care what order its inputs appear in, so we have
936  * no need for sortkeys.
937  */
938
939 typedef struct HashPath
940 {
941         JoinPath        jpath;
942         List       *path_hashclauses;           /* join clauses used for hashing */
943         int                     num_batches;    /* number of batches expected */
944 } HashPath;
945
946 /*
947  * Restriction clause info.
948  *
949  * We create one of these for each AND sub-clause of a restriction condition
950  * (WHERE or JOIN/ON clause).  Since the restriction clauses are logically
951  * ANDed, we can use any one of them or any subset of them to filter out
952  * tuples, without having to evaluate the rest.  The RestrictInfo node itself
953  * stores data used by the optimizer while choosing the best query plan.
954  *
955  * If a restriction clause references a single base relation, it will appear
956  * in the baserestrictinfo list of the RelOptInfo for that base rel.
957  *
958  * If a restriction clause references more than one base rel, it will
959  * appear in the joininfo list of every RelOptInfo that describes a strict
960  * subset of the base rels mentioned in the clause.  The joininfo lists are
961  * used to drive join tree building by selecting plausible join candidates.
962  * The clause cannot actually be applied until we have built a join rel
963  * containing all the base rels it references, however.
964  *
965  * When we construct a join rel that includes all the base rels referenced
966  * in a multi-relation restriction clause, we place that clause into the
967  * joinrestrictinfo lists of paths for the join rel, if neither left nor
968  * right sub-path includes all base rels referenced in the clause.      The clause
969  * will be applied at that join level, and will not propagate any further up
970  * the join tree.  (Note: the "predicate migration" code was once intended to
971  * push restriction clauses up and down the plan tree based on evaluation
972  * costs, but it's dead code and is unlikely to be resurrected in the
973  * foreseeable future.)
974  *
975  * Note that in the presence of more than two rels, a multi-rel restriction
976  * might reach different heights in the join tree depending on the join
977  * sequence we use.  So, these clauses cannot be associated directly with
978  * the join RelOptInfo, but must be kept track of on a per-join-path basis.
979  *
980  * RestrictInfos that represent equivalence conditions (i.e., mergejoinable
981  * equalities that are not outerjoin-delayed) are handled a bit differently.
982  * Initially we attach them to the EquivalenceClasses that are derived from
983  * them.  When we construct a scan or join path, we look through all the
984  * EquivalenceClasses and generate derived RestrictInfos representing the
985  * minimal set of conditions that need to be checked for this particular scan
986  * or join to enforce that all members of each EquivalenceClass are in fact
987  * equal in all rows emitted by the scan or join.
988  *
989  * When dealing with outer joins we have to be very careful about pushing qual
990  * clauses up and down the tree.  An outer join's own JOIN/ON conditions must
991  * be evaluated exactly at that join node, unless they are "degenerate"
992  * conditions that reference only Vars from the nullable side of the join.
993  * Quals appearing in WHERE or in a JOIN above the outer join cannot be pushed
994  * down below the outer join, if they reference any nullable Vars.
995  * RestrictInfo nodes contain a flag to indicate whether a qual has been
996  * pushed down to a lower level than its original syntactic placement in the
997  * join tree would suggest.  If an outer join prevents us from pushing a qual
998  * down to its "natural" semantic level (the level associated with just the
999  * base rels used in the qual) then we mark the qual with a "required_relids"
1000  * value including more than just the base rels it actually uses.  By
1001  * pretending that the qual references all the rels required to form the outer
1002  * join, we prevent it from being evaluated below the outer join's joinrel.
1003  * When we do form the outer join's joinrel, we still need to distinguish
1004  * those quals that are actually in that join's JOIN/ON condition from those
1005  * that appeared elsewhere in the tree and were pushed down to the join rel
1006  * because they used no other rels.  That's what the is_pushed_down flag is
1007  * for; it tells us that a qual is not an OUTER JOIN qual for the set of base
1008  * rels listed in required_relids.      A clause that originally came from WHERE
1009  * or an INNER JOIN condition will *always* have its is_pushed_down flag set.
1010  * It's possible for an OUTER JOIN clause to be marked is_pushed_down too,
1011  * if we decide that it can be pushed down into the nullable side of the join.
1012  * In that case it acts as a plain filter qual for wherever it gets evaluated.
1013  * (In short, is_pushed_down is only false for non-degenerate outer join
1014  * conditions.  Possibly we should rename it to reflect that meaning?)
1015  *
1016  * RestrictInfo nodes also contain an outerjoin_delayed flag, which is true
1017  * if the clause's applicability must be delayed due to any outer joins
1018  * appearing below it (ie, it has to be postponed to some join level higher
1019  * than the set of relations it actually references).  There is also a
1020  * nullable_relids field, which is the set of rels it references that can be
1021  * forced null by some outer join below the clause.  outerjoin_delayed = true
1022  * is subtly different from nullable_relids != NULL: a clause might reference
1023  * some nullable rels and yet not be outerjoin_delayed because it also
1024  * references all the other rels of the outer join(s).  A clause that is not
1025  * outerjoin_delayed can be enforced anywhere it is computable.
1026  *
1027  * In general, the referenced clause might be arbitrarily complex.      The
1028  * kinds of clauses we can handle as indexscan quals, mergejoin clauses,
1029  * or hashjoin clauses are limited (e.g., no volatile functions).  The code
1030  * for each kind of path is responsible for identifying the restrict clauses
1031  * it can use and ignoring the rest.  Clauses not implemented by an indexscan,
1032  * mergejoin, or hashjoin will be placed in the plan qual or joinqual field
1033  * of the finished Plan node, where they will be enforced by general-purpose
1034  * qual-expression-evaluation code.  (But we are still entitled to count
1035  * their selectivity when estimating the result tuple count, if we
1036  * can guess what it is...)
1037  *
1038  * When the referenced clause is an OR clause, we generate a modified copy
1039  * in which additional RestrictInfo nodes are inserted below the top-level
1040  * OR/AND structure.  This is a convenience for OR indexscan processing:
1041  * indexquals taken from either the top level or an OR subclause will have
1042  * associated RestrictInfo nodes.
1043  *
1044  * The can_join flag is set true if the clause looks potentially useful as
1045  * a merge or hash join clause, that is if it is a binary opclause with
1046  * nonoverlapping sets of relids referenced in the left and right sides.
1047  * (Whether the operator is actually merge or hash joinable isn't checked,
1048  * however.)
1049  *
1050  * The pseudoconstant flag is set true if the clause contains no Vars of
1051  * the current query level and no volatile functions.  Such a clause can be
1052  * pulled out and used as a one-time qual in a gating Result node.      We keep
1053  * pseudoconstant clauses in the same lists as other RestrictInfos so that
1054  * the regular clause-pushing machinery can assign them to the correct join
1055  * level, but they need to be treated specially for cost and selectivity
1056  * estimates.  Note that a pseudoconstant clause can never be an indexqual
1057  * or merge or hash join clause, so it's of no interest to large parts of
1058  * the planner.
1059  *
1060  * When join clauses are generated from EquivalenceClasses, there may be
1061  * several equally valid ways to enforce join equivalence, of which we need
1062  * apply only one.      We mark clauses of this kind by setting parent_ec to
1063  * point to the generating EquivalenceClass.  Multiple clauses with the same
1064  * parent_ec in the same join are redundant.
1065  */
1066
1067 typedef struct RestrictInfo
1068 {
1069         NodeTag         type;
1070
1071         Expr       *clause;                     /* the represented clause of WHERE or JOIN */
1072
1073         bool            is_pushed_down; /* TRUE if clause was pushed down in level */
1074
1075         bool            outerjoin_delayed;              /* TRUE if delayed by lower outer join */
1076
1077         bool            can_join;               /* see comment above */
1078
1079         bool            pseudoconstant; /* see comment above */
1080
1081         /* The set of relids (varnos) actually referenced in the clause: */
1082         Relids          clause_relids;
1083
1084         /* The set of relids required to evaluate the clause: */
1085         Relids          required_relids;
1086
1087         /* The relids used in the clause that are nullable by lower outer joins: */
1088         Relids          nullable_relids;
1089
1090         /* These fields are set for any binary opclause: */
1091         Relids          left_relids;    /* relids in left side of clause */
1092         Relids          right_relids;   /* relids in right side of clause */
1093
1094         /* This field is NULL unless clause is an OR clause: */
1095         Expr       *orclause;           /* modified clause with RestrictInfos */
1096
1097         /* This field is NULL unless clause is potentially redundant: */
1098         EquivalenceClass *parent_ec;    /* generating EquivalenceClass */
1099
1100         /* cache space for cost and selectivity */
1101         QualCost        eval_cost;              /* eval cost of clause; -1 if not yet set */
1102         Selectivity norm_selec;         /* selectivity for "normal" (JOIN_INNER)
1103                                                                  * semantics; -1 if not yet set; >1 means a
1104                                                                  * redundant clause */
1105         Selectivity outer_selec;        /* selectivity for outer join semantics; -1 if
1106                                                                  * not yet set */
1107
1108         /* valid if clause is mergejoinable, else NIL */
1109         List       *mergeopfamilies;    /* opfamilies containing clause operator */
1110
1111         /* cache space for mergeclause processing; NULL if not yet set */
1112         EquivalenceClass *left_ec;      /* EquivalenceClass containing lefthand */
1113         EquivalenceClass *right_ec; /* EquivalenceClass containing righthand */
1114         EquivalenceMember *left_em; /* EquivalenceMember for lefthand */
1115         EquivalenceMember *right_em;    /* EquivalenceMember for righthand */
1116         List       *scansel_cache;      /* list of MergeScanSelCache structs */
1117
1118         /* transient workspace for use while considering a specific join path */
1119         bool            outer_is_left;  /* T = outer var on left, F = on right */
1120
1121         /* valid if clause is hashjoinable, else InvalidOid: */
1122         Oid                     hashjoinoperator;               /* copy of clause operator */
1123
1124         /* cache space for hashclause processing; -1 if not yet set */
1125         Selectivity left_bucketsize;    /* avg bucketsize of left side */
1126         Selectivity right_bucketsize;           /* avg bucketsize of right side */
1127 } RestrictInfo;
1128
1129 /*
1130  * Since mergejoinscansel() is a relatively expensive function, and would
1131  * otherwise be invoked many times while planning a large join tree,
1132  * we go out of our way to cache its results.  Each mergejoinable
1133  * RestrictInfo carries a list of the specific sort orderings that have
1134  * been considered for use with it, and the resulting selectivities.
1135  */
1136 typedef struct MergeScanSelCache
1137 {
1138         /* Ordering details (cache lookup key) */
1139         Oid                     opfamily;               /* btree opfamily defining the ordering */
1140         Oid                     collation;              /* collation for the ordering */
1141         int                     strategy;               /* sort direction (ASC or DESC) */
1142         bool            nulls_first;    /* do NULLs come before normal values? */
1143         /* Results */
1144         Selectivity leftstartsel;       /* first-join fraction for clause left side */
1145         Selectivity leftendsel;         /* last-join fraction for clause left side */
1146         Selectivity rightstartsel;      /* first-join fraction for clause right side */
1147         Selectivity rightendsel;        /* last-join fraction for clause right side */
1148 } MergeScanSelCache;
1149
1150 /*
1151  * Inner indexscan info.
1152  *
1153  * An inner indexscan is one that uses one or more joinclauses as index
1154  * conditions (perhaps in addition to plain restriction clauses).  So it
1155  * can only be used as the inner path of a nestloop join where the outer
1156  * relation includes all other relids appearing in those joinclauses.
1157  * The set of usable joinclauses, and thus the best inner indexscan,
1158  * thus varies depending on which outer relation we consider; so we have
1159  * to recompute the best such paths for every join.  To avoid lots of
1160  * redundant computation, we cache the results of such searches.  For
1161  * each relation we compute the set of possible otherrelids (all relids
1162  * appearing in joinquals that could become indexquals for this table).
1163  * Two outer relations whose relids have the same intersection with this
1164  * set will have the same set of available joinclauses and thus the same
1165  * best inner indexscans for the inner relation.  By taking the intersection
1166  * before scanning the cache, we avoid recomputing when considering
1167  * join rels that differ only by the inclusion of irrelevant other rels.
1168  *
1169  * The search key also includes a bool showing whether the join being
1170  * considered is an outer join.  Since we constrain the join order for
1171  * outer joins, I believe that this bool can only have one possible value
1172  * for any particular lookup key; but store it anyway to avoid confusion.
1173  */
1174
1175 typedef struct InnerIndexscanInfo
1176 {
1177         NodeTag         type;
1178         /* The lookup key: */
1179         Relids          other_relids;   /* a set of relevant other relids */
1180         bool            isouterjoin;    /* true if join is outer */
1181         /* Best paths for this lookup key (NULL if no available indexscans): */
1182         Path       *cheapest_startup_innerpath;         /* cheapest startup cost */
1183         Path       *cheapest_total_innerpath;           /* cheapest total cost */
1184 } InnerIndexscanInfo;
1185
1186 /*
1187  * Placeholder node for an expression to be evaluated below the top level
1188  * of a plan tree.      This is used during planning to represent the contained
1189  * expression.  At the end of the planning process it is replaced by either
1190  * the contained expression or a Var referring to a lower-level evaluation of
1191  * the contained expression.  Typically the evaluation occurs below an outer
1192  * join, and Var references above the outer join might thereby yield NULL
1193  * instead of the expression value.
1194  *
1195  * Although the planner treats this as an expression node type, it is not
1196  * recognized by the parser or executor, so we declare it here rather than
1197  * in primnodes.h.
1198  */
1199
1200 typedef struct PlaceHolderVar
1201 {
1202         Expr            xpr;
1203         Expr       *phexpr;                     /* the represented expression */
1204         Relids          phrels;                 /* base relids syntactically within expr src */
1205         Index           phid;                   /* ID for PHV (unique within planner run) */
1206         Index           phlevelsup;             /* > 0 if PHV belongs to outer query */
1207 } PlaceHolderVar;
1208
1209 /*
1210  * "Special join" info.
1211  *
1212  * One-sided outer joins constrain the order of joining partially but not
1213  * completely.  We flatten such joins into the planner's top-level list of
1214  * relations to join, but record information about each outer join in a
1215  * SpecialJoinInfo struct.      These structs are kept in the PlannerInfo node's
1216  * join_info_list.
1217  *
1218  * Similarly, semijoins and antijoins created by flattening IN (subselect)
1219  * and EXISTS(subselect) clauses create partial constraints on join order.
1220  * These are likewise recorded in SpecialJoinInfo structs.
1221  *
1222  * We make SpecialJoinInfos for FULL JOINs even though there is no flexibility
1223  * of planning for them, because this simplifies make_join_rel()'s API.
1224  *
1225  * min_lefthand and min_righthand are the sets of base relids that must be
1226  * available on each side when performing the special join.  lhs_strict is
1227  * true if the special join's condition cannot succeed when the LHS variables
1228  * are all NULL (this means that an outer join can commute with upper-level
1229  * outer joins even if it appears in their RHS).  We don't bother to set
1230  * lhs_strict for FULL JOINs, however.
1231  *
1232  * It is not valid for either min_lefthand or min_righthand to be empty sets;
1233  * if they were, this would break the logic that enforces join order.
1234  *
1235  * syn_lefthand and syn_righthand are the sets of base relids that are
1236  * syntactically below this special join.  (These are needed to help compute
1237  * min_lefthand and min_righthand for higher joins.)
1238  *
1239  * delay_upper_joins is set TRUE if we detect a pushed-down clause that has
1240  * to be evaluated after this join is formed (because it references the RHS).
1241  * Any outer joins that have such a clause and this join in their RHS cannot
1242  * commute with this join, because that would leave noplace to check the
1243  * pushed-down clause.  (We don't track this for FULL JOINs, either.)
1244  *
1245  * join_quals is an implicit-AND list of the quals syntactically associated
1246  * with the join (they may or may not end up being applied at the join level).
1247  * This is just a side list and does not drive actual application of quals.
1248  * For JOIN_SEMI joins, this is cleared to NIL in create_unique_path() if
1249  * the join is found not to be suitable for a uniqueify-the-RHS plan.
1250  *
1251  * jointype is never JOIN_RIGHT; a RIGHT JOIN is handled by switching
1252  * the inputs to make it a LEFT JOIN.  So the allowed values of jointype
1253  * in a join_info_list member are only LEFT, FULL, SEMI, or ANTI.
1254  *
1255  * For purposes of join selectivity estimation, we create transient
1256  * SpecialJoinInfo structures for regular inner joins; so it is possible
1257  * to have jointype == JOIN_INNER in such a structure, even though this is
1258  * not allowed within join_info_list.  We also create transient
1259  * SpecialJoinInfos with jointype == JOIN_INNER for outer joins, since for
1260  * cost estimation purposes it is sometimes useful to know the join size under
1261  * plain innerjoin semantics.  Note that lhs_strict, delay_upper_joins, and
1262  * join_quals are not set meaningfully within such structs.
1263  */
1264
1265 typedef struct SpecialJoinInfo
1266 {
1267         NodeTag         type;
1268         Relids          min_lefthand;   /* base relids in minimum LHS for join */
1269         Relids          min_righthand;  /* base relids in minimum RHS for join */
1270         Relids          syn_lefthand;   /* base relids syntactically within LHS */
1271         Relids          syn_righthand;  /* base relids syntactically within RHS */
1272         JoinType        jointype;               /* always INNER, LEFT, FULL, SEMI, or ANTI */
1273         bool            lhs_strict;             /* joinclause is strict for some LHS rel */
1274         bool            delay_upper_joins;              /* can't commute with upper RHS */
1275         List       *join_quals;         /* join quals, in implicit-AND list format */
1276 } SpecialJoinInfo;
1277
1278 /*
1279  * Append-relation info.
1280  *
1281  * When we expand an inheritable table or a UNION-ALL subselect into an
1282  * "append relation" (essentially, a list of child RTEs), we build an
1283  * AppendRelInfo for each child RTE.  The list of AppendRelInfos indicates
1284  * which child RTEs must be included when expanding the parent, and each
1285  * node carries information needed to translate Vars referencing the parent
1286  * into Vars referencing that child.
1287  *
1288  * These structs are kept in the PlannerInfo node's append_rel_list.
1289  * Note that we just throw all the structs into one list, and scan the
1290  * whole list when desiring to expand any one parent.  We could have used
1291  * a more complex data structure (eg, one list per parent), but this would
1292  * be harder to update during operations such as pulling up subqueries,
1293  * and not really any easier to scan.  Considering that typical queries
1294  * will not have many different append parents, it doesn't seem worthwhile
1295  * to complicate things.
1296  *
1297  * Note: after completion of the planner prep phase, any given RTE is an
1298  * append parent having entries in append_rel_list if and only if its
1299  * "inh" flag is set.  We clear "inh" for plain tables that turn out not
1300  * to have inheritance children, and (in an abuse of the original meaning
1301  * of the flag) we set "inh" for subquery RTEs that turn out to be
1302  * flattenable UNION ALL queries.  This lets us avoid useless searches
1303  * of append_rel_list.
1304  *
1305  * Note: the data structure assumes that append-rel members are single
1306  * baserels.  This is OK for inheritance, but it prevents us from pulling
1307  * up a UNION ALL member subquery if it contains a join.  While that could
1308  * be fixed with a more complex data structure, at present there's not much
1309  * point because no improvement in the plan could result.
1310  */
1311
1312 typedef struct AppendRelInfo
1313 {
1314         NodeTag         type;
1315
1316         /*
1317          * These fields uniquely identify this append relationship.  There can be
1318          * (in fact, always should be) multiple AppendRelInfos for the same
1319          * parent_relid, but never more than one per child_relid, since a given
1320          * RTE cannot be a child of more than one append parent.
1321          */
1322         Index           parent_relid;   /* RT index of append parent rel */
1323         Index           child_relid;    /* RT index of append child rel */
1324
1325         /*
1326          * For an inheritance appendrel, the parent and child are both regular
1327          * relations, and we store their rowtype OIDs here for use in translating
1328          * whole-row Vars.      For a UNION-ALL appendrel, the parent and child are
1329          * both subqueries with no named rowtype, and we store InvalidOid here.
1330          */
1331         Oid                     parent_reltype; /* OID of parent's composite type */
1332         Oid                     child_reltype;  /* OID of child's composite type */
1333
1334         /*
1335          * The N'th element of this list is a Var or expression representing the
1336          * child column corresponding to the N'th column of the parent. This is
1337          * used to translate Vars referencing the parent rel into references to
1338          * the child.  A list element is NULL if it corresponds to a dropped
1339          * column of the parent (this is only possible for inheritance cases, not
1340          * UNION ALL).  The list elements are always simple Vars for inheritance
1341          * cases, but can be arbitrary expressions in UNION ALL cases.
1342          *
1343          * Notice we only store entries for user columns (attno > 0).  Whole-row
1344          * Vars are special-cased, and system columns (attno < 0) need no special
1345          * translation since their attnos are the same for all tables.
1346          *
1347          * Caution: the Vars have varlevelsup = 0.      Be careful to adjust as needed
1348          * when copying into a subquery.
1349          */
1350         List       *translated_vars;    /* Expressions in the child's Vars */
1351
1352         /*
1353          * We store the parent table's OID here for inheritance, or InvalidOid for
1354          * UNION ALL.  This is only needed to help in generating error messages if
1355          * an attempt is made to reference a dropped parent column.
1356          */
1357         Oid                     parent_reloid;  /* OID of parent relation */
1358 } AppendRelInfo;
1359
1360 /*
1361  * For each distinct placeholder expression generated during planning, we
1362  * store a PlaceHolderInfo node in the PlannerInfo node's placeholder_list.
1363  * This stores info that is needed centrally rather than in each copy of the
1364  * PlaceHolderVar.      The phid fields identify which PlaceHolderInfo goes with
1365  * each PlaceHolderVar.  Note that phid is unique throughout a planner run,
1366  * not just within a query level --- this is so that we need not reassign ID's
1367  * when pulling a subquery into its parent.
1368  *
1369  * The idea is to evaluate the expression at (only) the ph_eval_at join level,
1370  * then allow it to bubble up like a Var until the ph_needed join level.
1371  * ph_needed has the same definition as attr_needed for a regular Var.
1372  *
1373  * ph_may_need is an initial estimate of ph_needed, formed using the
1374  * syntactic locations of references to the PHV.  We need this in order to
1375  * determine whether the PHV reference forces a join ordering constraint:
1376  * if the PHV has to be evaluated below the nullable side of an outer join,
1377  * and then used above that outer join, we must constrain join order to ensure
1378  * there's a valid place to evaluate the PHV below the join.  The final
1379  * actual ph_needed level might be lower than ph_may_need, but we can't
1380  * determine that until later on.  Fortunately this doesn't matter for what
1381  * we need ph_may_need for: if there's a PHV reference syntactically
1382  * above the outer join, it's not going to be allowed to drop below the outer
1383  * join, so we would come to the same conclusions about join order even if
1384  * we had the final ph_needed value to compare to.
1385  *
1386  * We create a PlaceHolderInfo only after determining that the PlaceHolderVar
1387  * is actually referenced in the plan tree, so that unreferenced placeholders
1388  * don't result in unnecessary constraints on join order.
1389  */
1390
1391 typedef struct PlaceHolderInfo
1392 {
1393         NodeTag         type;
1394
1395         Index           phid;                   /* ID for PH (unique within planner run) */
1396         PlaceHolderVar *ph_var;         /* copy of PlaceHolderVar tree */
1397         Relids          ph_eval_at;             /* lowest level we can evaluate value at */
1398         Relids          ph_needed;              /* highest level the value is needed at */
1399         Relids          ph_may_need;    /* highest level it might be needed at */
1400         int32           ph_width;               /* estimated attribute width */
1401 } PlaceHolderInfo;
1402
1403 /*
1404  * For each potentially index-optimizable MIN/MAX aggregate function,
1405  * root->minmax_aggs stores a MinMaxAggInfo describing it.
1406  */
1407 typedef struct MinMaxAggInfo
1408 {
1409         NodeTag         type;
1410
1411         Oid                     aggfnoid;               /* pg_proc Oid of the aggregate */
1412         Oid                     aggsortop;              /* Oid of its sort operator */
1413         Expr       *target;                     /* expression we are aggregating on */
1414         PlannerInfo *subroot;           /* modified "root" for planning the subquery */
1415         Path       *path;                       /* access path for subquery */
1416         Cost            pathcost;               /* estimated cost to fetch first row */
1417         Param      *param;                      /* param for subplan's output */
1418 } MinMaxAggInfo;
1419
1420 /*
1421  * glob->paramlist keeps track of the PARAM_EXEC slots that we have decided
1422  * we need for the query.  At runtime these slots are used to pass values
1423  * around from one plan node to another.  They can be used to pass values
1424  * down into subqueries (for outer references in subqueries), or up out of
1425  * subqueries (for the results of a subplan), or from a NestLoop plan node
1426  * into its inner relation (when the inner scan is parameterized with values
1427  * from the outer relation).  The n'th entry in the list (n counts from 0)
1428  * corresponds to Param->paramid = n.
1429  *
1430  * Each paramlist item shows the absolute query level it is associated with,
1431  * where the outermost query is level 1 and nested subqueries have higher
1432  * numbers.  The item the parameter slot represents can be one of three kinds:
1433  *
1434  * A Var: the slot represents a variable of that level that must be passed
1435  * down because subqueries have outer references to it, or must be passed
1436  * from a NestLoop node of that level to its inner scan.  The varlevelsup
1437  * value in the Var will always be zero.
1438  *
1439  * An Aggref (with an expression tree representing its argument): the slot
1440  * represents an aggregate expression that is an outer reference for some
1441  * subquery.  The Aggref itself has agglevelsup = 0, and its argument tree
1442  * is adjusted to match in level.
1443  *
1444  * A Param: the slot holds the result of a subplan (it is a setParam item
1445  * for that subplan).  The absolute level shown for such items corresponds
1446  * to the parent query of the subplan.
1447  *
1448  * Note: we detect duplicate Var parameters and coalesce them into one slot,
1449  * but we do not bother to do this for Aggrefs, and it would be incorrect
1450  * to do so for Param slots.  Duplicate detection is actually *necessary*
1451  * in the case of NestLoop parameters since it serves to match up the usage
1452  * of a Param (in the inner scan) with the assignment of the value (in the
1453  * NestLoop node).      This might result in the same PARAM_EXEC slot being used
1454  * by multiple NestLoop nodes or SubPlan nodes, but no harm is done since
1455  * the same value would be assigned anyway.
1456  */
1457 typedef struct PlannerParamItem
1458 {
1459         NodeTag         type;
1460
1461         Node       *item;                       /* the Var, Aggref, or Param */
1462         Index           abslevel;               /* its absolute query level */
1463 } PlannerParamItem;
1464
1465 #endif   /* RELATION_H */