OSDN Git Service

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