PostgreSQL Source Code: src/include/rewrite/rewriteManip.h Source File

PostgreSQL Source Code git master
rewriteManip.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * rewriteManip.h
4 * Querytree manipulation subroutines for query rewriter.
5 *
6 *
7 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/rewrite/rewriteManip.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#ifndef REWRITEMANIP_H
15#define REWRITEMANIP_H
16
17#include "nodes/parsenodes.h"
18#include "nodes/pathnodes.h"
19
20 typedef struct AttrMap AttrMap; /* avoid including attmap.h here */
21
22
23 typedef struct replace_rte_variables_context replace_rte_variables_context;
24
25 typedef Node *(*replace_rte_variables_callback) (Var *var,
26 replace_rte_variables_context *context);
27
28 struct replace_rte_variables_context
29{
30 replace_rte_variables_callback callback; /* callback function */
31 void *callback_arg; /* context data for callback function */
32 int target_varno; /* RTE index to search for */
33 int sublevels_up; /* (current) nesting depth */
34 bool inserted_sublink; /* have we inserted a SubLink? */
35};
36
37 typedef enum ReplaceVarsNoMatchOption
38{
39 REPLACEVARS_REPORT_ERROR, /* throw error if no match */
40 REPLACEVARS_CHANGE_VARNO, /* change the Var's varno, nothing else */
41 REPLACEVARS_SUBSTITUTE_NULL, /* replace with a NULL Const */
42 } ReplaceVarsNoMatchOption;
43
44 typedef struct ChangeVarNodes_context ChangeVarNodes_context;
45
46 typedef bool (*ChangeVarNodes_callback) (Node *node,
47 ChangeVarNodes_context *arg);
48
49 struct ChangeVarNodes_context
50{
51 int rt_index;
52 int new_index;
53 int sublevels_up;
54 ChangeVarNodes_callback callback;
55};
56
57extern Relids adjust_relid_set(Relids relids, int oldrelid, int newrelid);
58extern void CombineRangeTables(List **dst_rtable, List **dst_perminfos,
59 List *src_rtable, List *src_perminfos);
60extern void OffsetVarNodes(Node *node, int offset, int sublevels_up);
61extern void ChangeVarNodes(Node *node, int rt_index, int new_index,
62 int sublevels_up);
63extern void ChangeVarNodesExtended(Node *node, int rt_index, int new_index,
64 int sublevels_up,
65 ChangeVarNodes_callback callback);
66extern bool ChangeVarNodesWalkExpression(Node *node,
67 ChangeVarNodes_context *context);
68extern void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up,
69 int min_sublevels_up);
70extern void IncrementVarSublevelsUp_rtable(List *rtable,
71 int delta_sublevels_up, int min_sublevels_up);
72
73extern bool rangeTableEntry_used(Node *node, int rt_index,
74 int sublevels_up);
75
76extern Query *getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr);
77
78extern void AddQual(Query *parsetree, Node *qual);
79extern void AddInvertedQual(Query *parsetree, Node *qual);
80
81extern bool contain_aggs_of_level(Node *node, int levelsup);
82extern int locate_agg_of_level(Node *node, int levelsup);
83extern bool contain_windowfuncs(Node *node);
84extern int locate_windowfunc(Node *node);
85extern bool checkExprHasSubLink(Node *node);
86
87extern Node *add_nulling_relids(Node *node,
88 const Bitmapset *target_relids,
89 const Bitmapset *added_relids);
90extern Node *remove_nulling_relids(Node *node,
91 const Bitmapset *removable_relids,
92 const Bitmapset *except_relids);
93
94extern Node *replace_rte_variables(Node *node,
95 int target_varno, int sublevels_up,
96 replace_rte_variables_callback callback,
97 void *callback_arg,
98 bool *outer_hasSubLinks);
99extern Node *replace_rte_variables_mutator(Node *node,
100 replace_rte_variables_context *context);
101
102extern Node *map_variable_attnos(Node *node,
103 int target_varno, int sublevels_up,
104 const AttrMap *attno_map,
105 Oid to_rowtype, bool *found_whole_row);
106
107extern Node *ReplaceVarFromTargetList(Var *var,
108 RangeTblEntry *target_rte,
109 List *targetlist,
110 int result_relation,
111 ReplaceVarsNoMatchOption nomatch_option,
112 int nomatch_varno);
113extern Node *ReplaceVarsFromTargetList(Node *node,
114 int target_varno, int sublevels_up,
115 RangeTblEntry *target_rte,
116 List *targetlist,
117 int result_relation,
118 ReplaceVarsNoMatchOption nomatch_option,
119 int nomatch_varno,
120 bool *outer_hasSubLinks);
121
122#endif /* REWRITEMANIP_H */
void * arg
unsigned int Oid
Definition: postgres_ext.h:32
bool contain_windowfuncs(Node *node)
Definition: rewriteManip.c:214
bool ChangeVarNodesWalkExpression(Node *node, ChangeVarNodes_context *context)
Definition: rewriteManip.c:747
void IncrementVarSublevelsUp_rtable(List *rtable, int delta_sublevels_up, int min_sublevels_up)
Definition: rewriteManip.c:907
void ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up)
Definition: rewriteManip.c:736
Node * replace_rte_variables_mutator(Node *node, replace_rte_variables_context *context)
Definition: rewriteManip.c:1485
Relids adjust_relid_set(Relids relids, int oldrelid, int newrelid)
Definition: rewriteManip.c:764
void OffsetVarNodes(Node *node, int offset, int sublevels_up)
Definition: rewriteManip.c:476
bool checkExprHasSubLink(Node *node)
Definition: rewriteManip.c:292
void CombineRangeTables(List **dst_rtable, List **dst_perminfos, List *src_rtable, List *src_perminfos)
Definition: rewriteManip.c:347
bool(* ChangeVarNodes_callback)(Node *node, ChangeVarNodes_context *arg)
Definition: rewriteManip.h:46
void AddQual(Query *parsetree, Node *qual)
Definition: rewriteManip.c:1151
int locate_agg_of_level(Node *node, int levelsup)
Definition: rewriteManip.c:149
Node *(* replace_rte_variables_callback)(Var *var, replace_rte_variables_context *context)
Definition: rewriteManip.h:25
Node * add_nulling_relids(Node *node, const Bitmapset *target_relids, const Bitmapset *added_relids)
Definition: rewriteManip.c:1243
bool rangeTableEntry_used(Node *node, int rt_index, int sublevels_up)
Definition: rewriteManip.c:1061
bool contain_aggs_of_level(Node *node, int levelsup)
Definition: rewriteManip.c:85
Query * getInsertSelectQuery(Query *parsetree, Query ***subquery_ptr)
Definition: rewriteManip.c:1093
int locate_windowfunc(Node *node)
Definition: rewriteManip.c:251
Node * map_variable_attnos(Node *node, int target_varno, int sublevels_up, const AttrMap *attno_map, Oid to_rowtype, bool *found_whole_row)
Definition: rewriteManip.c:1705
Node * remove_nulling_relids(Node *node, const Bitmapset *removable_relids, const Bitmapset *except_relids)
Definition: rewriteManip.c:1331
void AddInvertedQual(Query *parsetree, Node *qual)
Definition: rewriteManip.c:1219
void ChangeVarNodesExtended(Node *node, int rt_index, int new_index, int sublevels_up, ChangeVarNodes_callback callback)
Definition: rewriteManip.c:680
Node * replace_rte_variables(Node *node, int target_varno, int sublevels_up, replace_rte_variables_callback callback, void *callback_arg, bool *outer_hasSubLinks)
Definition: rewriteManip.c:1438
ReplaceVarsNoMatchOption
Definition: rewriteManip.h:38
@ REPLACEVARS_SUBSTITUTE_NULL
Definition: rewriteManip.h:41
@ REPLACEVARS_CHANGE_VARNO
Definition: rewriteManip.h:40
@ REPLACEVARS_REPORT_ERROR
Definition: rewriteManip.h:39
Node * ReplaceVarFromTargetList(Var *var, RangeTblEntry *target_rte, List *targetlist, int result_relation, ReplaceVarsNoMatchOption nomatch_option, int nomatch_varno)
Definition: rewriteManip.c:1795
void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up, int min_sublevels_up)
Definition: rewriteManip.c:884
Node * ReplaceVarsFromTargetList(Node *node, int target_varno, int sublevels_up, RangeTblEntry *target_rte, List *targetlist, int result_relation, ReplaceVarsNoMatchOption nomatch_option, int nomatch_varno, bool *outer_hasSubLinks)
Definition: rewriteManip.c:1961
Definition: attmap.h:35
ChangeVarNodes_callback callback
Definition: rewriteManip.h:54
Definition: pg_list.h:54
Definition: nodes.h:135
Definition: parsenodes.h:118
Definition: primnodes.h:262
replace_rte_variables_callback callback
Definition: rewriteManip.h:30
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
Definition: test_ifaddrs.c:46

AltStyle によって変換されたページ (->オリジナル) /