1 /*-------------------------------------------------------------------------
2  *
3  * analyze.h
4  *		parse analysis for optimizable statements
5  *
6  *
7  * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/parser/analyze.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef ANALYZE_H
15 #define ANALYZE_H
16 
17 #include "parser/parse_node.h"
18 #include "utils/queryjumble.h"
19 
20 /* Hook for plugins to get control at end of parse analysis */
21 typedef void (*post_parse_analyze_hook_type) (ParseState *pstate,
22 											  Query *query,
23 											  JumbleState *jstate);
24 extern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;
25 
26 
27 extern Query *parse_analyze(RawStmt *parseTree, const char *sourceText,
28 							Oid *paramTypes, int numParams, QueryEnvironment *queryEnv);
29 extern Query *parse_analyze_varparams(RawStmt *parseTree, const char *sourceText,
30 									  Oid **paramTypes, int *numParams);
31 
32 extern Query *parse_sub_analyze(Node *parseTree, ParseState *parentParseState,
33 								CommonTableExpr *parentCTE,
34 								bool locked_from_parent,
35 								bool resolve_unknowns);
36 
37 extern Query *transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree);
38 extern Query *transformStmt(ParseState *pstate, Node *parseTree);
39 
40 extern bool analyze_requires_snapshot(RawStmt *parseTree);
41 
42 extern const char *LCS_asString(LockClauseStrength strength);
43 extern void CheckSelectLocking(Query *qry, LockClauseStrength strength);
44 extern void applyLockingClause(Query *qry, Index rtindex,
45 							   LockClauseStrength strength,
46 							   LockWaitPolicy waitPolicy, bool pushedDown);
47 
48 extern List *BuildOnConflictExcludedTargetlist(Relation targetrel,
49 											   Index exclRelIndex);
50 
51 extern SortGroupClause *makeSortGroupClauseForSetOp(Oid rescoltype, bool require_hash);
52 
53 #endif							/* ANALYZE_H */
54