PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
optimizer.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * optimizer.h
4 * External API for the Postgres planner.
5 *
6 * This header is meant to define everything that the core planner
7 * exposes for use by non-planner modules.
8 *
9 * Note that there are files outside src/backend/optimizer/ that are
10 * considered planner modules, because they're too much in bed with
11 * planner operations to be treated otherwise. FDW planning code is an
12 * example. For the most part, however, code outside the core planner
13 * should not need to include any optimizer/ header except this one.
14 *
15 * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
16 * Portions Copyright (c) 1994, Regents of the University of California
17 *
18 * src/include/optimizer/optimizer.h
19 *
20 *-------------------------------------------------------------------------
21 */
22#ifndef OPTIMIZER_H
23#define OPTIMIZER_H
24
25#include "nodes/parsenodes.h"
26
27/*
28 * We don't want to include nodes/pathnodes.h here, because non-planner
29 * code should generally treat PlannerInfo as an opaque typedef.
30 * But we'd like such code to use that typedef name, so define the
31 * typedef either here or in pathnodes.h, whichever is read first.
32 */
33#ifndef HAVE_PLANNERINFO_TYPEDEF
34typedef struct PlannerInfo PlannerInfo;
35#define HAVE_PLANNERINFO_TYPEDEF 1
36#endif
37
38/* Likewise for IndexOptInfo and SpecialJoinInfo. */
39#ifndef HAVE_INDEXOPTINFO_TYPEDEF
41#define HAVE_INDEXOPTINFO_TYPEDEF 1
42#endif
43#ifndef HAVE_SPECIALJOININFO_TYPEDEF
45#define HAVE_SPECIALJOININFO_TYPEDEF 1
46#endif
47
48/* It also seems best not to include plannodes.h, params.h, or htup.h here */
49struct PlannedStmt;
51struct HeapTupleData;
52
53
54/* in path/clausesel.c: */
55
57 Node *clause,
58 int varRelid,
59 JoinType jointype,
60 SpecialJoinInfo *sjinfo);
62 Node *clause,
63 int varRelid,
64 JoinType jointype,
65 SpecialJoinInfo *sjinfo,
66 bool use_extended_stats);
68 List *clauses,
69 int varRelid,
70 JoinType jointype,
71 SpecialJoinInfo *sjinfo);
73 List *clauses,
74 int varRelid,
75 JoinType jointype,
76 SpecialJoinInfo *sjinfo,
77 bool use_extended_stats);
78
79/* in path/costsize.c: */
80
81/* widely used cost parameters */
82extern PGDLLIMPORT double seq_page_cost;
83extern PGDLLIMPORT double random_page_cost;
84extern PGDLLIMPORT double cpu_tuple_cost;
86extern PGDLLIMPORT double cpu_operator_cost;
91
92extern double clamp_row_est(double nrows);
93extern int32 clamp_width_est(int64 tuple_width);
95
96/* in path/indxpath.c: */
97
100
101/* in plan/planner.c: */
102
103/* possible values for debug_parallel_query */
104typedef enum
105{
110
111/* GUC parameters */
115
116extern struct PlannedStmt *planner(Query *parse, const char *query_string,
117 int cursorOptions,
118 struct ParamListInfoData *boundParams);
119
120extern Expr *expression_planner(Expr *expr);
123 List **invalItems);
124
125extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid);
126extern int plan_create_index_workers(Oid tableOid, Oid indexOid);
127
128/* in plan/setrefs.c: */
129
130extern void extract_query_dependencies(Node *query,
133 bool *hasRowSecurity);
134
135/* in prep/prepqual.c: */
136
137extern Node *negate_clause(Node *node);
138extern Expr *canonicalize_qual(Expr *qual, bool is_check);
139
140/* in util/clauses.c: */
141
142extern bool contain_mutable_functions(Node *clause);
144extern bool contain_volatile_functions(Node *clause);
147
149
150extern void convert_saop_to_hashed_saop(Node *node);
151
153
154extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod,
155 Oid result_collation);
156
157extern List *expand_function_arguments(List *args, bool include_out_arguments,
158 Oid result_type,
159 struct HeapTupleData *func_tuple);
160
161/* in util/predtest.c: */
162
163extern bool predicate_implied_by(List *predicate_list, List *clause_list,
164 bool weak);
165extern bool predicate_refuted_by(List *predicate_list, List *clause_list,
166 bool weak);
167
168/* in util/tlist.c: */
169
170extern int count_nonjunk_tlist_entries(List *tlist);
172 List *targetList);
174 List *targetList);
176 List *targetList);
177extern List *get_sortgrouplist_exprs(List *sgClauses,
178 List *targetList);
180 List *clauses);
182 List *clauses);
183
184/* in util/var.c: */
185
186/* Bits that can be OR'd into the flags argument of pull_var_clause() */
187#define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */
188#define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */
189#define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */
190#define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */
191#define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in
192 * output list */
193#define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar
194 * arguments */
195
196extern Bitmapset *pull_varnos(PlannerInfo *root, Node *node);
197extern Bitmapset *pull_varnos_of_level(PlannerInfo *root, Node *node, int levelsup);
198extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos);
199extern List *pull_vars_of_level(Node *node, int levelsup);
200extern bool contain_var_clause(Node *node);
201extern bool contain_vars_of_level(Node *node, int levelsup);
202extern int locate_var_of_level(Node *node, int levelsup);
203extern List *pull_var_clause(Node *node, int flags);
204extern Node *flatten_join_alias_vars(PlannerInfo *root, Query *query, Node *node);
205extern Node *flatten_group_exprs(PlannerInfo *root, Query *query, Node *node);
206
207#endif /* OPTIMIZER_H */
#define PGDLLIMPORT
Definition: c.h:1274
int64_t int64
Definition: c.h:482
int32_t int32
Definition: c.h:481
unsigned int Index
Definition: c.h:568
int x
Definition: isn.c:70
double Cardinality
Definition: nodes.h:252
double Selectivity
Definition: nodes.h:250
JoinType
Definition: nodes.h:288
PGDLLIMPORT double cpu_operator_cost
Definition: costsize.c:134
bool contain_volatile_functions_not_nextval(Node *clause)
Definition: clauses.c:672
PGDLLIMPORT bool parallel_leader_participation
Definition: planner.c:68
Expr * canonicalize_qual(Expr *qual, bool is_check)
Definition: prepqual.c:293
Expr * expression_planner_with_deps(Expr *expr, List **relationOids, List **invalItems)
Definition: planner.c:6597
Selectivity clause_selectivity_ext(PlannerInfo *root, Node *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, bool use_extended_stats)
Definition: clausesel.c:684
bool predicate_refuted_by(List *predicate_list, List *clause_list, bool weak)
Definition: predtest.c:222
Bitmapset * pull_varnos(PlannerInfo *root, Node *node)
Definition: var.c:113
bool contain_vars_of_level(Node *node, int levelsup)
Definition: var.c:443
Node * flatten_group_exprs(PlannerInfo *root, Query *query, Node *node)
Definition: var.c:924
PGDLLIMPORT bool enable_distinct_reordering
Definition: planner.c:69
bool contain_var_clause(Node *node)
Definition: var.c:405
SortGroupClause * get_sortgroupref_clause_noerr(Index sortref, List *clauses)
Definition: tlist.c:443
bool is_pseudo_constant_for_index(PlannerInfo *root, Node *expr, IndexOptInfo *index)
Definition: indxpath.c:4460
bool plan_cluster_use_sort(Oid tableOid, Oid indexOid)
Definition: planner.c:6650
PGDLLIMPORT double parallel_tuple_cost
Definition: costsize.c:135
bool contain_mutable_functions(Node *clause)
Definition: clauses.c:369
SortGroupClause * get_sortgroupref_clause(Index sortref, List *clauses)
Definition: tlist.c:422
Node * estimate_expression_value(PlannerInfo *root, Node *node)
Definition: clauses.c:2394
int plan_create_index_workers(Oid tableOid, Oid indexOid)
Definition: planner.c:6772
PGDLLIMPORT double parallel_setup_cost
Definition: costsize.c:136
Selectivity clauselist_selectivity(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Definition: clausesel.c:100
List * pull_vars_of_level(Node *node, int levelsup)
Definition: var.c:338
List * pull_var_clause(Node *node, int flags)
Definition: var.c:609
Node * eval_const_expressions(PlannerInfo *root, Node *node)
Definition: clauses.c:2253
bool contain_volatile_functions_after_planning(Expr *expr)
Definition: clauses.c:658
Bitmapset * pull_varnos_of_level(PlannerInfo *root, Node *node, int levelsup)
Definition: var.c:139
PGDLLIMPORT int debug_parallel_query
Definition: planner.c:67
bool contain_mutable_functions_after_planning(Expr *expr)
Definition: clauses.c:489
TargetEntry * get_sortgroupclause_tle(SortGroupClause *sgClause, List *targetList)
Definition: tlist.c:367
Selectivity clauselist_selectivity_ext(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, bool use_extended_stats)
Definition: clausesel.c:117
Node * flatten_join_alias_vars(PlannerInfo *root, Query *query, Node *node)
Definition: var.c:745
DebugParallelMode
Definition: optimizer.h:105
@ DEBUG_PARALLEL_REGRESS
Definition: optimizer.h:108
@ DEBUG_PARALLEL_ON
Definition: optimizer.h:107
@ DEBUG_PARALLEL_OFF
Definition: optimizer.h:106
List * expand_function_arguments(List *args, bool include_out_arguments, Oid result_type, struct HeapTupleData *func_tuple)
Node * negate_clause(Node *node)
Definition: prepqual.c:73
void convert_saop_to_hashed_saop(Node *node)
Definition: clauses.c:2286
PGDLLIMPORT double cpu_tuple_cost
Definition: costsize.c:132
List * get_sortgrouplist_exprs(List *sgClauses, List *targetList)
Definition: tlist.c:392
bool predicate_implied_by(List *predicate_list, List *clause_list, bool weak)
Definition: predtest.c:152
PGDLLIMPORT double recursive_worktable_factor
Definition: costsize.c:137
TargetEntry * get_sortgroupref_tle(Index sortref, List *targetList)
Definition: tlist.c:345
void extract_query_dependencies(Node *query, List **relationOids, List **invalItems, bool *hasRowSecurity)
Definition: setrefs.c:3557
Expr * expression_planner(Expr *expr)
Definition: planner.c:6570
PGDLLIMPORT double cpu_index_tuple_cost
Definition: costsize.c:133
int count_nonjunk_tlist_entries(List *tlist)
Definition: tlist.c:186
void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos)
Definition: var.c:295
PGDLLIMPORT double seq_page_cost
Definition: costsize.c:130
int locate_var_of_level(Node *node, int levelsup)
Definition: var.c:511
struct PlannedStmt * planner(Query *parse, const char *query_string, int cursorOptions, struct ParamListInfoData *boundParams)
double clamp_row_est(double nrows)
Definition: costsize.c:213
PGDLLIMPORT int effective_cache_size
Definition: costsize.c:139
long clamp_cardinality_to_long(Cardinality x)
Definition: costsize.c:265
PGDLLIMPORT double random_page_cost
Definition: costsize.c:131
int32 clamp_width_est(int64 tuple_width)
Definition: costsize.c:242
Expr * evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod, Oid result_collation)
Definition: clauses.c:4971
bool contain_volatile_functions(Node *clause)
Definition: clauses.c:537
Node * get_sortgroupclause_expr(SortGroupClause *sgClause, List *targetList)
Definition: tlist.c:379
Selectivity clause_selectivity(PlannerInfo *root, Node *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Definition: clausesel.c:667
unsigned int Oid
Definition: postgres_ext.h:31
tree ctl root
Definition: radixtree.h:1888
static struct subre * parse(struct vars *v, int stopper, int type, struct state *init, struct state *final)
Definition: regcomp.c:717
Definition: pg_list.h:54
Definition: nodes.h:129
List * invalItems
Definition: plannodes.h:91
List * relationOids
Definition: plannodes.h:89
Definition: type.h:96