PostgreSQL Source Code git master
Loading...
Searching...
No Matches
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-2026, 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
27typedef struct ExplainState ExplainState; /* defined in explain_state.h */
28
29/*
30 * We don't want to include nodes/pathnodes.h here, because non-planner
31 * code should generally treat PlannerInfo as an opaque typedef.
32 * But we'd like such code to use that typedef name, so define the
33 * typedef both here and in pathnodes.h.
34 */
35typedef struct PlannerInfo PlannerInfo;
38
39/* It also seems best not to include plannodes.h, params.h, or htup.h here */
40typedef struct PlannedStmt PlannedStmt;
42typedef struct HeapTupleData *HeapTuple;
43
44
45/* in path/clausesel.c: */
46
48 Node *clause,
49 int varRelid,
50 JoinType jointype,
51 SpecialJoinInfo *sjinfo);
53 Node *clause,
54 int varRelid,
55 JoinType jointype,
56 SpecialJoinInfo *sjinfo,
59 List *clauses,
60 int varRelid,
61 JoinType jointype,
62 SpecialJoinInfo *sjinfo);
64 List *clauses,
65 int varRelid,
66 JoinType jointype,
67 SpecialJoinInfo *sjinfo,
69
70/* in path/costsize.c: */
71
72/* widely used cost parameters */
73extern PGDLLIMPORT double seq_page_cost;
74extern PGDLLIMPORT double random_page_cost;
75extern PGDLLIMPORT double cpu_tuple_cost;
77extern PGDLLIMPORT double cpu_operator_cost;
82
83extern double clamp_row_est(double nrows);
85
86/* in path/indxpath.c: */
87
90
91/* in plan/planner.c: */
92
93/* possible values for debug_parallel_query */
100
101/* GUC parameters */
105
106extern PlannedStmt *planner(Query *parse, const char *query_string,
107 int cursorOptions,
108 ParamListInfo boundParams,
109 ExplainState *es);
110
111extern Expr *expression_planner(Expr *expr);
113 List **relationOids,
114 List **invalItems);
115
116extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid);
117extern int plan_create_index_workers(Oid tableOid, Oid indexOid);
118
119/* in plan/setrefs.c: */
120
121extern void extract_query_dependencies(Node *query,
122 List **relationOids,
123 List **invalItems,
124 bool *hasRowSecurity);
125
126/* in prep/prepqual.c: */
127
128extern Node *negate_clause(Node *node);
129extern Expr *canonicalize_qual(Expr *qual, bool is_check);
130
131/* in util/clauses.c: */
132
133extern bool contain_mutable_functions(Node *clause);
135extern bool contain_volatile_functions(Node *clause);
138
140
141extern void convert_saop_to_hashed_saop(Node *node);
142
144
145extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod,
147
148extern bool var_is_nonnullable(PlannerInfo *root, Var *var, bool use_rel_info);
149
150extern bool expr_is_nonnullable(PlannerInfo *root, Expr *expr,
151 bool use_rel_info);
152
154 Oid result_type,
156
158 Oid coltype, Oid arraycollid,
159 Oid inputcollid, List *exprs,
160 bool haveNonConst);
161
162/* in util/predtest.c: */
163
165 bool weak);
167 bool weak);
168
169/* in util/tlist.c: */
170
171extern int count_nonjunk_tlist_entries(List *tlist);
173 List *targetList);
175 List *targetList);
177 List *targetList);
179 List *targetList);
181 List *clauses);
183 List *clauses);
184
185/* in util/var.c: */
186
187/* Bits that can be OR'd into the flags argument of pull_var_clause() */
188#define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */
189#define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */
190#define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */
191#define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */
192#define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in
193 * output list */
194#define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar
195 * arguments */
196
197extern Bitmapset *pull_varnos(PlannerInfo *root, Node *node);
198extern Bitmapset *pull_varnos_of_level(PlannerInfo *root, Node *node, int levelsup);
199extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos);
200extern List *pull_vars_of_level(Node *node, int levelsup);
201extern bool contain_var_clause(Node *node);
202extern bool contain_vars_of_level(Node *node, int levelsup);
203extern bool contain_vars_returning_old_or_new(Node *node);
204extern int locate_var_of_level(Node *node, int levelsup);
205extern List *pull_var_clause(Node *node, int flags);
206extern Node *flatten_join_alias_vars(PlannerInfo *root, Query *query, Node *node);
207extern Node *flatten_group_exprs(PlannerInfo *root, Query *query, Node *node);
208
209#endif /* OPTIMIZER_H */
#define PGDLLIMPORT
Definition c.h:1334
int64_t int64
Definition c.h:543
int32_t int32
Definition c.h:542
unsigned int Index
Definition c.h:628
double Selectivity
Definition nodes.h:260
JoinType
Definition nodes.h:298
PGDLLIMPORT double cpu_operator_cost
Definition costsize.c:134
bool contain_volatile_functions_not_nextval(Node *clause)
Definition clauses.c:682
PGDLLIMPORT bool parallel_leader_participation
Definition planner.c:70
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:6844
struct HeapTupleData * HeapTuple
Definition optimizer.h:42
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
PlannedStmt * planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams, ExplainState *es)
Definition planner.c:315
Bitmapset * pull_varnos(PlannerInfo *root, Node *node)
Definition var.c:114
bool contain_vars_of_level(Node *node, int levelsup)
Definition var.c:444
Node * flatten_group_exprs(PlannerInfo *root, Query *query, Node *node)
Definition var.c:972
PGDLLIMPORT bool enable_distinct_reordering
Definition planner.c:71
bool contain_var_clause(Node *node)
Definition var.c:406
SortGroupClause * get_sortgroupref_clause_noerr(Index sortref, List *clauses)
Definition tlist.c:452
bool is_pseudo_constant_for_index(PlannerInfo *root, Node *expr, IndexOptInfo *index)
Definition indxpath.c:4537
bool plan_cluster_use_sort(Oid tableOid, Oid indexOid)
Definition planner.c:6897
PGDLLIMPORT double parallel_tuple_cost
Definition costsize.c:135
bool contain_mutable_functions(Node *clause)
Definition clauses.c:379
SortGroupClause * get_sortgroupref_clause(Index sortref, List *clauses)
Definition tlist.c:431
Node * estimate_expression_value(PlannerInfo *root, Node *node)
Definition clauses.c:2408
int plan_create_index_workers(Oid tableOid, Oid indexOid)
Definition planner.c:7019
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:339
List * pull_var_clause(Node *node, int flags)
Definition var.c:653
Node * eval_const_expressions(PlannerInfo *root, Node *node)
Definition clauses.c:2267
bool contain_volatile_functions_after_planning(Expr *expr)
Definition clauses.c:668
Bitmapset * pull_varnos_of_level(PlannerInfo *root, Node *node, int levelsup)
Definition var.c:140
PGDLLIMPORT int debug_parallel_query
Definition planner.c:69
bool contain_mutable_functions_after_planning(Expr *expr)
Definition clauses.c:499
TargetEntry * get_sortgroupclause_tle(SortGroupClause *sgClause, List *targetList)
Definition tlist.c:376
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:789
DebugParallelMode
Definition optimizer.h:95
@ DEBUG_PARALLEL_REGRESS
Definition optimizer.h:98
@ DEBUG_PARALLEL_ON
Definition optimizer.h:97
@ DEBUG_PARALLEL_OFF
Definition optimizer.h:96
struct ParamListInfoData * ParamListInfo
Definition optimizer.h:41
Node * negate_clause(Node *node)
Definition prepqual.c:73
void convert_saop_to_hashed_saop(Node *node)
Definition clauses.c:2300
PGDLLIMPORT double cpu_tuple_cost
Definition costsize.c:132
List * get_sortgrouplist_exprs(List *sgClauses, List *targetList)
Definition tlist.c:401
bool predicate_implied_by(List *predicate_list, List *clause_list, bool weak)
Definition predtest.c:152
List * expand_function_arguments(List *args, bool include_out_arguments, Oid result_type, HeapTuple func_tuple)
Definition clauses.c:4487
PGDLLIMPORT double recursive_worktable_factor
Definition costsize.c:137
TargetEntry * get_sortgroupref_tle(Index sortref, List *targetList)
Definition tlist.c:354
void extract_query_dependencies(Node *query, List **relationOids, List **invalItems, bool *hasRowSecurity)
Definition setrefs.c:3656
Expr * expression_planner(Expr *expr)
Definition planner.c:6817
PGDLLIMPORT double cpu_index_tuple_cost
Definition costsize.c:133
int count_nonjunk_tlist_entries(List *tlist)
Definition tlist.c:195
void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos)
Definition var.c:296
PGDLLIMPORT double seq_page_cost
Definition costsize.c:130
int locate_var_of_level(Node *node, int levelsup)
Definition var.c:555
double clamp_row_est(double nrows)
Definition costsize.c:213
PGDLLIMPORT int effective_cache_size
Definition costsize.c:139
PGDLLIMPORT double random_page_cost
Definition costsize.c:131
ScalarArrayOpExpr * make_SAOP_expr(Oid oper, Node *leftexpr, Oid coltype, Oid arraycollid, Oid inputcollid, List *exprs, bool haveNonConst)
Definition clauses.c:5832
bool contain_vars_returning_old_or_new(Node *node)
Definition var.c:511
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:5284
bool expr_is_nonnullable(PlannerInfo *root, Expr *expr, bool use_rel_info)
Definition clauses.c:4345
bool contain_volatile_functions(Node *clause)
Definition clauses.c:547
bool var_is_nonnullable(PlannerInfo *root, Var *var, bool use_rel_info)
Definition clauses.c:4280
Node * get_sortgroupclause_expr(SortGroupClause *sgClause, List *targetList)
Definition tlist.c:388
Selectivity clause_selectivity(PlannerInfo *root, Node *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Definition clausesel.c:667
Operator oper(ParseState *pstate, List *opname, Oid ltypeId, Oid rtypeId, bool noError, int location)
Definition parse_oper.c:371
unsigned int Oid
static int fb(int x)
tree ctl root
Definition radixtree.h:1857
Definition pg_list.h:54
Definition nodes.h:135
Definition type.h:96