summaryrefslogtreecommitdiff
path: root/src/include/access/robert_tuple.h
blob: 28bbc90885ea8e972468b23889d5e539ebaa0a56 (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
/*
 * robert_tuple.h
 */

#ifndef ROBERT_TUPLE_H
#define ROBERT_TUPLE_H

#include "access/transam.h"
#include "access/tupdesc.h"
#include "access/undolog.h"
#include "storage/itemptr.h"
#include "utils/relcache.h"

struct TupleTableSlot;

typedef struct RobertTupleHeaderData
{
	UndoRecPtr	r_undoptr;
	uint16		r_flags;
	uint8		r_hoff;
	bits8		r_bits[FLEXIBLE_ARRAY_MEMBER];
} RobertTupleHeaderData;

#define SizeofRobertTupleHeader		offsetof(RobertTupleHeaderData, r_bits)

/* Flags for use in r_flags. */
#define ROBERT_NATTS_MASK			0x07FF		/* 11 bits */
#define	ROBERT_HASEXTERNAL			0x0800

typedef RobertTupleHeaderData *RobertTupleHeader;

typedef struct RobertTupleData
{
	uint32		r_len;
	RobertTupleHeader r_data;
	Oid			r_tableOid;
	ItemPointerData r_self;
} RobertTupleData;

typedef RobertTupleData *RobertTuple;

#define ROBERTTUPLESIZE   MAXALIGN(sizeof(RobertTupleData))

extern Size robert_compute_data_size(TupleDesc tupleDesc, Datum *values,
						 bool *isnull, uint8 hoff);
extern void robert_fill_null_bitmap(bits8 *bits, int entries_needed,
						bool *isnull);
extern void robert_fill_tuple(TupleDesc tupleDesc, Datum *values, bool *isnull,
				  RobertTupleHeader td, Size len);
extern RobertTuple robert_form_tuple(TupleDesc tupleDesc, Datum *values,
				  bool *isnull);
extern void robert_deform_tuple(TupleDesc tupleDesc, RobertTuple tuple,
					Datum *values, bool *isnull, int natts, int oldnatts,
					uint32 *offp);
extern RobertTuple robert_toast_tuple(Relation rel,
				   struct TupleTableSlot *slot,
				   int options);
extern char *robert_print_tuple(RobertTuple tuple, TupleDesc tupleDesc);

#endif