1 /*-------------------------------------------------------------------------
4 * POSTGRES relation descriptor definitions.
7 * Copyright (c) 1994, Regents of the University of California
9 * $Id: rel.h,v 1.15 1998/01/15 19:46:37 pgsql 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 Trigger
34 typedef struct TriggerDesc
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];
47 typedef struct RelationData
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;
67 typedef RelationData *Relation;
70 * RelationPtr is used in the executor to support index scans
71 * where we have to keep track of several index relations in an
75 typedef Relation *RelationPtr;
77 #define InvalidRelation ((Relation)NULL)
81 * True iff relation descriptor is valid.
83 #define RelationIsValid(relation) PointerIsValid(relation)
86 * RelationGetSystemPort --
87 * Returns system port of a relation.
90 * Assumes relation descriptor is valid.
92 #define RelationGetSystemPort(relation) ((relation)->rd_fd)
95 * RelationGetLockInfo --
96 * Returns the lock information structure in the reldesc
99 #define RelationGetLockInfo(relation) ((relation)->lockInfo)
102 * RelationHasReferenceCountZero --
103 * True iff relation reference count is zero.
106 * Assumes relation descriptor is valid.
108 #define RelationHasReferenceCountZero(relation) \
109 ((bool)((relation)->rd_refcnt == 0))
112 * RelationSetReferenceCount --
113 * Sets relation reference count.
115 #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
118 * RelationIncrementReferenceCount --
119 * Increments relation reference count.
121 #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
124 * RelationDecrementReferenceCount --
125 * Decrements relation reference count.
127 #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
130 * RelationGetAccessMethodTupleForm --
131 * Returns access method attribute values for a relation.
134 * Assumes relation descriptor is valid.
136 #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
139 * RelationGetRelationTupleForm --
140 * Returns relation attribute values for a relation.
143 * Assumes relation descriptor is valid.
145 #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
149 * RelationGetRelationId --
151 * returns the object id of the relation
154 #define RelationGetRelationId(relation) ((relation)->rd_id)
159 * Returns the open File decscriptor
161 #define RelationGetFile(relation) ((relation)->rd_fd)
165 * RelationGetRelationName --
167 * Returns a Relation Name
169 #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
172 * RelationGetRelationName --
174 * Returns a the number of attributes.
176 #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
179 * RelationGetTupleDescriptor --
180 * Returns tuple descriptor for a relation.
183 * Assumes relation descriptor is valid.
185 #define RelationGetTupleDescriptor(relation) ((relation)->rd_att)
187 extern IndexStrategy RelationGetIndexStrategy(Relation relation);
190 RelationSetIndexSupport(Relation relation, IndexStrategy strategy,
191 RegProcedure *support);