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:
227 case T_CoerceToDomain:
230 case T_CoerceToDomainValue:
236 case T_CurrentOfExpr:
239 case T_NextValueExpr:
242 case T_InferenceElem:
249 case T_PlaceHolderVar:
274 return ((
const Var *) expr)->vartypmod;
276 return ((
const Const *) expr)->consttypmod;
278 return ((
const Param *) expr)->paramtypmod;
279 case T_SubscriptingRef:
287 return coercedTypmod;
315 elog(
ERROR,
"cannot get type for untransformed sublink");
338 case T_AlternativeSubPlan:
350 case T_ArrayCoerceExpr:
361 Oid casetype = cexpr->casetype;
402 if (arrayexpr->multidims)
403 commontype = arrayexpr->array_typeid;
405 commontype = arrayexpr->element_typeid;
425 Oid coalescetype = cexpr->coalescetype;
453 Oid minmaxtype = mexpr->minmaxtype;
474 case T_CoerceToDomain:
476 case T_CoerceToDomainValue:
480 case T_PlaceHolderVar:
502 if (coercedTypmod != NULL)
528 if (nargs < 2 || nargs > 3)
534 second_arg->constisnull)
540 if (coercedTypmod != NULL)
551 if (acoerce->resulttypmod < 0)
557 if (coercedTypmod != NULL)
558 *coercedTypmod = acoerce->resulttypmod;
598 con->consttypmod = rtypmod;
599 con->constcollid = rcollid;
617 newrelabel->resulttypmod = rtypmod;
618 newrelabel->resultcollid = rcollid;
619 newrelabel->relabelformat = rformat;
621 return (
Node *) newrelabel;
720 if (expr->funcretset)
774 coll = ((
const Var *) expr)->varcollid;
777 coll = ((
const Const *) expr)->constcollid;
780 coll = ((
const Param *) expr)->paramcollid;
783 coll = ((
const Aggref *) expr)->aggcollid;
789 coll = ((
const WindowFunc *) expr)->wincollid;
791 case T_SubscriptingRef:
795 coll = ((
const FuncExpr *) expr)->funccollid;
801 coll = ((
const OpExpr *) expr)->opcollid;
809 case T_ScalarArrayOpExpr:
829 elog(
ERROR,
"cannot get collation for untransformed sublink");
860 case T_AlternativeSubPlan:
881 case T_ArrayCoerceExpr:
884 case T_ConvertRowtypeExpr:
892 coll = ((
const CaseExpr *) expr)->casecollid;
898 coll = ((
const ArrayExpr *) expr)->array_collid;
904 case T_RowCompareExpr:
912 coll = ((
const MinMaxExpr *) expr)->minmaxcollid;
922 coll = DEFAULT_COLLATION_OID;
934 case T_CoerceToDomain:
937 case T_CoerceToDomainValue:
943 case T_CurrentOfExpr:
947 case T_NextValueExpr:
951 case T_InferenceElem:
954 case T_PlaceHolderVar:
982 coll = ((
const Aggref *) expr)->inputcollid;
985 coll = ((
const WindowFunc *) expr)->inputcollid;
988 coll = ((
const FuncExpr *) expr)->inputcollid;
991 coll = ((
const OpExpr *) expr)->inputcollid;
997 coll = ((
const NullIfExpr *) expr)->inputcollid;
999 case T_ScalarArrayOpExpr:
1003 coll = ((
const MinMaxExpr *) expr)->inputcollid;
1025 ((
Var *) expr)->varcollid = collation;
1028 ((
Const *) expr)->constcollid = collation;
1031 ((
Param *) expr)->paramcollid = collation;
1034 ((
Aggref *) expr)->aggcollid = collation;
1036 case T_GroupingFunc:
1040 ((
WindowFunc *) expr)->wincollid = collation;
1042 case T_SubscriptingRef:
1046 ((
FuncExpr *) expr)->funccollid = collation;
1048 case T_NamedArgExpr:
1052 ((
OpExpr *) expr)->opcollid = collation;
1054 case T_DistinctExpr:
1060 case T_ScalarArrayOpExpr:
1069 #ifdef USE_ASSERT_CHECKING
1081 elog(
ERROR,
"cannot set collation for untransformed sublink");
1107 case T_ArrayCoerceExpr:
1110 case T_ConvertRowtypeExpr:
1115 ((
CaseExpr *) expr)->casecollid = collation;
1118 ((
ArrayExpr *) expr)->array_collid = collation;
1124 case T_RowCompareExpr:
1128 case T_CoalesceExpr:
1132 ((
MinMaxExpr *) expr)->minmaxcollid = collation;
1136 (collation == DEFAULT_COLLATION_OID) :
1147 case T_CoerceToDomain:
1150 case T_CoerceToDomainValue:
1153 case T_SetToDefault:
1156 case T_CurrentOfExpr:
1160 case T_NextValueExpr:
1184 ((
Aggref *) expr)->inputcollid = inputcollation;
1187 ((
WindowFunc *) expr)->inputcollid = inputcollation;
1190 ((
FuncExpr *) expr)->inputcollid = inputcollation;
1193 ((
OpExpr *) expr)->inputcollid = inputcollation;
1195 case T_DistinctExpr:
1199 ((
NullIfExpr *) expr)->inputcollid = inputcollation;
1201 case T_ScalarArrayOpExpr:
1205 ((
MinMaxExpr *) expr)->inputcollid = inputcollation;
1252 loc = ((
const RangeVar *) expr)->location;
1255 loc = ((
const TableFunc *) expr)->location;
1258 loc = ((
const Var *) expr)->location;
1261 loc = ((
const Const *) expr)->location;
1264 loc = ((
const Param *) expr)->location;
1268 loc = ((
const Aggref *) expr)->location;
1270 case T_GroupingFunc:
1277 case T_SubscriptingRef:
1290 case T_NamedArgExpr:
1300 case T_DistinctExpr:
1310 case T_ScalarArrayOpExpr:
1367 case T_ArrayCoerceExpr:
1376 case T_ConvertRowtypeExpr:
1391 loc = ((
const CaseExpr *) expr)->location;
1395 loc = ((
const CaseWhen *) expr)->location;
1399 loc = ((
const ArrayExpr *) expr)->location;
1403 loc = ((
const RowExpr *) expr)->location;
1405 case T_RowCompareExpr:
1409 case T_CoalesceExpr:
1444 case T_CoerceToDomain:
1453 case T_CoerceToDomainValue:
1456 case T_SetToDefault:
1473 foreach(lc, (
const List *) expr)
1492 loc = ((
const ColumnRef *) expr)->location;
1495 loc = ((
const ParamRef *) expr)->location;
1498 loc = ((
const A_Const *) expr)->location;
1516 loc = ((
const ResTarget *) expr)->location;
1518 case T_MultiAssignRef:
1534 case T_CollateClause:
1543 loc = ((
const WindowDef *) expr)->location;
1545 case T_RangeTableSample:
1549 loc = ((
const TypeName *) expr)->location;
1552 loc = ((
const ColumnDef *) expr)->location;
1557 case T_FunctionParameter:
1561 case T_XmlSerialize:
1574 case T_OnConflictClause:
1577 case T_CTESearchClause:
1580 case T_CTECycleClause:
1583 case T_CommonTableExpr:
1586 case T_PlaceHolderVar:
1590 case T_InferenceElem:
1594 case T_PartitionElem:
1597 case T_PartitionSpec:
1600 case T_PartitionBoundSpec:
1603 case T_PartitionRangeDatum:
1627 return Min(loc1, loc2);
1719 if (checker(expr->
aggfnoid, context))
1727 if (checker(expr->
winfnoid, context))
1735 if (checker(expr->
funcid, context))
1740 case T_DistinctExpr:
1747 if (checker(expr->opfuncid, context))
1751 case T_ScalarArrayOpExpr:
1756 if (checker(expr->opfuncid, context))
1769 &iofunc, &typioparam);
1770 if (checker(iofunc, context))
1774 &iofunc, &typisvarlena);
1775 if (checker(iofunc, context))
1779 case T_RowCompareExpr:
1784 foreach(opid, rcexpr->opnos)
1788 if (checker(opfuncid, context))
1907 #define WALK(n) walker((Node *) (n), context)
1909 #define LIST_WALK(l) expression_tree_walker_impl((Node *) (l), walker, context)
1922 case T_CaseTestExpr:
1923 case T_CoerceToDomainValue:
1924 case T_SetToDefault:
1925 case T_CurrentOfExpr:
1926 case T_NextValueExpr:
1928 case T_SortGroupClause:
1929 case T_CTESearchClause:
1932 case T_WithCheckOption:
1951 case T_GroupingFunc:
1970 case T_SubscriptingRef:
1995 case T_NamedArgExpr:
1998 case T_DistinctExpr:
2007 case T_ScalarArrayOpExpr:
2049 case T_AlternativeSubPlan:
2067 case T_ArrayCoerceExpr:
2077 case T_ConvertRowtypeExpr:
2088 foreach(temp, caseexpr->
args)
2106 case T_RowCompareExpr:
2116 case T_CoalesceExpr:
2135 case T_CoerceToDomain:
2142 case T_WindowClause:
2156 case T_CTECycleClause:
2166 case T_CommonTableExpr:
2177 if (
WALK(cte->search_clause))
2179 if (
WALK(cte->cycle_clause))
2183 case T_PartitionBoundSpec:
2195 case T_PartitionRangeDatum:
2204 foreach(temp, (
List *) node)
2220 case T_OnConflictExpr:
2246 case T_PartitionPruneStepOp:
2254 case T_PartitionPruneStepCombine:
2273 case T_SetOperationStmt:
2295 case T_PlaceHolderVar:
2297 case T_InferenceElem:
2299 case T_AppendRelInfo:
2307 case T_PlaceHolderInfo:
2309 case T_RangeTblFunction:
2311 case T_TableSampleClause:
2325 if (
WALK(tf->ns_uris))
2333 if (
WALK(tf->coldefexprs))
2338 elog(
ERROR,
"unrecognized node type: %d",
2380 if (
WALK(query->withCheckOptions))
2618 #define FLATCOPY(newnode, node, nodetype) \
2619 ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
2620 memcpy((newnode), (node), sizeof(nodetype)) )
2622 #define MUTATE(newfield, oldfield, fieldtype) \
2623 ( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) )
2645 return (
Node *) newnode;
2655 return (
Node *) newnode;
2659 case T_CaseTestExpr:
2660 case T_CoerceToDomainValue:
2661 case T_SetToDefault:
2662 case T_CurrentOfExpr:
2663 case T_NextValueExpr:
2665 case T_SortGroupClause:
2666 case T_CTESearchClause:
2668 case T_WithCheckOption:
2675 return (
Node *) newnode;
2684 newnode->aggargtypes =
list_copy(aggref->aggargtypes);
2690 return (
Node *) newnode;
2693 case T_GroupingFunc:
2699 MUTATE(newnode->args, grouping->args,
List *);
2710 newnode->refs =
list_copy(grouping->refs);
2711 newnode->cols =
list_copy(grouping->cols);
2713 return (
Node *) newnode;
2724 return (
Node *) newnode;
2727 case T_SubscriptingRef:
2742 return (
Node *) newnode;
2752 return (
Node *) newnode;
2755 case T_NamedArgExpr:
2762 return (
Node *) newnode;
2772 return (
Node *) newnode;
2775 case T_DistinctExpr:
2782 return (
Node *) newnode;
2792 return (
Node *) newnode;
2795 case T_ScalarArrayOpExpr:
2802 return (
Node *) newnode;
2812 return (
Node *) newnode;
2828 return (
Node *) newnode;
2842 return (
Node *) newnode;
2845 case T_AlternativeSubPlan:
2852 return (
Node *) newnode;
2862 return (
Node *) newnode;
2873 newnode->fieldnums =
list_copy(fstore->fieldnums);
2874 return (
Node *) newnode;
2884 return (
Node *) newnode;
2894 return (
Node *) newnode;
2897 case T_ArrayCoerceExpr:
2905 return (
Node *) newnode;
2908 case T_ConvertRowtypeExpr:
2915 return (
Node *) newnode;
2925 return (
Node *) newnode;
2937 return (
Node *) newnode;
2948 return (
Node *) newnode;
2958 return (
Node *) newnode;
2969 return (
Node *) newnode;
2972 case T_RowCompareExpr:
2980 return (
Node *) newnode;
2983 case T_CoalesceExpr:
2990 return (
Node *) newnode;
3000 return (
Node *) newnode;
3012 return (
Node *) newnode;
3022 return (
Node *) newnode;
3032 return (
Node *) newnode;
3035 case T_CoerceToDomain:
3042 return (
Node *) newnode;
3052 return (
Node *) newnode;
3058 case T_WindowClause:
3068 return (
Node *) newnode;
3071 case T_CTECycleClause:
3079 return (
Node *) newnode;
3082 case T_CommonTableExpr:
3098 return (
Node *) newnode;
3101 case T_PartitionBoundSpec:
3110 return (
Node *) newnode;
3113 case T_PartitionRangeDatum:
3120 return (
Node *) newnode;
3134 foreach(temp, (
List *) node)
3136 resultlist =
lappend(resultlist,
3140 return (
Node *) resultlist;
3151 return (
Node *) newnode;
3154 case T_OnConflictExpr:
3166 return (
Node *) newnode;
3178 return (
Node *) newnode;
3181 case T_PartitionPruneStepOp:
3189 return (
Node *) newnode;
3192 case T_PartitionPruneStepCombine:
3205 return (
Node *) newnode;
3208 case T_SetOperationStmt:
3217 return (
Node *) newnode;
3228 return (
Node *) newnode;
3231 case T_PlaceHolderVar:
3237 MUTATE(newnode->phexpr, phv->phexpr,
Expr *);
3239 return (
Node *) newnode;
3242 case T_InferenceElem:
3249 return (
Node *) newnode;
3252 case T_AppendRelInfo:
3260 return (
Node *) newnode;
3263 case T_PlaceHolderInfo:
3271 return (
Node *) newnode;
3274 case T_RangeTblFunction:
3282 return (
Node *) newnode;
3285 case T_TableSampleClause:
3293 return (
Node *) newnode;
3302 MUTATE(newnode->ns_uris, tf->ns_uris,
List *);
3306 MUTATE(newnode->coldefexprs, tf->coldefexprs,
List *);
3307 return (
Node *) newnode;
3311 elog(
ERROR,
"unrecognized node type: %d",
3356 MUTATE(query->withCheckOptions, query->withCheckOptions,
List *);
3398 resultlist =
lappend(resultlist, (
Node *) newnode);
3420 mutator, context, flags);
3485 newrt =
lappend(newrt, newrte);
3533 return mutator(node, context);
3571 case T_SetToDefault:
3572 case T_CurrentOfExpr:
3588 case T_GroupingFunc:
3608 foreach(temp, caseexpr->
args)
3624 case T_CoalesceExpr:
3653 if (
WALK(join->alias))
3666 if (
WALK(into->viewQuery))
3671 foreach(temp, (
List *) node)
3745 case T_MergeWhenClause:
3795 case T_PLAssignStmt:
3842 case T_NamedArgExpr:
3854 case T_A_Indirection:
3876 case T_MultiAssignRef:
3888 case T_CollateClause:
3906 case T_RangeSubselect:
3916 case T_RangeFunction:
3928 case T_RangeTableSample:
3941 case T_RangeTableFunc:
3957 case T_RangeTableFuncCol:
4004 case T_LockingClause:
4006 case T_XmlSerialize:
4028 case T_OnConflictClause:
4040 case T_CommonTableExpr:
4044 elog(
ERROR,
"unrecognized node type: %d",
4066 #define PSWALK(n) walker(n, context)
4116 case T_SubqueryScan:
4170 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
OnConflictExpr * onConflict
struct TableSampleClause * tablesample
struct PlanState * planstate