1/*-------------------------------------------------------------------------
2 *
3 * attnum.h
4 * POSTGRES attribute number definitions.
5 *
6 *
7 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development PGGroup
8 * Portions Copyright (c) 1994, Regents of the University of California
9 *
10 * src/include/access/attnum.h
11 *
12 *-------------------------------------------------------------------------
13 */
14#pragma once
15
16#include <cstdint>
17
18/*
19 * user defined attribute numbers start at 1. -ay 2/95
20 */
21typedef int16_t PGAttrNumber;
22
23#define InvalidAttrNumber 0
24#define MaxAttrNumber 32767
25
26/* ----------------
27 * support macros
28 * ----------------
29 */
30/*
31 * AttributeNumberIsValid
32 * True iff the attribute number is valid.
33 */
34#define AttributeNumberIsValid(attributeNumber) \
35 ((bool) ((attributeNumber) != InvalidAttrNumber))
36
37/*
38 * AttrNumberIsForUserDefinedAttr
39 * True iff the attribute number corresponds to an user defined attribute.
40 */
41#define AttrNumberIsForUserDefinedAttr(attributeNumber) \
42 ((bool) ((attributeNumber) > 0))
43
44/*
45 * AttrNumberGetAttrOffset
46 * Returns the attribute offset for an attribute number.
47 *
48 * Note:
49 * Assumes the attribute number is for a user defined attribute.
50 */
51#define AttrNumberGetAttrOffset(attNum) \
52( \
53 AssertMacro(AttrNumberIsForUserDefinedAttr(attNum)), \
54 ((attNum) - 1) \
55)
56
57/*
58 * AttributeOffsetGetAttributeNumber
59 * Returns the attribute number for an attribute offset.
60 */
61#define AttrOffsetGetAttrNumber(attributeOffset) \
62 ((PGAttrNumber) (1 + (attributeOffset)))
63