OSDN Git Service

Okay, following Bryan's (and others) suggestions...cleaning up the
[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.5 1996/11/01 09:31:17 scrappy Exp $
10  *
11  *-------------------------------------------------------------------------
12  */
13 #ifndef REL_H
14 #define REL_H
15
16 #include "access/strat.h"
17 #include "rewrite/prs2lock.h"
18 #include "access/tupdesc.h"
19 #include "catalog/pg_class.h"
20 #include "catalog/pg_am.h"
21 #include "storage/fd.h"
22
23 typedef struct RelationData {
24     File                rd_fd;          /* open file descriptor */
25     int                 rd_nblocks;     /* number of blocks in rel */
26     uint16              rd_refcnt;      /* reference count */
27     bool                rd_islocal;     /* uses the local buffer mgr */
28     bool                rd_isnailed;    /* rel is nailed in cache */
29     bool                rd_istemp;      /* rel is a temp rel */
30     bool                rd_tmpunlinked; /* temp rel already unlinked */
31     Form_pg_am          rd_am;          /* AM tuple */
32     Form_pg_class       rd_rel;         /* RELATION tuple */
33     Oid                 rd_id;          /* relations's object id */
34     Pointer             lockInfo;       /* ptr. to misc. info. */
35     TupleDesc           rd_att;         /* tuple desciptor */
36     RuleLock            *rd_rules;      /* rewrite rules */
37     IndexStrategy       rd_istrat;    
38     RegProcedure*       rd_support;
39 } RelationData;
40
41 typedef RelationData    *Relation;
42
43 /* ----------------
44  *      RelationPtr is used in the executor to support index scans
45  *      where we have to keep track of several index relations in an
46  *      array.  -cim 9/10/89
47  * ----------------
48  */
49 typedef Relation        *RelationPtr;
50
51 #define InvalidRelation ((Relation)NULL)
52
53 typedef char    ArchiveMode;
54
55 /*
56  * RelationIsValid --
57  *      True iff relation descriptor is valid.
58  */
59 #define RelationIsValid(relation) PointerIsValid(relation)
60
61 /*
62  * RelationGetSystemPort --
63  *      Returns system port of a relation.
64  *
65  * Note:
66  *      Assumes relation descriptor is valid.
67  */
68 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
69
70 /*
71  * RelationGetLockInfo --
72  *      Returns the lock information structure in the reldesc
73  *
74  */
75 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
76
77 /*
78  * RelationHasReferenceCountZero --
79  *      True iff relation reference count is zero.
80  *
81  * Note:
82  *      Assumes relation descriptor is valid.
83  */
84 #define RelationHasReferenceCountZero(relation) \
85         ((bool)((relation)->rd_refcnt == 0))
86
87 /*
88  * RelationSetReferenceCount --
89  *      Sets relation reference count.
90  */
91 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
92
93 /*
94  * RelationIncrementReferenceCount --
95  *      Increments relation reference count.
96  */
97 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
98
99 /*
100  * RelationDecrementReferenceCount --
101  *      Decrements relation reference count.
102  */
103 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
104
105 /*
106  * RelationGetAccessMethodTupleForm --
107  *      Returns access method attribute values for a relation.
108  *
109  * Note:
110  *      Assumes relation descriptor is valid.
111  */
112 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
113
114 /*
115  * RelationGetRelationTupleForm --
116  *      Returns relation attribute values for a relation.
117  *
118  * Note:
119  *      Assumes relation descriptor is valid.
120  */
121 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
122
123
124 /* 
125  * RelationGetRelationId --
126  *
127  *  returns the object id of the relation
128  *
129  */
130 #define RelationGetRelationId(relation) ((relation)->rd_id)
131
132 /*
133  * RelationGetFile --
134  *
135  *    Returns the open File decscriptor
136  */
137 #define RelationGetFile(relation) ((relation)->rd_fd)
138
139
140 /*
141  * RelationGetRelationName --
142  *
143  *    Returns a Relation Name
144  */
145 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
146
147 /*
148  * RelationGetRelationName --
149  *
150  *    Returns a the number of attributes.
151  */
152 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
153
154 /*
155  * RelationGetTupleDescriptor --
156  *      Returns tuple descriptor for a relation.
157  *
158  * Note:
159  *      Assumes relation descriptor is valid.
160  */
161 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
162
163 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
164
165 extern void RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
166                              RegProcedure *support);
167 #endif  /* REL_H */