| /*------------------------------------------------------------------------- | |
| * | |
| * planner.h | |
| * prototypes for planner.c. | |
| * | |
| * Note that the primary entry points for planner.c are declared in | |
| * optimizer/optimizer.h, because they're intended to be called from | |
| * non-planner code. Declarations here are meant for use by other | |
| * planner modules. | |
| * | |
| * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group | |
| * Portions Copyright (c) 1994, Regents of the University of California | |
| * | |
| * src/include/optimizer/planner.h | |
| * | |
| *------------------------------------------------------------------------- | |
| */ | |
| #ifndef PLANNER_H | |
| #define PLANNER_H | |
| #include "nodes/pathnodes.h" | |
| #include "nodes/plannerconfig.h" | |
| #include "nodes/plannodes.h" | |
| #include "optimizer/orcaopt.h" | |
| /* Hook for plugins to get control in planner() */ | |
| typedef PlannedStmt *(*planner_hook_type) (Query *parse, | |
| const char *query_string, | |
| int cursorOptions, | |
| ParamListInfo boundParams, | |
| OptimizerOptions *optimizer_options); | |
| extern PGDLLIMPORT planner_hook_type planner_hook; | |
| /* Hook for plugins to get control when grouping_planner() plans upper rels */ | |
| typedef void (*create_upper_paths_hook_type) (PlannerInfo *root, | |
| UpperRelationKind stage, | |
| RelOptInfo *input_rel, | |
| RelOptInfo *output_rel, | |
| void *extra); | |
| extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook; | |
| extern PlannedStmt *standard_planner(Query *parse, const char *query_string, | |
| int cursorOptions, | |
| ParamListInfo boundParams, | |
| OptimizerOptions *optimizer_options); | |
| extern PlannerInfo *subquery_planner(PlannerGlobal *glob, Query *parse, | |
| PlannerInfo *parent_root, | |
| bool hasRecursion, double tuple_fraction, | |
| PlannerConfig *config); | |
| extern RowMarkType select_rowmark_type(RangeTblEntry *rte, | |
| LockClauseStrength strength); | |
| extern bool limit_needed(Query *parse); | |
| extern void mark_partial_aggref(Aggref *agg, AggSplit aggsplit); | |
| extern Path *get_cheapest_fractional_path(RelOptInfo *rel, | |
| double tuple_fraction); | |
| extern Expr *preprocess_phv_expression(PlannerInfo *root, Expr *expr); | |
| extern bool optimizer_init; | |
| extern void preprocess_qual_conditions(PlannerInfo *root, Node *jtnode); | |
| /* | |
| * Data specific to grouping sets | |
| */ | |
| typedef struct | |
| { | |
| List *rollups; | |
| List *hash_sets_idx; | |
| double dNumHashGroups; | |
| bool any_hashable; | |
| Bitmapset *unsortable_refs; | |
| Bitmapset *unhashable_refs; | |
| List *unsortable_sets; | |
| int *tleref_to_colnum_map; | |
| } grouping_sets_data; | |
| /* Passthrough data for standard_qp_callback */ | |
| typedef struct | |
| { | |
| List *activeWindows; /* active windows, if any */ | |
| grouping_sets_data *gset_data; /* grouping sets data, if any */ | |
| } standard_qp_extra; | |
| #endif /* PLANNER_H */ |