1 /*-------------------------------------------------------------------------
4 * POSTGRES relation descriptor definitions.
7 * Copyright (c) 1994, Regents of the University of California
9 * $Id: rel.h,v 1.7 1996/11/04 11:51:24 scrappy Exp $
11 *-------------------------------------------------------------------------
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>
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;
41 typedef RelationData *Relation;
44 * RelationPtr is used in the executor to support index scans
45 * where we have to keep track of several index relations in an
49 typedef Relation *RelationPtr;
51 #define InvalidRelation ((Relation)NULL)
53 typedef char ArchiveMode;
57 * True iff relation descriptor is valid.
59 #define RelationIsValid(relation) PointerIsValid(relation)
62 * RelationGetSystemPort --
63 * Returns system port of a relation.
66 * Assumes relation descriptor is valid.
68 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
71 * RelationGetLockInfo --
72 * Returns the lock information structure in the reldesc
75 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
78 * RelationHasReferenceCountZero --
79 * True iff relation reference count is zero.
82 * Assumes relation descriptor is valid.
84 #define RelationHasReferenceCountZero(relation) \
85 ((bool)((relation)->rd_refcnt == 0))
88 * RelationSetReferenceCount --
89 * Sets relation reference count.
91 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
94 * RelationIncrementReferenceCount --
95 * Increments relation reference count.
97 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
100 * RelationDecrementReferenceCount --
101 * Decrements relation reference count.
103 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
106 * RelationGetAccessMethodTupleForm --
107 * Returns access method attribute values for a relation.
110 * Assumes relation descriptor is valid.
112 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
115 * RelationGetRelationTupleForm --
116 * Returns relation attribute values for a relation.
119 * Assumes relation descriptor is valid.
121 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
125 * RelationGetRelationId --
127 * returns the object id of the relation
130 #define RelationGetRelationId(relation) ((relation)->rd_id)
135 * Returns the open File decscriptor
137 #define RelationGetFile(relation) ((relation)->rd_fd)
141 * RelationGetRelationName --
143 * Returns a Relation Name
145 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
148 * RelationGetRelationName --
150 * Returns a the number of attributes.
152 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
155 * RelationGetTupleDescriptor --
156 * Returns tuple descriptor for a relation.
159 * Assumes relation descriptor is valid.
161 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
163 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
165 extern void RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
166 RegProcedure *support);