home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / lib / H / utils / rel.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  4.4 KB  |  192 lines

  1. /*
  2.  * rel.h --
  3.  *    POSTGRES relation descriptor definitions.
  4.  */
  5.  
  6. #ifndef    RelIncluded        /* Include this file only once */
  7. #define RelIncluded    1
  8.  
  9. /*
  10.  * Identification:
  11.  */
  12. #define REL_H    "$Header: /private/postgres/src/lib/H/utils/RCS/rel.h,v 1.19 1992/03/11 02:23:49 mer Exp $"
  13.  
  14. #include "tmp/postgres.h"
  15.  
  16. #include "storage/fd.h"
  17. #include "access/istrat.h"
  18. #include "access/tupdesc.h"
  19.  
  20. #include "catalog/pg_am.h"
  21. #include "catalog/pg_operator.h"
  22. #include "catalog/pg_relation.h"
  23.  
  24. typedef struct RelationData {
  25.     File            rd_fd;        /* open file descriptor */
  26.     int                     rd_nblocks;     /* number of blocks in rel */
  27.     uint16            rd_refcnt;    /* reference count */
  28.     bool            rd_ismem;    /* rel is in-memory only */
  29.     bool            rd_isnailed;    /* rel is nailed in cache */
  30.     AccessMethodTupleForm    rd_am;        /* AM tuple */
  31.     RelationTupleForm    rd_rel;        /* RELATION tuple */
  32.     ObjectId        rd_id;        /* relations's object id */
  33.     Pointer            lockInfo;    /* ptr. to misc. info. */
  34.     TupleDescriptorData    rd_att;        /* tuple desciptor */
  35. /* VARIABLE LENGTH ARRAY AT END OF STRUCT */
  36. /*    IndexStrategy        rd_is;    */    /* index strategy */
  37. } RelationData;
  38.  
  39. typedef RelationData    *Relation;
  40.  
  41. /* ----------------
  42.  *    RelationPtr is used in the executor to support index scans
  43.  *    where we have to keep track of several index relations in an
  44.  *    array.  -cim 9/10/89
  45.  * ----------------
  46.  */
  47. typedef Relation    *RelationPtr;
  48.  
  49. #define InvalidRelation    ((Relation)NULL)
  50.  
  51. typedef char    ArchiveMode;
  52.  
  53. /*
  54.  * RelationIsValid --
  55.  *    True iff relation descriptor is valid.
  56.  */
  57. #define    RelationIsValid(relation) PointerIsValid(relation)
  58.  
  59. /*
  60.  * RelationGetSystemPort --
  61.  *    Returns system port of a relation.
  62.  *
  63.  * Note:
  64.  *    Assumes relation descriptor is valid.
  65.  */
  66. #define RelationGetSystemPort(relation) ((relation)->rd_fd)
  67.  
  68. /*
  69.  * RelationGetLockInfo --
  70.  *      Returns the lock information structure in the reldesc
  71.  *
  72.  */
  73. #define RelationGetLockInfo(relation) ((relation)->lockInfo)
  74.  
  75. /*
  76.  * RelationHasReferenceCountZero --
  77.  *    True iff relation reference count is zero.
  78.  *
  79.  * Note:
  80.  *    Assumes relation descriptor is valid.
  81.  */
  82. #define RelationHasReferenceCountZero(relation) \
  83.     ((bool)((relation)->rd_refcnt == 0))
  84.  
  85. /*
  86.  * RelationSetReferenceCount --
  87.  *    Sets relation reference count.
  88.  */
  89. #define RelationSetReferenceCount(relation,count) ((relation)->rd_refcnt = count)
  90.  
  91. /*
  92.  * RelationIncrementReferenceCount --
  93.  *    Increments relation reference count.
  94.  */
  95. #define RelationIncrementReferenceCount(relation) ((relation)->rd_refcnt += 1);
  96.  
  97. /*
  98.  * RelationDecrementReferenceCount --
  99.  *    Decrements relation reference count.
  100.  */
  101. #define RelationDecrementReferenceCount(relation) ((relation)->rd_refcnt -= 1)
  102.  
  103. /*
  104.  * RelationGetAccessMethodTupleForm --
  105.  *    Returns access method attribute values for a relation.
  106.  *
  107.  * Note:
  108.  *    Assumes relation descriptor is valid.
  109.  */
  110. #define RelationGetAccessMethodTupleForm(relation) ((relation)->rd_am)
  111.  
  112. /*
  113.  * RelationGetRelationTupleForm --
  114.  *    Returns relation attribute values for a relation.
  115.  *
  116.  * Note:
  117.  *    Assumes relation descriptor is valid.
  118.  */
  119. #define RelationGetRelationTupleForm(relation) ((relation)->rd_rel)
  120.  
  121. /*
  122.  * RelationGetTupleDescriptor --
  123.  *    Returns tuple descriptor for a relation.
  124.  *
  125.  * Note:
  126.  *    Assumes relation descriptor is valid.
  127.  */
  128. #define RelationGetTupleDescriptor(relation) (&(relation)->rd_att)
  129.  
  130. /* 
  131.  * RelationGetRelationId --
  132.  *
  133.  *  returns the object id of the relation
  134.  *
  135.  */
  136. #define RelationGetRelationId(relation) ((relation)->rd_id)
  137.  
  138. /*
  139.  * RelationGetFile --
  140.  *
  141.  *    Returns the open File decscriptor
  142.  */
  143. #define RelationGetFile(relation) ((relation)->rd_fd)
  144.  
  145.  
  146. /*
  147.  * RelationGetRelationName --
  148.  *
  149.  *    Returns a Relation Name
  150.  */
  151. #define RelationGetRelationName(relation) (&(relation)->rd_rel->relname)
  152.  
  153. /*
  154.  * RelationGetRelationName --
  155.  *
  156.  *    Returns a the number of attributes.
  157.  */
  158. #define RelationGetNumberOfAttributes(relation) ((relation)->rd_rel->relnatts)
  159.  
  160. /*
  161.  * RelationGetIndexStrategy --
  162.  *    Returns index strategy for a relation.
  163.  *
  164.  * Note:
  165.  *    Assumes relation descriptor is valid.
  166.  *    Assumes relation descriptor is for an index relation.
  167.  */
  168. extern
  169. IndexStrategy
  170. RelationGetIndexStrategy ARGS((
  171.     Relation    relation
  172. ));
  173.  
  174. /*
  175.  * RelationSetIndexSupport --
  176.  *    Sets index strategy and support info for a relation.
  177.  *
  178.  * Note:
  179.  *    Assumes relation descriptor is a valid pointer to sufficient space.
  180.  *    Assumes index strategy is valid.  Assumes support is valid if non-
  181.  *    NULL.
  182.  */
  183. extern
  184. void
  185. RelationSetIndexSupport ARGS((
  186.     Relation    relation,
  187.     IndexStrategy    strategy,
  188.     RegProcedure    *support
  189. ));
  190.  
  191. #endif    /* !defined(RelIncluded) */
  192.