1 /*-------------------------------------------------------------------------
2  *
3  * parse_relation.h
4  *	  prototypes for parse_relation.c.
5  *
6  *
7  * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/parser/parse_relation.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef PARSE_RELATION_H
15 #define PARSE_RELATION_H
16 
17 #include "parser/parse_node.h"
18 
19 
20 extern ParseNamespaceItem *refnameNamespaceItem(ParseState *pstate,
21 												const char *schemaname,
22 												const char *refname,
23 												int location,
24 												int *sublevels_up);
25 extern CommonTableExpr *scanNameSpaceForCTE(ParseState *pstate,
26 											const char *refname,
27 											Index *ctelevelsup);
28 extern bool scanNameSpaceForENR(ParseState *pstate, const char *refname);
29 extern void checkNameSpaceConflicts(ParseState *pstate, List *namespace1,
30 									List *namespace2);
31 extern ParseNamespaceItem *GetNSItemByRangeTablePosn(ParseState *pstate,
32 													 int varno,
33 													 int sublevels_up);
34 extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate,
35 											 int varno,
36 											 int sublevels_up);
37 extern CommonTableExpr *GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte,
38 									 int rtelevelsup);
39 extern Node *scanNSItemForColumn(ParseState *pstate, ParseNamespaceItem *nsitem,
40 								 int sublevels_up, const char *colname,
41 								 int location);
42 extern Node *colNameToVar(ParseState *pstate, const char *colname, bool localonly,
43 						  int location);
44 extern void markVarForSelectPriv(ParseState *pstate, Var *var,
45 								 RangeTblEntry *rte);
46 extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation,
47 								int lockmode);
48 extern ParseNamespaceItem *addRangeTableEntry(ParseState *pstate,
49 											  RangeVar *relation,
50 											  Alias *alias,
51 											  bool inh,
52 											  bool inFromCl);
53 extern ParseNamespaceItem *addRangeTableEntryForRelation(ParseState *pstate,
54 														 Relation rel,
55 														 int lockmode,
56 														 Alias *alias,
57 														 bool inh,
58 														 bool inFromCl);
59 extern ParseNamespaceItem *addRangeTableEntryForSubquery(ParseState *pstate,
60 														 Query *subquery,
61 														 Alias *alias,
62 														 bool lateral,
63 														 bool inFromCl);
64 extern ParseNamespaceItem *addRangeTableEntryForFunction(ParseState *pstate,
65 														 List *funcnames,
66 														 List *funcexprs,
67 														 List *coldeflists,
68 														 RangeFunction *rangefunc,
69 														 bool lateral,
70 														 bool inFromCl);
71 extern ParseNamespaceItem *addRangeTableEntryForValues(ParseState *pstate,
72 													   List *exprs,
73 													   List *coltypes,
74 													   List *coltypmods,
75 													   List *colcollations,
76 													   Alias *alias,
77 													   bool lateral,
78 													   bool inFromCl);
79 extern ParseNamespaceItem *addRangeTableEntryForTableFunc(ParseState *pstate,
80 														  TableFunc *tf,
81 														  Alias *alias,
82 														  bool lateral,
83 														  bool inFromCl);
84 extern ParseNamespaceItem *addRangeTableEntryForJoin(ParseState *pstate,
85 													 List *colnames,
86 													 ParseNamespaceColumn *nscolumns,
87 													 JoinType jointype,
88 													 int nummergedcols,
89 													 List *aliasvars,
90 													 List *leftcols,
91 													 List *rightcols,
92 													 Alias *alias,
93 													 bool inFromCl);
94 extern ParseNamespaceItem *addRangeTableEntryForCTE(ParseState *pstate,
95 													CommonTableExpr *cte,
96 													Index levelsup,
97 													RangeVar *rv,
98 													bool inFromCl);
99 extern ParseNamespaceItem *addRangeTableEntryForENR(ParseState *pstate,
100 													RangeVar *rv,
101 													bool inFromCl);
102 extern bool isLockedRefname(ParseState *pstate, const char *refname);
103 extern void addNSItemToQuery(ParseState *pstate, ParseNamespaceItem *nsitem,
104 							 bool addToJoinList,
105 							 bool addToRelNameSpace, bool addToVarNameSpace);
106 extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn();
107 extern void errorMissingColumn(ParseState *pstate,
108 							   const char *relname, const char *colname, int location) pg_attribute_noreturn();
109 extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up,
110 					  int location, bool include_dropped,
111 					  List **colnames, List **colvars);
112 extern List *expandNSItemVars(ParseNamespaceItem *nsitem,
113 							  int sublevels_up, int location,
114 							  List **colnames);
115 extern List *expandNSItemAttrs(ParseState *pstate, ParseNamespaceItem *nsitem,
116 							   int sublevels_up, int location);
117 extern int	attnameAttNum(Relation rd, const char *attname, bool sysColOK);
118 extern const NameData *attnumAttName(Relation rd, int attid);
119 extern Oid	attnumTypeId(Relation rd, int attid);
120 extern Oid	attnumCollationId(Relation rd, int attid);
121 extern bool isQueryUsingTempRelation(Query *query);
122 
123 #endif							/* PARSE_RELATION_H */
124