Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
paths.h267 linesDownload Raw Back to optimizer
1/*-------------------------------------------------------------------------2 *3 * paths.h4 *	  prototypes for various files in optimizer/path5 *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/paths.h11 *12 *-------------------------------------------------------------------------13 */14#ifndef PATHS_H15#define PATHS_H16 17#include "nodes/pathnodes.h"18 19 20/*21 * allpaths.c22 */23extern PGDLLIMPORT bool enable_geqo;24extern PGDLLIMPORT int geqo_threshold;25extern PGDLLIMPORT int min_parallel_table_scan_size;26extern PGDLLIMPORT int min_parallel_index_scan_size;27 28/* Hook for plugins to get control in set_rel_pathlist() */29typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root,30											RelOptInfo *rel,31											Index rti,32											RangeTblEntry *rte);33extern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;34 35/* Hook for plugins to get control in add_paths_to_joinrel() */36typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root,37											 RelOptInfo *joinrel,38											 RelOptInfo *outerrel,39											 RelOptInfo *innerrel,40											 JoinType jointype,41											 JoinPathExtraData *extra);42extern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;43 44/* Hook for plugins to replace standard_join_search() */45typedef RelOptInfo *(*join_search_hook_type) (PlannerInfo *root,46											  int levels_needed,47											  List *initial_rels);48extern PGDLLIMPORT join_search_hook_type join_search_hook;49 50 51extern RelOptInfo *make_one_rel(PlannerInfo *root, List *joinlist);52extern RelOptInfo *standard_join_search(PlannerInfo *root, int levels_needed,53										List *initial_rels);54 55extern void generate_gather_paths(PlannerInfo *root, RelOptInfo *rel,56								  bool override_rows);57extern void generate_useful_gather_paths(PlannerInfo *root, RelOptInfo *rel,58										 bool override_rows);59extern int	compute_parallel_worker(RelOptInfo *rel, double heap_pages,60									double index_pages, int max_workers);61extern void create_partial_bitmap_paths(PlannerInfo *root, RelOptInfo *rel,62										Path *bitmapqual);63extern void generate_partitionwise_join_paths(PlannerInfo *root,64											  RelOptInfo *rel);65 66#ifdef OPTIMIZER_DEBUG67extern void debug_print_rel(PlannerInfo *root, RelOptInfo *rel);68#endif69 70/*71 * indxpath.c72 *	  routines to generate index paths73 */74extern void create_index_paths(PlannerInfo *root, RelOptInfo *rel);75extern bool relation_has_unique_index_for(PlannerInfo *root, RelOptInfo *rel,76										  List *restrictlist,77										  List *exprlist, List *oprlist);78extern bool indexcol_is_bool_constant_for_query(PlannerInfo *root,79												IndexOptInfo *index,80												int indexcol);81extern bool match_index_to_operand(Node *operand, int indexcol,82								   IndexOptInfo *index);83extern void check_index_predicates(PlannerInfo *root, RelOptInfo *rel);84 85/*86 * tidpath.h87 *	  routines to generate tid paths88 */89extern void create_tidscan_paths(PlannerInfo *root, RelOptInfo *rel);90 91/*92 * joinpath.c93 *	   routines to create join paths94 */95extern void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel,96								 RelOptInfo *outerrel, RelOptInfo *innerrel,97								 JoinType jointype, SpecialJoinInfo *sjinfo,98								 List *restrictlist);99 100/*101 * joinrels.c102 *	  routines to determine which relations to join103 */104extern void join_search_one_level(PlannerInfo *root, int level);105extern RelOptInfo *make_join_rel(PlannerInfo *root,106								 RelOptInfo *rel1, RelOptInfo *rel2);107extern Relids add_outer_joins_to_relids(PlannerInfo *root, Relids input_relids,108										SpecialJoinInfo *sjinfo,109										List **pushed_down_joins);110extern bool have_join_order_restriction(PlannerInfo *root,111										RelOptInfo *rel1, RelOptInfo *rel2);112extern bool have_dangerous_phv(PlannerInfo *root,113							   Relids outer_relids, Relids inner_params);114extern void mark_dummy_rel(RelOptInfo *rel);115 116/*117 * equivclass.c118 *	  routines for managing EquivalenceClasses119 */120typedef bool (*ec_matches_callback_type) (PlannerInfo *root,121										  RelOptInfo *rel,122										  EquivalenceClass *ec,123										  EquivalenceMember *em,124										  void *arg);125 126extern bool process_equivalence(PlannerInfo *root,127								RestrictInfo **p_restrictinfo,128								JoinDomain *jdomain);129extern Expr *canonicalize_ec_expression(Expr *expr,130										Oid req_type, Oid req_collation);131extern void reconsider_outer_join_clauses(PlannerInfo *root);132extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root,133												  Expr *expr,134												  List *opfamilies,135												  Oid opcintype,136												  Oid collation,137												  Index sortref,138												  Relids rel,139												  bool create_it);140extern EquivalenceMember *find_ec_member_matching_expr(EquivalenceClass *ec,141													   Expr *expr,142													   Relids relids);143extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root,144													EquivalenceClass *ec,145													List *exprs,146													Relids relids,147													bool require_parallel_safe);148extern bool relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel,149										 EquivalenceClass *ec,150										 bool require_parallel_safe);151extern void generate_base_implied_equalities(PlannerInfo *root);152extern List *generate_join_implied_equalities(PlannerInfo *root,153											  Relids join_relids,154											  Relids outer_relids,155											  RelOptInfo *inner_rel,156											  SpecialJoinInfo *sjinfo);157extern List *generate_join_implied_equalities_for_ecs(PlannerInfo *root,158													  List *eclasses,159													  Relids join_relids,160													  Relids outer_relids,161													  RelOptInfo *inner_rel);162extern bool exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2);163extern EquivalenceClass *match_eclasses_to_foreign_key_col(PlannerInfo *root,164														   ForeignKeyOptInfo *fkinfo,165														   int colno);166extern RestrictInfo *find_derived_clause_for_ec_member(EquivalenceClass *ec,167													   EquivalenceMember *em);168extern void add_child_rel_equivalences(PlannerInfo *root,169									   AppendRelInfo *appinfo,170									   RelOptInfo *parent_rel,171									   RelOptInfo *child_rel);172extern void add_child_join_rel_equivalences(PlannerInfo *root,173											int nappinfos,174											AppendRelInfo **appinfos,175											RelOptInfo *parent_joinrel,176											RelOptInfo *child_joinrel);177extern List *generate_implied_equalities_for_column(PlannerInfo *root,178													RelOptInfo *rel,179													ec_matches_callback_type callback,180													void *callback_arg,181													Relids prohibited_rels);182extern bool have_relevant_eclass_joinclause(PlannerInfo *root,183											RelOptInfo *rel1, RelOptInfo *rel2);184extern bool has_relevant_eclass_joinclause(PlannerInfo *root,185										   RelOptInfo *rel1);186extern bool eclass_useful_for_merging(PlannerInfo *root,187									  EquivalenceClass *eclass,188									  RelOptInfo *rel);189extern bool is_redundant_derived_clause(RestrictInfo *rinfo, List *clauselist);190extern bool is_redundant_with_indexclauses(RestrictInfo *rinfo,191										   List *indexclauses);192 193/*194 * pathkeys.c195 *	  utilities for matching and building path keys196 */197typedef enum198{199	PATHKEYS_EQUAL,				/* pathkeys are identical */200	PATHKEYS_BETTER1,			/* pathkey 1 is a superset of pathkey 2 */201	PATHKEYS_BETTER2,			/* vice versa */202	PATHKEYS_DIFFERENT			/* neither pathkey includes the other */203} PathKeysComparison;204 205extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);206extern bool pathkeys_contained_in(List *keys1, List *keys2);207extern bool pathkeys_count_contained_in(List *keys1, List *keys2, int *n_common);208extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,209											Relids required_outer,210											CostSelector cost_criterion,211											bool require_parallel_safe);212extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,213													   List *pathkeys,214													   Relids required_outer,215													   double fraction);216extern Path *get_cheapest_parallel_safe_total_inner(List *paths);217extern List *build_index_pathkeys(PlannerInfo *root, IndexOptInfo *index,218								  ScanDirection scandir);219extern List *build_partition_pathkeys(PlannerInfo *root, RelOptInfo *partrel,220									  ScanDirection scandir, bool *partialkeys);221extern List *build_expression_pathkey(PlannerInfo *root, Expr *expr,222									  Oid opno,223									  Relids rel, bool create_it);224extern List *convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel,225									   List *subquery_pathkeys,226									   List *subquery_tlist);227extern List *build_join_pathkeys(PlannerInfo *root,228								 RelOptInfo *joinrel,229								 JoinType jointype,230								 List *outer_pathkeys);231extern List *make_pathkeys_for_sortclauses(PlannerInfo *root,232										   List *sortclauses,233										   List *tlist);234extern List *make_pathkeys_for_sortclauses_extended(PlannerInfo *root,235													List **sortclauses,236													List *tlist,237													bool remove_redundant,238													bool *sortable);239extern void initialize_mergeclause_eclasses(PlannerInfo *root,240											RestrictInfo *restrictinfo);241extern void update_mergeclause_eclasses(PlannerInfo *root,242										RestrictInfo *restrictinfo);243extern List *find_mergeclauses_for_outer_pathkeys(PlannerInfo *root,244												  List *pathkeys,245												  List *restrictinfos);246extern List *select_outer_pathkeys_for_merge(PlannerInfo *root,247											 List *mergeclauses,248											 RelOptInfo *joinrel);249extern List *make_inner_pathkeys_for_merge(PlannerInfo *root,250										   List *mergeclauses,251										   List *outer_pathkeys);252extern List *trim_mergeclauses_for_inner_pathkeys(PlannerInfo *root,253												  List *mergeclauses,254												  List *pathkeys);255extern List *truncate_useless_pathkeys(PlannerInfo *root,256									   RelOptInfo *rel,257									   List *pathkeys);258extern bool has_useful_pathkeys(PlannerInfo *root, RelOptInfo *rel);259extern List *append_pathkeys(List *target, List *source);260extern PathKey *make_canonical_pathkey(PlannerInfo *root,261									   EquivalenceClass *eclass, Oid opfamily,262									   int strategy, bool nulls_first);263extern void add_paths_to_append_rel(PlannerInfo *root, RelOptInfo *rel,264									List *live_childrels);265 266#endif							/* PATHS_H */267 
codekingpro/portable-devtools · Team Ai