htup.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * htup.h
  4.  *   POSTGRES heap tuple definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: htup.h,v 1.22 1999/07/12 13:32:38 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef HTUP_H
  14. #define HTUP_H
  15. #include <utils/nabstime.h>
  16. #include <storage/bufpage.h>
  17. #include <storage/itemptr.h>
  18. #include <utils/memutils.h>
  19. #define MinHeapTupleBitmapSize 32 /* 8 * 4 */
  20. /* check these, they are likely to be more severely limited by t_hoff */
  21. #define MaxHeapAttributeNumber 1600 /* 8 * 200 */
  22. /*
  23.  * to avoid wasting space, the attributes should be layed out in such a
  24.  * way to reduce structure padding.
  25.  */
  26. typedef struct HeapTupleHeaderData
  27. {
  28. Oid t_oid; /* OID of this tuple -- 4 bytes */
  29. CommandId t_cmin; /* insert CID stamp -- 4 bytes each */
  30. CommandId t_cmax; /* delete CommandId stamp */
  31. TransactionId t_xmin; /* insert XID stamp -- 4 bytes each */
  32. TransactionId t_xmax; /* delete XID stamp */
  33. ItemPointerData t_ctid; /* current TID of this or newer tuple */
  34. int16 t_natts; /* number of attributes */
  35. uint16 t_infomask; /* various infos */
  36. uint8 t_hoff; /* sizeof tuple header */
  37. bits8 t_bits[MinHeapTupleBitmapSize / 8];
  38. /* bit map of domains */
  39. /* MORE DATA FOLLOWS AT END OF STRUCT */
  40. } HeapTupleHeaderData;
  41. typedef HeapTupleHeaderData *HeapTupleHeader;
  42. #define MinTupleSize (MAXALIGN(sizeof (PageHeaderData)) + 
  43.  MAXALIGN(sizeof(HeapTupleHeaderData)) + 
  44.  MAXALIGN(sizeof(char)))
  45. #define MaxTupleSize (BLCKSZ - MinTupleSize)
  46. #define MaxAttrSize (MaxTupleSize - MAXALIGN(sizeof(HeapTupleHeaderData)))
  47. #define SelfItemPointerAttributeNumber (-1)
  48. #define ObjectIdAttributeNumber (-2)
  49. #define MinTransactionIdAttributeNumber (-3)
  50. #define MinCommandIdAttributeNumber (-4)
  51. #define MaxTransactionIdAttributeNumber (-5)
  52. #define MaxCommandIdAttributeNumber (-6)
  53. #define FirstLowInvalidHeapAttributeNumber (-7)
  54. /* If you make any changes above, the order off offsets in this must change */
  55. extern long heap_sysoffset[];
  56. /*
  57.  * This new HeapTuple for version >= 6.5 and this is why it was changed:
  58.  *
  59.  * 1. t_len moved off on-disk tuple data - ItemIdData is used to get len;
  60.  * 2. t_ctid above is not self tuple TID now - it may point to
  61.  *   updated version of tuple (required by MVCC);
  62.  * 3. someday someone let tuple to cross block boundaries -
  63.  *   he have to add something below...
  64.  */
  65. typedef struct HeapTupleData
  66. {
  67. uint32 t_len; /* length of *t_data */
  68. ItemPointerData t_self; /* SelfItemPointer */
  69. HeapTupleHeader t_data; /* */
  70. } HeapTupleData;
  71. typedef HeapTupleData *HeapTuple;
  72. #define HEAPTUPLESIZE DOUBLEALIGN(sizeof(HeapTupleData))
  73. /* ----------------
  74.  * support macros
  75.  * ----------------
  76.  */
  77. #define GETSTRUCT(TUP) (((char *)((HeapTuple)(TUP))->t_data) + 
  78. ((HeapTuple)(TUP))->t_data->t_hoff)
  79. /*
  80.  * BITMAPLEN(NATTS) -
  81.  * Computes minimum size of bitmap given number of domains.
  82.  */
  83. #define BITMAPLEN(NATTS) 
  84. ((((((int)(NATTS) - 1) >> 3) + 4 - (MinHeapTupleBitmapSize >> 3)) 
  85.   & ~03) + (MinHeapTupleBitmapSize >> 3))
  86. /*
  87.  * HeapTupleIsValid
  88.  * True iff the heap tuple is valid.
  89.  */
  90. #define HeapTupleIsValid(tuple) PointerIsValid(tuple)
  91. /*
  92.  * information stored in t_infomask:
  93.  */
  94. #define HEAP_HASNULL 0x0001 /* has null attribute(s) */
  95. #define HEAP_HASVARLENA 0x0002 /* has variable length
  96.  * attribute(s) */
  97. #define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */
  98. #define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */
  99. #define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */
  100. #define HEAP_XMAX_INVALID 0x0800 /* t_xmax invalid/aborted */
  101. #define HEAP_MARKED_FOR_UPDATE 0x1000 /* marked for UPDATE */
  102. #define HEAP_UPDATED 0x2000 /* this is UPDATEd version of row */
  103. #define HEAP_MOVED_OFF 0x4000 /* removed or moved to another
  104.  * place by vacuum */
  105. #define HEAP_MOVED_IN 0x8000 /* moved from another place by
  106.  * vacuum */
  107. #define HEAP_XACT_MASK 0xFF00 /* */
  108. #define HeapTupleNoNulls(tuple) 
  109. (!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASNULL))
  110. #define HeapTupleAllFixed(tuple) 
  111. (!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASVARLENA))
  112. #endif  /* HTUP_H */