parse_relation.h 4.4 KB

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