PostgreSQL Source Code  git master
planner.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * planner.h
4  * prototypes for planner.c.
5  *
6  * Note that the primary entry points for planner.c are declared in
7  * optimizer/optimizer.h, because they're intended to be called from
8  * non-planner code. Declarations here are meant for use by other
9  * planner modules.
10  *
11  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12  * Portions Copyright (c) 1994, Regents of the University of California
13  *
14  * src/include/optimizer/planner.h
15  *
16  *-------------------------------------------------------------------------
17  */
18 #ifndef PLANNER_H
19 #define PLANNER_H
20 
21 #include "nodes/pathnodes.h"
22 #include "nodes/plannodes.h"
23 
24 
25 /* Hook for plugins to get control in planner() */
26 typedef PlannedStmt *(*planner_hook_type) (Query *parse,
27  const char *query_string,
28  int cursorOptions,
29  ParamListInfo boundParams);
31 
32 /* Hook for plugins to get control when grouping_planner() plans upper rels */
34  UpperRelationKind stage,
35  RelOptInfo *input_rel,
36  RelOptInfo *output_rel,
37  void *extra);
39 
40 
41 extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
42  int cursorOptions,
43  ParamListInfo boundParams);
44 
46  PlannerInfo *parent_root,
47  bool hasRecursion, double tuple_fraction);
48 
50  LockClauseStrength strength);
51 
52 extern bool limit_needed(Query *parse);
53 
54 extern void mark_partial_aggref(Aggref *agg, AggSplit aggsplit);
55 
57  double tuple_fraction);
58 
59 extern Expr *preprocess_phv_expression(PlannerInfo *root, Expr *expr);
60 
61 #endif /* PLANNER_H */
UpperRelationKind
Definition: pathnodes.h:71
RowMarkType select_rowmark_type(RangeTblEntry *rte, LockClauseStrength strength)
Definition: planner.c:2761
PlannedStmt *(* planner_hook_type)(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
Definition: planner.h:26
bool limit_needed(Query *parse)
Definition: planner.c:3012
#define PGDLLIMPORT
Definition: c.h:1286
PlannerInfo * subquery_planner(PlannerGlobal *glob, Query *parse, PlannerInfo *parent_root, bool hasRecursion, double tuple_fraction)
Definition: planner.c:597
Path * get_cheapest_fractional_path(RelOptInfo *rel, double tuple_fraction)
Definition: planner.c:5992
Expr * preprocess_phv_expression(PlannerInfo *root, Expr *expr)
Definition: planner.c:1184
LockClauseStrength
Definition: lockoptions.h:21
void(* create_upper_paths_hook_type)(PlannerInfo *root, UpperRelationKind stage, RelOptInfo *input_rel, RelOptInfo *output_rel, void *extra)
Definition: planner.h:33
PlannedStmt * standard_planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
Definition: planner.c:280
AggSplit
Definition: nodes.h:780
RowMarkType
Definition: plannodes.h:1023
PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook
Definition: planner.c:77
void mark_partial_aggref(Aggref *agg, AggSplit aggsplit)
Definition: planner.c:5392
static struct subre * parse(struct vars *, int, int, struct state *, struct state *)
Definition: regcomp.c:648
PGDLLIMPORT planner_hook_type planner_hook
Definition: planner.c:74