1 /*------------------------------------------------------------------------- 2 * 3 * parse_relation.h 4 * prototypes for parse_relation.c. 5 * 6 * 7 * Portions Copyright (c) 1996-2018, 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 /* 21 * Support for fuzzily matching column. 22 * 23 * This is for building diagnostic messages, where non-exact matching 24 * attributes are suggested to the user. The struct's fields may be facets of 25 * a particular RTE, or of an entire range table, depending on context. 26 */ 27 typedef struct 28 { 29 int distance; /* Weighted distance (lowest so far) */ 30 RangeTblEntry *rfirst; /* RTE of first */ 31 AttrNumber first; /* Closest attribute so far */ 32 RangeTblEntry *rsecond; /* RTE of second */ 33 AttrNumber second; /* Second closest attribute so far */ 34 } FuzzyAttrMatchState; 35 36 37 extern RangeTblEntry *refnameRangeTblEntry(ParseState *pstate, 38 const char *schemaname, 39 const char *refname, 40 int location, 41 int *sublevels_up); 42 extern CommonTableExpr *scanNameSpaceForCTE(ParseState *pstate, 43 const char *refname, 44 Index *ctelevelsup); 45 extern bool scanNameSpaceForENR(ParseState *pstate, const char *refname); 46 extern void checkNameSpaceConflicts(ParseState *pstate, List *namespace1, 47 List *namespace2); 48 extern int RTERangeTablePosn(ParseState *pstate, 49 RangeTblEntry *rte, 50 int *sublevels_up); 51 extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate, 52 int varno, 53 int sublevels_up); 54 extern CommonTableExpr *GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte, 55 int rtelevelsup); 56 extern Node *scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte, 57 const char *colname, int location, 58 int fuzzy_rte_penalty, FuzzyAttrMatchState *fuzzystate); 59 extern Node *colNameToVar(ParseState *pstate, const char *colname, bool localonly, 60 int location); 61 extern void markVarForSelectPriv(ParseState *pstate, Var *var, 62 RangeTblEntry *rte); 63 extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation, 64 int lockmode); 65 extern RangeTblEntry *addRangeTableEntry(ParseState *pstate, 66 RangeVar *relation, 67 Alias *alias, 68 bool inh, 69 bool inFromCl); 70 extern RangeTblEntry *addRangeTableEntryForRelation(ParseState *pstate, 71 Relation rel, 72 Alias *alias, 73 bool inh, 74 bool inFromCl); 75 extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate, 76 Query *subquery, 77 Alias *alias, 78 bool lateral, 79 bool inFromCl); 80 extern RangeTblEntry *addRangeTableEntryForFunction(ParseState *pstate, 81 List *funcnames, 82 List *funcexprs, 83 List *coldeflists, 84 RangeFunction *rangefunc, 85 bool lateral, 86 bool inFromCl); 87 extern RangeTblEntry *addRangeTableEntryForValues(ParseState *pstate, 88 List *exprs, 89 List *coltypes, 90 List *coltypmods, 91 List *colcollations, 92 Alias *alias, 93 bool lateral, 94 bool inFromCl); 95 extern RangeTblEntry *addRangeTableEntryForTableFunc(ParseState *pstate, 96 TableFunc *tf, 97 Alias *alias, 98 bool lateral, 99 bool inFromCl); 100 extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate, 101 List *colnames, 102 JoinType jointype, 103 List *aliasvars, 104 Alias *alias, 105 bool inFromCl); 106 extern RangeTblEntry *addRangeTableEntryForCTE(ParseState *pstate, 107 CommonTableExpr *cte, 108 Index levelsup, 109 RangeVar *rv, 110 bool inFromCl); 111 extern RangeTblEntry *addRangeTableEntryForENR(ParseState *pstate, 112 RangeVar *rv, 113 bool inFromCl); 114 extern bool isLockedRefname(ParseState *pstate, const char *refname); 115 extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte, 116 bool addToJoinList, 117 bool addToRelNameSpace, bool addToVarNameSpace); 118 extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn(); 119 extern void errorMissingColumn(ParseState *pstate, 120 const char *relname, const char *colname, int location) pg_attribute_noreturn(); 121 extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, 122 int location, bool include_dropped, 123 List **colnames, List **colvars); 124 extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte, 125 int rtindex, int sublevels_up, int location); 126 extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK); 127 extern Name attnumAttName(Relation rd, int attid); 128 extern Oid attnumTypeId(Relation rd, int attid); 129 extern Oid attnumCollationId(Relation rd, int attid); 130 extern bool isQueryUsingTempRelation(Query *query); 131 132 #endif /* PARSE_RELATION_H */ 133