33 bool (*walker) (),
void *context);
51 type = ((
const Var *) expr)->vartype;
54 type = ((
const Const *) expr)->consttype;
57 type = ((
const Param *) expr)->paramtype;
60 type = ((
const Aggref *) expr)->aggtype;
72 type = ((
const FuncExpr *) expr)->funcresulttype;
78 type = ((
const OpExpr *) expr)->opresulttype;
84 type = ((
const NullIfExpr *) expr)->opresulttype;
104 elog(
ERROR,
"cannot get type for untransformed sublink");
113 (
errcode(ERRCODE_UNDEFINED_OBJECT),
114 errmsg(
"could not find array type for data type %s",
144 (
errcode(ERRCODE_UNDEFINED_OBJECT),
145 errmsg(
"could not find array type for data type %s",
173 type = ((
const FieldStore *) expr)->resulttype;
191 type = ((
const CaseExpr *) expr)->casetype;
197 type = ((
const ArrayExpr *) expr)->array_typeid;
200 type = ((
const RowExpr *) expr)->row_typeid;
209 type = ((
const MinMaxExpr *) expr)->minmaxtype;
275 return ((
const Var *) expr)->vartypmod;
277 return ((
const Const *) expr)->consttypmod;
279 return ((
const Param *) expr)->paramtypmod;
288 return coercedTypmod;
316 elog(
ERROR,
"cannot get type for untransformed sublink");
373 foreach(arg, cexpr->
args)
505 if (coercedTypmod != NULL)
531 if (nargs < 2 || nargs > 3)
543 if (coercedTypmod != NULL)
560 if (coercedTypmod != NULL)
618 newrelabel->
arg = (
Expr *) arg;
624 return (
Node *) newrelabel;
769 coll = ((
const Var *) expr)->varcollid;
772 coll = ((
const Const *) expr)->constcollid;
775 coll = ((
const Param *) expr)->paramcollid;
778 coll = ((
const Aggref *) expr)->aggcollid;
784 coll = ((
const WindowFunc *) expr)->wincollid;
790 coll = ((
const FuncExpr *) expr)->funccollid;
796 coll = ((
const OpExpr *) expr)->opcollid;
824 elog(
ERROR,
"cannot get collation for untransformed sublink");
887 coll = ((
const CaseExpr *) expr)->casecollid;
893 coll = ((
const ArrayExpr *) expr)->array_collid;
907 coll = ((
const MinMaxExpr *) expr)->minmaxcollid;
912 coll = C_COLLATION_OID;
924 coll = DEFAULT_COLLATION_OID;
984 coll = ((
const Aggref *) expr)->inputcollid;
987 coll = ((
const WindowFunc *) expr)->inputcollid;
990 coll = ((
const FuncExpr *) expr)->inputcollid;
993 coll = ((
const OpExpr *) expr)->inputcollid;
999 coll = ((
const NullIfExpr *) expr)->inputcollid;
1005 coll = ((
const MinMaxExpr *) expr)->inputcollid;
1027 ((
Var *) expr)->varcollid = collation;
1030 ((
Const *) expr)->constcollid = collation;
1033 ((
Param *) expr)->paramcollid = collation;
1036 ((
Aggref *) expr)->aggcollid = collation;
1042 ((
WindowFunc *) expr)->wincollid = collation;
1048 ((
FuncExpr *) expr)->funccollid = collation;
1054 ((
OpExpr *) expr)->opcollid = collation;
1071 #ifdef USE_ASSERT_CHECKING 1083 elog(
ERROR,
"cannot set collation for untransformed sublink");
1117 ((
CaseExpr *) expr)->casecollid = collation;
1120 ((
ArrayExpr *) expr)->array_collid = collation;
1134 ((
MinMaxExpr *) expr)->minmaxcollid = collation;
1138 (collation == C_COLLATION_OID) :
1143 (collation == DEFAULT_COLLATION_OID) :
1191 ((
Aggref *) expr)->inputcollid = inputcollation;
1194 ((
WindowFunc *) expr)->inputcollid = inputcollation;
1197 ((
FuncExpr *) expr)->inputcollid = inputcollation;
1200 ((
OpExpr *) expr)->inputcollid = inputcollation;
1206 ((
NullIfExpr *) expr)->inputcollid = inputcollation;
1212 ((
MinMaxExpr *) expr)->inputcollid = inputcollation;
1259 loc = ((
const RangeVar *) expr)->location;
1262 loc = ((
const TableFunc *) expr)->location;
1265 loc = ((
const Var *) expr)->location;
1268 loc = ((
const Const *) expr)->location;
1271 loc = ((
const Param *) expr)->location;
1275 loc = ((
const Aggref *) expr)->location;
1398 loc = ((
const CaseExpr *) expr)->location;
1402 loc = ((
const CaseWhen *) expr)->location;
1406 loc = ((
const ArrayExpr *) expr)->location;
1410 loc = ((
const RowExpr *) expr)->location;
1484 foreach(lc, (
const List *) expr)
1503 loc = ((
const ColumnRef *) expr)->location;
1506 loc = ((
const ParamRef *) expr)->location;
1509 loc = ((
const A_Const *) expr)->location;
1527 loc = ((
const ResTarget *) expr)->location;
1554 loc = ((
const WindowDef *) expr)->location;
1560 loc = ((
const TypeName *) expr)->location;
1563 loc = ((
const ColumnDef *) expr)->location;
1638 return Min(loc1, loc2);
1730 if (checker(expr->
aggfnoid, context))
1738 if (checker(expr->
winfnoid, context))
1746 if (checker(expr->
funcid, context))
1758 if (checker(expr->
opfuncid, context))
1767 if (checker(expr->
opfuncid, context))
1780 &iofunc, &typioparam);
1781 if (checker(iofunc, context))
1785 &iofunc, &typisvarlena);
1786 if (checker(iofunc, context))
1795 foreach(opid, rcexpr->
opnos)
1799 if (checker(opfuncid, context))
1996 if (walker(sbsref->
refexpr, context))
2047 if (walker(sublink->
testexpr, context))
2054 return walker(sublink->
subselect, context);
2062 if (walker(subplan->
testexpr, context))
2078 if (walker(fstore->
arg, context))
2080 if (walker(fstore->
newvals, context))
2092 if (walker(acoerce->
arg, context))
2094 if (walker(acoerce->
elemexpr, context))
2106 if (walker(caseexpr->
arg, context))
2109 foreach(temp, caseexpr->
args)
2113 if (walker(when->
expr, context))
2115 if (walker(when->
result, context))
2118 if (walker(caseexpr->
defresult, context))
2123 return walker(((
ArrayExpr *) node)->elements, context);
2131 if (walker(rcexpr->
largs, context))
2133 if (walker(rcexpr->
rargs, context))
2148 if (walker(xexpr->
args, context))
2159 return walker(((
TargetEntry *) node)->expr, context);
2195 if (walker(cte->
ctequery, context))
2205 foreach(temp, (
List *) node)
2215 if (walker(from->
fromlist, context))
2217 if (walker(from->
quals, context))
2241 if (walker((
Node *) opstep->
exprs, context))
2252 if (walker(join->
larg, context))
2254 if (walker(join->
rarg, context))
2256 if (walker(join->
quals, context))
2268 if (walker(setop->
larg, context))
2270 if (walker(setop->
rarg, context))
2280 if (walker(iclause->
rinfo, context))
2319 if (walker(tf->
ns_uris, context))
2321 if (walker(tf->
docexpr, context))
2323 if (walker(tf->
rowexpr, context))
2332 elog(
ERROR,
"unrecognized node type: %d",
2486 if (walker(rte, context))
2497 if (walker(rte->
subquery, context))
2528 if (walker(rte, context))
2599 Node *(*mutator) (),
2607 #define FLATCOPY(newnode, node, nodetype) \ 2608 ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \ 2609 memcpy((newnode), (node), sizeof(nodetype)) ) 2611 #define CHECKFLATCOPY(newnode, node, nodetype) \ 2612 ( AssertMacro(IsA((node), nodetype)), \ 2613 (newnode) = (nodetype *) palloc(sizeof(nodetype)), \ 2614 memcpy((newnode), (node), sizeof(nodetype)) ) 2616 #define MUTATE(newfield, oldfield, fieldtype) \ 2617 ( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) ) 2638 return (
Node *) newnode;
2648 return (
Node *) newnode;
2669 return (
Node *) newnode;
2684 return (
Node *) newnode;
2707 return (
Node *) newnode;
2718 return (
Node *) newnode;
2736 return (
Node *) newnode;
2746 return (
Node *) newnode;
2756 return (
Node *) newnode;
2766 return (
Node *) newnode;
2776 return (
Node *) newnode;
2786 return (
Node *) newnode;
2796 return (
Node *) newnode;
2806 return (
Node *) newnode;
2822 return (
Node *) newnode;
2836 return (
Node *) newnode;
2846 return (
Node *) newnode;
2856 return (
Node *) newnode;
2868 return (
Node *) newnode;
2878 return (
Node *) newnode;
2888 return (
Node *) newnode;
2899 return (
Node *) newnode;
2909 return (
Node *) newnode;
2919 return (
Node *) newnode;
2931 return (
Node *) newnode;
2942 return (
Node *) newnode;
2952 return (
Node *) newnode;
2963 return (
Node *) newnode;
2974 return (
Node *) newnode;
2984 return (
Node *) newnode;
2994 return (
Node *) newnode;
3006 return (
Node *) newnode;
3016 return (
Node *) newnode;
3026 return (
Node *) newnode;
3036 return (
Node *) newnode;
3046 return (
Node *) newnode;
3062 return (
Node *) newnode;
3073 return (
Node *) newnode;
3092 return (
Node *) newnode;
3106 foreach(temp, (
List *) node)
3108 resultlist =
lappend(resultlist,
3112 return (
Node *) resultlist;
3123 return (
Node *) newnode;
3138 return (
Node *) newnode;
3149 return (
Node *) newnode;
3165 return (
Node *) newnode;
3177 return (
Node *) newnode;
3188 return (
Node *) newnode;
3199 return (
Node *) newnode;
3209 return (
Node *) newnode;
3220 return (
Node *) newnode;
3231 return (
Node *) newnode;
3242 return (
Node *) newnode;
3253 return (
Node *) newnode;
3267 return (
Node *) newnode;
3271 elog(
ERROR,
"unrecognized node type: %d",
3301 Node *(*mutator) (),
3357 resultlist =
lappend(resultlist, (
Node *) newnode);
3379 mutator, context, flags);
3390 Node *(*mutator) (),
3447 newrt =
lappend(newrt, newrte);
3472 return walker(node, context);
3485 Node *(*mutator) (),
3495 return mutator(node, context);
3550 return walker(((
RangeVar *) node)->alias, context);
3557 if (walker(sublink->
testexpr, context))
3560 if (walker(sublink->
subselect, context))
3568 if (walker(caseexpr->
arg, context))
3571 foreach(temp, caseexpr->
args)
3575 if (walker(when->
expr, context))
3577 if (walker(when->
result, context))
3580 if (walker(caseexpr->
defresult, context))
3598 if (walker(xexpr->
args, context))
3610 if (walker(join->
larg, context))
3612 if (walker(join->
rarg, context))
3614 if (walker(join->
quals, context))
3616 if (walker(join->
alias, context))
3625 if (walker(into->
rel, context))
3634 foreach(temp, (
List *) node)
3644 if (walker(stmt->
relation, context))
3646 if (walker(stmt->
cols, context))
3662 if (walker(stmt->
relation, context))
3678 if (walker(stmt->
relation, context))
3724 if (walker(stmt->
larg, context))
3726 if (walker(stmt->
rarg, context))
3736 if (walker(stmt->
val, context))
3744 if (walker(expr->
lexpr, context))
3746 if (walker(expr->
rexpr, context))
3755 if (walker(expr->
args, context))
3766 if (walker(fcall->
args, context))
3772 if (walker(fcall->
over, context))
3783 if (walker(indices->
lidx, context))
3785 if (walker(indices->
uidx, context))
3793 if (walker(indir->
arg, context))
3800 return walker(((
A_ArrayExpr *) node)->elements, context);
3807 if (walker(rt->
val, context))
3817 if (walker(tc->
arg, context))
3826 return walker(((
SortBy *) node)->node, context);
3847 if (walker(rs->
alias, context))
3857 if (walker(rf->
alias, context))
3867 if (walker(rts->
relation, context))
3870 if (walker(rts->
args, context))
3880 if (walker(rtf->
docexpr, context))
3882 if (walker(rtf->
rowexpr, context))
3886 if (walker(rtf->
columns, context))
3888 if (walker(rtf->
alias, context))
3896 if (walker(rtfc->
colexpr, context))
3906 if (walker(tn->
typmods, context))
3917 if (walker(coldef->
typeName, context))
3932 if (walker(indelem->
expr, context))
3938 return walker(((
GroupingSet *) node)->content, context);
3940 return walker(((
LockingClause *) node)->lockedRels, context);
3945 if (walker(xs->
expr, context))
3952 return walker(((
WithClause *) node)->ctes, context);
3967 if (walker(stmt->
infer, context))
3979 elog(
ERROR,
"unrecognized node type: %d",
4097 bool (*walker) (),
void *context)
4101 for (j = 0; j < nplans; j++)
4103 if (walker(planstates[j], context))
bool query_tree_walker(Query *query, bool(*walker)(), void *context, int flags)
#define IsA(nodeptr, _type_)
Node * expression_tree_mutator(Node *node, Node *(*mutator)(), void *context)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
#define CHECKFLATCOPY(newnode, node, nodetype)
bool range_table_entry_walker(RangeTblEntry *rte, bool(*walker)(), void *context, int flags)
#define QTW_EXAMINE_RTES_AFTER
int exprLocation(const Node *expr)
OnConflictExpr * onConflict
#define QTW_EXAMINE_RTES_BEFORE
Node * applyRelabelType(Node *arg, Oid rtype, int32 rtypmod, Oid rcollid, CoercionForm rformat, int rlocation, bool overwrite_ok)
int32 exprTypmod(const Node *expr)
static int leftmostLoc(int loc1, int loc2)
static bool expression_returns_set_walker(Node *node, void *context)
void fix_opfuncids(Node *node)
#define QTW_EXAMINE_SORTGROUP
bool expression_returns_set(Node *clause)
static bool planstate_walk_members(PlanState **planstates, int nplans, bool(*walker)(), void *context)
List * list_copy(const List *oldlist)
#define QTW_DONT_COPY_QUERY
CoercionForm coercionformat
int errcode(int sqlerrcode)
bool exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
static int fc(const char *x)
#define linitial_node(type, l)
#define OidIsValid(objectId)
OnConflictClause * onConflictClause
#define QTW_IGNORE_CTE_SUBQUERIES
bool check_functions_in_node(Node *node, check_function_callback checker, void *context)
struct PlanState * planstate
CTESearchClause * search_clause
bool raw_expression_tree_walker(Node *node, bool(*walker)(), void *context)
#define lfirst_node(type, lc)
#define outerPlanState(node)
static bool fix_opfuncids_walker(Node *node, void *context)
struct RestrictInfo * rinfo
void check_stack_depth(void)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
static bool planstate_walk_subplans(List *plans, bool(*walker)(), void *context)
List * lappend(List *list, void *datum)
bool query_or_expression_tree_walker(Node *node, bool(*walker)(), void *context, int flags)
Oid get_promoted_array_type(Oid typid)
CoercionForm coerceformat
void exprSetInputCollation(Node *expr, Oid inputcollation)
CoercionForm convertformat
#define FLATCOPY(newnode, node, nodetype)
RegProcedure get_opcode(Oid opno)
#define ereport(elevel,...)
Oid exprInputCollation(const Node *expr)
#define Assert(condition)
Node * query_or_expression_tree_mutator(Node *node, Node *(*mutator)(), void *context, int flags)
static rewind_source * source
bool range_table_walker(List *rtable, bool(*walker)(), void *context, int flags)
Oid exprType(const Node *expr)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
static int list_length(const List *l)
#define for_each_from(cell, lst, N)
Oid exprCollation(const Node *expr)
CollateClause * collClause
Node * cycle_mark_default
CoercionForm coerceformat
#define QTW_IGNORE_RT_SUBQUERIES
CTECycleClause * cycle_clause
void exprSetCollation(Node *expr, Oid collation)
int errmsg(const char *fmt,...)
bool(* check_function_callback)(Oid func_id, void *context)
void set_opfuncid(OpExpr *opexpr)
#define QTW_IGNORE_RANGE_TABLE
List * range_table_mutator(List *rtable, Node *(*mutator)(), void *context, int flags)
#define innerPlanState(node)
CoercionForm relabelformat
bool planstate_tree_walker(PlanState *planstate, bool(*walker)(), void *context)
struct TableSampleClause * tablesample
void set_sa_opfuncid(ScalarArrayOpExpr *opexpr)
Node * relabel_to_typmod(Node *expr, int32 typmod)
#define MUTATE(newfield, oldfield, fieldtype)
Query * query_tree_mutator(Query *query, Node *(*mutator)(), void *context, int flags)
#define QTW_IGNORE_JOINALIASES
Node * strip_implicit_coercions(Node *node)