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