OSDN Git Service

Thank god for searchable mail archives.
[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.15 1998/01/15 19:46:37 pgsql 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_islocal;             /* uses the local buffer mgr */
53         bool            rd_isnailed;    /* rel is nailed in cache */
54         bool            rd_istemp;              /* rel is a temp rel */
55         bool            rd_tmpunlinked; /* temp 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  * RelationGetAccessMethodTupleForm --
131  *              Returns access method attribute values for a relation.
132  *
133  * Note:
134  *              Assumes relation descriptor is valid.
135  */
136 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
137
138 /*
139  * RelationGetRelationTupleForm --
140  *              Returns relation attribute values for a relation.
141  *
142  * Note:
143  *              Assumes relation descriptor is valid.
144  */
145 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
146
147
148 /*
149  * RelationGetRelationId --
150  *
151  *      returns the object id of the relation
152  *
153  */
154 #define RelationGetRelationId(relation) ((relation)->rd_id)
155
156 /*
157  * RelationGetFile --
158  *
159  *        Returns the open File decscriptor
160  */
161 #define RelationGetFile(relation) ((relation)->rd_fd)
162
163
164 /*
165  * RelationGetRelationName --
166  *
167  *        Returns a Relation Name
168  */
169 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
170
171 /*
172  * RelationGetRelationName --
173  *
174  *        Returns a the number of attributes.
175  */
176 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
177
178 /*
179  * RelationGetTupleDescriptor --
180  *              Returns tuple descriptor for a relation.
181  *
182  * Note:
183  *              Assumes relation descriptor is valid.
184  */
185 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
186
187 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
188
189 extern void
190 RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
191                                                 RegProcedure *support);
192
193 #endif                                                  /* REL_H */