Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
pathnode.h344 linesDownload Raw Back to optimizer
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 
codekingpro/portable-devtools · Team Ai