63 bool strip_indirection);
71 bool isTopLevel,
List **targetlist);
91 #ifdef RAW_EXPRESSION_COVERAGE_TEST 92 static bool test_raw_expression_coverage(
Node *node,
void *context);
109 Oid *paramTypes,
int numParams,
116 Assert(sourceText != NULL);
131 (*post_parse_analyze_hook) (pstate, query, jstate);
149 Oid **paramTypes,
int *numParams)
155 Assert(sourceText != NULL);
170 (*post_parse_analyze_hook) (pstate, query, jstate);
186 bool locked_from_parent,
187 bool resolve_unknowns)
250 ctas->
query = parseTree;
262 parseTree = (
Node *) ctas;
283 #ifdef RAW_EXPRESSION_COVERAGE_TEST 290 (void) test_raw_expression_coverage(parseTree, NULL);
502 bool isGeneralSelect;
512 bool isOnConflictUpdate;
543 isGeneralSelect = (selectStmt && (selectStmt->
valuesLists ==
NIL ||
579 if (isOnConflictUpdate)
582 false,
false, targetPerms);
591 if (selectStmt == NULL)
600 else if (isGeneralSelect)
638 elog(
ERROR,
"unexpected non-SELECT command in INSERT ... SELECT");
684 exprList =
lappend(exprList, expr);
705 int sublist_length = -1;
706 bool lateral =
false;
708 Assert(selectStmt->intoClause == NULL);
710 foreach(lc, selectStmt->valuesLists)
726 if (sublist_length < 0)
734 (
errcode(ERRCODE_SYNTAX_ERROR),
735 errmsg(
"VALUES lists must all be the same length"),
769 exprsLists =
lappend(exprsLists, sublist);
802 coltypes, coltypmods, colcollations,
803 NULL, lateral,
true);
827 List *valuesLists = selectStmt->valuesLists;
830 Assert(selectStmt->intoClause == NULL);
852 rte = pstate->p_target_nsitem->p_rte;
853 qry->targetList =
NIL;
855 forthree(lc, exprList, icols, icolumns, attnos, attrnos)
866 qry->targetList =
lappend(qry->targetList, tle);
877 if (stmt->onConflictClause || stmt->returningList)
879 pstate->p_namespace =
NIL;
885 if (stmt->onConflictClause)
887 stmt->onConflictClause);
890 if (stmt->returningList)
892 stmt->returningList);
895 qry->rtable = pstate->p_rtable;
898 qry->hasTargetSRFs = pstate->p_hasTargetSRFs;
899 qry->hasSubLinks = pstate->p_hasSubLinks;
919 bool strip_indirection)
935 (
errcode(ERRCODE_SYNTAX_ERROR),
936 errmsg(
"INSERT has more expressions than target columns"),
940 if (stmtcols !=
NIL &&
953 (
errcode(ERRCODE_SYNTAX_ERROR),
954 errmsg(
"INSERT has more target columns than expressions"),
958 errhint(
"The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?") : 0),
968 forthree(lc, exprlist, icols, icolumns, attnos, attrnos)
981 if (strip_indirection)
1005 result =
lappend(result, expr);
1022 Oid arbiterConstraint;
1024 Node *onConflictWhere = NULL;
1025 int exclRelIndex = 0;
1045 exclRte = exclNSItem->
p_rte;
1053 exclRte->
relkind = RELKIND_COMPOSITE_TYPE;
1064 &arbiterWhere, &arbiterConstraint);
1142 if (attr->attisdropped)
1153 var =
makeVar(exclRelIndex, attno + 1,
1154 attr->atttypid, attr->atttypmod,
1176 targetrel->
rd_rel->reltype,
1206 if (attnum > 0 && var->
vartype == RECORDOID)
1217 if (ste == NULL || ste->
resjunk)
1256 (
errcode(ERRCODE_SYNTAX_ERROR),
1257 errmsg(
"SELECT ... INTO is not allowed here"),
1386 List **colexprs = NULL;
1387 int sublist_length = -1;
1388 bool lateral =
false;
1438 if (sublist_length < 0)
1448 (
errcode(ERRCODE_SYNTAX_ERROR),
1449 errmsg(
"VALUES lists must all be the same length"),
1456 foreach(lc2, sublist)
1460 colexprs[
i] =
lappend(colexprs[i], col);
1482 for (i = 0; i < sublist_length; i++)
1490 foreach(lc, colexprs[i])
1495 lfirst(lc) = (
void *) col;
1503 colcollations =
lappend_oid(colcollations, colcoll);
1510 foreach(lc, colexprs[0])
1516 exprsLists =
lappend(exprsLists, sublist);
1519 for (i = 1; i < sublist_length; i++)
1521 forboth(lc, colexprs[i], lc2, exprsLists)
1526 sublist =
lappend(sublist, col);
1545 coltypes, coltypmods, colcollations,
1546 NULL, lateral,
true);
1575 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1578 errmsg(
"%s cannot be applied to VALUES",
1608 Query *leftmostQuery;
1613 List *lockingClause;
1624 int sv_rtable_length;
1640 leftmostSelect = stmt->
larg;
1641 while (leftmostSelect && leftmostSelect->
op !=
SETOP_NONE)
1642 leftmostSelect = leftmostSelect->
larg;
1644 leftmostSelect->
larg == NULL);
1647 (
errcode(ERRCODE_SYNTAX_ERROR),
1648 errmsg(
"SELECT ... INTO is not allowed here"),
1672 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1675 errmsg(
"%s is not allowed with UNION/INTERSECT/EXCEPT",
1677 linitial(lockingClause))->strength))));
1698 node = sostmt->
larg;
1704 Assert(leftmostQuery != NULL);
1751 targetvars =
lappend(targetvars, var);
1753 sortnscolumns[sortcolindex].
p_varno = leftmostRTI;
1755 sortnscolumns[sortcolindex].
p_vartype = colType;
1756 sortnscolumns[sortcolindex].
p_vartypmod = colTypmod;
1757 sortnscolumns[sortcolindex].
p_varcollid = colCollation;
1758 sortnscolumns[sortcolindex].
p_varnosyn = leftmostRTI;
1813 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1814 errmsg(
"invalid UNION/INTERSECT/EXCEPT ORDER BY clause"),
1815 errdetail(
"Only result column names can be used, not expressions or functions."),
1816 errhint(
"Add the expression/function to every SELECT, or move the UNION into a FROM clause."),
1836 foreach(l, lockingClause)
1865 &sortop, &eqop, NULL,
1894 bool isTopLevel,
List **targetlist)
1908 (
errcode(ERRCODE_SYNTAX_ERROR),
1909 errmsg(
"INTO is only allowed on first SELECT of UNION/INTERSECT/EXCEPT"),
1916 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1919 errmsg(
"%s is not allowed with UNION/INTERSECT/EXCEPT",
1948 char selectName[32];
1968 NULL,
false,
false);
1980 (
errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
1981 errmsg(
"UNION/INTERSECT/EXCEPT member statement cannot refer to other relations of same query level"),
1997 *targetlist =
lappend(*targetlist, tle);
2004 snprintf(selectName,
sizeof(selectName),
"*SELECT* %d",
2017 return (
Node *) rtr;
2027 const char *context;
2067 (
errcode(ERRCODE_SYNTAX_ERROR),
2068 errmsg(
"each %s query must have the same number of columns",
2079 forboth(ltl, ltargetlist, rtl, rtargetlist)
2127 if (lcoltype != UNKNOWNOID)
2129 rescoltype, context);
2134 rescoltype, context);
2138 if (rcoltype != UNKNOWNOID)
2140 rescoltype, context);
2145 rescoltype, context);
2199 rescolnode->
typeId = rescoltype;
2200 rescolnode->
typeMod = rescoltypmod;
2202 rescolnode->
location = bestlocation;
2207 *targetlist =
lappend(*targetlist, restle);
2224 Query *leftmostQuery;
2239 Assert(leftmostQuery != NULL);
2261 targetList =
lappend(targetList, tle);
2404 if (orig_tl == NULL)
2405 elog(
ERROR,
"UPDATE target count mismatch --- internal error");
2409 origTarget->
name,
true);
2412 (
errcode(ERRCODE_UNDEFINED_COLUMN),
2413 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
2427 orig_tl =
lnext(origTlist, orig_tl);
2429 if (orig_tl != NULL)
2430 elog(
ERROR,
"UPDATE target count mismatch --- internal error");
2443 int save_next_resno;
2445 if (returningList ==
NIL)
2467 (
errcode(ERRCODE_SYNTAX_ERROR),
2468 errmsg(
"RETURNING must have at least one column"),
2503 int nnames = stmt->
nnames;
2508 Oid targetcollation;
2526 while (--nnames > 0 && indirection !=
NIL)
2530 if (!
IsA(ind, String))
2531 elog(
ERROR,
"invalid name count in PLAssignStmt");
2570 (
errcode(ERRCODE_SYNTAX_ERROR),
2572 "assignment source returned %d columns",
2602 else if (targettype != type_id &&
2603 (targettype == RECORDOID ||
ISCOMPLEX(targettype)) &&
2604 (type_id == RECORDOID ||
ISCOMPLEX(type_id)))
2624 targettype, targettypmod,
2629 if (tle->
expr == NULL)
2631 (
errcode(ERRCODE_DATATYPE_MISMATCH),
2632 errmsg(
"variable \"%s\" is of type %s" 2633 " but expression is of type %s",
2637 errhint(
"You will need to rewrite or cast the expression."),
2754 (
errcode(ERRCODE_INVALID_CURSOR_DEFINITION),
2756 errmsg(
"cannot specify both %s and %s",
2757 "SCROLL",
"NO SCROLL")));
2762 (
errcode(ERRCODE_INVALID_CURSOR_DEFINITION),
2764 errmsg(
"cannot specify both %s and %s",
2765 "ASENSITIVE",
"INSENSITIVE")));
2774 elog(
ERROR,
"unexpected non-SELECT command in DECLARE CURSOR");
2783 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2784 errmsg(
"DECLARE CURSOR must not contain data-modifying statements in WITH")));
2789 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2792 errmsg(
"DECLARE CURSOR WITH HOLD ... %s is not supported",
2795 errdetail(
"Holdable cursors must be READ ONLY.")));
2800 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2803 errmsg(
"DECLARE SCROLL CURSOR ... %s is not supported",
2806 errdetail(
"Scrollable cursors must be READ ONLY.")));
2811 (
errcode(ERRCODE_INVALID_CURSOR_DEFINITION),
2814 errmsg(
"DECLARE INSENSITIVE CURSOR ... %s is not valid",
2817 errdetail(
"Insensitive cursors must be READ ONLY.")));
2882 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2883 errmsg(
"materialized views must not use data-modifying statements in WITH")));
2892 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2893 errmsg(
"materialized views must not use temporary tables or views")));
2902 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2903 errmsg(
"materialized views may not be defined using bound parameters")));
2914 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2915 errmsg(
"materialized views cannot be unlogged")));
2987 return "FOR KEY SHARE";
2991 return "FOR NO KEY UPDATE";
2993 return "FOR UPDATE";
3010 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3013 errmsg(
"%s is not allowed with UNION/INTERSECT/EXCEPT",
3017 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3020 errmsg(
"%s is not allowed with DISTINCT clause",
3024 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3027 errmsg(
"%s is not allowed with GROUP BY clause",
3031 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3034 errmsg(
"%s is not allowed with HAVING clause",
3038 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3041 errmsg(
"%s is not allowed with aggregate functions",
3045 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3048 errmsg(
"%s is not allowed with window functions",
3052 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3055 errmsg(
"%s is not allowed with set-returning functions in the target list",
3085 if (lockedRels ==
NIL)
3124 foreach(l, lockedRels)
3131 (
errcode(ERRCODE_SYNTAX_ERROR),
3134 errmsg(
"%s must specify unqualified relation names",
3162 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3165 errmsg(
"%s cannot be applied to a join",
3171 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3174 errmsg(
"%s cannot be applied to a function",
3180 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3183 errmsg(
"%s cannot be applied to a table function",
3189 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3192 errmsg(
"%s cannot be applied to VALUES",
3198 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3201 errmsg(
"%s cannot be applied to a WITH query",
3207 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
3210 errmsg(
"%s cannot be applied to a named tuplestore",
3218 elog(
ERROR,
"unrecognized RTE type: %d",
3230 errmsg(
"relation \"%s\" in %s clause not found in FROM clause",
3299 #ifdef RAW_EXPRESSION_COVERAGE_TEST 3302 test_raw_expression_coverage(
Node *node,
void *context)
3307 test_raw_expression_coverage,
#define list_make2(x1, x2)
Value * makeString(char *str)
struct ParseNamespaceColumn ParseNamespaceColumn
static void transformLockingClause(ParseState *pstate, Query *qry, LockingClause *lc, bool pushedDown)
static List * transformUpdateTargetList(ParseState *pstate, List *targetList)
FromExpr * makeFromExpr(List *fromlist, Node *quals)
#define IsA(nodeptr, _type_)
static Query * transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt)
const char * LCS_asString(LockClauseStrength strength)
int errhint(const char *fmt,...)
static Query * transformDeclareCursorStmt(ParseState *pstate, DeclareCursorStmt *stmt)
#define forboth(cell1, list1, cell2, list2)
bool analyze_requires_snapshot(RawStmt *parseTree)
#define ERRCODE_UNDEFINED_TABLE
bool isQueryUsingTempRelation(Query *query)
List * transformDistinctOnClause(ParseState *pstate, List *distinctlist, List **targetlist, List *sortClause)
RowMarkClause * get_parse_rowmark(Query *qry, Index rtindex)
ParseNamespaceItem * addRangeTableEntryForValues(ParseState *pstate, List *exprs, List *coltypes, List *coltypmods, List *colcollations, Alias *alias, bool lateral, bool inFromCl)
int exprLocation(const Node *expr)
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)
Expr * transformAssignedExpr(ParseState *pstate, Expr *expr, ParseExprKind exprKind, const char *colname, int attrno, List *indirection, int location)
static ListCell * lnext(const List *l, const ListCell *c)
int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
#define castNode(_type_, nodeptr)
#define RelationGetNumberOfAttributes(relation)
QueryEnvironment * p_queryEnv
int32 exprTypmod(const Node *expr)
void analyzeCTETargetList(ParseState *pstate, CommonTableExpr *cte, List *tlist)
List * transformSortClause(ParseState *pstate, List *orderlist, List **targetlist, ParseExprKind exprKind, bool useSQL99)
#define TupleDescAttr(tupdesc, i)
#define forthree(cell1, list1, cell2, list2, cell3, list3)
SortGroupClause * makeSortGroupClauseForSetOp(Oid rescoltype)
int32 select_common_typmod(ParseState *pstate, List *exprs, Oid common_type)
char * pstrdup(const char *in)
List * BuildOnConflictExcludedTargetlist(Relation targetrel, Index exclRelIndex)
Node * transformExpr(ParseState *pstate, Node *expr, ParseExprKind exprKind)
Var * makeVarFromTargetEntry(Index varno, TargetEntry *tle)
static Query * transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
List * list_truncate(List *list, int new_size)
void parse_variable_parameters(ParseState *pstate, Oid **paramTypes, int *numParams)
static Query * transformValuesClause(ParseState *pstate, SelectStmt *stmt)
List * list_copy(const List *oldlist)
void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem, bool addToJoinList, bool addToRelNameSpace, bool addToVarNameSpace)
static int count_rowexpr_columns(ParseState *pstate, Node *expr)
int errcode(int sqlerrcode)
void transformOnConflictArbiter(ParseState *pstate, OnConflictClause *onConflictClause, List **arbiterExpr, Node **arbiterWhere, Oid *constraint)
Query * parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, Oid **paramTypes, int *numParams)
#define CURSOR_OPT_INSENSITIVE
#define FirstLowInvalidHeapAttributeNumber
static List * transformReturningList(ParseState *pstate, List *returningList)
ParseNamespaceItem * p_target_nsitem
#define linitial_node(type, l)
List * lappend_oid(List *list, Oid datum)
CommonTableExpr * p_parent_cte
void parseCheckAggregates(ParseState *pstate, Query *qry)
#define CURSOR_OPT_NO_SCROLL
LockClauseStrength strength
OnConflictClause * onConflictClause
Const * makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid)
bool p_locked_from_parent
ParseNamespaceItem * addRangeTableEntryForRelation(ParseState *pstate, Relation rel, int lockmode, Alias *alias, bool inh, bool inFromCl)
ParseState * make_parsestate(ParseState *parentParseState)
void assign_expr_collations(ParseState *pstate, Node *expr)
List * transformTargetList(ParseState *pstate, List *targetlist, ParseExprKind exprKind)
Alias * makeAlias(const char *aliasname, List *colnames)
int locate_var_of_level(Node *node, int levelsup)
void CheckSelectLocking(Query *qry, LockClauseStrength strength)
void cancel_parser_errposition_callback(ParseCallbackState *pcbstate)
Node * transformLimitClause(ParseState *pstate, Node *clause, ParseExprKind exprKind, const char *constructName, LimitOption limitOption)
bool raw_expression_tree_walker(Node *node, bool(*walker)(), void *context)
Node * ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, Node *last_srf, FuncCall *fn, bool proc_call, int location)
static void * list_nth(const List *list, int n)
Node * coerce_to_target_type(ParseState *pstate, Node *expr, Oid exprtype, Oid targettype, int32 targettypmod, CoercionContext ccontext, CoercionForm cformat, int location)
#define lfirst_node(type, lc)
#define CURSOR_OPT_ASENSITIVE
void assign_list_collations(ParseState *pstate, List *exprs)
static Query * transformExplainStmt(ParseState *pstate, ExplainStmt *stmt)
void(* post_parse_analyze_hook_type)(ParseState *pstate, Query *query, JumbleState *jstate)
void check_stack_depth(void)
int errdetail(const char *fmt,...)
LockClauseStrength strength
Oid select_common_collation(ParseState *pstate, List *exprs, bool none_ok)
List * list_delete_last(List *list)
List * transformGroupClause(ParseState *pstate, List *grouplist, List **groupingSets, List **targetlist, List *sortClause, ParseExprKind exprKind, bool useSQL99)
#define RelationGetRelationName(relation)
static Query * transformSelectStmt(ParseState *pstate, SelectStmt *stmt)
static ListCell * list_head(const List *l)
FormData_pg_attribute * Form_pg_attribute
const char * p_sourcetext
static Query * transformReturnStmt(ParseState *pstate, ReturnStmt *stmt)
#define rt_fetch(rangetable_index, rangetable)
static Node * transformSetOperationTree(ParseState *pstate, SelectStmt *stmt, bool isTopLevel, List **targetlist)
TargetEntry * makeTargetEntry(Expr *expr, AttrNumber resno, char *resname, bool resjunk)
Var * makeVar(Index varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
void setup_parser_errposition_callback(ParseCallbackState *pcbstate, ParseState *pstate, int location)
List * lappend_int(List *list, int datum)
Query * transformStmt(ParseState *pstate, Node *parseTree)
Node * coerce_to_common_type(ParseState *pstate, Node *node, Oid targetTypeId, const char *context)
static Query * transformPLAssignStmt(ParseState *pstate, PLAssignStmt *stmt)
List * lappend(List *list, void *datum)
List * transformWindowDefinitions(ParseState *pstate, List *windowdefs, List **targetlist)
void * palloc0(Size size)
List * transformExpressionList(ParseState *pstate, List *exprlist, ParseExprKind exprKind, bool allowDefault)
void resolveTargetListUnknowns(ParseState *pstate, List *targetlist)
RangeTblEntry * GetRTEByRangeTablePosn(ParseState *pstate, int varno, int sublevels_up)
void transformFromClause(ParseState *pstate, List *frmList)
ParseExprKind p_expr_kind
static Query * transformInsertStmt(ParseState *pstate, InsertStmt *stmt)
int setTargetTable(ParseState *pstate, RangeVar *relation, bool inh, bool alsoSource, AclMode requiredPerms)
Query * parse_sub_analyze(Node *parseTree, ParseState *parentParseState, CommonTableExpr *parentCTE, bool locked_from_parent, bool resolve_unknowns)
#define ereport(elevel,...)
void pgstat_report_query_id(uint64 query_id, bool force)
Query * parse_analyze(RawStmt *parseTree, const char *sourceText, Oid *paramTypes, int numParams, QueryEnvironment *queryEnv)
int attnameAttNum(Relation rd, const char *attname, bool sysColOK)
#define Assert(condition)
void get_sort_group_operators(Oid argtype, bool needLT, bool needEQ, bool needGT, Oid *ltOpr, Oid *eqOpr, Oid *gtOpr, bool *isHashable)
void markTargetListOrigins(ParseState *pstate, List *targetlist)
void parse_fixed_parameters(ParseState *pstate, Oid *paramTypes, int numParams)
Node * transformWhereClause(ParseState *pstate, Node *clause, ParseExprKind exprKind, const char *constructName)
List * expandNSItemVars(ParseNamespaceItem *nsitem, int sublevels_up, int location, List **colnames)
bool contain_vars_of_level(Node *node, int levelsup)
Query * transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree)
#define ACL_SELECT_FOR_UPDATE
#define ISCOMPLEX(typeid)
List * checkInsertTargets(ParseState *pstate, List *cols, List **attrnos)
List * transformWithClause(ParseState *pstate, WithClause *withClause)
static Query * transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt)
Oid exprType(const Node *expr)
static int list_length(const List *l)
int parser_errposition(ParseState *pstate, int location)
Oid exprCollation(const Node *expr)
static OnConflictExpr * transformOnConflictClause(ParseState *pstate, OnConflictClause *onConflictClause)
LockWaitPolicy waitPolicy
Bitmapset * bms_add_member(Bitmapset *a, int x)
static Query * transformSetOperationStmt(ParseState *pstate, SelectStmt *stmt)
bool query_contains_extern_params(Query *query)
#define InvalidAttrNumber
#define forfour(cell1, list1, cell2, list2, cell3, list3, cell4, list4)
int errmsg(const char *fmt,...)
void assign_query_collations(ParseState *pstate, Query *query)
Relation p_target_relation
static Query * transformOptionalSelectInto(ParseState *pstate, Node *parseTree)
void list_free(List *list)
#define CURSOR_OPT_SCROLL
TargetEntry * get_tle_by_resno(List *tlist, AttrNumber resno)
ParseNamespaceItem * addRangeTableEntryForSubquery(ParseState *pstate, Query *subquery, Alias *alias, bool lateral, bool inFromCl)
void check_variable_parameters(ParseState *pstate, Query *query)
List * expandNSItemAttrs(ParseState *pstate, ParseNamespaceItem *nsitem, int sublevels_up, int location)
Oid select_common_type(ParseState *pstate, List *exprs, const char *context, Node **which_expr)
JumbleState * JumbleQuery(Query *query, const char *querytext)
static Query * transformCallStmt(ParseState *pstate, CallStmt *stmt)
static void determineRecursiveColTypes(ParseState *pstate, Node *larg, List *nrtargetlist)
List * transformDistinctClause(ParseState *pstate, List **targetlist, List *sortClause, bool is_agg)
void free_parsestate(ParseState *pstate)
void updateTargetListEntry(ParseState *pstate, TargetEntry *tle, char *colname, int attrno, List *indirection, int location)
LockWaitPolicy waitPolicy
post_parse_analyze_hook_type post_parse_analyze_hook
Node * transformAssignmentIndirection(ParseState *pstate, Node *basenode, const char *targetName, bool targetIsSubscripting, Oid targetTypeId, int32 targetTypMod, Oid targetCollation, List *indirection, ListCell *indirection_cell, Node *rhs, CoercionContext ccontext, int location)
List * list_delete_first(List *list)
void applyLockingClause(Query *qry, Index rtindex, LockClauseStrength strength, LockWaitPolicy waitPolicy, bool pushedDown)
static List * transformInsertRow(ParseState *pstate, List *exprlist, List *stmtcols, List *icolumns, List *attrnos, bool strip_indirection)