OSDN Git Service

rebuid:
[eos/hostdependX86MAC64.git] / util / X86MAC64 / include / postgresql / server / utils / relcache.h
1 /*-------------------------------------------------------------------------
2  *
3  * relcache.h
4  *        Relation descriptor cache definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/utils/relcache.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef RELCACHE_H
15 #define RELCACHE_H
16
17 #include "access/tupdesc.h"
18 #include "nodes/bitmapset.h"
19
20
21 typedef struct RelationData *Relation;
22
23 /* ----------------
24  *              RelationPtr is used in the executor to support index scans
25  *              where we have to keep track of several index relations in an
26  *              array.  -cim 9/10/89
27  * ----------------
28  */
29 typedef Relation *RelationPtr;
30
31 /*
32  * Routines to open (lookup) and close a relcache entry
33  */
34 extern Relation RelationIdGetRelation(Oid relationId);
35 extern void RelationClose(Relation relation);
36
37 /*
38  * Routines to compute/retrieve additional cached information
39  */
40 extern List *RelationGetIndexList(Relation relation);
41 extern Oid      RelationGetOidIndex(Relation relation);
42 extern Oid      RelationGetReplicaIndex(Relation relation);
43 extern List *RelationGetIndexExpressions(Relation relation);
44 extern List *RelationGetIndexPredicate(Relation relation);
45
46 typedef enum IndexAttrBitmapKind
47 {
48         INDEX_ATTR_BITMAP_ALL,
49         INDEX_ATTR_BITMAP_KEY,
50         INDEX_ATTR_BITMAP_IDENTITY_KEY
51 } IndexAttrBitmapKind;
52
53 extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
54                                                    IndexAttrBitmapKind keyAttrs);
55
56 extern void RelationGetExclusionInfo(Relation indexRelation,
57                                                  Oid **operators,
58                                                  Oid **procs,
59                                                  uint16 **strategies);
60
61 extern void RelationSetIndexList(Relation relation,
62                                          List *indexIds, Oid oidIndex);
63
64 extern void RelationInitIndexAccessInfo(Relation relation);
65
66 /*
67  * Routines to support ereport() reports of relation-related errors
68  */
69 extern int      errtable(Relation rel);
70 extern int      errtablecol(Relation rel, int attnum);
71 extern int      errtablecolname(Relation rel, const char *colname);
72 extern int      errtableconstraint(Relation rel, const char *conname);
73
74 /*
75  * Routines for backend startup
76  */
77 extern void RelationCacheInitialize(void);
78 extern void RelationCacheInitializePhase2(void);
79 extern void RelationCacheInitializePhase3(void);
80
81 /*
82  * Routine to create a relcache entry for an about-to-be-created relation
83  */
84 extern Relation RelationBuildLocalRelation(const char *relname,
85                                                    Oid relnamespace,
86                                                    TupleDesc tupDesc,
87                                                    Oid relid,
88                                                    Oid relfilenode,
89                                                    Oid reltablespace,
90                                                    bool shared_relation,
91                                                    bool mapped_relation,
92                                                    char relpersistence,
93                                                    char relkind);
94
95 /*
96  * Routine to manage assignment of new relfilenode to a relation
97  */
98 extern void RelationSetNewRelfilenode(Relation relation,
99                                                   TransactionId freezeXid, MultiXactId minmulti);
100
101 /*
102  * Routines for flushing/rebuilding relcache entries in various scenarios
103  */
104 extern void RelationForgetRelation(Oid rid);
105
106 extern void RelationCacheInvalidateEntry(Oid relationId);
107
108 extern void RelationCacheInvalidate(void);
109
110 extern void RelationCloseSmgrByOid(Oid relationId);
111
112 extern void AtEOXact_RelationCache(bool isCommit);
113 extern void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid,
114                                                   SubTransactionId parentSubid);
115
116 /*
117  * Routines to help manage rebuilding of relcache init files
118  */
119 extern bool RelationIdIsInInitFile(Oid relationId);
120 extern void RelationCacheInitFilePreInvalidate(void);
121 extern void RelationCacheInitFilePostInvalidate(void);
122 extern void RelationCacheInitFileRemove(void);
123
124 /* should be used only by relcache.c and catcache.c */
125 extern bool criticalRelcachesBuilt;
126
127 /* should be used only by relcache.c and postinit.c */
128 extern bool criticalSharedRelcachesBuilt;
129
130 #endif   /* RELCACHE_H */