1 /*-------------------------------------------------------------------------
4 * POSTGRES relation descriptor definitions.
7 * Copyright (c) 1994, Regents of the University of California
9 * $Id: rel.h,v 1.2 1996/10/19 04:06:48 scrappy Exp $
11 *-------------------------------------------------------------------------
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"
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;
38 typedef RelationData *Relation;
41 * RelationPtr is used in the executor to support index scans
42 * where we have to keep track of several index relations in an
46 typedef Relation *RelationPtr;
48 #define InvalidRelation ((Relation)NULL)
50 typedef char ArchiveMode;
54 * True iff relation descriptor is valid.
56 #define RelationIsValid(relation) PointerIsValid(relation)
59 * RelationGetSystemPort --
60 * Returns system port of a relation.
63 * Assumes relation descriptor is valid.
65 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
68 * RelationGetLockInfo --
69 * Returns the lock information structure in the reldesc
72 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
75 * RelationHasReferenceCountZero --
76 * True iff relation reference count is zero.
79 * Assumes relation descriptor is valid.
81 #define RelationHasReferenceCountZero(relation) \
82 ((bool)((relation)->rd_refcnt == 0))
85 * RelationSetReferenceCount --
86 * Sets relation reference count.
88 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
91 * RelationIncrementReferenceCount --
92 * Increments relation reference count.
94 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
97 * RelationDecrementReferenceCount --
98 * Decrements relation reference count.
100 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
103 * RelationGetAccessMethodTupleForm --
104 * Returns access method attribute values for a relation.
107 * Assumes relation descriptor is valid.
109 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
112 * RelationGetRelationTupleForm --
113 * Returns relation attribute values for a relation.
116 * Assumes relation descriptor is valid.
118 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
122 * RelationGetRelationId --
124 * returns the object id of the relation
127 #define RelationGetRelationId(relation) ((relation)->rd_id)
132 * Returns the open File decscriptor
134 #define RelationGetFile(relation) ((relation)->rd_fd)
138 * RelationGetRelationName --
140 * Returns a Relation Name
142 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
145 * RelationGetRelationName --
147 * Returns a the number of attributes.
149 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
152 * RelationGetTupleDescriptor --
153 * Returns tuple descriptor for a relation.
156 * Assumes relation descriptor is valid.
158 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
160 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
162 extern void RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
163 RegProcedure *support);