59 List **res_colnames,
List **res_colvars,
82 Var *l_colvar,
Var *r_colvar);
86 bool lateral_only,
bool lateral_ok);
88 const char *constructName);
98 List *grouplist,
List *targetlist,
int location);
101 Oid rangeopfamily,
Oid rangeopcintype,
Oid *inRangeFunc,
183 bool inh,
bool alsoSource,
AclMode requiredPerms)
194 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
195 errmsg(
"relation \"%s\" cannot be the target of a modifying statement",
217 relation->
alias, inh,
false);
261 List **res_colnames,
List **res_colvars,
276 foreach(lc, *src_colnos)
282 foreach(lc, src_colnames)
293 *res_colvars =
lappend(*res_colvars,
295 src_nscolumns +
attnum - 1));
297 res_nscolumns[colcount] = src_nscolumns[
attnum - 1];
326 forboth(lvars, leftVars, rvars, rightVars)
372 List *save_namespace;
436 r->
alias == NULL ? NULL :
450 elog(
ERROR,
"unexpected non-SELECT command in subquery in FROM");
541 fc->agg_order ==
NIL &&
542 fc->agg_filter == NULL &&
546 !
fc->func_variadic &&
551 foreach(lc2,
fc->args)
570 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
571 errmsg(
"set-returning functions must appear at top level of FROM"),
575 funcexprs =
lappend(funcexprs, newfexpr);
582 coldeflists =
lappend(coldeflists, coldeflist);
598 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
599 errmsg(
"set-returning functions must appear at top level of FROM"),
603 funcexprs =
lappend(funcexprs, newfexpr);
610 (
errcode(ERRCODE_SYNTAX_ERROR),
611 errmsg(
"multiple column definition lists are not allowed for the same function"),
615 coldeflists =
lappend(coldeflists, coldeflist);
643 (
errcode(ERRCODE_SYNTAX_ERROR),
644 errmsg(
"ROWS FROM() with multiple functions cannot have a column definition list"),
645 errhint(
"Put a separate column definition list for each function inside ROWS FROM()."),
650 (
errcode(ERRCODE_SYNTAX_ERROR),
651 errmsg(
"UNNEST() with multiple arguments cannot have a column definition list"),
652 errhint(
"Use separate UNNEST() calls inside ROWS FROM(), and attach a column definition list to each one."),
658 (
errcode(ERRCODE_SYNTAX_ERROR),
659 errmsg(
"WITH ORDINALITY cannot be used with a column definition list"),
660 errhint(
"Put the column definition list inside ROWS FROM()."),
677 funcnames, funcexprs, coldeflists,
678 r, is_lateral,
true);
693 const char *constructName;
701 constructName =
"XMLTABLE";
733 tf->ordinalitycol = -1;
748 tf->colnames =
lappend(tf->colnames,
757 if (tf->ordinalitycol != -1)
759 (
errcode(ERRCODE_SYNTAX_ERROR),
760 errmsg(
"only one FOR ORDINALITY column is allowed"),
765 tf->ordinalitycol = colno;
771 (
errcode(ERRCODE_INVALID_TABLE_DEFINITION),
772 errmsg(
"column \"%s\" cannot be declared SETOF",
781 tf->coltypmods =
lappend_int(tf->coltypmods, typmod);
811 tf->coldefexprs =
lappend(tf->coldefexprs, coldefexpr);
817 for (
j = 0;
j < colno;
j++)
818 if (strcmp(names[
j], rawc->
colname) == 0)
820 (
errcode(ERRCODE_SYNTAX_ERROR),
821 errmsg(
"column name \"%s\" is not unique",
837 bool default_ns_seen =
false;
847 TEXTOID, constructName);
849 ns_uris =
lappend(ns_uris, ns_uri);
854 foreach(lc2, ns_names)
862 (
errcode(ERRCODE_SYNTAX_ERROR),
863 errmsg(
"namespace name \"%s\" is not unique",
872 (
errcode(ERRCODE_SYNTAX_ERROR),
873 errmsg(
"only one default namespace is allowed"),
875 default_ns_seen =
true;
883 tf->ns_uris = ns_uris;
884 tf->ns_names = ns_names;
898 tf, rtf->
alias, is_lateral,
true);
925 funcargtypes[0] = INTERNALOID;
932 (
errcode(ERRCODE_UNDEFINED_OBJECT),
933 errmsg(
"tablesample method %s does not exist",
940 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
941 errmsg(
"function %s must return type %s",
954 (
errcode(ERRCODE_INVALID_TABLESAMPLE_ARGUMENT),
955 errmsg_plural(
"tablesample method %s requires %d argument, not %d",
956 "tablesample method %s requires %d arguments, not %d",
979 tablesample->
args = fargs;
988 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
989 errmsg(
"tablesample method %s does not support REPEATABLE",
1075 *top_nsitem = nsitem;
1076 *
namespace = list_make1(nsitem);
1079 return (
Node *) rtr;
1088 *top_nsitem = nsitem;
1089 *
namespace = list_make1(nsitem);
1092 return (
Node *) rtr;
1101 *top_nsitem = nsitem;
1102 *
namespace = list_make1(nsitem);
1105 return (
Node *) rtr;
1114 *top_nsitem = nsitem;
1115 *
namespace = list_make1(nsitem);
1118 return (
Node *) rtr;
1129 top_nsitem,
namespace);
1130 rte = (*top_nsitem)->p_rte;
1133 (rte->
relkind != RELKIND_RELATION &&
1134 rte->
relkind != RELKIND_MATVIEW &&
1135 rte->
relkind != RELKIND_PARTITIONED_TABLE))
1137 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1138 errmsg(
"TABLESAMPLE clause can only be applied to tables and materialized views"),
1166 int sv_namespace_length;
1202 sv_namespace_length);
1214 my_namespace =
list_concat(l_namespace, r_namespace);
1244 foreach(lx, l_colnames)
1249 if (l_colname[0] ==
'\0')
1252 foreach(rx, r_colnames)
1256 if (strcmp(l_colname, r_colname) == 0)
1265 rlist =
lappend(rlist, m_name);
1268 j->usingClause = rlist;
1275 if (
j->join_using_alias)
1276 j->join_using_alias->colnames =
j->usingClause;
1298 List *ucols =
j->usingClause;
1305 foreach(ucol, ucols)
1315 Assert(u_colname[0] !=
'\0');
1318 foreach(col, res_colnames)
1322 if (strcmp(res_colname, u_colname) == 0)
1324 (
errcode(ERRCODE_DUPLICATE_COLUMN),
1325 errmsg(
"column name \"%s\" appears more than once in USING clause",
1331 foreach(col, l_colnames)
1335 if (strcmp(l_colname, u_colname) == 0)
1339 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
1340 errmsg(
"common column name \"%s\" appears more than once in left table",
1348 (
errcode(ERRCODE_UNDEFINED_COLUMN),
1349 errmsg(
"column \"%s\" specified in USING clause does not exist in left table",
1355 foreach(col, r_colnames)
1359 if (strcmp(r_colname, u_colname) == 0)
1363 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
1364 errmsg(
"common column name \"%s\" appears more than once in right table",
1372 (
errcode(ERRCODE_UNDEFINED_COLUMN),
1373 errmsg(
"column \"%s\" specified in USING clause does not exist in right table",
1379 l_usingvars =
lappend(l_usingvars, l_colvar);
1381 r_usingvars =
lappend(r_usingvars, r_colvar);
1426 switch (
j->jointype)
1442 elog(
ERROR,
"unrecognized join type: %d",
1456 forboth(lc1, l_colnos, lc2, r_colnos)
1477 res_colvars =
lappend(res_colvars, u_colvar);
1480 res_nscolumn = res_nscolumns + res_colindex;
1482 if (u_colvar == (
Node *) l_colvar)
1485 *res_nscolumn = l_nscolumns[l_index];
1487 else if (u_colvar == (
Node *) r_colvar)
1490 *res_nscolumn = r_nscolumns[r_index];
1499 res_nscolumn->
p_varno =
j->rtindex;
1513 l_nscolumns, l_colnames, &l_colnos,
1514 &res_colnames, &res_colvars,
1515 res_nscolumns + res_colindex);
1518 r_nscolumns, r_colnames, &r_colnos,
1519 &res_colnames, &res_colvars,
1520 res_nscolumns + res_colindex);
1525 for (k = 0; k < res_colindex; k++)
1545 j->join_using_alias,
1568 if (
j->join_using_alias)
1573 jnsitem->
p_names =
j->join_using_alias;
1586 my_namespace =
lappend(my_namespace, jnsitem);
1600 if (
j->alias != NULL)
1614 *top_nsitem = nsitem;
1615 *
namespace =
lappend(my_namespace, nsitem);
1661 Var *l_colvar,
Var *r_colvar)
1683 if (l_colvar->vartype != outcoltype)
1685 outcoltype, outcoltypmod,
1687 else if (l_colvar->vartypmod != outcoltypmod)
1689 outcoltype, outcoltypmod,
1693 l_node = (
Node *) l_colvar;
1695 if (r_colvar->vartype != outcoltype)
1697 outcoltype, outcoltypmod,
1699 else if (r_colvar->vartypmod != outcoltypmod)
1701 outcoltype, outcoltypmod,
1705 r_node = (
Node *) r_colvar;
1719 else if (
IsA(r_node,
Var))
1740 c->coalescetype = outcoltype;
1744 res_node = (
Node *)
c;
1748 elog(
ERROR,
"unrecognized join type: %d", (
int) jointype);
1813 foreach(lc,
namespace)
1830 foreach(lc,
namespace)
1900 (
errcode(ERRCODE_INVALID_ROW_COUNT_IN_LIMIT_CLAUSE),
1901 errmsg(
"row count cannot be null in FETCH FIRST ... WITH TIES clause")));
1924 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
1926 errmsg(
"argument of %s must not contain variables",
1954 (
errcode(ERRCODE_GROUPING_ERROR),
1956 errmsg(
"aggregate functions are not allowed in %s",
1963 (
errcode(ERRCODE_WINDOWING_ERROR),
1965 errmsg(
"window functions are not allowed in %s",
1977 elog(
ERROR,
"unexpected exprKind in checkTargetlistEntrySQL92");
2048 int location = ((
ColumnRef *) node)->location;
2080 if (!tle->resjunk &&
2081 strcmp(tle->resname,
name) == 0)
2083 if (target_result != NULL)
2087 (
errcode(ERRCODE_AMBIGUOUS_COLUMN),
2091 errmsg(
"%s \"%s\" is ambiguous",
2097 target_result = tle;
2101 if (target_result != NULL)
2105 return target_result;
2112 int targetlist_pos = 0;
2117 (
errcode(ERRCODE_SYNTAX_ERROR),
2119 errmsg(
"non-integer constant in %s",
2130 if (++targetlist_pos == target_pos)
2139 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
2141 errmsg(
"%s position %d is not in select list",
2198 if (
equal(expr, texpr))
2210 *tlist =
lappend(*tlist, target_result);
2212 return target_result;
2277 if (hasGroupingSets)
2278 *hasGroupingSets =
true;
2298 result_set =
lappend(result_set, n2);
2312 return (
Node *) result_set;
2319 foreach(l, (
List *) expr)
2332 return (
Node *) result;
2363 List **targetlist,
List *sortClause,
2371 targetlist, exprKind);
2374 targetlist, exprKind);
2418 foreach(sl, sortClause)
2428 *flatresult =
lappend(*flatresult, grpc);
2441 *flatresult, *targetlist,
2471 List **targetlist,
List *sortClause,
2524 List **targetlist,
List *sortClause,
2540 targetlist, sortClause,
2541 exprKind, useSQL99,
false);
2553 targetlist, sortClause,
2554 exprKind, useSQL99,
false));
2579 (
errcode(ERRCODE_TOO_MANY_COLUMNS),
2580 errmsg(
"CUBE is limited to 12 elements"),
2627 List **targetlist,
List *sortClause,
2631 List *flat_grouplist;
2634 bool hasGroupingSets =
false;
2652 if (flat_grouplist ==
NIL && hasGroupingSets)
2659 foreach(gl, flat_grouplist)
2682 targetlist, sortClause,
2683 exprKind, useSQL99,
true));
2691 targetlist, sortClause,
2692 exprKind, useSQL99,
true);
2697 if (hasGroupingSets)
2707 Assert(gsets ==
NIL || groupingSets != NULL);
2710 *groupingSets = gsets;
2735 foreach(olitem, orderlist)
2742 targetlist, exprKind);
2745 targetlist, exprKind);
2748 sortlist, *targetlist, sortby);
2767 foreach(lc, windowdefs)
2771 List *partitionClause;
2785 (
errcode(ERRCODE_WINDOWING_ERROR),
2786 errmsg(
"window \"%s\" is already defined", windef->
name),
2797 (
errcode(ERRCODE_UNDEFINED_OBJECT),
2798 errmsg(
"window \"%s\" does not exist",
2825 wc->name = windef->
name;
2826 wc->refname = windef->
refname;
2844 if (partitionClause)
2846 (
errcode(ERRCODE_WINDOWING_ERROR),
2847 errmsg(
"cannot override PARTITION BY clause of window \"%s\"",
2858 (
errcode(ERRCODE_WINDOWING_ERROR),
2859 errmsg(
"cannot override ORDER BY clause of window \"%s\"",
2865 wc->copiedOrder =
false;
2870 wc->copiedOrder =
true;
2876 wc->copiedOrder =
false;
2888 (
errcode(ERRCODE_WINDOWING_ERROR),
2889 errmsg(
"cannot copy window \"%s\" because it has a frame clause",
2894 (
errcode(ERRCODE_WINDOWING_ERROR),
2895 errmsg(
"cannot copy window \"%s\" because it has a frame clause",
2897 errhint(
"Omit the parentheses in this OVER clause."),
2912 int16 rangestrategy;
2916 (
errcode(ERRCODE_WINDOWING_ERROR),
2917 errmsg(
"RANGE with offset PRECEDING/FOLLOWING requires exactly one ORDER BY column"),
2926 elog(
ERROR,
"operator %u is not a valid ordering operator",
2939 (
errcode(ERRCODE_WINDOWING_ERROR),
2940 errmsg(
"GROUPS mode requires an ORDER BY clause"),
2946 rangeopfamily, rangeopcintype,
2947 &wc->startInRangeFunc,
2950 rangeopfamily, rangeopcintype,
2951 &wc->endInRangeFunc,
2953 wc->runCondition =
NIL;
2981 List **targetlist,
List *sortClause,
bool is_agg)
3002 foreach(slitem, sortClause)
3009 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3011 errmsg(
"in an aggregate with DISTINCT, ORDER BY expressions must appear in argument list") :
3012 errmsg(
"for SELECT DISTINCT, ORDER BY expressions must appear in select list"),
3022 foreach(tlitem, *targetlist)
3029 result, *targetlist,
3042 (
errcode(ERRCODE_SYNTAX_ERROR),
3044 errmsg(
"an aggregate with DISTINCT must have at least one argument") :
3045 errmsg(
"SELECT DISTINCT must have at least one column")));
3065 List **targetlist,
List *sortClause)
3069 bool skipped_sortitem;
3081 foreach(lc, distinctlist)
3090 sortgrouprefs =
lappend_int(sortgrouprefs, sortgroupref);
3101 skipped_sortitem =
false;
3102 foreach(lc, sortClause)
3108 if (skipped_sortitem)
3110 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3111 errmsg(
"SELECT DISTINCT ON expressions must match initial ORDER BY expressions"),
3120 skipped_sortitem =
true;
3132 forboth(lc, distinctlist, lc2, sortgrouprefs)
3140 if (skipped_sortitem)
3142 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3143 errmsg(
"SELECT DISTINCT ON expressions must match initial ORDER BY expressions"),
3146 result, *targetlist,
3176 forboth(lcs, sortgrouprefs, lce, exprs)
3182 elog(
ERROR,
"get_matching_location: no matching sortgroupref");
3220 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3221 errmsg(
"ASC/DESC is not allowed in ON CONFLICT clause"),
3226 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
3227 errmsg(
"NULLS FIRST/LAST is not allowed in ON CONFLICT clause"),
3277 result =
lappend(result, pInfer);
3294 List **arbiterExpr,
Node **arbiterWhere,
3300 *arbiterWhere = NULL;
3305 (
errcode(ERRCODE_SYNTAX_ERROR),
3306 errmsg(
"ON CONFLICT DO UPDATE requires inference specification or constraint name"),
3307 errhint(
"For example, ON CONFLICT (column_name)."),
3317 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3318 errmsg(
"ON CONFLICT is not supported with system catalog tables"),
3325 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3326 errmsg(
"ON CONFLICT is not supported on table \"%s\" used as a catalog table",
3400 if (restype == UNKNOWNOID)
3403 restype, TEXTOID, -1,
3430 &sortop, &eqop, NULL,
3437 NULL, &eqop, &sortop,
3456 (
errcode(ERRCODE_WRONG_OBJECT_TYPE),
3457 errmsg(
"operator %s is not a valid ordering operator",
3459 errhint(
"Ordering operators must be \"<\" or \">\" members of btree operator families.")));
3484 sortcl->
eqop = eqop;
3486 sortcl->hashable = hashable;
3501 elog(
ERROR,
"unrecognized sortby_nulls: %d",
3506 sortlist =
lappend(sortlist, sortcl);
3532 List *grouplist,
List *targetlist,
int location)
3537 if (restype == UNKNOWNOID)
3540 restype, TEXTOID, -1,
3561 &sortop, &eqop, NULL,
3570 grpcl->hashable = hashable;
3572 grouplist =
lappend(grouplist, grpcl);
3636 foreach(l, sortList)
3662 if (wc->name && strcmp(wc->name,
name) == 0)
3682 Oid rangeopfamily,
Oid rangeopcintype,
Oid *inRangeFunc,
3685 const char *constructName = NULL;
3702 constructName =
"ROWS";
3731 preferredType = (nodeType != UNKNOWNOID) ? nodeType : rangeopcintype;
3754 if (selectedType != preferredType)
3756 selectedType = procform->amprocrighttype;
3757 selectedFunc = procform->amproc;
3769 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3770 errmsg(
"RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s",
3775 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3776 errmsg(
"RANGE with offset PRECEDING/FOLLOWING is not supported for column type %s and offset type %s",
3779 errhint(
"Cast the offset value to an appropriate type."),
3781 if (nmatches != 1 && selectedType != preferredType)
3783 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3784 errmsg(
"RANGE with offset PRECEDING/FOLLOWING has multiple interpretations for column type %s and offset type %s",
3787 errhint(
"Cast the offset value to the exact intended type."),
3791 constructName =
"RANGE";
3793 selectedType, constructName);
3794 *inRangeFunc = selectedFunc;
3804 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(const 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 int extractRemainingColumns(ParseState *pstate, ParseNamespaceColumn *src_nscolumns, List *src_colnames, List **src_colnos, List **res_colnames, List **res_colvars, ParseNamespaceColumn *res_nscolumns)
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 markRelsAsNulledBy(ParseState *pstate, Node *n, int jindex)
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 Var * buildVarFromNSColumn(ParseState *pstate, ParseNamespaceColumn *nscol)
static ParseNamespaceItem * transformRangeTableFunc(ParseState *pstate, RangeTableFunc *rtf)
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 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 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)
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)
void markNullableIfNeeded(ParseState *pstate, Var *var)
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)
static ListCell * list_nth_cell(const List *list, int n)
#define list_make1_int(x1)
#define list_make2(x1, x2)
void check_stack_depth(void)
static Datum ObjectIdGetDatum(Oid X)
static int fc(const char *x)
static struct subre * parse(struct vars *v, int stopper, int type, struct state *init, struct state *final)
#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
SortByNulls nulls_ordering
ParseNamespaceColumn * p_nscolumns
RTEPermissionInfo * p_perminfo
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)