81{
87
89
90
91
92
93
94
95
96
97
98
99
100
101#define GISTMaxIndexTupleSize \
102 MAXALIGN_DOWN((BLCKSZ - SizeOfPageHeaderData - sizeof(GISTPageOpaqueData)) / \
103 4 - sizeof(ItemIdData))
104
105#define GISTMaxIndexKeySize \
106 (GISTMaxIndexTupleSize - MAXALIGN(sizeof(IndexTupleData)))
107
108
109
110
111
112
113
114#define GIST_PAGE_ID 0xFF81
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
144{
149
155
156
157
158
159
160
162{
169
170#define GistPageGetOpaque(page) ( (GISTPageOpaque) PageGetSpecialPointer(page) )
171
172#define GistPageIsLeaf(page) ( GistPageGetOpaque(page)->flags & F_LEAF)
173#define GIST_LEAF(entry) (GistPageIsLeaf((entry)->page))
174
175#define GistPageIsDeleted(page) ( GistPageGetOpaque(page)->flags & F_DELETED)
176
177#define GistTuplesDeleted(page) ( GistPageGetOpaque(page)->flags & F_TUPLES_DELETED)
178#define GistMarkTuplesDeleted(page) ( GistPageGetOpaque(page)->flags |= F_TUPLES_DELETED)
179#define GistClearTuplesDeleted(page) ( GistPageGetOpaque(page)->flags &= ~F_TUPLES_DELETED)
180
181#define GistPageHasGarbage(page) ( GistPageGetOpaque(page)->flags & F_HAS_GARBAGE)
182#define GistMarkPageHasGarbage(page) ( GistPageGetOpaque(page)->flags |= F_HAS_GARBAGE)
183#define GistClearPageHasGarbage(page) ( GistPageGetOpaque(page)->flags &= ~F_HAS_GARBAGE)
184
185#define GistFollowRight(page) ( GistPageGetOpaque(page)->flags & F_FOLLOW_RIGHT)
186#define GistMarkFollowRight(page) ( GistPageGetOpaque(page)->flags |= F_FOLLOW_RIGHT)
187#define GistClearFollowRight(page) ( GistPageGetOpaque(page)->flags &= ~F_FOLLOW_RIGHT)
188
189#define GistPageGetNSN(page) ( PageXLogRecPtrGet(GistPageGetOpaque(page)->nsn))
190#define GistPageSetNSN(page, val) ( PageXLogRecPtrSet(GistPageGetOpaque(page)->nsn, val))
191
192
193
194
195
196
197
198
199
201{
202
205
206static inline void
208{
210
213
215}
216
219{
221
222
225 {
227 }
228 else
230}
231
232
233
234
235
236typedef struct
237{
241
242#define GEVHDRSZ (offsetof(GistEntryVector, vector))
243
244
245
246
247#define gistentryinit(e, k, r, pg, o, l) \
248 do { (e).key = (k); (e).rel = (r); (e).page = (pg); \
249 (e).offset = (o); (e).leafkey = (l); } while (0)
250
252
253#endif
static bool PageIsEmpty(const PageData *page)
PageHeaderData * PageHeader
#define SizeOfPageHeaderData
static char * PageGetContents(Page page)
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
GISTPageOpaqueData * GISTPageOpaque
static void GistPageSetDeleted(Page page, FullTransactionId deletexid)
static FullTransactionId GistPageGetDeleteXid(Page page)
#define GistPageIsDeleted(page)
#define GistPageGetOpaque(page)
StrategyNumber gisttranslatecmptype(CompareType cmptype, Oid opfamily)
FullTransactionId deleteXid
#define FirstNormalTransactionId
static FullTransactionId FullTransactionIdFromEpochAndXid(uint32 epoch, TransactionId xid)