mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
This completes my project of improving usage of hashing for duplicate elimination (aggregate functions with DISTINCT remain undone, but that's for some other day). As with the previous patches, this means we can INTERSECT/EXCEPT on datatypes that can hash but not sort, and it means that INTERSECT/EXCEPT without ORDER BY are no longer certain to produce sorted output.
112 lines
3.8 KiB
C
112 lines
3.8 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* planmain.h
|
|
* prototypes for various files in optimizer/plan
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $PostgreSQL: pgsql/src/include/optimizer/planmain.h,v 1.109 2008/08/07 03:04:04 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PLANMAIN_H
|
|
#define PLANMAIN_H
|
|
|
|
#include "nodes/plannodes.h"
|
|
#include "nodes/relation.h"
|
|
|
|
/* GUC parameters */
|
|
#define DEFAULT_CURSOR_TUPLE_FRACTION 0.1
|
|
extern double cursor_tuple_fraction;
|
|
|
|
/*
|
|
* prototypes for plan/planmain.c
|
|
*/
|
|
extern void query_planner(PlannerInfo *root, List *tlist,
|
|
double tuple_fraction, double limit_tuples,
|
|
Path **cheapest_path, Path **sorted_path,
|
|
double *num_groups);
|
|
|
|
/*
|
|
* prototypes for plan/planagg.c
|
|
*/
|
|
extern Plan *optimize_minmax_aggregates(PlannerInfo *root, List *tlist,
|
|
Path *best_path);
|
|
|
|
/*
|
|
* prototypes for plan/createplan.c
|
|
*/
|
|
extern Plan *create_plan(PlannerInfo *root, Path *best_path);
|
|
extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual,
|
|
Index scanrelid, Plan *subplan, List *subrtable);
|
|
extern Append *make_append(List *appendplans, bool isTarget, List *tlist);
|
|
extern Sort *make_sort_from_pathkeys(PlannerInfo *root, Plan *lefttree,
|
|
List *pathkeys, double limit_tuples);
|
|
extern Sort *make_sort_from_sortclauses(PlannerInfo *root, List *sortcls,
|
|
Plan *lefttree);
|
|
extern Sort *make_sort_from_groupcols(PlannerInfo *root, List *groupcls,
|
|
AttrNumber *grpColIdx, Plan *lefttree);
|
|
extern Agg *make_agg(PlannerInfo *root, List *tlist, List *qual,
|
|
AggStrategy aggstrategy,
|
|
int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators,
|
|
long numGroups, int numAggs,
|
|
Plan *lefttree);
|
|
extern Group *make_group(PlannerInfo *root, List *tlist, List *qual,
|
|
int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators,
|
|
double numGroups,
|
|
Plan *lefttree);
|
|
extern Plan *materialize_finished_plan(Plan *subplan);
|
|
extern Unique *make_unique(Plan *lefttree, List *distinctList);
|
|
extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount,
|
|
int64 offset_est, int64 count_est);
|
|
extern SetOp *make_setop(SetOpCmd cmd, SetOpStrategy strategy, Plan *lefttree,
|
|
List *distinctList, AttrNumber flagColIdx, long numGroups,
|
|
double outputRows);
|
|
extern Result *make_result(PlannerInfo *root, List *tlist,
|
|
Node *resconstantqual, Plan *subplan);
|
|
extern bool is_projection_capable_plan(Plan *plan);
|
|
|
|
/*
|
|
* prototypes for plan/initsplan.c
|
|
*/
|
|
extern int from_collapse_limit;
|
|
extern int join_collapse_limit;
|
|
|
|
extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
|
|
extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
|
|
extern void add_IN_vars_to_tlists(PlannerInfo *root);
|
|
extern void add_vars_to_targetlist(PlannerInfo *root, List *vars,
|
|
Relids where_needed);
|
|
extern List *deconstruct_jointree(PlannerInfo *root);
|
|
extern void distribute_restrictinfo_to_rels(PlannerInfo *root,
|
|
RestrictInfo *restrictinfo);
|
|
extern void process_implied_equality(PlannerInfo *root,
|
|
Oid opno,
|
|
Expr *item1,
|
|
Expr *item2,
|
|
Relids qualscope,
|
|
bool below_outer_join,
|
|
bool both_const);
|
|
extern RestrictInfo *build_implied_join_equality(Oid opno,
|
|
Expr *item1,
|
|
Expr *item2,
|
|
Relids qualscope);
|
|
|
|
/*
|
|
* prototypes for plan/setrefs.c
|
|
*/
|
|
extern Plan *set_plan_references(PlannerGlobal *glob,
|
|
Plan *plan,
|
|
List *rtable);
|
|
extern List *set_returning_clause_references(PlannerGlobal *glob,
|
|
List *rlist,
|
|
Plan *topplan,
|
|
Index resultRelation);
|
|
extern void fix_opfuncids(Node *node);
|
|
extern void set_opfuncid(OpExpr *opexpr);
|
|
extern void set_sa_opfuncid(ScalarArrayOpExpr *opexpr);
|
|
|
|
#endif /* PLANMAIN_H */
|