1996-08-27 23:50:29 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* htup.h--
|
1997-09-07 07:04:48 +02:00
|
|
|
* POSTGRES heap tuple definitions.
|
1996-08-27 23:50:29 +02:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* Copyright (c) 1994, Regents of the University of California
|
|
|
|
*
|
1998-12-15 13:47:01 +01:00
|
|
|
* $Id: htup.h,v 1.12 1998/12/15 12:46:46 vadim Exp $
|
1996-08-27 23:50:29 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
#ifndef HTUP_H
|
1996-08-27 23:50:29 +02:00
|
|
|
#define HTUP_H
|
|
|
|
|
1996-11-04 08:18:46 +01:00
|
|
|
#include <utils/nabstime.h>
|
|
|
|
#include <storage/itemptr.h>
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
#define MinHeapTupleBitmapSize 32 /* 8 * 4 */
|
|
|
|
|
|
|
|
/* check these, they are likely to be more severely limited by t_hoff */
|
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
#define MaxHeapAttributeNumber 1600 /* 8 * 200 */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* to avoid wasting space, the attributes should be layed out in such a
|
|
|
|
* way to reduce structure padding.
|
|
|
|
*/
|
1998-11-27 20:33:35 +01:00
|
|
|
typedef struct HeapTupleHeaderData
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
1998-02-26 05:46:47 +01:00
|
|
|
Oid t_oid; /* OID of this tuple -- 4 bytes */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-02-26 05:46:47 +01:00
|
|
|
CommandId t_cmin; /* insert CID stamp -- 4 bytes each */
|
|
|
|
CommandId t_cmax; /* delete CommandId stamp */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-02-26 05:46:47 +01:00
|
|
|
TransactionId t_xmin; /* insert XID stamp -- 4 bytes each */
|
|
|
|
TransactionId t_xmax; /* delete XID stamp */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-11-27 20:33:35 +01:00
|
|
|
ItemPointerData t_ctid; /* current TID of this or newer tuple */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-02-26 05:46:47 +01:00
|
|
|
int16 t_natts; /* number of attributes */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-02-26 05:46:47 +01:00
|
|
|
uint16 t_infomask; /* various infos */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-02-26 05:46:47 +01:00
|
|
|
uint8 t_hoff; /* sizeof tuple header */
|
|
|
|
|
|
|
|
bits8 t_bits[MinHeapTupleBitmapSize / 8];
|
1997-09-07 07:04:48 +02:00
|
|
|
/* bit map of domains */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
/* MORE DATA FOLLOWS AT END OF STRUCT */
|
1998-11-27 20:33:35 +01:00
|
|
|
} HeapTupleHeaderData;
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-11-27 20:33:35 +01:00
|
|
|
typedef HeapTupleHeaderData *HeapTupleHeader;
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
#define SelfItemPointerAttributeNumber (-1)
|
|
|
|
#define ObjectIdAttributeNumber (-2)
|
|
|
|
#define MinTransactionIdAttributeNumber (-3)
|
|
|
|
#define MinCommandIdAttributeNumber (-4)
|
|
|
|
#define MaxTransactionIdAttributeNumber (-5)
|
|
|
|
#define MaxCommandIdAttributeNumber (-6)
|
1997-11-02 16:27:14 +01:00
|
|
|
#define FirstLowInvalidHeapAttributeNumber (-7)
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-01-31 05:39:26 +01:00
|
|
|
/* If you make any changes above, the order off offsets in this must change */
|
|
|
|
extern long heap_sysoffset[];
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-11-27 20:33:35 +01:00
|
|
|
/*
|
|
|
|
* This new HeapTuple for version >= 6.5 and this is why it was changed:
|
|
|
|
*
|
|
|
|
* 1. t_len moved off on-disk tuple data - ItemIdData is used to get len;
|
|
|
|
* 2. t_ctid above is not self tuple TID now - it may point to
|
|
|
|
* updated version of tuple (required by MVCC);
|
|
|
|
* 3. someday someone let tuple to cross block boundaries -
|
|
|
|
* he have to add something below...
|
|
|
|
*/
|
|
|
|
typedef struct HeapTupleData
|
|
|
|
{
|
|
|
|
uint32 t_len; /* length of *t_data */
|
|
|
|
ItemPointerData t_self; /* SelfItemPointer */
|
|
|
|
HeapTupleHeader t_data; /* */
|
|
|
|
} HeapTupleData;
|
|
|
|
|
|
|
|
typedef HeapTupleData *HeapTuple;
|
|
|
|
|
|
|
|
#define HEAPTUPLESIZE DOUBLEALIGN(sizeof(HeapTupleData))
|
|
|
|
|
|
|
|
|
1996-08-27 23:50:29 +02:00
|
|
|
/* ----------------
|
1997-09-07 07:04:48 +02:00
|
|
|
* support macros
|
1996-08-27 23:50:29 +02:00
|
|
|
* ----------------
|
|
|
|
*/
|
1998-11-27 20:33:35 +01:00
|
|
|
#define GETSTRUCT(TUP) (((char *)((HeapTuple)(TUP))->t_data) + \
|
|
|
|
((HeapTuple)(TUP))->t_data->t_hoff)
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
1997-09-07 07:04:48 +02:00
|
|
|
* BITMAPLEN(NATTS) -
|
|
|
|
* Computes minimum size of bitmap given number of domains.
|
1996-08-27 23:50:29 +02:00
|
|
|
*/
|
|
|
|
#define BITMAPLEN(NATTS) \
|
1997-09-07 07:04:48 +02:00
|
|
|
((((((int)(NATTS) - 1) >> 3) + 4 - (MinHeapTupleBitmapSize >> 3)) \
|
|
|
|
& ~03) + (MinHeapTupleBitmapSize >> 3))
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* HeapTupleIsValid
|
1997-09-07 07:04:48 +02:00
|
|
|
* True iff the heap tuple is valid.
|
1996-08-27 23:50:29 +02:00
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
#define HeapTupleIsValid(tuple) PointerIsValid(tuple)
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* information stored in t_infomask:
|
|
|
|
*/
|
1997-11-02 16:27:14 +01:00
|
|
|
#define HEAP_HASNULL 0x0001 /* has null attribute(s) */
|
|
|
|
#define HEAP_HASVARLENA 0x0002 /* has variable length
|
1997-09-07 07:04:48 +02:00
|
|
|
* attribute(s) */
|
1997-11-02 16:27:14 +01:00
|
|
|
#define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */
|
|
|
|
#define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */
|
|
|
|
#define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */
|
|
|
|
#define HEAP_XMAX_INVALID 0x0800 /* t_xmax invalid/aborted */
|
1998-12-15 13:47:01 +01:00
|
|
|
#define HEAP_MARKED_FOR_UPDATE 0x1000 /* marked for UPDATE */
|
1997-11-02 16:27:14 +01:00
|
|
|
|
|
|
|
#define HEAP_XACT_MASK 0x0F00 /* */
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
#define HeapTupleNoNulls(tuple) \
|
1998-11-27 20:33:35 +01:00
|
|
|
(!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASNULL))
|
1996-08-27 23:50:29 +02:00
|
|
|
|
|
|
|
#define HeapTupleAllFixed(tuple) \
|
1998-11-27 20:33:35 +01:00
|
|
|
(!(((HeapTuple) (tuple))->t_data->t_infomask & HEAP_HASVARLENA))
|
1996-08-27 23:50:29 +02:00
|
|
|
|
1998-09-01 06:40:42 +02:00
|
|
|
#endif /* HTUP_H */
|