OSDN Git Service

pgindent run over code.
[pg-rex/syncrep.git] / src / include / utils / rel.h
1 /*-------------------------------------------------------------------------
2  *
3  * rel.h
4  *        POSTGRES relation descriptor definitions.
5  *
6  *
7  * Copyright (c) 1994, Regents of the University of California
8  *
9  * $Id: rel.h,v 1.23 1999/05/25 16:14:57 momjian Exp $
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef REL_H
14 #define REL_H
15
16 #include <catalog/pg_am.h>
17 #include <catalog/pg_class.h>
18 #include <access/strat.h>
19 #include <access/tupdesc.h>
20 #include <rewrite/prs2lock.h>
21 #include <storage/fd.h>
22
23 typedef struct Trigger
24 {
25         char       *tgname;
26         Oid                     tgfoid;
27         FmgrInfo        tgfunc;
28         int16           tgtype;
29         int16           tgnargs;
30         int16           tgattr[8];
31         char      **tgargs;
32 } Trigger;
33
34 typedef struct TriggerDesc
35 {
36         uint16          n_before_statement[4];
37         uint16          n_before_row[4];
38         uint16          n_after_row[4];
39         uint16          n_after_statement[4];
40         Trigger   **tg_before_statement[4];
41         Trigger   **tg_before_row[4];
42         Trigger   **tg_after_row[4];
43         Trigger   **tg_after_statement[4];
44         Trigger    *triggers;
45 } TriggerDesc;
46
47 typedef struct RelationData
48 {
49         File            rd_fd;                  /* open file descriptor */
50         int                     rd_nblocks;             /* number of blocks in rel */
51         uint16          rd_refcnt;              /* reference count */
52         bool            rd_myxactonly;  /* uses the local buffer mgr */
53         bool            rd_isnailed;    /* rel is nailed in cache */
54         bool            rd_isnoname;    /* rel has no name */
55         bool            rd_nonameunlinked;              /* noname rel already unlinked */
56         Form_pg_am      rd_am;                  /* AM tuple */
57         Form_pg_class rd_rel;           /* RELATION tuple */
58         Oid                     rd_id;                  /* relations's object id */
59         Pointer         lockInfo;               /* ptr. to misc. info. */
60         TupleDesc       rd_att;                 /* tuple desciptor */
61         RuleLock   *rd_rules;           /* rewrite rules */
62         IndexStrategy rd_istrat;
63         RegProcedure *rd_support;
64         TriggerDesc *trigdesc;
65 } RelationData;
66
67 typedef RelationData *Relation;
68
69 /* ----------------
70  *              RelationPtr is used in the executor to support index scans
71  *              where we have to keep track of several index relations in an
72  *              array.  -cim 9/10/89
73  * ----------------
74  */
75 typedef Relation *RelationPtr;
76
77 #define InvalidRelation ((Relation)NULL)
78
79 /*
80  * RelationIsValid
81  *              True iff relation descriptor is valid.
82  */
83 #define RelationIsValid(relation) PointerIsValid(relation)
84
85 /*
86  * RelationGetSystemPort
87  *              Returns system port of a relation.
88  *
89  * Note:
90  *              Assumes relation descriptor is valid.
91  */
92 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
93
94 /*
95  * RelationGetLockInfo
96  *              Returns the lock information structure in the reldesc
97  *
98  */
99 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
100
101 /*
102  * RelationHasReferenceCountZero
103  *              True iff relation reference count is zero.
104  *
105  * Note:
106  *              Assumes relation descriptor is valid.
107  */
108 #define RelationHasReferenceCountZero(relation) \
109                 ((bool)((relation)->rd_refcnt == 0))
110
111 /*
112  * RelationSetReferenceCount
113  *              Sets relation reference count.
114  */
115 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
116
117 /*
118  * RelationIncrementReferenceCount
119  *              Increments relation reference count.
120  */
121 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
122
123 /*
124  * RelationDecrementReferenceCount
125  *              Decrements relation reference count.
126  */
127 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
128
129 /*
130  * RelationGetForm
131  *              Returns relation attribute values for a relation.
132  *
133  * Note:
134  *              Assumes relation descriptor is valid.
135  */
136 #define RelationGetForm(relation) ((relation)->rd_rel)
137
138
139 /*
140  * RelationGetRelid
141  *
142  *      returns the object id of the relation
143  *
144  */
145 #define RelationGetRelid(relation) ((relation)->rd_id)
146
147 /*
148  * RelationGetFile
149  *
150  *        Returns the open File decscriptor
151  */
152 #define RelationGetFile(relation) ((relation)->rd_fd)
153
154
155 /*
156  * RelationGetRelationName
157  *
158  *        Returns a Relation Name
159  */
160 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
161
162 /*
163  * RelationGetRelationName
164  *
165  *        Returns a the number of attributes.
166  */
167 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
168
169 /*
170  * RelationGetDescr
171  *              Returns tuple descriptor for a relation.
172  *
173  * Note:
174  *              Assumes relation descriptor is valid.
175  */
176 #define RelationGetDescr(relation) ((relation)->rd_att)
177
178 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
179
180 extern void RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
181                                                 RegProcedure *support);
182
183 #endif   /* REL_H */