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);
30 extern PGDLLIMPORT planner_hook_type planner_hook;
31 
32 /* Hook for plugins to get control when grouping_planner() plans upper rels */
33 typedef void (*create_upper_paths_hook_type) (PlannerInfo *root,
34 											  UpperRelationKind stage,
35 											  RelOptInfo *input_rel,
36 											  RelOptInfo *output_rel,
37 											  void *extra);
38 extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook;
39 
40 
41 extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
42 									 int cursorOptions,
43 									 ParamListInfo boundParams);
44 
45 extern PlannerInfo *subquery_planner(PlannerGlobal *glob, Query *parse,
46 									 PlannerInfo *parent_root,
47 									 bool hasRecursion, double tuple_fraction);
48 
49 extern RowMarkType select_rowmark_type(RangeTblEntry *rte,
50 									   LockClauseStrength strength);
51 
52 extern bool limit_needed(Query *parse);
53 
54 extern void mark_partial_aggref(Aggref *agg, AggSplit aggsplit);
55 
56 extern Path *get_cheapest_fractional_path(RelOptInfo *rel,
57 										  double tuple_fraction);
58 
59 extern Expr *preprocess_phv_expression(PlannerInfo *root, Expr *expr);
60 
61 #endif							/* PLANNER_H */
62