1 /*-------------------------------------------------------------------------
2  *
3  * analyze.h
4  *		parse analysis for optimizable statements
5  *
6  *
7  * Portions Copyright (c) 1996-2017, 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 
19 /* Hook for plugins to get control at end of parse analysis */
20 typedef void (*post_parse_analyze_hook_type) (ParseState *pstate,
21 											  Query *query);
22 extern PGDLLIMPORT post_parse_analyze_hook_type post_parse_analyze_hook;
23 
24 
25 extern Query *parse_analyze(RawStmt *parseTree, const char *sourceText,
26 			  Oid *paramTypes, int numParams, QueryEnvironment *queryEnv);
27 extern Query *parse_analyze_varparams(RawStmt *parseTree, const char *sourceText,
28 						Oid **paramTypes, int *numParams);
29 
30 extern Query *parse_sub_analyze(Node *parseTree, ParseState *parentParseState,
31 				  CommonTableExpr *parentCTE,
32 				  bool locked_from_parent,
33 				  bool resolve_unknowns);
34 
35 extern Query *transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree);
36 extern Query *transformStmt(ParseState *pstate, Node *parseTree);
37 
38 extern bool analyze_requires_snapshot(RawStmt *parseTree);
39 
40 extern const char *LCS_asString(LockClauseStrength strength);
41 extern void CheckSelectLocking(Query *qry, LockClauseStrength strength);
42 extern void applyLockingClause(Query *qry, Index rtindex,
43 				   LockClauseStrength strength,
44 				   LockWaitPolicy waitPolicy, bool pushedDown);
45 
46 extern List *BuildOnConflictExcludedTargetlist(Relation targetrel,
47 								  Index exclRelIndex);
48 
49 #endif							/* ANALYZE_H */
50