58 List **res_colnames,
List **res_colvars,
80 Var *l_colvar,
Var *r_colvar);
83 bool lateral_only,
bool lateral_ok);
85 const char *constructName);
95 List *grouplist,
List *targetlist,
int location);
98 Oid rangeopfamily,
Oid rangeopcintype,
Oid *inRangeFunc,
178 bool inh,
bool alsoSource,
AclMode requiredPerms)
189 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
190 errmsg(
"relation \"%s\" cannot be the target of a modifying statement",
212 relation->
alias, inh,
false);
255 List **res_colnames,
List **res_colvars,
270 foreach(lc, *src_colnos)
276 foreach(lc, src_colnames)
287 *res_colvars =
lappend(*res_colvars,
290 res_nscolumns[colcount] = src_nscolumns[
attnum - 1];
319 forboth(lvars, leftVars, rvars, rightVars)
365 List *save_namespace;
413 if (r->
alias == NULL)
414 elog(
ERROR,
"subquery in FROM must have an alias");
449 elog(
ERROR,
"unexpected non-SELECT command in subquery in FROM");
540 fc->agg_order ==
NIL &&
541 fc->agg_filter == NULL &&
545 !
fc->func_variadic &&
550 foreach(lc,
fc->args)
569 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
570 errmsg(
"set-returning functions must appear at top level of FROM"),
574 funcexprs =
lappend(funcexprs, newfexpr);
581 coldeflists =
lappend(coldeflists, coldeflist);
597 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
598 errmsg(
"set-returning functions must appear at top level of FROM"),
602 funcexprs =
lappend(funcexprs, newfexpr);
609 (
errcode(ERRCODE_SYNTAX_ERROR),
610 errmsg(
"multiple column definition lists are not allowed for the same function"),
614 coldeflists =
lappend(coldeflists, coldeflist);
642 (
errcode(ERRCODE_SYNTAX_ERROR),
643 errmsg(
"ROWS FROM() with multiple functions cannot have a column definition list"),
644 errhint(
"Put a separate column definition list for each function inside ROWS FROM()."),
649 (
errcode(ERRCODE_SYNTAX_ERROR),
650 errmsg(
"UNNEST() with multiple arguments cannot have a column definition list"),
651 errhint(
"Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one."),
657 (
errcode(ERRCODE_SYNTAX_ERROR),
658 errmsg(
"WITH ORDINALITY cannot be used with a column definition list"),
659 errhint(
"Put the column definition list inside ROWS FROM()."),
676 funcnames, funcexprs, coldeflists,
677 r, is_lateral,
true);
692 const char *constructName;
702 constructName =
"XMLTABLE";
760 (
errcode(ERRCODE_SYNTAX_ERROR),
761 errmsg(
"only one FOR ORDINALITY column is allowed"),
772 (
errcode(ERRCODE_INVALID_TABLE_DEFINITION),
773 errmsg(
"column \"%s\" cannot be declared SETOF",
818 for (
j = 0;
j < colno;
j++)
819 if (strcmp(names[
j], rawc->
colname) == 0)
821 (
errcode(ERRCODE_SYNTAX_ERROR),
822 errmsg(
"column name \"%s\" is not unique",
838 bool default_ns_seen =
false;
848 TEXTOID, constructName);
850 ns_uris =
lappend(ns_uris, ns_uri);
855 foreach(lc2, ns_names)
863 (
errcode(ERRCODE_SYNTAX_ERROR),
864 errmsg(
"namespace name \"%s\" is not unique",
873 (
errcode(ERRCODE_SYNTAX_ERROR),
874 errmsg(
"only one default namespace is allowed"),
876 default_ns_seen =
true;
899 tf, rtf->
alias, is_lateral,
true);
926 funcargtypes[0] = INTERNALOID;
933 (
errcode(ERRCODE_UNDEFINED_OBJECT),
934 errmsg(
"tablesample method %s does not exist",
941 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
942 errmsg(
"function %s must return type %s",
955 (
errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT),
956 errmsg_plural(
"tablesample method %s requires %d argument, not %d",
957 "tablesample method %s requires %d arguments, not %d",
980 tablesample->
args = fargs;
989 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
990 errmsg(
"tablesample method %s does not support REPEATABLE",
1073 *top_nsitem = nsitem;
1074 *
namespace = list_make1(nsitem);
1077 return (
Node *) rtr;
1086 *top_nsitem = nsitem;
1087 *
namespace = list_make1(nsitem);
1090 return (
Node *) rtr;
1099 *top_nsitem = nsitem;
1100 *
namespace = list_make1(nsitem);
1103 return (
Node *) rtr;
1116 *top_nsitem = nsitem;
1117 *
namespace = list_make1(nsitem);
1120 return (
Node *) rtr;
1131 top_nsitem,
namespace);
1132 rte = (*top_nsitem)->p_rte;
1135 (rte->
relkind != RELKIND_RELATION &&
1136 rte->
relkind != RELKIND_MATVIEW &&
1137 rte->
relkind != RELKIND_PARTITIONED_TABLE))
1139 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1140 errmsg(
"TABLESAMPLE clause can only be applied to tables and materialized views"),
1168 int sv_namespace_length;
1204 sv_namespace_length);
1216 my_namespace =
list_concat(l_namespace, r_namespace);
1246 foreach(lx, l_colnames)
1251 if (l_colname[0] ==
'\0')
1254 foreach(rx, r_colnames)
1258 if (strcmp(l_colname, r_colname) == 0)
1267 rlist =
lappend(rlist, m_name);
1270 j->usingClause = rlist;
1277 if (
j->join_using_alias)
1278 j->join_using_alias->colnames =
j->usingClause;
1301 List *ucols =
j->usingClause;
1308 foreach(ucol, ucols)
1320 Assert(u_colname[0] !=
'\0');
1323 foreach(col, res_colnames)
1327 if (strcmp(res_colname, u_colname) == 0)
1329 (
errcode(ERRCODE_DUPLICATE_COLUMN),
1330 errmsg(
"column name \"%s\" appears more than once in USING clause",
1336 foreach(col, l_colnames)
1340 if (strcmp(l_colname, u_colname) == 0)
1344 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
1345 errmsg(
"common column name \"%s\" appears more than once in left table",
1353 (
errcode(ERRCODE_UNDEFINED_COLUMN),
1354 errmsg(
"column \"%s\" specified in USING clause does not exist in left table",
1360 foreach(col, r_colnames)
1364 if (strcmp(r_colname, u_colname) == 0)
1368 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
1369 errmsg(
"common column name \"%s\" appears more than once in right table",
1377 (
errcode(ERRCODE_UNDEFINED_COLUMN),
1378 errmsg(
"column \"%s\" specified in USING clause does not exist in right table",
1383 l_usingvars =
lappend(l_usingvars, l_colvar);
1385 r_usingvars =
lappend(r_usingvars, r_colvar);
1392 res_colvars =
lappend(res_colvars, u_colvar);
1393 res_nscolumn = res_nscolumns + res_colindex;
1395 if (u_colvar == (
Node *) l_colvar)
1398 *res_nscolumn = l_nscolumns[l_index];
1400 else if (u_colvar == (
Node *) r_colvar)
1403 *res_nscolumn = r_nscolumns[r_index];
1440 &res_colnames, &res_colvars,
1441 res_nscolumns + res_colindex);
1444 &res_colnames, &res_colvars,
1445 res_nscolumns + res_colindex);
1460 j->join_using_alias,
1471 for (k = 0; k < res_colindex; k++)
1498 if (
j->join_using_alias)
1503 jnsitem->
p_names =
j->join_using_alias;
1515 my_namespace =
lappend(my_namespace, jnsitem);
1529 if (
j->alias != NULL)
1543 *top_nsitem = nsitem;
1544 *
namespace =
lappend(my_namespace, nsitem);
1583 Var *l_colvar,
Var *r_colvar)
1605 if (l_colvar->
vartype != outcoltype)
1607 outcoltype, outcoltypmod,
1609 else if (l_colvar->
vartypmod != outcoltypmod)
1611 outcoltype, outcoltypmod,
1615 l_node = (
Node *) l_colvar;
1617 if (r_colvar->
vartype != outcoltype)
1619 outcoltype, outcoltypmod,
1621 else if (r_colvar->
vartypmod != outcoltypmod)
1623 outcoltype, outcoltypmod,
1627 r_node = (
Node *) r_colvar;
1641 else if (
IsA(r_node,
Var))
1662 c->coalescetype = outcoltype;
1666 res_node = (
Node *)
c;
1670 elog(
ERROR,
"unrecognized join type: %d", (
int) jointype);
1694 foreach(lc,
namespace)
1711 foreach(lc,
namespace)
1781 (
errcode(ERRCODE_INVALID_ROW_COUNT_IN_LIMIT_CLAUSE),
1782 errmsg(
"row count cannot be null in FETCH FIRST ... WITH TIES clause")));
1805 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
1807 errmsg(
"argument of %s must not contain variables",
1835 (
errcode(ERRCODE_GROUPING_ERROR),
1837 errmsg(
"aggregate functions are not allowed in %s",
1844 (
errcode(ERRCODE_WINDOWING_ERROR),
1846 errmsg(
"window functions are not allowed in %s",
1858 elog(
ERROR,
"unexpected exprKind in checkTargetlistEntrySQL92");
1929 int location = ((
ColumnRef *) node)->location;
1964 if (target_result != NULL)
1968 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
1972 errmsg(
"%s \"%s\" is ambiguous",
1978 target_result = tle;
1982 if (target_result != NULL)
1986 return target_result;
1993 int targetlist_pos = 0;
1998 (
errcode(ERRCODE_SYNTAX_ERROR),
2000 errmsg(
"non-integer constant in %s",
2011 if (++targetlist_pos == target_pos)
2020 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2022 errmsg(
"%s position %d is not in select list",
2079 if (
equal(expr, texpr))
2091 *tlist =
lappend(*tlist, target_result);
2093 return target_result;
2158 if (hasGroupingSets)
2159 *hasGroupingSets =
true;
2179 result_set =
lappend(result_set, n2);
2193 return (
Node *) result_set;
2200 foreach(l, (
List *) expr)
2213 return (
Node *) result;
2244 List **targetlist,
List *sortClause,
2252 targetlist, exprKind);
2255 targetlist, exprKind);
2299 foreach(sl, sortClause)
2309 *flatresult =
lappend(*flatresult, grpc);
2322 *flatresult, *targetlist,
2352 List **targetlist,
List *sortClause,
2405 List **targetlist,
List *sortClause,
2421 targetlist, sortClause,
2422 exprKind, useSQL99,
false);
2434 targetlist, sortClause,
2435 exprKind, useSQL99,
false));
2460 (
errcode(ERRCODE_TOO_MANY_COLUMNS),
2461 errmsg(
"CUBE is limited to 12 elements"),
2508 List **targetlist,
List *sortClause,
2512 List *flat_grouplist;
2515 bool hasGroupingSets =
false;
2533 if (flat_grouplist ==
NIL && hasGroupingSets)
2540 foreach(gl, flat_grouplist)
2563 targetlist, sortClause,
2564 exprKind, useSQL99,
true));
2572 targetlist, sortClause,
2573 exprKind, useSQL99,
true);
2578 if (hasGroupingSets)
2588 Assert(gsets ==
NIL || groupingSets != NULL);
2591 *groupingSets = gsets;
2616 foreach(olitem, orderlist)
2623 targetlist, exprKind);
2626 targetlist, exprKind);
2629 sortlist, *targetlist, sortby);
2648 foreach(lc, windowdefs)
2652 List *partitionClause;
2666 (
errcode(ERRCODE_WINDOWING_ERROR),
2667 errmsg(
"window \"%s\" is already defined", windef->
name),
2678 (
errcode(ERRCODE_UNDEFINED_OBJECT),
2679 errmsg(
"window \"%s\" does not exist",
2725 if (partitionClause)
2727 (
errcode(ERRCODE_WINDOWING_ERROR),
2728 errmsg(
"cannot override PARTITION BY clause of window \"%s\"",
2739 (
errcode(ERRCODE_WINDOWING_ERROR),
2740 errmsg(
"cannot override ORDER BY clause of window \"%s\"",
2769 (
errcode(ERRCODE_WINDOWING_ERROR),
2770 errmsg(
"cannot copy window \"%s\" because it has a frame clause",
2775 (
errcode(ERRCODE_WINDOWING_ERROR),
2776 errmsg(
"cannot copy window \"%s\" because it has a frame clause",
2778 errhint(
"Omit the parentheses in this OVER clause."),
2793 int16 rangestrategy;
2797 (
errcode(ERRCODE_WINDOWING_ERROR),
2798 errmsg(
"RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column"),
2807 elog(
ERROR,
"operator %u is not a valid ordering operator",
2820 (
errcode(ERRCODE_WINDOWING_ERROR),
2821 errmsg(
"GROUPS mode requires an ORDER BY clause"),
2827 rangeopfamily, rangeopcintype,
2831 rangeopfamily, rangeopcintype,
2862 List **targetlist,
List *sortClause,
bool is_agg)
2883 foreach(slitem, sortClause)
2890 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2892 errmsg(
"in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list") :
2893 errmsg(
"for SELECT DISTINCT, ORDER BY expressions must appear in select list"),
2903 foreach(tlitem, *targetlist)
2910 result, *targetlist,
2923 (
errcode(ERRCODE_SYNTAX_ERROR),
2925 errmsg(
"an aggregate with DISTINCT must have at least one argument") :
2926 errmsg(
"SELECT DISTINCT must have at least one column")));
2946 List **targetlist,
List *sortClause)
2950 bool skipped_sortitem;
2962 foreach(lc, distinctlist)
2971 sortgrouprefs =
lappend_int(sortgrouprefs, sortgroupref);
2982 skipped_sortitem =
false;
2983 foreach(lc, sortClause)
2989 if (skipped_sortitem)
2991 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2992 errmsg(
"SELECT DISTINCT ON expressions must match initial ORDER BY expressions"),
3001 skipped_sortitem =
true;
3013 forboth(lc, distinctlist, lc2, sortgrouprefs)
3021 if (skipped_sortitem)
3023 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3024 errmsg(
"SELECT DISTINCT ON expressions must match initial ORDER BY expressions"),
3027 result, *targetlist,
3057 forboth(lcs, sortgrouprefs, lce, exprs)
3063 elog(
ERROR,
"get_matching_location: no matching sortgroupref");
3101 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3102 errmsg(
"ASC/DESC is not allowed in ON CONFLICT clause"),
3107 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3108 errmsg(
"NULLS FIRST/LAST is not allowed in ON CONFLICT clause"),
3158 result =
lappend(result, pInfer);
3175 List **arbiterExpr,
Node **arbiterWhere,
3181 *arbiterWhere = NULL;
3186 (
errcode(ERRCODE_SYNTAX_ERROR),
3187 errmsg(
"ON CONFLICT DO UPDATE requires inference specification or constraint name"),
3188 errhint(
"For example, ON CONFLICT (column_name)."),
3198 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3199 errmsg(
"ON CONFLICT is not supported with system catalog tables"),
3206 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3207 errmsg(
"ON CONFLICT is not supported on table \"%s\" used as a catalog table",
3280 if (restype == UNKNOWNOID)
3283 restype, TEXTOID, -1,
3310 &sortop, &eqop, NULL,
3317 NULL, &eqop, &sortop,
3336 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
3337 errmsg(
"operator %s is not a valid ordering operator",
3339 errhint(
"Ordering operators must be \"<\" or \">\" members of btree operator families.")));
3364 sortcl->
eqop = eqop;
3381 elog(
ERROR,
"unrecognized sortby_nulls: %d",
3386 sortlist =
lappend(sortlist, sortcl);
3412 List *grouplist,
List *targetlist,
int location)
3417 if (restype == UNKNOWNOID)
3420 restype, TEXTOID, -1,
3441 &sortop, &eqop, NULL,
3452 grouplist =
lappend(grouplist, grpcl);
3516 foreach(l, sortList)
3562 Oid rangeopfamily,
Oid rangeopcintype,
Oid *inRangeFunc,
3565 const char *constructName = NULL;
3582 constructName =
"ROWS";
3611 preferredType = (nodeType != UNKNOWNOID) ? nodeType : rangeopcintype;
3634 if (selectedType != preferredType)
3636 selectedType = procform->amprocrighttype;
3637 selectedFunc = procform->amproc;
3649 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3650 errmsg(
"RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s",
3655 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3656 errmsg(
"RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s",
3659 errhint(
"Cast the offset value to an appropriate type."),
3661 if (nmatches != 1 && selectedType != preferredType)
3663 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3664 errmsg(
"RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s",
3667 errhint(
"Cast the offset value to the exact intended type."),
3671 constructName =
"RANGE";
3673 selectedType, constructName);
3674 *inRangeFunc = selectedFunc;
3684 constructName =
"GROUPS";
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_add_member(Bitmapset *a, int x)
Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)
#define OidIsValid(objectId)
bool IsCatalogRelation(Relation relation)
void ReleaseCatCacheList(CatCList *list)
elog(ERROR, "%s: %s", p2, msg)
int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
bool equal(const void *a, const void *b)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * list_truncate(List *list, int new_size)
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
List * lappend_oid(List *list, Oid datum)
bool list_member_int(const List *list, int datum)
List * list_concat(List *list1, const List *list2)
Oid get_equality_op_for_ordering_op(Oid opno, bool *reverse)
bool op_hashjoinable(Oid opno, Oid inputtype)
Oid get_typcollation(Oid typid)
bool get_ordering_op_properties(Oid opno, Oid *opfamily, Oid *opcintype, int16 *strategy)
Oid get_func_rettype(Oid funcid)
Oid get_commutator(Oid opno)
RelabelType * makeRelabelType(Expr *arg, Oid rtype, int32 rtypmod, Oid rcollid, CoercionForm rformat)
GroupingSet * makeGroupingSet(GroupingSetKind kind, List *content, int location)
Var * makeVar(int varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
Expr * makeBoolExpr(BoolExprType boolop, List *args, int location)
FuncCall * makeFuncCall(List *name, List *args, CoercionForm funcformat, int location)
A_Expr * makeSimpleA_Expr(A_Expr_Kind kind, char *name, Node *lexpr, Node *rexpr, int location)
char * pstrdup(const char *in)
void pfree(void *pointer)
void * palloc0(Size size)
char * NameListToString(List *names)
Oid exprType(const Node *expr)
int32 exprTypmod(const Node *expr)
Oid exprCollation(const Node *expr)
int exprLocation(const Node *expr)
Node * strip_implicit_coercions(Node *node)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
Oid get_opclass_oid(Oid amID, List *opclassname, bool missing_ok)
Index assignSortGroupRef(TargetEntry *tle, List *tlist)
static Node * transformJoinOnClause(ParseState *pstate, JoinExpr *j, List *namespace)
static void setNamespaceLateralState(List *namespace, bool lateral_only, bool lateral_ok)
List * transformWindowDefinitions(ParseState *pstate, List *windowdefs, List **targetlist)
List * addTargetToSortList(ParseState *pstate, TargetEntry *tle, List *sortlist, List *targetlist, SortBy *sortby)
static void checkExprIsVarFree(ParseState *pstate, Node *n, const char *constructName)
List * transformDistinctOnClause(ParseState *pstate, List *distinctlist, List **targetlist, List *sortClause)
static ParseNamespaceItem * transformRangeSubselect(ParseState *pstate, RangeSubselect *r)
Node * transformLimitClause(ParseState *pstate, Node *clause, ParseExprKind exprKind, const char *constructName, LimitOption limitOption)
static List * transformGroupClauseList(List **flatresult, ParseState *pstate, List *list, List **targetlist, List *sortClause, ParseExprKind exprKind, bool useSQL99, bool toplevel)
List * transformSortClause(ParseState *pstate, List *orderlist, List **targetlist, ParseExprKind exprKind, bool useSQL99)
static Node * transformGroupingSet(List **flatresult, ParseState *pstate, GroupingSet *gset, List **targetlist, List *sortClause, ParseExprKind exprKind, bool useSQL99, bool toplevel)
static Node * flatten_grouping_sets(Node *expr, bool toplevel, bool *hasGroupingSets)
Node * transformWhereClause(ParseState *pstate, Node *clause, ParseExprKind exprKind, const char *constructName)
static ParseNamespaceItem * transformRangeTableFunc(ParseState *pstate, RangeTableFunc *t)
static void setNamespaceColumnVisibility(List *namespace, bool cols_visible)
static int get_matching_location(int sortgroupref, List *sortgrouprefs, List *exprs)
void transformFromClause(ParseState *pstate, List *frmList)
static ParseNamespaceItem * getNSItemForSpecialRelationTypes(ParseState *pstate, RangeVar *rv)
static void checkTargetlistEntrySQL92(ParseState *pstate, TargetEntry *tle, ParseExprKind exprKind)
List * transformGroupClause(ParseState *pstate, List *grouplist, List **groupingSets, List **targetlist, List *sortClause, ParseExprKind exprKind, bool useSQL99)
static Index transformGroupClauseExpr(List **flatresult, Bitmapset *seen_local, ParseState *pstate, Node *gexpr, List **targetlist, List *sortClause, ParseExprKind exprKind, bool useSQL99, bool toplevel)
List * transformDistinctClause(ParseState *pstate, List **targetlist, List *sortClause, bool is_agg)
static TableSampleClause * transformRangeTableSample(ParseState *pstate, RangeTableSample *rts)
static TargetEntry * findTargetlistEntrySQL99(ParseState *pstate, Node *node, List **tlist, ParseExprKind exprKind)
bool targetIsInSortList(TargetEntry *tle, Oid sortop, List *sortList)
static Var * buildVarFromNSColumn(ParseNamespaceColumn *nscol)
static List * addTargetToGroupList(ParseState *pstate, TargetEntry *tle, List *grouplist, List *targetlist, int location)
static Node * transformFrameOffset(ParseState *pstate, int frameOptions, Oid rangeopfamily, Oid rangeopcintype, Oid *inRangeFunc, Node *clause)
static List * resolve_unique_index_expr(ParseState *pstate, InferClause *infer, Relation heapRel)
void transformOnConflictArbiter(ParseState *pstate, OnConflictClause *onConflictClause, List **arbiterExpr, Node **arbiterWhere, Oid *constraint)
static Node * transformJoinUsingClause(ParseState *pstate, List *leftVars, List *rightVars)
int setTargetTable(ParseState *pstate, RangeVar *relation, bool inh, bool alsoSource, AclMode requiredPerms)
static Node * buildMergedJoinVar(ParseState *pstate, JoinType jointype, Var *l_colvar, Var *r_colvar)
static int extractRemainingColumns(ParseNamespaceColumn *src_nscolumns, List *src_colnames, List **src_colnos, List **res_colnames, List **res_colvars, ParseNamespaceColumn *res_nscolumns)
static Node * transformFromClauseItem(ParseState *pstate, Node *n, ParseNamespaceItem **top_nsitem, List **namespace)
static ParseNamespaceItem * transformTableEntry(ParseState *pstate, RangeVar *r)
static TargetEntry * findTargetlistEntrySQL92(ParseState *pstate, Node *node, List **tlist, ParseExprKind exprKind)
static WindowClause * findWindowClause(List *wclist, const char *name)
static ParseNamespaceItem * transformRangeFunction(ParseState *pstate, RangeFunction *r)
Node * coerce_to_specific_type_typmod(ParseState *pstate, Node *node, Oid targetTypeId, int32 targetTypmod, const char *constructName)
Node * coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId, int32 targetTypeMod, CoercionContext ccontext, CoercionForm cformat, int location)
Node * coerce_to_boolean(ParseState *pstate, Node *node, const char *constructName)
int32 select_common_typmod(ParseState *pstate, List *exprs, Oid common_type)
Node * coerce_to_specific_type(ParseState *pstate, Node *node, Oid targetTypeId, const char *constructName)
Oid select_common_type(ParseState *pstate, List *exprs, const char *context, Node **which_expr)
bool can_coerce_type(int nargs, const Oid *input_typeids, const Oid *target_typeids, CoercionContext ccontext)
void assign_list_collations(ParseState *pstate, List *exprs)
void assign_expr_collations(ParseState *pstate, Node *expr)
Node * transformExpr(ParseState *pstate, Node *expr, ParseExprKind exprKind)
const char * ParseExprKindName(ParseExprKind exprKind)
Oid LookupFuncName(List *funcname, int nargs, const Oid *argtypes, bool missing_ok)
ParseNamespaceItem * transformJsonTable(ParseState *pstate, JsonTable *jt)
void cancel_parser_errposition_callback(ParseCallbackState *pcbstate)
int parser_errposition(ParseState *pstate, int location)
void setup_parser_errposition_callback(ParseCallbackState *pcbstate, ParseState *pstate, int location)
@ EXPR_KIND_INDEX_EXPRESSION
@ EXPR_KIND_WINDOW_FRAME_RANGE
@ EXPR_KIND_FROM_SUBSELECT
@ EXPR_KIND_WINDOW_FRAME_GROUPS
@ EXPR_KIND_INDEX_PREDICATE
@ EXPR_KIND_FROM_FUNCTION
@ EXPR_KIND_WINDOW_PARTITION
@ EXPR_KIND_WINDOW_FRAME_ROWS
struct ParseNamespaceColumn ParseNamespaceColumn
void get_sort_group_operators(Oid argtype, bool needLT, bool needEQ, bool needGT, Oid *ltOpr, Oid *eqOpr, Oid *gtOpr, bool *isHashable)
Oid compatible_oper_opid(List *op, Oid arg1, Oid arg2, bool noError)
ParseNamespaceItem * addRangeTableEntryForCTE(ParseState *pstate, CommonTableExpr *cte, Index levelsup, RangeVar *rv, bool inFromCl)
ParseNamespaceItem * addRangeTableEntry(ParseState *pstate, RangeVar *relation, Alias *alias, bool inh, bool inFromCl)
ParseNamespaceItem * addRangeTableEntryForJoin(ParseState *pstate, List *colnames, ParseNamespaceColumn *nscolumns, JoinType jointype, int nummergedcols, List *aliasvars, List *leftcols, List *rightcols, Alias *join_using_alias, Alias *alias, bool inFromCl)
void markVarForSelectPriv(ParseState *pstate, Var *var)
CommonTableExpr * scanNameSpaceForCTE(ParseState *pstate, const char *refname, Index *ctelevelsup)
ParseNamespaceItem * addRangeTableEntryForRelation(ParseState *pstate, Relation rel, int lockmode, Alias *alias, bool inh, bool inFromCl)
Relation parserOpenTable(ParseState *pstate, const RangeVar *relation, int lockmode)
void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, bool addToRelNameSpace, bool addToVarNameSpace)
ParseNamespaceItem * addRangeTableEntryForSubquery(ParseState *pstate, Query *subquery, Alias *alias, bool lateral, bool inFromCl)
bool scanNameSpaceForENR(ParseState *pstate, const char *refname)
bool isLockedRefname(ParseState *pstate, const char *refname)
ParseNamespaceItem * addRangeTableEntryForFunction(ParseState *pstate, List *funcnames, List *funcexprs, List *coldeflists, RangeFunction *rangefunc, bool lateral, bool inFromCl)
Node * colNameToVar(ParseState *pstate, const char *colname, bool localonly, int location)
ParseNamespaceItem * addRangeTableEntryForTableFunc(ParseState *pstate, TableFunc *tf, Alias *alias, bool lateral, bool inFromCl)
ParseNamespaceItem * addRangeTableEntryForENR(ParseState *pstate, RangeVar *rv, bool inFromCl)
void checkNameSpaceConflicts(ParseState *pstate, List *namespace1, List *namespace2)
TargetEntry * transformTargetEntry(ParseState *pstate, Node *node, Node *expr, ParseExprKind exprKind, char *colname, bool resjunk)
char * FigureColname(Node *node)
Oid LookupCollation(ParseState *pstate, List *collnames, int location)
void typenameTypeIdAndMod(ParseState *pstate, const TypeName *typeName, Oid *typeid_p, int32 *typmod_p)
#define FRAMEOPTION_END_OFFSET
#define FRAMEOPTION_START_OFFSET
#define FRAMEOPTION_RANGE
#define FRAMEOPTION_GROUPS
#define FRAMEOPTION_DEFAULTS
Query * parse_sub_analyze(Node *parseTree, ParseState *parentParseState, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns)
List * SystemFuncName(char *name)
FormData_pg_amproc * Form_pg_amproc
Bitmapset * get_relation_constraint_attnos(Oid relid, const char *conname, bool missing_ok, Oid *constraintOid)
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
#define forboth(cell1, list1, cell2, list2)
#define list_make1_int(x1)
#define list_make2(x1, x2)
void check_stack_depth(void)
#define ObjectIdGetDatum(X)
static int fc(const char *x)
static struct subre * parse(struct vars *, int, int, struct state *, struct state *)
#define RelationGetRelid(relation)
#define RelationIsUsedAsCatalogTable(relation)
#define RelationGetRelationName(relation)
bool contain_windowfuncs(Node *node)
int locate_agg_of_level(Node *node, int levelsup)
bool contain_aggs_of_level(Node *node, int levelsup)
int locate_windowfunc(Node *node)
#define BTLessStrategyNumber
union A_Const::ValUnion val
SortByNulls nulls_ordering
ParseNamespaceColumn * p_nscolumns
ParseNamespaceItem * p_target_nsitem
ParseExprKind p_expr_kind
Relation p_target_relation
struct TableSampleClause * tablesample
bool repeatable_across_queries
CatCTup * members[FLEXIBLE_ARRAY_MEMBER]
#define SearchSysCacheList2(cacheId, key1, key2)
void table_close(Relation relation, LOCKMODE lockmode)
TsmRoutine * GetTsmRoutine(Oid tsmhandler)
TargetEntry * get_sortgroupref_tle(Index sortref, List *targetList)
Node * get_sortgroupclause_expr(SortGroupClause *sgClause, List *targetList)
TargetEntry * get_sortgroupclause_tle(SortGroupClause *sgClause, List *targetList)
String * makeString(char *str)
bool contain_vars_of_level(Node *node, int levelsup)
int locate_var_of_level(Node *node, int levelsup)