Add data for WAL in pg_stat_io and backend statistics
[pgsql.git] / src / include / rewrite / rewriteManip.h
blob512823033b924adb499890735753b864fb27b8dd
1 /*-------------------------------------------------------------------------
3 * rewriteManip.h
4 * Querytree manipulation subroutines for query rewriter.
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
10 * src/include/rewrite/rewriteManip.h
12 *-------------------------------------------------------------------------
14 #ifndef REWRITEMANIP_H
15 #define REWRITEMANIP_H
17 #include "nodes/parsenodes.h"
19 struct AttrMap; /* avoid including attmap.h here */
22 typedef struct replace_rte_variables_context replace_rte_variables_context;
24 typedef Node *(*replace_rte_variables_callback) (Var *var,
25 replace_rte_variables_context *context);
27 struct replace_rte_variables_context
29 replace_rte_variables_callback callback; /* callback function */
30 void *callback_arg; /* context data for callback function */
31 int target_varno; /* RTE index to search for */
32 int sublevels_up; /* (current) nesting depth */
33 bool inserted_sublink; /* have we inserted a SubLink? */
36 typedef enum ReplaceVarsNoMatchOption
38 REPLACEVARS_REPORT_ERROR, /* throw error if no match */
39 REPLACEVARS_CHANGE_VARNO, /* change the Var's varno, nothing else */
40 REPLACEVARS_SUBSTITUTE_NULL, /* replace with a NULL Const */
41 } ReplaceVarsNoMatchOption;
44 extern void CombineRangeTables(List **dst_rtable, List **dst_perminfos,
45 List *src_rtable, List *src_perminfos);
46 extern void OffsetVarNodes(Node *node, int offset, int sublevels_up);
47 extern void ChangeVarNodes(Node *node, int rt_index, int new_index,
48 int sublevels_up);
49 extern void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up,
50 int min_sublevels_up);
51 extern void IncrementVarSublevelsUp_rtable(List *rtable,
52 int delta_sublevels_up, int min_sublevels_up);
54 extern bool rangeTableEntry_used(Node *node, int rt_index,
55 int sublevels_up);
57 extern Query *getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr);
59 extern void AddQual(Query *parsetree, Node *qual);
60 extern void AddInvertedQual(Query *parsetree, Node *qual);
62 extern bool contain_aggs_of_level(Node *node, int levelsup);
63 extern int locate_agg_of_level(Node *node, int levelsup);
64 extern bool contain_windowfuncs(Node *node);
65 extern int locate_windowfunc(Node *node);
66 extern bool checkExprHasSubLink(Node *node);
68 extern Node *add_nulling_relids(Node *node,
69 const Bitmapset *target_relids,
70 const Bitmapset *added_relids);
71 extern Node *remove_nulling_relids(Node *node,
72 const Bitmapset *removable_relids,
73 const Bitmapset *except_relids);
75 extern Node *replace_rte_variables(Node *node,
76 int target_varno, int sublevels_up,
77 replace_rte_variables_callback callback,
78 void *callback_arg,
79 bool *outer_hasSubLinks);
80 extern Node *replace_rte_variables_mutator(Node *node,
81 replace_rte_variables_context *context);
83 extern Node *map_variable_attnos(Node *node,
84 int target_varno, int sublevels_up,
85 const struct AttrMap *attno_map,
86 Oid to_rowtype, bool *found_whole_row);
88 extern Node *ReplaceVarsFromTargetList(Node *node,
89 int target_varno, int sublevels_up,
90 RangeTblEntry *target_rte,
91 List *targetlist,
92 int result_relation,
93 ReplaceVarsNoMatchOption nomatch_option,
94 int nomatch_varno,
95 bool *outer_hasSubLinks);
97 #endif /* REWRITEMANIP_H */