mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +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:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/cost.h,v 1.67 2005/04/22 21:58:32 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/cost.h,v 1.68 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -51,53 +51,53 @@ extern bool enable_mergejoin;
|
||||
extern bool enable_hashjoin;
|
||||
|
||||
extern double clamp_row_est(double nrows);
|
||||
extern void cost_seqscan(Path *path, Query *root, RelOptInfo *baserel);
|
||||
extern void cost_index(IndexPath *path, Query *root, IndexOptInfo *index,
|
||||
extern void cost_seqscan(Path *path, PlannerInfo *root, RelOptInfo *baserel);
|
||||
extern void cost_index(IndexPath *path, PlannerInfo *root, IndexOptInfo *index,
|
||||
List *indexQuals, bool is_injoin);
|
||||
extern void cost_bitmap_heap_scan(Path *path, Query *root, RelOptInfo *baserel,
|
||||
extern void cost_bitmap_heap_scan(Path *path, PlannerInfo *root, RelOptInfo *baserel,
|
||||
Path *bitmapqual, bool is_injoin);
|
||||
extern void cost_bitmap_and_node(BitmapAndPath *path, Query *root);
|
||||
extern void cost_bitmap_or_node(BitmapOrPath *path, Query *root);
|
||||
extern void cost_bitmap_and_node(BitmapAndPath *path, PlannerInfo *root);
|
||||
extern void cost_bitmap_or_node(BitmapOrPath *path, PlannerInfo *root);
|
||||
extern void cost_bitmap_tree_node(Path *path, Cost *cost, Selectivity *selec);
|
||||
extern void cost_tidscan(Path *path, Query *root,
|
||||
extern void cost_tidscan(Path *path, PlannerInfo *root,
|
||||
RelOptInfo *baserel, List *tideval);
|
||||
extern void cost_subqueryscan(Path *path, RelOptInfo *baserel);
|
||||
extern void cost_functionscan(Path *path, Query *root,
|
||||
extern void cost_functionscan(Path *path, PlannerInfo *root,
|
||||
RelOptInfo *baserel);
|
||||
extern void cost_sort(Path *path, Query *root,
|
||||
extern void cost_sort(Path *path, PlannerInfo *root,
|
||||
List *pathkeys, Cost input_cost, double tuples, int width);
|
||||
extern void cost_material(Path *path,
|
||||
Cost input_cost, double tuples, int width);
|
||||
extern void cost_agg(Path *path, Query *root,
|
||||
extern void cost_agg(Path *path, PlannerInfo *root,
|
||||
AggStrategy aggstrategy, int numAggs,
|
||||
int numGroupCols, double numGroups,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double input_tuples);
|
||||
extern void cost_group(Path *path, Query *root,
|
||||
extern void cost_group(Path *path, PlannerInfo *root,
|
||||
int numGroupCols, double numGroups,
|
||||
Cost input_startup_cost, Cost input_total_cost,
|
||||
double input_tuples);
|
||||
extern void cost_nestloop(NestPath *path, Query *root);
|
||||
extern void cost_mergejoin(MergePath *path, Query *root);
|
||||
extern void cost_hashjoin(HashPath *path, Query *root);
|
||||
extern void cost_nestloop(NestPath *path, PlannerInfo *root);
|
||||
extern void cost_mergejoin(MergePath *path, PlannerInfo *root);
|
||||
extern void cost_hashjoin(HashPath *path, PlannerInfo *root);
|
||||
extern void cost_qual_eval(QualCost *cost, List *quals);
|
||||
extern void set_baserel_size_estimates(Query *root, RelOptInfo *rel);
|
||||
extern void set_joinrel_size_estimates(Query *root, RelOptInfo *rel,
|
||||
extern void set_baserel_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern void set_joinrel_size_estimates(PlannerInfo *root, RelOptInfo *rel,
|
||||
RelOptInfo *outer_rel,
|
||||
RelOptInfo *inner_rel,
|
||||
JoinType jointype,
|
||||
List *restrictlist);
|
||||
extern void set_function_size_estimates(Query *root, RelOptInfo *rel);
|
||||
extern void set_function_size_estimates(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
/*
|
||||
* prototypes for clausesel.c
|
||||
* routines to compute clause selectivities
|
||||
*/
|
||||
extern Selectivity clauselist_selectivity(Query *root,
|
||||
extern Selectivity clauselist_selectivity(PlannerInfo *root,
|
||||
List *clauses,
|
||||
int varRelid,
|
||||
JoinType jointype);
|
||||
extern Selectivity clause_selectivity(Query *root,
|
||||
extern Selectivity clause_selectivity(PlannerInfo *root,
|
||||
Node *clause,
|
||||
int varRelid,
|
||||
JoinType jointype);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/geqo.h,v 1.38 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/geqo.h,v 1.39 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -72,13 +72,14 @@ extern double Geqo_selection_bias;
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
Query *root; /* the query we are planning */
|
||||
PlannerInfo *root; /* the query we are planning */
|
||||
List *initial_rels; /* the base relations */
|
||||
} GeqoEvalData;
|
||||
|
||||
|
||||
/* routines in geqo_main.c */
|
||||
extern RelOptInfo *geqo(Query *root, int number_of_rels, List *initial_rels);
|
||||
extern RelOptInfo *geqo(PlannerInfo *root,
|
||||
int number_of_rels, List *initial_rels);
|
||||
|
||||
/* routines in geqo_eval.c */
|
||||
extern Cost geqo_eval(Gene *tour, int num_gene, GeqoEvalData *evaldata);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/joininfo.h,v 1.28 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/joininfo.h,v 1.29 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -20,10 +20,10 @@
|
||||
extern JoinInfo *find_joininfo_node(RelOptInfo *this_rel, Relids join_relids);
|
||||
extern JoinInfo *make_joininfo_node(RelOptInfo *this_rel, Relids join_relids);
|
||||
|
||||
extern void add_join_clause_to_rels(Query *root,
|
||||
extern void add_join_clause_to_rels(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo,
|
||||
Relids join_relids);
|
||||
extern void remove_join_clause_from_rels(Query *root,
|
||||
extern void remove_join_clause_from_rels(PlannerInfo *root,
|
||||
RestrictInfo *restrictinfo,
|
||||
Relids join_relids);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/pathnode.h,v 1.60 2005/04/22 21:58:32 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/pathnode.h,v 1.61 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -27,35 +27,35 @@ extern int compare_fractional_path_costs(Path *path1, Path *path2,
|
||||
extern void set_cheapest(RelOptInfo *parent_rel);
|
||||
extern void add_path(RelOptInfo *parent_rel, Path *new_path);
|
||||
|
||||
extern Path *create_seqscan_path(Query *root, RelOptInfo *rel);
|
||||
extern IndexPath *create_index_path(Query *root,
|
||||
extern Path *create_seqscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
extern IndexPath *create_index_path(PlannerInfo *root,
|
||||
IndexOptInfo *index,
|
||||
List *clause_groups,
|
||||
List *pathkeys,
|
||||
ScanDirection indexscandir,
|
||||
bool isjoininner);
|
||||
extern BitmapHeapPath *create_bitmap_heap_path(Query *root,
|
||||
extern BitmapHeapPath *create_bitmap_heap_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
Path *bitmapqual,
|
||||
bool isjoininner);
|
||||
extern BitmapAndPath *create_bitmap_and_path(Query *root,
|
||||
extern BitmapAndPath *create_bitmap_and_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *bitmapquals);
|
||||
extern BitmapOrPath *create_bitmap_or_path(Query *root,
|
||||
extern BitmapOrPath *create_bitmap_or_path(PlannerInfo *root,
|
||||
RelOptInfo *rel,
|
||||
List *bitmapquals);
|
||||
extern TidPath *create_tidscan_path(Query *root, RelOptInfo *rel,
|
||||
extern TidPath *create_tidscan_path(PlannerInfo *root, RelOptInfo *rel,
|
||||
List *tideval);
|
||||
extern AppendPath *create_append_path(RelOptInfo *rel, List *subpaths);
|
||||
extern ResultPath *create_result_path(RelOptInfo *rel, Path *subpath,
|
||||
List *constantqual);
|
||||
extern MaterialPath *create_material_path(RelOptInfo *rel, Path *subpath);
|
||||
extern UniquePath *create_unique_path(Query *root, RelOptInfo *rel,
|
||||
extern UniquePath *create_unique_path(PlannerInfo *root, RelOptInfo *rel,
|
||||
Path *subpath);
|
||||
extern Path *create_subqueryscan_path(RelOptInfo *rel, List *pathkeys);
|
||||
extern Path *create_functionscan_path(Query *root, RelOptInfo *rel);
|
||||
extern Path *create_functionscan_path(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
extern NestPath *create_nestloop_path(Query *root,
|
||||
extern NestPath *create_nestloop_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
Path *outer_path,
|
||||
@@ -63,7 +63,7 @@ extern NestPath *create_nestloop_path(Query *root,
|
||||
List *restrict_clauses,
|
||||
List *pathkeys);
|
||||
|
||||
extern MergePath *create_mergejoin_path(Query *root,
|
||||
extern MergePath *create_mergejoin_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
Path *outer_path,
|
||||
@@ -74,7 +74,7 @@ extern MergePath *create_mergejoin_path(Query *root,
|
||||
List *outersortkeys,
|
||||
List *innersortkeys);
|
||||
|
||||
extern HashPath *create_hashjoin_path(Query *root,
|
||||
extern HashPath *create_hashjoin_path(PlannerInfo *root,
|
||||
RelOptInfo *joinrel,
|
||||
JoinType jointype,
|
||||
Path *outer_path,
|
||||
@@ -85,11 +85,11 @@ extern HashPath *create_hashjoin_path(Query *root,
|
||||
/*
|
||||
* prototypes for relnode.c
|
||||
*/
|
||||
extern void build_base_rel(Query *root, int relid);
|
||||
extern RelOptInfo *build_other_rel(Query *root, int relid);
|
||||
extern RelOptInfo *find_base_rel(Query *root, int relid);
|
||||
extern RelOptInfo *find_join_rel(Query *root, Relids relids);
|
||||
extern RelOptInfo *build_join_rel(Query *root,
|
||||
extern void build_base_rel(PlannerInfo *root, int relid);
|
||||
extern RelOptInfo *build_other_rel(PlannerInfo *root, int relid);
|
||||
extern RelOptInfo *find_base_rel(PlannerInfo *root, int relid);
|
||||
extern RelOptInfo *find_join_rel(PlannerInfo *root, Relids relids);
|
||||
extern RelOptInfo *build_join_rel(PlannerInfo *root,
|
||||
Relids joinrelids,
|
||||
RelOptInfo *outer_rel,
|
||||
RelOptInfo *inner_rel,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/plancat.h,v 1.35 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/plancat.h,v 1.36 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
extern void get_relation_info(Oid relationObjectId, RelOptInfo *rel);
|
||||
|
||||
extern List *build_physical_tlist(Query *root, RelOptInfo *rel);
|
||||
extern List *build_physical_tlist(PlannerInfo *root, RelOptInfo *rel);
|
||||
|
||||
extern List *find_inheritance_children(Oid inhparent);
|
||||
|
||||
@@ -27,12 +27,12 @@ extern bool has_subclass(Oid relationId);
|
||||
|
||||
extern bool has_unique_index(RelOptInfo *rel, AttrNumber attno);
|
||||
|
||||
extern Selectivity restriction_selectivity(Query *root,
|
||||
extern Selectivity restriction_selectivity(PlannerInfo *root,
|
||||
Oid operator,
|
||||
List *args,
|
||||
int varRelid);
|
||||
|
||||
extern Selectivity join_selectivity(Query *root,
|
||||
extern Selectivity join_selectivity(PlannerInfo *root,
|
||||
Oid operator,
|
||||
List *args,
|
||||
JoinType jointype);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/planmain.h,v 1.85 2005/05/22 22:30:20 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/planmain.h,v 1.86 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -20,33 +20,34 @@
|
||||
/*
|
||||
* prototypes for plan/planmain.c
|
||||
*/
|
||||
extern void query_planner(Query *root, List *tlist, double tuple_fraction,
|
||||
Path **cheapest_path, Path **sorted_path);
|
||||
extern void query_planner(PlannerInfo *root, List *tlist,
|
||||
double tuple_fraction,
|
||||
Path **cheapest_path, Path **sorted_path);
|
||||
|
||||
/*
|
||||
* prototypes for plan/planagg.c
|
||||
*/
|
||||
extern Plan *optimize_minmax_aggregates(Query *root, List *tlist,
|
||||
extern Plan *optimize_minmax_aggregates(PlannerInfo *root, List *tlist,
|
||||
Path *best_path);
|
||||
|
||||
/*
|
||||
* prototypes for plan/createplan.c
|
||||
*/
|
||||
extern Plan *create_plan(Query *root, Path *best_path);
|
||||
extern Plan *create_plan(PlannerInfo *root, Path *best_path);
|
||||
extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual,
|
||||
Index scanrelid, Plan *subplan);
|
||||
extern Append *make_append(List *appendplans, bool isTarget, List *tlist);
|
||||
extern Sort *make_sort_from_sortclauses(Query *root, List *sortcls,
|
||||
extern Sort *make_sort_from_sortclauses(PlannerInfo *root, List *sortcls,
|
||||
Plan *lefttree);
|
||||
extern Sort *make_sort_from_groupcols(Query *root, List *groupcls,
|
||||
extern Sort *make_sort_from_groupcols(PlannerInfo *root, List *groupcls,
|
||||
AttrNumber *grpColIdx, Plan *lefttree);
|
||||
extern List *order_qual_clauses(Query *root, List *clauses);
|
||||
extern Agg *make_agg(Query *root, List *tlist, List *qual,
|
||||
extern List *order_qual_clauses(PlannerInfo *root, List *clauses);
|
||||
extern Agg *make_agg(PlannerInfo *root, List *tlist, List *qual,
|
||||
AggStrategy aggstrategy,
|
||||
int numGroupCols, AttrNumber *grpColIdx,
|
||||
long numGroups, int numAggs,
|
||||
Plan *lefttree);
|
||||
extern Group *make_group(Query *root, List *tlist, List *qual,
|
||||
extern Group *make_group(PlannerInfo *root, List *tlist, List *qual,
|
||||
int numGroupCols, AttrNumber *grpColIdx,
|
||||
double numGroups,
|
||||
Plan *lefttree);
|
||||
@@ -62,10 +63,10 @@ extern bool is_projection_capable_plan(Plan *plan);
|
||||
/*
|
||||
* prototypes for plan/initsplan.c
|
||||
*/
|
||||
extern void add_base_rels_to_query(Query *root, Node *jtnode);
|
||||
extern void build_base_rel_tlists(Query *root, List *final_tlist);
|
||||
extern Relids distribute_quals_to_rels(Query *root, Node *jtnode);
|
||||
extern void process_implied_equality(Query *root,
|
||||
extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
|
||||
extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
|
||||
extern Relids distribute_quals_to_rels(PlannerInfo *root, Node *jtnode);
|
||||
extern void process_implied_equality(PlannerInfo *root,
|
||||
Node *item1, Node *item2,
|
||||
Oid sortop1, Oid sortop2,
|
||||
Relids item1_relids, Relids item2_relids,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/planner.h,v 1.32 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/planner.h,v 1.33 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -23,6 +23,7 @@ extern ParamListInfo PlannerBoundParamList; /* current boundParams */
|
||||
|
||||
extern Plan *planner(Query *parse, bool isCursor, int cursorOptions,
|
||||
ParamListInfo boundParams);
|
||||
extern Plan *subquery_planner(Query *parse, double tuple_fraction);
|
||||
extern Plan *subquery_planner(Query *parse, double tuple_fraction,
|
||||
List **subquery_pathkeys);
|
||||
|
||||
#endif /* PLANNER_H */
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/prep.h,v 1.49 2005/03/28 00:58:26 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/prep.h,v 1.50 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef PREP_H
|
||||
#define PREP_H
|
||||
|
||||
#include "nodes/parsenodes.h"
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
@@ -25,13 +24,13 @@
|
||||
extern int from_collapse_limit;
|
||||
extern int join_collapse_limit;
|
||||
|
||||
extern Node *pull_up_IN_clauses(Query *parse, Node *node);
|
||||
extern Node *pull_up_subqueries(Query *parse, Node *jtnode,
|
||||
extern Node *pull_up_IN_clauses(PlannerInfo *root, Node *node);
|
||||
extern Node *pull_up_subqueries(PlannerInfo *root, Node *jtnode,
|
||||
bool below_outer_join);
|
||||
extern void reduce_outer_joins(Query *parse);
|
||||
extern Node *simplify_jointree(Query *parse, Node *jtnode);
|
||||
extern void reduce_outer_joins(PlannerInfo *root);
|
||||
extern Node *simplify_jointree(PlannerInfo *root, Node *jtnode);
|
||||
extern Relids get_relids_in_jointree(Node *jtnode);
|
||||
extern Relids get_relids_for_join(Query *parse, int joinrelid);
|
||||
extern Relids get_relids_for_join(PlannerInfo *root, int joinrelid);
|
||||
|
||||
/*
|
||||
* prototypes for prepqual.c
|
||||
@@ -41,16 +40,16 @@ extern Expr *canonicalize_qual(Expr *qual);
|
||||
/*
|
||||
* prototypes for preptlist.c
|
||||
*/
|
||||
extern List *preprocess_targetlist(Query *parse, List *tlist);
|
||||
extern List *preprocess_targetlist(PlannerInfo *root, List *tlist);
|
||||
|
||||
/*
|
||||
* prototypes for prepunion.c
|
||||
*/
|
||||
extern Plan *plan_set_operations(Query *parse, List **sortClauses);
|
||||
extern Plan *plan_set_operations(PlannerInfo *root, List **sortClauses);
|
||||
|
||||
extern List *find_all_inheritors(Oid parentrel);
|
||||
|
||||
extern List *expand_inherited_rtentry(Query *parse, Index rti);
|
||||
extern List *expand_inherited_rtentry(PlannerInfo *root, Index rti);
|
||||
|
||||
extern Node *adjust_inherited_attrs(Node *node,
|
||||
Index old_rt_index, Oid old_relid,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/restrictinfo.h,v 1.29 2005/04/25 02:14:48 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/restrictinfo.h,v 1.30 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
extern RestrictInfo *make_restrictinfo(Expr *clause, bool is_pushed_down,
|
||||
bool valid_everywhere);
|
||||
extern List *make_restrictinfo_from_bitmapqual(Path *bitmapqual,
|
||||
@@ -25,10 +26,10 @@ extern bool restriction_is_or_clause(RestrictInfo *restrictinfo);
|
||||
extern List *get_actual_clauses(List *restrictinfo_list);
|
||||
extern void get_actual_join_clauses(List *restrictinfo_list,
|
||||
List **joinquals, List **otherquals);
|
||||
extern List *remove_redundant_join_clauses(Query *root,
|
||||
extern List *remove_redundant_join_clauses(PlannerInfo *root,
|
||||
List *restrictinfo_list,
|
||||
bool isouterjoin);
|
||||
extern List *select_nonredundant_join_clauses(Query *root,
|
||||
extern List *select_nonredundant_join_clauses(PlannerInfo *root,
|
||||
List *restrictinfo_list,
|
||||
List *reference_list,
|
||||
bool isouterjoin);
|
||||
|
||||
@@ -5,26 +5,27 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/subselect.h,v 1.24 2005/04/11 23:06:56 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/subselect.h,v 1.25 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef SUBSELECT_H
|
||||
#define SUBSELECT_H
|
||||
|
||||
#include "nodes/parsenodes.h"
|
||||
#include "nodes/plannodes.h"
|
||||
#include "nodes/relation.h"
|
||||
|
||||
|
||||
extern Index PlannerQueryLevel; /* level of current query */
|
||||
extern List *PlannerInitPlan; /* init subplans for current query */
|
||||
extern List *PlannerParamList; /* to keep track of cross-level Params */
|
||||
extern int PlannerPlanId; /* to assign unique ID to subquery plans */
|
||||
|
||||
extern Node *convert_IN_to_join(Query *parse, SubLink *sublink);
|
||||
extern Node *convert_IN_to_join(PlannerInfo *root, SubLink *sublink);
|
||||
extern Node *SS_replace_correlation_vars(Node *expr);
|
||||
extern Node *SS_process_sublinks(Node *expr, bool isQual);
|
||||
extern void SS_finalize_plan(Plan *plan, List *rtable);
|
||||
extern Param *SS_make_initplan_from_plan(Query *root, Plan *plan,
|
||||
extern Param *SS_make_initplan_from_plan(PlannerInfo *root, Plan *plan,
|
||||
Oid resulttype, int32 resulttypmod);
|
||||
|
||||
#endif /* SUBSELECT_H */
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* var.h
|
||||
* prototypes for var.c.
|
||||
* prototypes for optimizer/util/var.c.
|
||||
*
|
||||
*
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/var.h,v 1.32 2004/12/31 22:03:36 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/include/optimizer/var.h,v 1.33 2005/06/05 22:32:58 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -25,6 +25,6 @@ extern bool contain_vars_of_level(Node *node, int levelsup);
|
||||
extern bool contain_vars_above_level(Node *node, int levelsup);
|
||||
extern int find_minimum_var_level(Node *node);
|
||||
extern List *pull_var_clause(Node *node, bool includeUpperVars);
|
||||
extern Node *flatten_join_alias_vars(Query *root, Node *node);
|
||||
extern Node *flatten_join_alias_vars(PlannerInfo *root, Node *node);
|
||||
|
||||
#endif /* VAR_H */
|
||||
|
||||
Reference in New Issue
Block a user