1 /*------------------------------------------------------------------------- 2 * 3 * parse_relation.h 4 * prototypes for parse_relation.c. 5 * 6 * 7 * Portions Copyright (c) 1996-2019, 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 int lockmode, 73 Alias *alias, 74 bool inh, 75 bool inFromCl); 76 extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate, 77 Query *subquery, 78 Alias *alias, 79 bool lateral, 80 bool inFromCl); 81 extern RangeTblEntry *addRangeTableEntryForFunction(ParseState *pstate, 82 List *funcnames, 83 List *funcexprs, 84 List *coldeflists, 85 RangeFunction *rangefunc, 86 bool lateral, 87 bool inFromCl); 88 extern RangeTblEntry *addRangeTableEntryForValues(ParseState *pstate, 89 List *exprs, 90 List *coltypes, 91 List *coltypmods, 92 List *colcollations, 93 Alias *alias, 94 bool lateral, 95 bool inFromCl); 96 extern RangeTblEntry *addRangeTableEntryForTableFunc(ParseState *pstate, 97 TableFunc *tf, 98 Alias *alias, 99 bool lateral, 100 bool inFromCl); 101 extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate, 102 List *colnames, 103 JoinType jointype, 104 List *aliasvars, 105 Alias *alias, 106 bool inFromCl); 107 extern RangeTblEntry *addRangeTableEntryForCTE(ParseState *pstate, 108 CommonTableExpr *cte, 109 Index levelsup, 110 RangeVar *rv, 111 bool inFromCl); 112 extern RangeTblEntry *addRangeTableEntryForENR(ParseState *pstate, 113 RangeVar *rv, 114 bool inFromCl); 115 extern bool isLockedRefname(ParseState *pstate, const char *refname); 116 extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte, 117 bool addToJoinList, 118 bool addToRelNameSpace, bool addToVarNameSpace); 119 extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn(); 120 extern void errorMissingColumn(ParseState *pstate, 121 const char *relname, const char *colname, int location) pg_attribute_noreturn(); 122 extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, 123 int location, bool include_dropped, 124 List **colnames, List **colvars); 125 extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte, 126 int rtindex, int sublevels_up, int location); 127 extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK); 128 extern const NameData *attnumAttName(Relation rd, int attid); 129 extern Oid attnumTypeId(Relation rd, int attid); 130 extern Oid attnumCollationId(Relation rd, int attid); 131 extern bool isQueryUsingTempRelation(Query *query); 132 133 #endif /* PARSE_RELATION_H */ 134