aboutsummaryrefslogtreecommitdiff
path: root/src/include/access/htup.h
blob: 02d708bb0ad580be1325247d1186cee4dd5fbbbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*-------------------------------------------------------------------------
 *
 * htup.h--
 *	  POSTGRES heap tuple definitions.
 *
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 * $Id: htup.h,v 1.4 1997/09/07 04:55:58 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
#ifndef HTUP_H
#define HTUP_H

#include <utils/nabstime.h>
#include <storage/itemptr.h>

#define MinHeapTupleBitmapSize	32		/* 8 * 4 */

/* check these, they are likely to be more severely limited by t_hoff */

#define MaxHeapAttributeNumber	1600	/* 8 * 200 */

/*
 * to avoid wasting space, the attributes should be layed out in such a
 * way to reduce structure padding.
 */
typedef struct HeapTupleData
{

	unsigned int	t_len;		/* length of entire tuple */

	ItemPointerData t_ctid;		/* current TID of this tuple */

	ItemPointerData t_chain;	/* replaced tuple TID */

	Oid				t_oid;		/* OID of this tuple -- 4 bytes */

	CommandId		t_cmin;		/* insert CID stamp -- 2 bytes each */
	CommandId		t_cmax;		/* delete CommandId stamp */

	TransactionId	t_xmin;		/* insert XID stamp -- 4 bytes each */
	TransactionId	t_xmax;		/* delete XID stamp */

	AbsoluteTime	t_tmin;		/* time stamps -- 4 bytes each */
	AbsoluteTime	t_tmax;

	int16			t_natts;	/* number of attributes */
	char			t_vtype;	/* not used - padding */

	char			t_infomask; /* whether tuple as null or variable
								 * length attributes */

	uint8			t_hoff;		/* sizeof tuple header */

	bits8			t_bits[MinHeapTupleBitmapSize / 8];
	/* bit map of domains */

	/* MORE DATA FOLLOWS AT END OF STRUCT */
}				HeapTupleData;

typedef HeapTupleData *HeapTuple;


#define SelfItemPointerAttributeNumber			(-1)
#define ObjectIdAttributeNumber					(-2)
#define MinTransactionIdAttributeNumber			(-3)
#define MinCommandIdAttributeNumber				(-4)
#define MaxTransactionIdAttributeNumber			(-5)
#define MaxCommandIdAttributeNumber				(-6)
#define ChainItemPointerAttributeNumber			(-7)
#define AnchorItemPointerAttributeNumber		(-8)
#define MinAbsoluteTimeAttributeNumber			(-9)
#define MaxAbsoluteTimeAttributeNumber			(-10)
#define VersionTypeAttributeNumber				(-11)
#define FirstLowInvalidHeapAttributeNumber		(-12)


/* ----------------
 *		support macros
 * ----------------
 */
#define GETSTRUCT(TUP) (((char *)(TUP)) + ((HeapTuple)(TUP))->t_hoff)


/*
 * BITMAPLEN(NATTS) -
 *		Computes minimum size of bitmap given number of domains.
 */
#define BITMAPLEN(NATTS) \
		((((((int)(NATTS) - 1) >> 3) + 4 - (MinHeapTupleBitmapSize >> 3)) \
		  & ~03) + (MinHeapTupleBitmapSize >> 3))

/*
 * HeapTupleIsValid
 *		True iff the heap tuple is valid.
 */
#define HeapTupleIsValid(tuple) PointerIsValid(tuple)

/*
 * information stored in t_infomask:
 */
#define HEAP_HASNULL			0x01	/* has null attribute(s) */
#define HEAP_HASVARLENA			0x02	/* has variable length
										 * attribute(s) */

#define HeapTupleNoNulls(tuple) \
		(!(((HeapTuple) (tuple))->t_infomask & HEAP_HASNULL))

#define HeapTupleAllFixed(tuple) \
		(!(((HeapTuple) (tuple))->t_infomask & HEAP_HASVARLENA))

#endif							/* HTUP_H */