1 /*------------------------------------------------------------------------- 2 * 3 * parse_relation.h 4 * prototypes for parse_relation.c. 5 * 6 * 7 * Portions Copyright (c) 1996-2016, 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 void checkNameSpaceConflicts(ParseState *pstate, List *namespace1, 46 List *namespace2); 47 extern int RTERangeTablePosn(ParseState *pstate, 48 RangeTblEntry *rte, 49 int *sublevels_up); 50 extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate, 51 int varno, 52 int sublevels_up); 53 extern CommonTableExpr *GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte, 54 int rtelevelsup); 55 extern Node *scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte, 56 char *colname, int location, 57 int fuzzy_rte_penalty, FuzzyAttrMatchState *fuzzystate); 58 extern Node *colNameToVar(ParseState *pstate, char *colname, bool localonly, 59 int location); 60 extern void markVarForSelectPriv(ParseState *pstate, Var *var, 61 RangeTblEntry *rte); 62 extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation, 63 int lockmode); 64 extern RangeTblEntry *addRangeTableEntry(ParseState *pstate, 65 RangeVar *relation, 66 Alias *alias, 67 bool inh, 68 bool inFromCl); 69 extern RangeTblEntry *addRangeTableEntryForRelation(ParseState *pstate, 70 Relation rel, 71 Alias *alias, 72 bool inh, 73 bool inFromCl); 74 extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate, 75 Query *subquery, 76 Alias *alias, 77 bool lateral, 78 bool inFromCl); 79 extern RangeTblEntry *addRangeTableEntryForFunction(ParseState *pstate, 80 List *funcnames, 81 List *funcexprs, 82 List *coldeflists, 83 RangeFunction *rangefunc, 84 bool lateral, 85 bool inFromCl); 86 extern RangeTblEntry *addRangeTableEntryForValues(ParseState *pstate, 87 List *exprs, 88 List *collations, 89 Alias *alias, 90 bool lateral, 91 bool inFromCl); 92 extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate, 93 List *colnames, 94 JoinType jointype, 95 List *aliasvars, 96 Alias *alias, 97 bool inFromCl); 98 extern RangeTblEntry *addRangeTableEntryForCTE(ParseState *pstate, 99 CommonTableExpr *cte, 100 Index levelsup, 101 RangeVar *rv, 102 bool inFromCl); 103 extern bool isLockedRefname(ParseState *pstate, const char *refname); 104 extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte, 105 bool addToJoinList, 106 bool addToRelNameSpace, bool addToVarNameSpace); 107 extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn(); 108 extern void errorMissingColumn(ParseState *pstate, 109 char *relname, char *colname, int location) pg_attribute_noreturn(); 110 extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up, 111 int location, bool include_dropped, 112 List **colnames, List **colvars); 113 extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte, 114 int rtindex, int sublevels_up, int location); 115 extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK); 116 extern Name attnumAttName(Relation rd, int attid); 117 extern Oid attnumTypeId(Relation rd, int attid); 118 extern Oid attnumCollationId(Relation rd, int attid); 119 extern bool isQueryUsingTempRelation(Query *query); 120 121 #endif /* PARSE_RELATION_H */ 122