codekingpro/portable-devtools
115k
1/*-------------------------------------------------------------------------2 *3 * pathnode.h4 * prototypes for pathnode.c, relnode.c.5 *6 *7 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group8 * Portions Copyright (c) 1994, Regents of the University of California9 *10 * src/include/optimizer/pathnode.h11 *12 *-------------------------------------------------------------------------13 */14#ifndef PATHNODE_H15#define PATHNODE_H16 17#include "nodes/bitmapset.h"18#include "nodes/pathnodes.h"19 20 21/*22 * prototypes for pathnode.c23 */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,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 Cost total_cost, List *pathkeys);36 37extern Path *create_seqscan_path(PlannerInfo *root, RelOptInfo *rel,38 Relids required_outer, int parallel_workers);39extern Path *create_samplescan_path(PlannerInfo *root, RelOptInfo *rel,40 Relids required_outer);41extern IndexPath *create_index_path(PlannerInfo *root,42 IndexOptInfo *index,43 List *indexclauses,44 List *indexorderbys,45 List *indexorderbycols,46 List *pathkeys,47 ScanDirection indexscandir,48 bool indexonly,49 Relids required_outer,50 double loop_count,51 bool partial_path);52extern BitmapHeapPath *create_bitmap_heap_path(PlannerInfo *root,53 RelOptInfo *rel,54 Path *bitmapqual,55 Relids required_outer,56 double loop_count,57 int parallel_degree);58extern BitmapAndPath *create_bitmap_and_path(PlannerInfo *root,59 RelOptInfo *rel,60 List *bitmapquals);61extern BitmapOrPath *create_bitmap_or_path(PlannerInfo *root,62 RelOptInfo *rel,63 List *bitmapquals);64extern TidPath *create_tidscan_path(PlannerInfo *root, RelOptInfo *rel,65 List *tidquals, Relids required_outer);66extern TidRangePath *create_tidrangescan_path(PlannerInfo *root,67 RelOptInfo *rel,68 List *tidrangequals,69 Relids required_outer);70extern AppendPath *create_append_path(PlannerInfo *root, RelOptInfo *rel,71 List *subpaths, List *partial_subpaths,72 List *pathkeys, Relids required_outer,73 int parallel_workers, bool parallel_aware,74 double rows);75extern MergeAppendPath *create_merge_append_path(PlannerInfo *root,76 RelOptInfo *rel,77 List *subpaths,78 List *pathkeys,79 Relids required_outer);80extern GroupResultPath *create_group_result_path(PlannerInfo *root,81 RelOptInfo *rel,82 PathTarget *target,83 List *havingqual);84extern MaterialPath *create_material_path(RelOptInfo *rel, Path *subpath);85extern MemoizePath *create_memoize_path(PlannerInfo *root,86 RelOptInfo *rel,87 Path *subpath,88 List *param_exprs,89 List *hash_operators,90 bool singlerow,91 bool binary_mode,92 double calls);93extern UniquePath *create_unique_path(PlannerInfo *root, RelOptInfo *rel,94 Path *subpath, SpecialJoinInfo *sjinfo);95extern GatherPath *create_gather_path(PlannerInfo *root,96 RelOptInfo *rel, Path *subpath, PathTarget *target,97 Relids required_outer, double *rows);98extern GatherMergePath *create_gather_merge_path(PlannerInfo *root,99 RelOptInfo *rel,100 Path *subpath,101 PathTarget *target,102 List *pathkeys,103 Relids required_outer,104 double *rows);105extern SubqueryScanPath *create_subqueryscan_path(PlannerInfo *root,106 RelOptInfo *rel,107 Path *subpath,108 bool trivial_pathtarget,109 List *pathkeys,110 Relids required_outer);111extern Path *create_functionscan_path(PlannerInfo *root, RelOptInfo *rel,112 List *pathkeys, Relids required_outer);113extern Path *create_valuesscan_path(PlannerInfo *root, RelOptInfo *rel,114 Relids required_outer);115extern Path *create_tablefuncscan_path(PlannerInfo *root, RelOptInfo *rel,116 Relids required_outer);117extern Path *create_ctescan_path(PlannerInfo *root, RelOptInfo *rel,118 Relids required_outer);119extern Path *create_namedtuplestorescan_path(PlannerInfo *root, RelOptInfo *rel,120 Relids required_outer);121extern Path *create_resultscan_path(PlannerInfo *root, RelOptInfo *rel,122 Relids required_outer);123extern Path *create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel,124 Relids required_outer);125extern ForeignPath *create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel,126 PathTarget *target,127 double rows, Cost startup_cost, Cost total_cost,128 List *pathkeys,129 Relids required_outer,130 Path *fdw_outerpath,131 List *fdw_private);132extern ForeignPath *create_foreign_join_path(PlannerInfo *root, RelOptInfo *rel,133 PathTarget *target,134 double rows, Cost startup_cost, Cost total_cost,135 List *pathkeys,136 Relids required_outer,137 Path *fdw_outerpath,138 List *fdw_private);139extern ForeignPath *create_foreign_upper_path(PlannerInfo *root, RelOptInfo *rel,140 PathTarget *target,141 double rows, Cost startup_cost, Cost total_cost,142 List *pathkeys,143 Path *fdw_outerpath,144 List *fdw_private);145 146extern Relids calc_nestloop_required_outer(Relids outerrelids,147 Relids outer_paramrels,148 Relids innerrelids,149 Relids inner_paramrels);150extern Relids calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path);151 152extern NestPath *create_nestloop_path(PlannerInfo *root,153 RelOptInfo *joinrel,154 JoinType jointype,155 JoinCostWorkspace *workspace,156 JoinPathExtraData *extra,157 Path *outer_path,158 Path *inner_path,159 List *restrict_clauses,160 List *pathkeys,161 Relids required_outer);162 163extern MergePath *create_mergejoin_path(PlannerInfo *root,164 RelOptInfo *joinrel,165 JoinType jointype,166 JoinCostWorkspace *workspace,167 JoinPathExtraData *extra,168 Path *outer_path,169 Path *inner_path,170 List *restrict_clauses,171 List *pathkeys,172 Relids required_outer,173 List *mergeclauses,174 List *outersortkeys,175 List *innersortkeys);176 177extern HashPath *create_hashjoin_path(PlannerInfo *root,178 RelOptInfo *joinrel,179 JoinType jointype,180 JoinCostWorkspace *workspace,181 JoinPathExtraData *extra,182 Path *outer_path,183 Path *inner_path,184 bool parallel_hash,185 List *restrict_clauses,186 Relids required_outer,187 List *hashclauses);188 189extern ProjectionPath *create_projection_path(PlannerInfo *root,190 RelOptInfo *rel,191 Path *subpath,192 PathTarget *target);193extern Path *apply_projection_to_path(PlannerInfo *root,194 RelOptInfo *rel,195 Path *path,196 PathTarget *target);197extern ProjectSetPath *create_set_projection_path(PlannerInfo *root,198 RelOptInfo *rel,199 Path *subpath,200 PathTarget *target);201extern SortPath *create_sort_path(PlannerInfo *root,202 RelOptInfo *rel,203 Path *subpath,204 List *pathkeys,205 double limit_tuples);206extern IncrementalSortPath *create_incremental_sort_path(PlannerInfo *root,207 RelOptInfo *rel,208 Path *subpath,209 List *pathkeys,210 int presorted_keys,211 double limit_tuples);212extern GroupPath *create_group_path(PlannerInfo *root,213 RelOptInfo *rel,214 Path *subpath,215 List *groupClause,216 List *qual,217 double numGroups);218extern UpperUniquePath *create_upper_unique_path(PlannerInfo *root,219 RelOptInfo *rel,220 Path *subpath,221 int numCols,222 double numGroups);223extern AggPath *create_agg_path(PlannerInfo *root,224 RelOptInfo *rel,225 Path *subpath,226 PathTarget *target,227 AggStrategy aggstrategy,228 AggSplit aggsplit,229 List *groupClause,230 List *qual,231 const AggClauseCosts *aggcosts,232 double numGroups);233extern GroupingSetsPath *create_groupingsets_path(PlannerInfo *root,234 RelOptInfo *rel,235 Path *subpath,236 List *having_qual,237 AggStrategy aggstrategy,238 List *rollups,239 const AggClauseCosts *agg_costs);240extern MinMaxAggPath *create_minmaxagg_path(PlannerInfo *root,241 RelOptInfo *rel,242 PathTarget *target,243 List *mmaggregates,244 List *quals);245extern WindowAggPath *create_windowagg_path(PlannerInfo *root,246 RelOptInfo *rel,247 Path *subpath,248 PathTarget *target,249 List *windowFuncs,250 WindowClause *winclause,251 List *qual,252 bool topwindow);253extern SetOpPath *create_setop_path(PlannerInfo *root,254 RelOptInfo *rel,255 Path *subpath,256 SetOpCmd cmd,257 SetOpStrategy strategy,258 List *distinctList,259 AttrNumber flagColIdx,260 int firstFlag,261 double numGroups,262 double outputRows);263extern RecursiveUnionPath *create_recursiveunion_path(PlannerInfo *root,264 RelOptInfo *rel,265 Path *leftpath,266 Path *rightpath,267 PathTarget *target,268 List *distinctList,269 int wtParam,270 double numGroups);271extern LockRowsPath *create_lockrows_path(PlannerInfo *root, RelOptInfo *rel,272 Path *subpath, List *rowMarks, int epqParam);273extern ModifyTablePath *create_modifytable_path(PlannerInfo *root,274 RelOptInfo *rel,275 Path *subpath,276 CmdType operation, bool canSetTag,277 Index nominalRelation, Index rootRelation,278 bool partColsUpdated,279 List *resultRelations,280 List *updateColnosLists,281 List *withCheckOptionLists, List *returningLists,282 List *rowMarks, OnConflictExpr *onconflict,283 List *mergeActionLists, int epqParam);284extern LimitPath *create_limit_path(PlannerInfo *root, RelOptInfo *rel,285 Path *subpath,286 Node *limitOffset, Node *limitCount,287 LimitOption limitOption,288 int64 offset_est, int64 count_est);289extern void adjust_limit_rows_costs(double *rows,290 Cost *startup_cost, Cost *total_cost,291 int64 offset_est, int64 count_est);292 293extern Path *reparameterize_path(PlannerInfo *root, Path *path,294 Relids required_outer,295 double loop_count);296extern Path *reparameterize_path_by_child(PlannerInfo *root, Path *path,297 RelOptInfo *child_rel);298 299/*300 * prototypes for relnode.c301 */302extern void setup_simple_rel_arrays(PlannerInfo *root);303extern void expand_planner_arrays(PlannerInfo *root, int add_size);304extern RelOptInfo *build_simple_rel(PlannerInfo *root, int relid,305 RelOptInfo *parent);306extern RelOptInfo *find_base_rel(PlannerInfo *root, int relid);307extern RelOptInfo *find_base_rel_ignore_join(PlannerInfo *root, int relid);308extern RelOptInfo *find_join_rel(PlannerInfo *root, Relids relids);309extern RelOptInfo *build_join_rel(PlannerInfo *root,310 Relids joinrelids,311 RelOptInfo *outer_rel,312 RelOptInfo *inner_rel,313 SpecialJoinInfo *sjinfo,314 List *pushed_down_joins,315 List **restrictlist_ptr);316extern Relids min_join_parameterization(PlannerInfo *root,317 Relids joinrelids,318 RelOptInfo *outer_rel,319 RelOptInfo *inner_rel);320extern RelOptInfo *fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind,321 Relids relids);322extern Relids find_childrel_parents(PlannerInfo *root, RelOptInfo *rel);323extern ParamPathInfo *get_baserel_parampathinfo(PlannerInfo *root,324 RelOptInfo *baserel,325 Relids required_outer);326extern ParamPathInfo *get_joinrel_parampathinfo(PlannerInfo *root,327 RelOptInfo *joinrel,328 Path *outer_path,329 Path *inner_path,330 SpecialJoinInfo *sjinfo,331 Relids required_outer,332 List **restrict_clauses);333extern ParamPathInfo *get_appendrel_parampathinfo(RelOptInfo *appendrel,334 Relids required_outer);335extern ParamPathInfo *find_param_path_info(RelOptInfo *rel,336 Relids required_outer);337extern Bitmapset *get_param_path_clause_serials(Path *path);338extern RelOptInfo *build_child_join_rel(PlannerInfo *root,339 RelOptInfo *outer_rel, RelOptInfo *inner_rel,340 RelOptInfo *parent_joinrel, List *restrictlist,341 SpecialJoinInfo *sjinfo);342 343#endif /* PATHNODE_H */344 