namespace.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /*-------------------------------------------------------------------------
  2. *
  3. * namespace.h
  4. * prototypes for functions in backend/catalog/namespace.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/catalog/namespace.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef NAMESPACE_H
  15. #define NAMESPACE_H
  16. #include "nodes/primnodes.h"
  17. #include "storage/lock.h"
  18. /*
  19. * This structure holds a list of possible functions or operators
  20. * found by namespace lookup. Each function/operator is identified
  21. * by OID and by argument types; the list must be pruned by type
  22. * resolution rules that are embodied in the parser, not here.
  23. * See FuncnameGetCandidates's comments for more info.
  24. */
  25. typedef struct _FuncCandidateList
  26. {
  27. struct _FuncCandidateList *next;
  28. int pathpos; /* for internal use of namespace lookup */
  29. Oid oid; /* the function or operator's OID */
  30. int nargs; /* number of arg types returned */
  31. int nvargs; /* number of args to become variadic array */
  32. int ndargs; /* number of defaulted args */
  33. int *argnumbers; /* args' positional indexes, if named call */
  34. Oid args[FLEXIBLE_ARRAY_MEMBER]; /* arg types */
  35. } *FuncCandidateList;
  36. /*
  37. * Structure for xxxOverrideSearchPath functions
  38. */
  39. typedef struct OverrideSearchPath
  40. {
  41. List *schemas; /* OIDs of explicitly named schemas */
  42. bool addCatalog; /* implicitly prepend pg_catalog? */
  43. bool addTemp; /* implicitly prepend temp schema? */
  44. } OverrideSearchPath;
  45. typedef void (*RangeVarGetRelidCallback) (const RangeVar *relation, Oid relId,
  46. Oid oldRelId, void *callback_arg);
  47. #define RangeVarGetRelid(relation, lockmode, missing_ok) \
  48. RangeVarGetRelidExtended(relation, lockmode, missing_ok, false, NULL, NULL)
  49. extern Oid RangeVarGetRelidExtended(const RangeVar *relation,
  50. LOCKMODE lockmode, bool missing_ok, bool nowait,
  51. RangeVarGetRelidCallback callback,
  52. void *callback_arg);
  53. extern Oid RangeVarGetCreationNamespace(const RangeVar *newRelation);
  54. extern Oid RangeVarGetAndCheckCreationNamespace(RangeVar *newRelation,
  55. LOCKMODE lockmode,
  56. Oid *existing_relation_id);
  57. extern void RangeVarAdjustRelationPersistence(RangeVar *newRelation, Oid nspid);
  58. extern Oid RelnameGetRelid(const char *relname);
  59. extern bool RelationIsVisible(Oid relid);
  60. extern Oid TypenameGetTypid(const char *typname);
  61. extern bool TypeIsVisible(Oid typid);
  62. extern FuncCandidateList FuncnameGetCandidates(List *names,
  63. int nargs, List *argnames,
  64. bool expand_variadic,
  65. bool expand_defaults,
  66. bool missing_ok);
  67. extern bool FunctionIsVisible(Oid funcid);
  68. extern Oid OpernameGetOprid(List *names, Oid oprleft, Oid oprright);
  69. extern FuncCandidateList OpernameGetCandidates(List *names, char oprkind,
  70. bool missing_schema_ok);
  71. extern bool OperatorIsVisible(Oid oprid);
  72. extern Oid OpclassnameGetOpcid(Oid amid, const char *opcname);
  73. extern bool OpclassIsVisible(Oid opcid);
  74. extern Oid OpfamilynameGetOpfid(Oid amid, const char *opfname);
  75. extern bool OpfamilyIsVisible(Oid opfid);
  76. extern Oid CollationGetCollid(const char *collname);
  77. extern bool CollationIsVisible(Oid collid);
  78. extern Oid ConversionGetConid(const char *conname);
  79. extern bool ConversionIsVisible(Oid conid);
  80. extern Oid get_ts_parser_oid(List *names, bool missing_ok);
  81. extern bool TSParserIsVisible(Oid prsId);
  82. extern Oid get_ts_dict_oid(List *names, bool missing_ok);
  83. extern bool TSDictionaryIsVisible(Oid dictId);
  84. extern Oid get_ts_template_oid(List *names, bool missing_ok);
  85. extern bool TSTemplateIsVisible(Oid tmplId);
  86. extern Oid get_ts_config_oid(List *names, bool missing_ok);
  87. extern bool TSConfigIsVisible(Oid cfgid);
  88. extern void DeconstructQualifiedName(List *names,
  89. char **nspname_p,
  90. char **objname_p);
  91. extern Oid LookupNamespaceNoError(const char *nspname);
  92. extern Oid LookupExplicitNamespace(const char *nspname, bool missing_ok);
  93. extern Oid get_namespace_oid(const char *nspname, bool missing_ok);
  94. extern Oid LookupCreationNamespace(const char *nspname);
  95. extern void CheckSetNamespace(Oid oldNspOid, Oid nspOid);
  96. extern Oid QualifiedNameGetCreationNamespace(List *names, char **objname_p);
  97. extern RangeVar *makeRangeVarFromNameList(List *names);
  98. extern char *NameListToString(List *names);
  99. extern char *NameListToQuotedString(List *names);
  100. extern bool isTempNamespace(Oid namespaceId);
  101. extern bool isTempToastNamespace(Oid namespaceId);
  102. extern bool isTempOrTempToastNamespace(Oid namespaceId);
  103. extern bool isAnyTempNamespace(Oid namespaceId);
  104. extern bool isOtherTempNamespace(Oid namespaceId);
  105. extern int GetTempNamespaceBackendId(Oid namespaceId);
  106. extern Oid GetTempToastNamespace(void);
  107. extern void GetTempNamespaceState(Oid *tempNamespaceId,
  108. Oid *tempToastNamespaceId);
  109. extern void SetTempNamespaceState(Oid tempNamespaceId,
  110. Oid tempToastNamespaceId);
  111. extern void ResetTempTableNamespace(void);
  112. extern OverrideSearchPath *GetOverrideSearchPath(MemoryContext context);
  113. extern OverrideSearchPath *CopyOverrideSearchPath(OverrideSearchPath *path);
  114. extern bool OverrideSearchPathMatchesCurrent(OverrideSearchPath *path);
  115. extern void PushOverrideSearchPath(OverrideSearchPath *newpath);
  116. extern void PopOverrideSearchPath(void);
  117. extern Oid get_collation_oid(List *collname, bool missing_ok);
  118. extern Oid get_conversion_oid(List *conname, bool missing_ok);
  119. extern Oid FindDefaultConversionProc(int32 for_encoding, int32 to_encoding);
  120. /* initialization & transaction cleanup code */
  121. extern void InitializeSearchPath(void);
  122. extern void AtEOXact_Namespace(bool isCommit, bool parallel);
  123. extern void AtEOSubXact_Namespace(bool isCommit, SubTransactionId mySubid,
  124. SubTransactionId parentSubid);
  125. /* stuff for search_path GUC variable */
  126. extern char *namespace_search_path;
  127. extern List *fetch_search_path(bool includeImplicit);
  128. extern int fetch_search_path_array(Oid *sarray, int sarray_len);
  129. #endif /* NAMESPACE_H */