OSDN Git Service

Another PGINDENT run that changes variable indenting and case label indenting. Also...
[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.11 1997/09/08 02:39:55 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         func_ptr        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 typedef char ArchiveMode;
80
81 /*
82  * RelationIsValid --
83  *              True iff relation descriptor is valid.
84  */
85 #define RelationIsValid(relation) PointerIsValid(relation)
86
87 /*
88  * RelationGetSystemPort --
89  *              Returns system port of a relation.
90  *
91  * Note:
92  *              Assumes relation descriptor is valid.
93  */
94 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
95
96 /*
97  * RelationGetLockInfo --
98  *              Returns the lock information structure in the reldesc
99  *
100  */
101 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
102
103 /*
104  * RelationHasReferenceCountZero --
105  *              True iff relation reference count is zero.
106  *
107  * Note:
108  *              Assumes relation descriptor is valid.
109  */
110 #define RelationHasReferenceCountZero(relation) \
111                 ((bool)((relation)->rd_refcnt == 0))
112
113 /*
114  * RelationSetReferenceCount --
115  *              Sets relation reference count.
116  */
117 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
118
119 /*
120  * RelationIncrementReferenceCount --
121  *              Increments relation reference count.
122  */
123 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
124
125 /*
126  * RelationDecrementReferenceCount --
127  *              Decrements relation reference count.
128  */
129 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
130
131 /*
132  * RelationGetAccessMethodTupleForm --
133  *              Returns access method attribute values for a relation.
134  *
135  * Note:
136  *              Assumes relation descriptor is valid.
137  */
138 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
139
140 /*
141  * RelationGetRelationTupleForm --
142  *              Returns relation attribute values for a relation.
143  *
144  * Note:
145  *              Assumes relation descriptor is valid.
146  */
147 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
148
149
150 /*
151  * RelationGetRelationId --
152  *
153  *      returns the object id of the relation
154  *
155  */
156 #define RelationGetRelationId(relation) ((relation)->rd_id)
157
158 /*
159  * RelationGetFile --
160  *
161  *        Returns the open File decscriptor
162  */
163 #define RelationGetFile(relation) ((relation)->rd_fd)
164
165
166 /*
167  * RelationGetRelationName --
168  *
169  *        Returns a Relation Name
170  */
171 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
172
173 /*
174  * RelationGetRelationName --
175  *
176  *        Returns a the number of attributes.
177  */
178 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
179
180 /*
181  * RelationGetTupleDescriptor --
182  *              Returns tuple descriptor for a relation.
183  *
184  * Note:
185  *              Assumes relation descriptor is valid.
186  */
187 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
188
189 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
190
191 extern void
192 RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
193                                                 RegProcedure * support);
194
195 #endif                                                  /* REL_H */