PostgreSQL Source Code git master
pathnode.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * pathnode.h
4 * prototypes for pathnode.c, relnode.c.
5 *
6 *
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/optimizer/pathnode.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef PATHNODE_H
15#define PATHNODE_H
16
17#include "nodes/bitmapset.h"
18#include "nodes/pathnodes.h"
19
20
21/*
22 * prototypes for pathnode.c
23 */
24extern int compare_path_costs(Path *path1, Path *path2,
25 CostSelector criterion);
26extern int compare_fractional_path_costs(Path *path1, Path *path2,
27 double fraction);
28extern void set_cheapest(RelOptInfo *parent_rel);
29extern void add_path(RelOptInfo *parent_rel, Path *new_path);
30extern bool add_path_precheck(RelOptInfo *parent_rel, int disabled_nodes,
31 Cost startup_cost, Cost total_cost,
32 List *pathkeys, Relids required_outer);
33extern void add_partial_path(RelOptInfo *parent_rel, Path *new_path);
34extern bool add_partial_path_precheck(RelOptInfo *parent_rel,
35 int disabled_nodes,
36 Cost total_cost, List *pathkeys);
37
39 Relids required_outer, int parallel_workers);
41 Relids required_outer);
44 List *indexclauses,
45 List *indexorderbys,
46 List *indexorderbycols,
47 List *pathkeys,
48 ScanDirection indexscandir,
49 bool indexonly,
50 Relids required_outer,
51 double loop_count,
52 bool partial_path);
54 RelOptInfo *rel,
55 Path *bitmapqual,
56 Relids required_outer,
57 double loop_count,
58 int parallel_degree);
60 RelOptInfo *rel,
61 List *bitmapquals);
63 RelOptInfo *rel,
64 List *bitmapquals);
66 List *tidquals, Relids required_outer);
68 RelOptInfo *rel,
69 List *tidrangequals,
70 Relids required_outer,
71 int parallel_workers);
73 List *subpaths, List *partial_subpaths,
74 List *pathkeys, Relids required_outer,
75 int parallel_workers, bool parallel_aware,
76 double rows);
78 RelOptInfo *rel,
79 List *subpaths,
80 List *pathkeys,
81 Relids required_outer);
83 RelOptInfo *rel,
84 PathTarget *target,
85 List *havingqual);
88 RelOptInfo *rel,
90 List *param_exprs,
91 List *hash_operators,
92 bool singlerow,
93 bool binary_mode,
94 Cardinality est_calls);
96 RelOptInfo *rel, Path *subpath, PathTarget *target,
97 Relids required_outer, double *rows);
99 RelOptInfo *rel,
100 Path *subpath,
101 PathTarget *target,
102 List *pathkeys,
103 Relids required_outer,
104 double *rows);
106 RelOptInfo *rel,
107 Path *subpath,
108 bool trivial_pathtarget,
109 List *pathkeys,
110 Relids required_outer);
112 List *pathkeys, Relids required_outer);
114 Relids required_outer);
116 Relids required_outer);
118 List *pathkeys, Relids required_outer);
120 Relids required_outer);
122 Relids required_outer);
124 Relids required_outer);
126 PathTarget *target,
127 double rows, int disabled_nodes,
128 Cost startup_cost, Cost total_cost,
129 List *pathkeys,
130 Relids required_outer,
131 Path *fdw_outerpath,
132 List *fdw_restrictinfo,
133 List *fdw_private);
135 PathTarget *target,
136 double rows, int disabled_nodes,
137 Cost startup_cost, Cost total_cost,
138 List *pathkeys,
139 Relids required_outer,
140 Path *fdw_outerpath,
141 List *fdw_restrictinfo,
142 List *fdw_private);
144 PathTarget *target,
145 double rows, int disabled_nodes,
146 Cost startup_cost, Cost total_cost,
147 List *pathkeys,
148 Path *fdw_outerpath,
149 List *fdw_restrictinfo,
150 List *fdw_private);
151
153 Relids outer_paramrels,
154 Relids innerrelids,
155 Relids inner_paramrels);
156extern Relids calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path);
157
159 RelOptInfo *joinrel,
160 JoinType jointype,
161 JoinCostWorkspace *workspace,
162 JoinPathExtraData *extra,
163 Path *outer_path,
164 Path *inner_path,
165 List *restrict_clauses,
166 List *pathkeys,
167 Relids required_outer);
168
170 RelOptInfo *joinrel,
171 JoinType jointype,
172 JoinCostWorkspace *workspace,
173 JoinPathExtraData *extra,
174 Path *outer_path,
175 Path *inner_path,
176 List *restrict_clauses,
177 List *pathkeys,
178 Relids required_outer,
179 List *mergeclauses,
180 List *outersortkeys,
181 List *innersortkeys,
182 int outer_presorted_keys);
183
185 RelOptInfo *joinrel,
186 JoinType jointype,
187 JoinCostWorkspace *workspace,
188 JoinPathExtraData *extra,
189 Path *outer_path,
190 Path *inner_path,
191 bool parallel_hash,
192 List *restrict_clauses,
193 Relids required_outer,
194 List *hashclauses);
195
197 RelOptInfo *rel,
198 Path *subpath,
199 PathTarget *target);
201 RelOptInfo *rel,
202 Path *path,
203 PathTarget *target);
205 RelOptInfo *rel,
206 Path *subpath,
207 PathTarget *target);
209 RelOptInfo *rel,
210 Path *subpath,
211 List *pathkeys,
212 double limit_tuples);
214 RelOptInfo *rel,
215 Path *subpath,
216 List *pathkeys,
217 int presorted_keys,
218 double limit_tuples);
220 RelOptInfo *rel,
221 Path *subpath,
222 List *groupClause,
223 List *qual,
224 double numGroups);
226 RelOptInfo *rel,
227 Path *subpath,
228 int numCols,
229 double numGroups);
231 RelOptInfo *rel,
232 Path *subpath,
233 PathTarget *target,
234 AggStrategy aggstrategy,
235 AggSplit aggsplit,
236 List *groupClause,
237 List *qual,
238 const AggClauseCosts *aggcosts,
239 double numGroups);
241 RelOptInfo *rel,
242 Path *subpath,
243 List *having_qual,
244 AggStrategy aggstrategy,
245 List *rollups,
246 const AggClauseCosts *agg_costs);
248 RelOptInfo *rel,
249 PathTarget *target,
250 List *mmaggregates,
251 List *quals);
253 RelOptInfo *rel,
254 Path *subpath,
255 PathTarget *target,
256 List *windowFuncs,
257 List *runCondition,
258 WindowClause *winclause,
259 List *qual,
260 bool topwindow);
262 RelOptInfo *rel,
263 Path *leftpath,
264 Path *rightpath,
265 SetOpCmd cmd,
266 SetOpStrategy strategy,
267 List *groupList,
268 double numGroups,
269 double outputRows);
271 RelOptInfo *rel,
272 Path *leftpath,
273 Path *rightpath,
274 PathTarget *target,
275 List *distinctList,
276 int wtParam,
277 double numGroups);
279 Path *subpath, List *rowMarks, int epqParam);
281 RelOptInfo *rel,
282 Path *subpath,
283 CmdType operation, bool canSetTag,
284 Index nominalRelation, Index rootRelation,
285 List *resultRelations,
286 List *updateColnosLists,
287 List *withCheckOptionLists, List *returningLists,
288 List *rowMarks, OnConflictExpr *onconflict,
289 List *mergeActionLists, List *mergeJoinConditions,
290 int epqParam);
292 Path *subpath,
293 Node *limitOffset, Node *limitCount,
294 LimitOption limitOption,
295 int64 offset_est, int64 count_est);
296extern void adjust_limit_rows_costs(double *rows,
297 Cost *startup_cost, Cost *total_cost,
298 int64 offset_est, int64 count_est);
299
301 Relids required_outer,
302 double loop_count);
304 RelOptInfo *child_rel);
306 RelOptInfo *child_rel);
307
308/*
309 * prototypes for relnode.c
310 */
313extern RelOptInfo *build_simple_rel(PlannerInfo *root, int relid,
314 RelOptInfo *parent);
317extern RelOptInfo *find_base_rel(PlannerInfo *root, int relid);
322 Relids joinrelids,
323 RelOptInfo *outer_rel,
324 RelOptInfo *inner_rel,
325 SpecialJoinInfo *sjinfo,
326 List *pushed_down_joins,
327 List **restrictlist_ptr);
329 Relids joinrelids,
330 RelOptInfo *outer_rel,
331 RelOptInfo *inner_rel);
333 Relids relids);
336 RelOptInfo *baserel,
337 Relids required_outer);
339 RelOptInfo *joinrel,
340 Path *outer_path,
341 Path *inner_path,
342 SpecialJoinInfo *sjinfo,
343 Relids required_outer,
344 List **restrict_clauses);
346 Relids required_outer);
348 Relids required_outer);
351 RelOptInfo *outer_rel, RelOptInfo *inner_rel,
352 RelOptInfo *parent_joinrel, List *restrictlist,
353 SpecialJoinInfo *sjinfo,
354 int nappinfos, AppendRelInfo **appinfos);
355
357 bool calculate_grouped_rows);
358#endif /* PATHNODE_H */
int64_t int64
Definition: c.h:540
unsigned int Index
Definition: c.h:624
Datum subpath(PG_FUNCTION_ARGS)
Definition: ltree_op.c:311
SetOpCmd
Definition: nodes.h:407
SetOpStrategy
Definition: nodes.h:415
double Cost
Definition: nodes.h:261
double Cardinality
Definition: nodes.h:262
CmdType
Definition: nodes.h:273
AggStrategy
Definition: nodes.h:363
AggSplit
Definition: nodes.h:385
LimitOption
Definition: nodes.h:440
JoinType
Definition: nodes.h:298
RelOptInfo * find_base_rel(PlannerInfo *root, int relid)
Definition: relnode.c:529
void setup_simple_rel_arrays(PlannerInfo *root)
Definition: relnode.c:108
ParamPathInfo * get_appendrel_parampathinfo(RelOptInfo *appendrel, Relids required_outer)
Definition: relnode.c:1978
Relids calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path)
Definition: pathnode.c:2242
ForeignPath * create_foreign_upper_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, double rows, int disabled_nodes, Cost startup_cost, Cost total_cost, List *pathkeys, Path *fdw_outerpath, List *fdw_restrictinfo, List *fdw_private)
Definition: pathnode.c:2168
BitmapAndPath * create_bitmap_and_path(PlannerInfo *root, RelOptInfo *rel, List *bitmapquals)
Definition: pathnode.c:1131
RelOptInfo * build_grouped_rel(PlannerInfo *root, RelOptInfo *rel)
Definition: relnode.c:484
Path * create_functionscan_path(PlannerInfo *root, RelOptInfo *rel, List *pathkeys, Relids required_outer)
Definition: pathnode.c:1877
bool path_is_reparameterizable_by_child(Path *path, RelOptInfo *child_rel)
Definition: pathnode.c:4316
MemoizePath * create_memoize_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *param_exprs, List *hash_operators, bool singlerow, bool binary_mode, Cardinality est_calls)
Definition: pathnode.c:1691
RelOptInfo * build_child_join_rel(PlannerInfo *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel, RelOptInfo *parent_joinrel, List *restrictlist, SpecialJoinInfo *sjinfo, int nappinfos, AppendRelInfo **appinfos)
Definition: relnode.c:1001
Path * create_valuesscan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:1929
MinMaxAggPath * create_minmaxagg_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, List *mmaggregates, List *quals)
Definition: pathnode.c:3240
Path * create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:2033
SetOpPath * create_setop_path(PlannerInfo *root, RelOptInfo *rel, Path *leftpath, Path *rightpath, SetOpCmd cmd, SetOpStrategy strategy, List *groupList, double numGroups, double outputRows)
Definition: pathnode.c:3404
ModifyTablePath * create_modifytable_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, CmdType operation, bool canSetTag, Index nominalRelation, Index rootRelation, List *resultRelations, List *updateColnosLists, List *withCheckOptionLists, List *returningLists, List *rowMarks, OnConflictExpr *onconflict, List *mergeActionLists, List *mergeJoinConditions, int epqParam)
Definition: pathnode.c:3630
Relids calc_nestloop_required_outer(Relids outerrelids, Relids outer_paramrels, Relids innerrelids, Relids inner_paramrels)
Definition: pathnode.c:2215
RelOptInfo * find_base_rel_noerr(PlannerInfo *root, int relid)
Definition: relnode.c:551
IndexPath * create_index_path(PlannerInfo *root, IndexOptInfo *index, List *indexclauses, List *indexorderbys, List *indexorderbycols, List *pathkeys, ScanDirection indexscandir, bool indexonly, Relids required_outer, double loop_count, bool partial_path)
Definition: pathnode.c:1049
Relids min_join_parameterization(PlannerInfo *root, Relids joinrelids, RelOptInfo *outer_rel, RelOptInfo *inner_rel)
Definition: relnode.c:1145
ProjectSetPath * create_set_projection_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target)
Definition: pathnode.c:2723
RelOptInfo * find_join_rel(PlannerInfo *root, Relids relids)
Definition: relnode.c:642
ProjectionPath * create_projection_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target)
Definition: pathnode.c:2525
ParamPathInfo * get_joinrel_parampathinfo(PlannerInfo *root, RelOptInfo *joinrel, Path *outer_path, Path *inner_path, SpecialJoinInfo *sjinfo, Relids required_outer, List **restrict_clauses)
Definition: relnode.c:1781
TidRangePath * create_tidrangescan_path(PlannerInfo *root, RelOptInfo *rel, List *tidrangequals, Relids required_outer, int parallel_workers)
Definition: pathnode.c:1264
WindowAggPath * create_windowagg_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target, List *windowFuncs, List *runCondition, WindowClause *winclause, List *qual, bool topwindow)
Definition: pathnode.c:3331
Path * reparameterize_path_by_child(PlannerInfo *root, Path *path, RelOptInfo *child_rel)
Definition: pathnode.c:4020
LockRowsPath * create_lockrows_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *rowMarks, int epqParam)
Definition: pathnode.c:3568
Path * apply_projection_to_path(PlannerInfo *root, RelOptInfo *rel, Path *path, PathTarget *target)
Definition: pathnode.c:2634
Path * create_seqscan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer, int parallel_workers)
Definition: pathnode.c:983
GatherMergePath * create_gather_merge_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target, List *pathkeys, Relids required_outer, double *rows)
Definition: pathnode.c:1751
HashPath * create_hashjoin_path(PlannerInfo *root, RelOptInfo *joinrel, JoinType jointype, JoinCostWorkspace *workspace, JoinPathExtraData *extra, Path *outer_path, Path *inner_path, bool parallel_hash, List *restrict_clauses, Relids required_outer, List *hashclauses)
Definition: pathnode.c:2459
void set_cheapest(RelOptInfo *parent_rel)
Definition: pathnode.c:270
Relids find_childrel_parents(PlannerInfo *root, RelOptInfo *rel)
Definition: relnode.c:1631
void expand_planner_arrays(PlannerInfo *root, int add_size)
Definition: relnode.c:177
ParamPathInfo * get_baserel_parampathinfo(PlannerInfo *root, RelOptInfo *baserel, Relids required_outer)
Definition: relnode.c:1667
RelOptInfo * build_simple_grouped_rel(PlannerInfo *root, RelOptInfo *rel)
Definition: relnode.c:433
void add_partial_path(RelOptInfo *parent_rel, Path *new_path)
Definition: pathnode.c:795
LimitPath * create_limit_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, Node *limitOffset, Node *limitCount, LimitOption limitOption, int64 offset_est, int64 count_est)
Definition: pathnode.c:3730
AppendPath * create_append_path(PlannerInfo *root, RelOptInfo *rel, List *subpaths, List *partial_subpaths, List *pathkeys, Relids required_outer, int parallel_workers, bool parallel_aware, double rows)
Definition: pathnode.c:1301
RelOptInfo * fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind, Relids relids)
Definition: relnode.c:1581
Path * create_namedtuplestorescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:1981
SubqueryScanPath * create_subqueryscan_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, bool trivial_pathtarget, List *pathkeys, Relids required_outer)
Definition: pathnode.c:1847
int compare_fractional_path_costs(Path *path1, Path *path2, double fraction)
Definition: pathnode.c:125
RelOptInfo * build_join_rel(PlannerInfo *root, Relids joinrelids, RelOptInfo *outer_rel, RelOptInfo *inner_rel, SpecialJoinInfo *sjinfo, List *pushed_down_joins, List **restrictlist_ptr)
Definition: relnode.c:780
IncrementalSortPath * create_incremental_sort_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *pathkeys, int presorted_keys, double limit_tuples)
Definition: pathnode.c:2793
RelOptInfo * build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent)
Definition: relnode.c:206
BitmapOrPath * create_bitmap_or_path(PlannerInfo *root, RelOptInfo *rel, List *bitmapquals)
Definition: pathnode.c:1183
GroupingSetsPath * create_groupingsets_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *having_qual, AggStrategy aggstrategy, List *rollups, const AggClauseCosts *agg_costs)
Definition: pathnode.c:3077
RelAggInfo * create_rel_agg_info(PlannerInfo *root, RelOptInfo *rel, bool calculate_grouped_rows)
Definition: relnode.c:2655
BitmapHeapPath * create_bitmap_heap_path(PlannerInfo *root, RelOptInfo *rel, Path *bitmapqual, Relids required_outer, double loop_count, int parallel_degree)
Definition: pathnode.c:1098
ParamPathInfo * find_param_path_info(RelOptInfo *rel, Relids required_outer)
Definition: relnode.c:2011
Path * create_tablefuncscan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:1903
SortPath * create_sort_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *pathkeys, double limit_tuples)
Definition: pathnode.c:2842
GroupPath * create_group_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, List *groupClause, List *qual, double numGroups)
Definition: pathnode.c:2886
ForeignPath * create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, double rows, int disabled_nodes, Cost startup_cost, Cost total_cost, List *pathkeys, Relids required_outer, Path *fdw_outerpath, List *fdw_restrictinfo, List *fdw_private)
Definition: pathnode.c:2066
TidPath * create_tidscan_path(PlannerInfo *root, RelOptInfo *rel, List *tidquals, Relids required_outer)
Definition: pathnode.c:1235
GatherPath * create_gather_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target, Relids required_outer, double *rows)
Definition: pathnode.c:1803
Path * create_samplescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:1008
MaterialPath * create_material_path(RelOptInfo *rel, Path *subpath)
Definition: pathnode.c:1658
ForeignPath * create_foreign_join_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, double rows, int disabled_nodes, Cost startup_cost, Cost total_cost, List *pathkeys, Relids required_outer, Path *fdw_outerpath, List *fdw_restrictinfo, List *fdw_private)
Definition: pathnode.c:2114
void add_path(RelOptInfo *parent_rel, Path *new_path)
Definition: pathnode.c:461
int compare_path_costs(Path *path1, Path *path2, CostSelector criterion)
Definition: pathnode.c:70
bool add_path_precheck(RelOptInfo *parent_rel, int disabled_nodes, Cost startup_cost, Cost total_cost, List *pathkeys, Relids required_outer)
Definition: pathnode.c:688
Path * create_resultscan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer)
Definition: pathnode.c:2007
Bitmapset * get_param_path_clause_serials(Path *path)
Definition: relnode.c:2032
void adjust_limit_rows_costs(double *rows, Cost *startup_cost, Cost *total_cost, int64 offset_est, int64 count_est)
Definition: pathnode.c:3786
Path * create_ctescan_path(PlannerInfo *root, RelOptInfo *rel, List *pathkeys, Relids required_outer)
Definition: pathnode.c:1955
UniquePath * create_unique_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, int numCols, double numGroups)
Definition: pathnode.c:2943
RelOptInfo * find_base_rel_ignore_join(PlannerInfo *root, int relid)
Definition: relnode.c:569
AggPath * create_agg_path(PlannerInfo *root, RelOptInfo *rel, Path *subpath, PathTarget *target, AggStrategy aggstrategy, AggSplit aggsplit, List *groupClause, List *qual, const AggClauseCosts *aggcosts, double numGroups)
Definition: pathnode.c:2995
bool add_partial_path_precheck(RelOptInfo *parent_rel, int disabled_nodes, Cost total_cost, List *pathkeys)
Definition: pathnode.c:921
MergePath * create_mergejoin_path(PlannerInfo *root, RelOptInfo *joinrel, JoinType jointype, JoinCostWorkspace *workspace, JoinPathExtraData *extra, Path *outer_path, Path *inner_path, List *restrict_clauses, List *pathkeys, Relids required_outer, List *mergeclauses, List *outersortkeys, List *innersortkeys, int outer_presorted_keys)
Definition: pathnode.c:2391
RecursiveUnionPath * create_recursiveunion_path(PlannerInfo *root, RelOptInfo *rel, Path *leftpath, Path *rightpath, PathTarget *target, List *distinctList, int wtParam, double numGroups)
Definition: pathnode.c:3523
GroupResultPath * create_group_result_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target, List *havingqual)
Definition: pathnode.c:1610
MergeAppendPath * create_merge_append_path(PlannerInfo *root, RelOptInfo *rel, List *subpaths, List *pathkeys, Relids required_outer)
Definition: pathnode.c:1472
Path * reparameterize_path(PlannerInfo *root, Path *path, Relids required_outer, double loop_count)
Definition: pathnode.c:3854
NestPath * create_nestloop_path(PlannerInfo *root, RelOptInfo *joinrel, JoinType jointype, JoinCostWorkspace *workspace, JoinPathExtraData *extra, Path *outer_path, Path *inner_path, List *restrict_clauses, List *pathkeys, Relids required_outer)
Definition: pathnode.c:2294
CostSelector
Definition: pathnodes.h:37
UpperRelationKind
Definition: pathnodes.h:70
tree ctl root
Definition: radixtree.h:1857
ScanDirection
Definition: sdir.h:25
Size add_size(Size s1, Size s2)
Definition: shmem.c:495
Definition: pg_list.h:54
Definition: nodes.h:135
Definition: type.h:96