53 type = ((
const Var *) expr)->vartype;
70 case T_SubscriptingRef:
88 case T_ScalarArrayOpExpr:
106 elog(
ERROR,
"cannot get type for untransformed sublink");
115 (
errcode(ERRCODE_UNDEFINED_OBJECT),
116 errmsg(
"could not find array type for data type %s",
146 (
errcode(ERRCODE_UNDEFINED_OBJECT),
147 errmsg(
"could not find array type for data type %s",
163 case T_AlternativeSubPlan:
183 case T_ArrayCoerceExpr:
186 case T_ConvertRowtypeExpr:
204 case T_RowCompareExpr:
213 case T_SQLValueFunction:
224 case T_JsonValueExpr:
231 case T_JsonConstructorExpr:
234 case T_JsonIsPredicate:
243 case T_CoerceToDomain:
246 case T_CoerceToDomainValue:
252 case T_CurrentOfExpr:
255 case T_NextValueExpr:
258 case T_InferenceElem:
265 case T_PlaceHolderVar:
290 return ((
const Var *) expr)->vartypmod;
292 return ((
const Const *) expr)->consttypmod;
294 return ((
const Param *) expr)->paramtypmod;
295 case T_SubscriptingRef:
303 return coercedTypmod;
331 elog(
ERROR,
"cannot get type for untransformed sublink");
354 case T_AlternativeSubPlan:
366 case T_ArrayCoerceExpr:
377 Oid casetype = cexpr->casetype;
418 if (arrayexpr->multidims)
419 commontype = arrayexpr->array_typeid;
421 commontype = arrayexpr->element_typeid;
441 Oid coalescetype = cexpr->coalescetype;
469 Oid minmaxtype = mexpr->minmaxtype;
490 case T_SQLValueFunction:
492 case T_JsonValueExpr:
494 case T_JsonConstructorExpr:
496 case T_CoerceToDomain:
498 case T_CoerceToDomainValue:
502 case T_PlaceHolderVar:
524 if (coercedTypmod != NULL)
550 if (nargs < 2 || nargs > 3)
556 second_arg->constisnull)
562 if (coercedTypmod != NULL)
573 if (acoerce->resulttypmod < 0)
579 if (coercedTypmod != NULL)
580 *coercedTypmod = acoerce->resulttypmod;
620 con->consttypmod = rtypmod;
621 con->constcollid = rcollid;
639 newrelabel->resulttypmod = rtypmod;
640 newrelabel->resultcollid = rcollid;
641 newrelabel->relabelformat = rformat;
643 return (
Node *) newrelabel;
742 if (expr->funcretset)
796 coll = ((
const Var *) expr)->varcollid;
799 coll = ((
const Const *) expr)->constcollid;
802 coll = ((
const Param *) expr)->paramcollid;
805 coll = ((
const Aggref *) expr)->aggcollid;
811 coll = ((
const WindowFunc *) expr)->wincollid;
813 case T_SubscriptingRef:
817 coll = ((
const FuncExpr *) expr)->funccollid;
823 coll = ((
const OpExpr *) expr)->opcollid;
831 case T_ScalarArrayOpExpr:
851 elog(
ERROR,
"cannot get collation for untransformed sublink");
882 case T_AlternativeSubPlan:
903 case T_ArrayCoerceExpr:
906 case T_ConvertRowtypeExpr:
914 coll = ((
const CaseExpr *) expr)->casecollid;
920 coll = ((
const ArrayExpr *) expr)->array_collid;
926 case T_RowCompareExpr:
934 coll = ((
const MinMaxExpr *) expr)->minmaxcollid;
936 case T_SQLValueFunction:
939 coll = C_COLLATION_OID;
951 coll = DEFAULT_COLLATION_OID;
955 case T_JsonValueExpr:
958 case T_JsonConstructorExpr:
968 case T_JsonIsPredicate:
980 case T_CoerceToDomain:
983 case T_CoerceToDomainValue:
989 case T_CurrentOfExpr:
993 case T_NextValueExpr:
997 case T_InferenceElem:
1000 case T_PlaceHolderVar:
1028 coll = ((
const Aggref *) expr)->inputcollid;
1031 coll = ((
const WindowFunc *) expr)->inputcollid;
1034 coll = ((
const FuncExpr *) expr)->inputcollid;
1037 coll = ((
const OpExpr *) expr)->inputcollid;
1039 case T_DistinctExpr:
1043 coll = ((
const NullIfExpr *) expr)->inputcollid;
1045 case T_ScalarArrayOpExpr:
1049 coll = ((
const MinMaxExpr *) expr)->inputcollid;
1071 ((
Var *) expr)->varcollid = collation;
1074 ((
Const *) expr)->constcollid = collation;
1077 ((
Param *) expr)->paramcollid = collation;
1080 ((
Aggref *) expr)->aggcollid = collation;
1082 case T_GroupingFunc:
1086 ((
WindowFunc *) expr)->wincollid = collation;
1088 case T_SubscriptingRef:
1092 ((
FuncExpr *) expr)->funccollid = collation;
1094 case T_NamedArgExpr:
1098 ((
OpExpr *) expr)->opcollid = collation;
1100 case T_DistinctExpr:
1106 case T_ScalarArrayOpExpr:
1115 #ifdef USE_ASSERT_CHECKING
1127 elog(
ERROR,
"cannot set collation for untransformed sublink");
1153 case T_ArrayCoerceExpr:
1156 case T_ConvertRowtypeExpr:
1161 ((
CaseExpr *) expr)->casecollid = collation;
1164 ((
ArrayExpr *) expr)->array_collid = collation;
1170 case T_RowCompareExpr:
1174 case T_CoalesceExpr:
1178 ((
MinMaxExpr *) expr)->minmaxcollid = collation;
1180 case T_SQLValueFunction:
1182 (collation == C_COLLATION_OID) :
1187 (collation == DEFAULT_COLLATION_OID) :
1190 case T_JsonValueExpr:
1194 case T_JsonConstructorExpr:
1205 case T_JsonIsPredicate:
1216 case T_CoerceToDomain:
1219 case T_CoerceToDomainValue:
1222 case T_SetToDefault:
1225 case T_CurrentOfExpr:
1229 case T_NextValueExpr:
1253 ((
Aggref *) expr)->inputcollid = inputcollation;
1256 ((
WindowFunc *) expr)->inputcollid = inputcollation;
1259 ((
FuncExpr *) expr)->inputcollid = inputcollation;
1262 ((
OpExpr *) expr)->inputcollid = inputcollation;
1264 case T_DistinctExpr:
1268 ((
NullIfExpr *) expr)->inputcollid = inputcollation;
1270 case T_ScalarArrayOpExpr:
1274 ((
MinMaxExpr *) expr)->inputcollid = inputcollation;
1321 loc = ((
const RangeVar *) expr)->location;
1324 loc = ((
const TableFunc *) expr)->location;
1327 loc = ((
const Var *) expr)->location;
1330 loc = ((
const Const *) expr)->location;
1333 loc = ((
const Param *) expr)->location;
1337 loc = ((
const Aggref *) expr)->location;
1339 case T_GroupingFunc:
1346 case T_SubscriptingRef:
1359 case T_NamedArgExpr:
1369 case T_DistinctExpr:
1379 case T_ScalarArrayOpExpr:
1436 case T_ArrayCoerceExpr:
1445 case T_ConvertRowtypeExpr:
1460 loc = ((
const CaseExpr *) expr)->location;
1464 loc = ((
const CaseWhen *) expr)->location;
1468 loc = ((
const ArrayExpr *) expr)->location;
1472 loc = ((
const RowExpr *) expr)->location;
1474 case T_RowCompareExpr:
1478 case T_CoalesceExpr:
1486 case T_SQLValueFunction:
1502 case T_JsonValueExpr:
1505 case T_JsonConstructorExpr:
1508 case T_JsonIsPredicate:
1529 case T_CoerceToDomain:
1538 case T_CoerceToDomainValue:
1541 case T_SetToDefault:
1558 foreach(lc, (
const List *) expr)
1577 loc = ((
const ColumnRef *) expr)->location;
1580 loc = ((
const ParamRef *) expr)->location;
1583 loc = ((
const A_Const *) expr)->location;
1601 loc = ((
const ResTarget *) expr)->location;
1603 case T_MultiAssignRef:
1619 case T_CollateClause:
1628 loc = ((
const WindowDef *) expr)->location;
1630 case T_RangeTableSample:
1634 loc = ((
const TypeName *) expr)->location;
1637 loc = ((
const ColumnDef *) expr)->location;
1642 case T_FunctionParameter:
1646 case T_XmlSerialize:
1659 case T_OnConflictClause:
1662 case T_CTESearchClause:
1665 case T_CTECycleClause:
1668 case T_CommonTableExpr:
1671 case T_JsonKeyValue:
1675 case T_JsonObjectConstructor:
1678 case T_JsonArrayConstructor:
1681 case T_JsonArrayQueryConstructor:
1684 case T_JsonAggConstructor:
1687 case T_JsonObjectAgg:
1690 case T_JsonArrayAgg:
1693 case T_PlaceHolderVar:
1697 case T_InferenceElem:
1701 case T_PartitionElem:
1704 case T_PartitionSpec:
1707 case T_PartitionBoundSpec:
1710 case T_PartitionRangeDatum:
1734 return Min(loc1, loc2);
1826 if (checker(expr->
aggfnoid, context))
1834 if (checker(expr->
winfnoid, context))
1842 if (checker(expr->
funcid, context))
1847 case T_DistinctExpr:
1854 if (checker(expr->opfuncid, context))
1858 case T_ScalarArrayOpExpr:
1863 if (checker(expr->opfuncid, context))
1876 &iofunc, &typioparam);
1877 if (checker(iofunc, context))
1881 &iofunc, &typisvarlena);
1882 if (checker(iofunc, context))
1886 case T_RowCompareExpr:
1891 foreach(opid, rcexpr->opnos)
1895 if (checker(opfuncid, context))
2014 #define WALK(n) walker((Node *) (n), context)
2016 #define LIST_WALK(l) expression_tree_walker_impl((Node *) (l), walker, context)
2029 case T_CaseTestExpr:
2030 case T_SQLValueFunction:
2031 case T_CoerceToDomainValue:
2032 case T_SetToDefault:
2033 case T_CurrentOfExpr:
2034 case T_NextValueExpr:
2036 case T_SortGroupClause:
2037 case T_CTESearchClause:
2040 case T_WithCheckOption:
2059 case T_GroupingFunc:
2078 case T_SubscriptingRef:
2103 case T_NamedArgExpr:
2106 case T_DistinctExpr:
2115 case T_ScalarArrayOpExpr:
2157 case T_AlternativeSubPlan:
2175 case T_ArrayCoerceExpr:
2185 case T_ConvertRowtypeExpr:
2196 foreach(temp, caseexpr->
args)
2214 case T_RowCompareExpr:
2224 case T_CoalesceExpr:
2239 case T_JsonValueExpr:
2249 case T_JsonConstructorExpr:
2261 case T_JsonIsPredicate:
2267 case T_CoerceToDomain:
2274 case T_WindowClause:
2288 case T_CTECycleClause:
2298 case T_CommonTableExpr:
2309 if (
WALK(cte->search_clause))
2311 if (
WALK(cte->cycle_clause))
2315 case T_JsonKeyValue:
2325 case T_JsonObjectConstructor:
2333 case T_JsonArrayConstructor:
2341 case T_JsonArrayQueryConstructor:
2349 case T_JsonAggConstructor:
2361 case T_JsonObjectAgg:
2371 case T_JsonArrayAgg:
2382 case T_PartitionBoundSpec:
2394 case T_PartitionRangeDatum:
2403 foreach(temp, (
List *) node)
2419 case T_OnConflictExpr:
2445 case T_PartitionPruneStepOp:
2453 case T_PartitionPruneStepCombine:
2472 case T_SetOperationStmt:
2494 case T_PlaceHolderVar:
2496 case T_InferenceElem:
2498 case T_AppendRelInfo:
2506 case T_PlaceHolderInfo:
2508 case T_RangeTblFunction:
2510 case T_TableSampleClause:
2524 if (
WALK(tf->ns_uris))
2532 if (
WALK(tf->coldefexprs))
2537 elog(
ERROR,
"unrecognized node type: %d",
2579 if (
WALK(query->withCheckOptions))
2817 #define FLATCOPY(newnode, node, nodetype) \
2818 ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
2819 memcpy((newnode), (node), sizeof(nodetype)) )
2821 #define MUTATE(newfield, oldfield, fieldtype) \
2822 ( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) )
2844 return (
Node *) newnode;
2854 return (
Node *) newnode;
2858 case T_CaseTestExpr:
2859 case T_SQLValueFunction:
2861 case T_CoerceToDomainValue:
2862 case T_SetToDefault:
2863 case T_CurrentOfExpr:
2864 case T_NextValueExpr:
2866 case T_SortGroupClause:
2867 case T_CTESearchClause:
2869 case T_WithCheckOption:
2876 return (
Node *) newnode;
2885 newnode->aggargtypes =
list_copy(aggref->aggargtypes);
2891 return (
Node *) newnode;
2894 case T_GroupingFunc:
2900 MUTATE(newnode->args, grouping->args,
List *);
2911 newnode->refs =
list_copy(grouping->refs);
2912 newnode->cols =
list_copy(grouping->cols);
2914 return (
Node *) newnode;
2925 return (
Node *) newnode;
2928 case T_SubscriptingRef:
2943 return (
Node *) newnode;
2953 return (
Node *) newnode;
2956 case T_NamedArgExpr:
2963 return (
Node *) newnode;
2973 return (
Node *) newnode;
2976 case T_DistinctExpr:
2983 return (
Node *) newnode;
2993 return (
Node *) newnode;
2996 case T_ScalarArrayOpExpr:
3003 return (
Node *) newnode;
3013 return (
Node *) newnode;
3029 return (
Node *) newnode;
3043 return (
Node *) newnode;
3046 case T_AlternativeSubPlan:
3053 return (
Node *) newnode;
3063 return (
Node *) newnode;
3074 newnode->fieldnums =
list_copy(fstore->fieldnums);
3075 return (
Node *) newnode;
3085 return (
Node *) newnode;
3095 return (
Node *) newnode;
3098 case T_ArrayCoerceExpr:
3106 return (
Node *) newnode;
3109 case T_ConvertRowtypeExpr:
3116 return (
Node *) newnode;
3126 return (
Node *) newnode;
3138 return (
Node *) newnode;
3149 return (
Node *) newnode;
3159 return (
Node *) newnode;
3170 return (
Node *) newnode;
3173 case T_RowCompareExpr:
3181 return (
Node *) newnode;
3184 case T_CoalesceExpr:
3191 return (
Node *) newnode;
3201 return (
Node *) newnode;
3213 return (
Node *) newnode;
3216 case T_JsonReturning:
3224 return (
Node *) newnode;
3226 case T_JsonValueExpr:
3236 return (
Node *) newnode;
3238 case T_JsonConstructorExpr:
3249 return (
Node *) newnode;
3251 case T_JsonIsPredicate:
3260 return (
Node *) newnode;
3269 return (
Node *) newnode;
3279 return (
Node *) newnode;
3282 case T_CoerceToDomain:
3289 return (
Node *) newnode;
3299 return (
Node *) newnode;
3305 case T_WindowClause:
3315 return (
Node *) newnode;
3318 case T_CTECycleClause:
3326 return (
Node *) newnode;
3329 case T_CommonTableExpr:
3345 return (
Node *) newnode;
3348 case T_PartitionBoundSpec:
3357 return (
Node *) newnode;
3360 case T_PartitionRangeDatum:
3367 return (
Node *) newnode;
3381 foreach(temp, (
List *) node)
3383 resultlist =
lappend(resultlist,
3387 return (
Node *) resultlist;
3398 return (
Node *) newnode;
3401 case T_OnConflictExpr:
3413 return (
Node *) newnode;
3425 return (
Node *) newnode;
3428 case T_PartitionPruneStepOp:
3436 return (
Node *) newnode;
3439 case T_PartitionPruneStepCombine:
3452 return (
Node *) newnode;
3455 case T_SetOperationStmt:
3464 return (
Node *) newnode;
3475 return (
Node *) newnode;
3478 case T_PlaceHolderVar:
3484 MUTATE(newnode->phexpr, phv->phexpr,
Expr *);
3486 return (
Node *) newnode;
3489 case T_InferenceElem:
3496 return (
Node *) newnode;
3499 case T_AppendRelInfo:
3507 return (
Node *) newnode;
3510 case T_PlaceHolderInfo:
3518 return (
Node *) newnode;
3521 case T_RangeTblFunction:
3529 return (
Node *) newnode;
3532 case T_TableSampleClause:
3540 return (
Node *) newnode;
3549 MUTATE(newnode->ns_uris, tf->ns_uris,
List *);
3553 MUTATE(newnode->coldefexprs, tf->coldefexprs,
List *);
3554 return (
Node *) newnode;
3558 elog(
ERROR,
"unrecognized node type: %d",
3603 MUTATE(query->withCheckOptions, query->withCheckOptions,
List *);
3645 resultlist =
lappend(resultlist, (
Node *) newnode);
3667 mutator, context, flags);
3732 newrt =
lappend(newrt, newrte);
3780 return mutator(node, context);
3819 case T_SetToDefault:
3820 case T_CurrentOfExpr:
3821 case T_SQLValueFunction:
3837 case T_GroupingFunc:
3857 foreach(temp, caseexpr->
args)
3873 case T_CoalesceExpr:
3888 case T_JsonReturning:
3890 case T_JsonValueExpr:
3902 case T_JsonParseExpr:
3912 case T_JsonScalarExpr:
3922 case T_JsonSerializeExpr:
3932 case T_JsonConstructorExpr:
3946 case T_JsonIsPredicate:
3962 if (
WALK(join->alias))
3975 if (
WALK(into->viewQuery))
3980 foreach(temp, (
List *) node)
4054 case T_MergeWhenClause:
4104 case T_PLAssignStmt:
4151 case T_NamedArgExpr:
4163 case T_A_Indirection:
4185 case T_MultiAssignRef:
4197 case T_CollateClause:
4215 case T_RangeSubselect:
4225 case T_RangeFunction:
4237 case T_RangeTableSample:
4250 case T_RangeTableFunc:
4266 case T_RangeTableFuncCol:
4311 case T_LockingClause:
4313 case T_XmlSerialize:
4335 case T_OnConflictClause:
4347 case T_CommonTableExpr:
4360 case T_JsonKeyValue:
4370 case T_JsonObjectConstructor:
4380 case T_JsonArrayConstructor:
4390 case T_JsonAggConstructor:
4404 case T_JsonObjectAgg:
4414 case T_JsonArrayAgg:
4424 case T_JsonArrayQueryConstructor:
4435 elog(
ERROR,
"unrecognized node type: %d",
4457 #define PSWALK(n) walker(n, context)
4507 case T_SubqueryScan:
4561 for (
j = 0;
j < nplans;
j++)
#define OidIsValid(objectId)
elog(ERROR, "%s: %s", p2, msg)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define outerPlanState(node)
#define innerPlanState(node)
if(TABLE==NULL||TABLE_index==NULL)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * lappend(List *list, void *datum)
List * list_copy(const List *oldlist)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
RegProcedure get_opcode(Oid opno)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
Oid get_promoted_array_type(Oid typid)
bool query_tree_walker_impl(Query *query, tree_walker_callback walker, void *context, int flags)
#define FLATCOPY(newnode, node, nodetype)
bool raw_expression_tree_walker_impl(Node *node, tree_walker_callback walker, void *context)
Node * query_or_expression_tree_mutator_impl(Node *node, tree_mutator_callback mutator, void *context, int flags)
Oid exprType(const Node *expr)
bool range_table_entry_walker_impl(RangeTblEntry *rte, tree_walker_callback walker, void *context, int flags)
Query * query_tree_mutator_impl(Query *query, tree_mutator_callback mutator, void *context, int flags)
bool exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod)
void exprSetCollation(Node *expr, Oid collation)
Oid exprInputCollation(const Node *expr)
Node * expression_tree_mutator_impl(Node *node, tree_mutator_callback mutator, void *context)
int32 exprTypmod(const Node *expr)
static bool planstate_walk_subplans(List *plans, planstate_tree_walker_callback walker, void *context)
bool check_functions_in_node(Node *node, check_function_callback checker, void *context)
Oid exprCollation(const Node *expr)
static bool fix_opfuncids_walker(Node *node, void *context)
void exprSetInputCollation(Node *expr, Oid inputcollation)
bool query_or_expression_tree_walker_impl(Node *node, tree_walker_callback walker, void *context, int flags)
List * range_table_mutator_impl(List *rtable, tree_mutator_callback mutator, void *context, int flags)
Node * applyRelabelType(Node *arg, Oid rtype, int32 rtypmod, Oid rcollid, CoercionForm rformat, int rlocation, bool overwrite_ok)
bool expression_tree_walker_impl(Node *node, tree_walker_callback walker, void *context)
bool range_table_walker_impl(List *rtable, tree_walker_callback walker, void *context, int flags)
#define MUTATE(newfield, oldfield, fieldtype)
static int leftmostLoc(int loc1, int loc2)
Node * relabel_to_typmod(Node *expr, int32 typmod)
int exprLocation(const Node *expr)
Node * strip_implicit_coercions(Node *node)
bool expression_returns_set(Node *clause)
bool planstate_tree_walker_impl(PlanState *planstate, planstate_tree_walker_callback walker, void *context)
void fix_opfuncids(Node *node)
static bool expression_returns_set_walker(Node *node, void *context)
void set_sa_opfuncid(ScalarArrayOpExpr *opexpr)
static bool planstate_walk_members(PlanState **planstates, int nplans, planstate_tree_walker_callback walker, void *context)
void set_opfuncid(OpExpr *opexpr)
#define QTW_DONT_COPY_QUERY
#define QTW_IGNORE_CTE_SUBQUERIES
#define QTW_IGNORE_RT_SUBQUERIES
#define range_table_walker(rt, w, c, f)
bool(* planstate_tree_walker_callback)(struct PlanState *planstate, void *context)
#define query_tree_walker(q, w, c, f)
#define range_table_entry_walker(r, w, c, f)
#define QTW_EXAMINE_RTES_AFTER
#define QTW_EXAMINE_SORTGROUP
bool(* tree_walker_callback)(Node *node, void *context)
Node *(* tree_mutator_callback)(Node *node, void *context)
#define expression_tree_walker(n, w, c)
#define query_tree_mutator(q, m, c, f)
bool(* check_function_callback)(Oid func_id, void *context)
#define QTW_EXAMINE_RTES_BEFORE
#define range_table_mutator(rt, m, c, f)
#define QTW_IGNORE_RANGE_TABLE
#define QTW_IGNORE_JOINALIASES
#define IsA(nodeptr, _type_)
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
#define for_each_from(cell, lst, N)
static rewind_source * source
void check_stack_depth(void)
static int32 DatumGetInt32(Datum X)
static int fc(const char *x)
Node * cycle_mark_default
CollateClause * collClause
struct RestrictInfo * rinfo
JsonAggConstructor * constructor
JsonReturning * returning
JsonAggConstructor * constructor
JsonReturning * returning
OnConflictExpr * onConflict
struct TableSampleClause * tablesample
struct PlanState * planstate