gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

134 行
5.1KB

  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. #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 bool scanNameSpaceForENR(ParseState *pstate, const char *refname);
  41. extern void checkNameSpaceConflicts(ParseState *pstate, List *namespace1,
  42. List *namespace2);
  43. extern int RTERangeTablePosn(ParseState *pstate,
  44. RangeTblEntry *rte,
  45. int *sublevels_up);
  46. extern RangeTblEntry *GetRTEByRangeTablePosn(ParseState *pstate,
  47. int varno,
  48. int sublevels_up);
  49. extern CommonTableExpr *GetCTEForRTE(ParseState *pstate, RangeTblEntry *rte,
  50. int rtelevelsup);
  51. extern Node *scanRTEForColumn(ParseState *pstate, RangeTblEntry *rte,
  52. const char *colname, int location,
  53. int fuzzy_rte_penalty, FuzzyAttrMatchState *fuzzystate);
  54. extern Node *colNameToVar(ParseState *pstate, const char *colname, bool localonly,
  55. int location);
  56. extern void markVarForSelectPriv(ParseState *pstate, Var *var,
  57. RangeTblEntry *rte);
  58. extern Relation parserOpenTable(ParseState *pstate, const RangeVar *relation,
  59. int lockmode);
  60. extern RangeTblEntry *addRangeTableEntry(ParseState *pstate,
  61. RangeVar *relation,
  62. Alias *alias,
  63. bool inh,
  64. bool inFromCl);
  65. extern RangeTblEntry *addRangeTableEntryForRelation(ParseState *pstate,
  66. Relation rel,
  67. int lockmode,
  68. Alias *alias,
  69. bool inh,
  70. bool inFromCl);
  71. extern RangeTblEntry *addRangeTableEntryForSubquery(ParseState *pstate,
  72. Query *subquery,
  73. Alias *alias,
  74. bool lateral,
  75. bool inFromCl);
  76. extern RangeTblEntry *addRangeTableEntryForFunction(ParseState *pstate,
  77. List *funcnames,
  78. List *funcexprs,
  79. List *coldeflists,
  80. RangeFunction *rangefunc,
  81. bool lateral,
  82. bool inFromCl);
  83. extern RangeTblEntry *addRangeTableEntryForValues(ParseState *pstate,
  84. List *exprs,
  85. List *coltypes,
  86. List *coltypmods,
  87. List *colcollations,
  88. Alias *alias,
  89. bool lateral,
  90. bool inFromCl);
  91. extern RangeTblEntry *addRangeTableEntryForTableFunc(ParseState *pstate,
  92. TableFunc *tf,
  93. Alias *alias,
  94. bool lateral,
  95. bool inFromCl);
  96. extern RangeTblEntry *addRangeTableEntryForJoin(ParseState *pstate,
  97. List *colnames,
  98. JoinType jointype,
  99. List *aliasvars,
  100. Alias *alias,
  101. bool inFromCl);
  102. extern RangeTblEntry *addRangeTableEntryForCTE(ParseState *pstate,
  103. CommonTableExpr *cte,
  104. Index levelsup,
  105. RangeVar *rv,
  106. bool inFromCl);
  107. extern RangeTblEntry *addRangeTableEntryForENR(ParseState *pstate,
  108. RangeVar *rv,
  109. bool inFromCl);
  110. extern bool isLockedRefname(ParseState *pstate, const char *refname);
  111. extern void addRTEtoQuery(ParseState *pstate, RangeTblEntry *rte,
  112. bool addToJoinList,
  113. bool addToRelNameSpace, bool addToVarNameSpace);
  114. extern void errorMissingRTE(ParseState *pstate, RangeVar *relation) pg_attribute_noreturn();
  115. extern void errorMissingColumn(ParseState *pstate,
  116. const char *relname, const char *colname, int location) pg_attribute_noreturn();
  117. extern void expandRTE(RangeTblEntry *rte, int rtindex, int sublevels_up,
  118. int location, bool include_dropped,
  119. List **colnames, List **colvars);
  120. extern List *expandRelAttrs(ParseState *pstate, RangeTblEntry *rte,
  121. int rtindex, int sublevels_up, int location);
  122. extern int attnameAttNum(Relation rd, const char *attname, bool sysColOK);
  123. extern const NameData *attnumAttName(Relation rd, int attid);
  124. extern Oid attnumTypeId(Relation rd, int attid);
  125. extern Oid attnumCollationId(Relation rd, int attid);
  126. extern bool isQueryUsingTempRelation(Query *query);
  127. #endif /* PARSE_RELATION_H */
上海开阖软件有限公司 沪ICP备12045867号-1