mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Remove planner's private fields from Query struct, and put them into
a new PlannerInfo struct, which is passed around instead of the bare Query in all the planning code. This commit is essentially just a code-beautification exercise, but it does open the door to making larger changes to the planner data structures without having to muck with the widely-known Query struct.
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* paths.h
|
||||
* prototypes for various files in optimizer/path (were separate
|
||||
* header files)
|
||||
* prototypes for various files in optimizer/path
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/paths.h,v 1.83 2005/04/25 01:30:14 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/paths.h,v 1.84 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -24,23 +23,23 @@
|
||||
extern bool enable_geqo;
|
||||
extern int geqo_threshold;
|
||||
|
||||
extern RelOptInfo *make_one_rel(Query *root);
|
||||
extern RelOptInfo *make_fromexpr_rel(Query *root, FromExpr *from);
|
||||
extern RelOptInfo *make_one_rel(PlannerInfo *root);
|
||||
extern RelOptInfo *make_fromexpr_rel(PlannerInfo *root, FromExpr *from);
|
||||
|
||||
#ifdef OPTIMIZER_DEBUG
|
||||
extern void debug_print_rel(Query *root, RelOptInfo *rel);
|
||||
extern void debug_print_rel(PlannerInfo *root, RelOptInfo *rel);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* indxpath.c
|
||||
* routines to generate index paths
|
||||
*/
|
||||
extern void create_index_paths(Query *root, RelOptInfo *rel);
|
||||
extern List *generate_bitmap_or_paths(Query *root, RelOptInfo *rel,
|
||||
extern void create_index_paths(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern List *generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *clauses, List *outer_clauses,
|
||||
bool isjoininner,
|
||||
Relids outer_relids);
|
||||
extern Path *best_inner_indexscan(Query *root, RelOptInfo *rel,
|
||||
extern Path *best_inner_indexscan(PlannerInfo *root, RelOptInfo *rel,
|
||||
Relids outer_relids, JoinType jointype);
|
||||
extern List *group_clauses_by_indexkey(IndexOptInfo *index,
|
||||
List *clauses, List *outer_clauses,
|
||||
@@ -49,7 +48,7 @@ extern bool match_index_to_operand(Node *operand, int indexcol,
|
||||
IndexOptInfo *index);
|
||||
extern List *expand_indexqual_conditions(IndexOptInfo *index,
|
||||
List *clausegroups);
|
||||
extern void check_partial_indexes(Query *root, RelOptInfo *rel);
|
||||
extern void check_partial_indexes(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern bool pred_test(List *predicate_list, List *restrictinfo_list);
|
||||
extern List *flatten_clausegroups_list(List *clausegroups);
|
||||
|
||||
@@ -57,19 +56,19 @@ extern List *flatten_clausegroups_list(List *clausegroups);
|
||||
* orindxpath.c
|
||||
* additional routines for indexable OR clauses
|
||||
*/
|
||||
extern bool create_or_index_quals(Query *root, RelOptInfo *rel);
|
||||
extern bool create_or_index_quals(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* tidpath.h
|
||||
* routines to generate tid paths
|
||||
*/
|
||||
extern void create_tidscan_paths(Query *root, RelOptInfo *rel);
|
||||
extern void create_tidscan_paths(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* joinpath.c
|
||||
* routines to create join paths
|
||||
*/
|
||||
extern void add_paths_to_joinrel(Query *root, RelOptInfo *joinrel,
|
||||
extern void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel,
|
||||
RelOptInfo *outerrel,
|
||||
RelOptInfo *innerrel,
|
||||
JoinType jointype,
|
||||
@@ -79,9 +78,9 @@ extern void add_paths_to_joinrel(Query *root, RelOptInfo *joinrel,
|
||||
* joinrels.c
|
||||
* routines to determine which relations to join
|
||||
*/
|
||||
extern List *make_rels_by_joins(Query *root, int level, List **joinrels);
|
||||
extern RelOptInfo *make_jointree_rel(Query *root, Node *jtnode);
|
||||
extern RelOptInfo *make_join_rel(Query *root,
|
||||
extern List *make_rels_by_joins(PlannerInfo *root, int level, List **joinrels);
|
||||
extern RelOptInfo *make_jointree_rel(PlannerInfo *root, Node *jtnode);
|
||||
extern RelOptInfo *make_join_rel(PlannerInfo *root,
|
||||
RelOptInfo *rel1, RelOptInfo *rel2,
|
||||
JoinType jointype);
|
||||
|
||||
@@ -97,10 +96,10 @@ typedef enum
|
||||
PATHKEYS_DIFFERENT /* neither pathkey includes the other */
|
||||
} PathKeysComparison;
|
||||
|
||||
extern void add_equijoined_keys(Query *root, RestrictInfo *restrictinfo);
|
||||
extern bool exprs_known_equal(Query *root, Node *item1, Node *item2);
|
||||
extern void generate_implied_equalities(Query *root);
|
||||
extern List *canonicalize_pathkeys(Query *root, List *pathkeys);
|
||||
extern void add_equijoined_keys(PlannerInfo *root, RestrictInfo *restrictinfo);
|
||||
extern bool exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2);
|
||||
extern void generate_implied_equalities(PlannerInfo *root);
|
||||
extern List *canonicalize_pathkeys(PlannerInfo *root, List *pathkeys);
|
||||
extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
|
||||
extern bool pathkeys_contained_in(List *keys1, List *keys2);
|
||||
extern PathKeysComparison compare_noncanonical_pathkeys(List *keys1,
|
||||
@@ -111,29 +110,29 @@ extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
|
||||
extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
|
||||
List *pathkeys,
|
||||
double fraction);
|
||||
extern List *build_index_pathkeys(Query *root, IndexOptInfo *index,
|
||||
extern List *build_index_pathkeys(PlannerInfo *root, IndexOptInfo *index,
|
||||
ScanDirection scandir);
|
||||
extern List *build_subquery_pathkeys(Query *root, RelOptInfo *rel,
|
||||
Query *subquery);
|
||||
extern List *build_join_pathkeys(Query *root,
|
||||
extern List *convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *subquery_pathkeys);
|
||||
extern List *build_join_pathkeys(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
List *outer_pathkeys);
|
||||
extern List *make_pathkeys_for_sortclauses(List *sortclauses,
|
||||
List *tlist);
|
||||
extern void cache_mergeclause_pathkeys(Query *root,
|
||||
extern void cache_mergeclause_pathkeys(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo);
|
||||
extern List *find_mergeclauses_for_pathkeys(Query *root,
|
||||
extern List *find_mergeclauses_for_pathkeys(PlannerInfo *root,
|
||||
List *pathkeys,
|
||||
List *restrictinfos);
|
||||
extern List *make_pathkeys_for_mergeclauses(Query *root,
|
||||
extern List *make_pathkeys_for_mergeclauses(PlannerInfo *root,
|
||||
List *mergeclauses,
|
||||
RelOptInfo *rel);
|
||||
extern int pathkeys_useful_for_merging(Query *root,
|
||||
extern int pathkeys_useful_for_merging(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *pathkeys);
|
||||
extern int pathkeys_useful_for_ordering(Query *root, List *pathkeys);
|
||||
extern List *truncate_useless_pathkeys(Query *root,
|
||||
extern int pathkeys_useful_for_ordering(PlannerInfo *root, List *pathkeys);
|
||||
extern List *truncate_useless_pathkeys(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *pathkeys);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user