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