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 | */ |
21 | typedef 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 | |