72#define palloc0(X) (calloc(1, X))
74#define repalloc realloc
111#define VARLENA_EXTSIZE_BITS 30
112#define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1)
159#define VARTAG_IS_EXPANDED(tag) \
160 (((tag) & ~1) == VARTAG_EXPANDED_RO)
162#define VARTAG_SIZE(tag) \
163 ((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \
164 VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \
165 (tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \
166 TrapMacro(true, "unrecognized TOAST vartag"))
242#ifdef WORDS_BIGENDIAN
244#define VARATT_IS_4B(PTR) \
245 ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00)
246#define VARATT_IS_4B_U(PTR) \
247 ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00)
248#define VARATT_IS_4B_C(PTR) \
249 ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40)
250#define VARATT_IS_1B(PTR) \
251 ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80)
252#define VARATT_IS_1B_E(PTR) \
253 ((((varattrib_1b *) (PTR))->va_header) == 0x80)
254#define VARATT_NOT_PAD_BYTE(PTR) \
255 (*((uint8 *) (PTR)) != 0)
258#define VARSIZE_4B(PTR) \
259 (((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF)
260#define VARSIZE_1B(PTR) \
261 (((varattrib_1b *) (PTR))->va_header & 0x7F)
262#define VARTAG_1B_E(PTR) \
263 (((varattrib_1b_e *) (PTR))->va_tag)
265#define SET_VARSIZE_4B(PTR,len) \
266 (((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF)
267#define SET_VARSIZE_4B_C(PTR,len) \
268 (((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000)
269#define SET_VARSIZE_1B(PTR,len) \
270 (((varattrib_1b *) (PTR))->va_header = (len) | 0x80)
271#define SET_VARTAG_1B_E(PTR,tag) \
272 (((varattrib_1b_e *) (PTR))->va_header = 0x80, \
273 ((varattrib_1b_e *) (PTR))->va_tag = (tag))
277#define VARATT_IS_4B(PTR) \
278 ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00)
279#define VARATT_IS_4B_U(PTR) \
280 ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00)
281#define VARATT_IS_4B_C(PTR) \
282 ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02)
283#define VARATT_IS_1B(PTR) \
284 ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01)
285#define VARATT_IS_1B_E(PTR) \
286 ((((varattrib_1b *) (PTR))->va_header) == 0x01)
287#define VARATT_NOT_PAD_BYTE(PTR) \
288 (*((uint8 *) (PTR)) != 0)
291#define VARSIZE_4B(PTR) \
292 ((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF)
293#define VARSIZE_1B(PTR) \
294 ((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F)
295#define VARTAG_1B_E(PTR) \
296 (((varattrib_1b_e *) (PTR))->va_tag)
298#define SET_VARSIZE_4B(PTR,len) \
299 (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2))
300#define SET_VARSIZE_4B_C(PTR,len) \
301 (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02)
302#define SET_VARSIZE_1B(PTR,len) \
303 (((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01)
304#define SET_VARTAG_1B_E(PTR,tag) \
305 (((varattrib_1b_e *) (PTR))->va_header = 0x01, \
306 ((varattrib_1b_e *) (PTR))->va_tag = (tag))
310#define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
311#define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
312#define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
313#define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
319#define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
320#define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data)
321#define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data)
323#define VARATT_SHORT_MAX 0x7F
324#define VARATT_CAN_MAKE_SHORT(PTR) \
325 (VARATT_IS_4B_U(PTR) && \
326 (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX)
327#define VARATT_CONVERTED_SHORT_SIZE(PTR) \
328 (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT)
344#define VARDATA(PTR) VARDATA_4B(PTR)
345#define VARSIZE(PTR) VARSIZE_4B(PTR)
347#define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR)
348#define VARDATA_SHORT(PTR) VARDATA_1B(PTR)
350#define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR)
351#define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR)))
352#define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR)
354#define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR)
355#define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR)
356#define VARATT_IS_EXTERNAL_ONDISK(PTR) \
357 (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK)
358#define VARATT_IS_EXTERNAL_INDIRECT(PTR) \
359 (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT)
360#define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \
361 (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO)
362#define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \
363 (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW)
364#define VARATT_IS_EXTERNAL_EXPANDED(PTR) \
365 (VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
366#define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \
367 (VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
368#define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR)
369#define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR))
371#define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len)
372#define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len)
373#define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len)
375#define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag)
377#define VARSIZE_ANY(PTR) \
378 (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \
379 (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \
383#define VARSIZE_ANY_EXHDR(PTR) \
384 (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \
385 (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \
386 VARSIZE_4B(PTR)-VARHDRSZ))
390#define VARDATA_ANY(PTR) \
391 (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR))
394#define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \
395 (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK)
396#define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \
397 (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS)
400#define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \
401 ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK)
402#define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \
403 ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS)
405#define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \
407 Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \
408 (cm) == TOAST_LZ4_COMPRESSION_ID); \
409 ((toast_pointer).va_extinfo = \
410 (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \
420#define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
421 (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \
422 (toast_pointer).va_rawsize - VARHDRSZ)
440typedef uintptr_t
Datum;
450#define FIELDNO_NULLABLE_DATUM_DATUM 0
452#define FIELDNO_NULLABLE_DATUM_ISNULL 1
457#define SIZEOF_DATUM SIZEOF_VOID_P
466#define DatumGetBool(X) ((bool) ((X) != 0))
475#define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0))
482#define DatumGetChar(X) ((char) (X))
489#define CharGetDatum(X) ((Datum) (X))
496#define Int8GetDatum(X) ((Datum) (X))
503#define DatumGetUInt8(X) ((uint8) (X))
510#define UInt8GetDatum(X) ((Datum) (X))
517#define DatumGetInt16(X) ((int16) (X))
524#define Int16GetDatum(X) ((Datum) (X))
531#define DatumGetUInt16(X) ((uint16) (X))
538#define UInt16GetDatum(X) ((Datum) (X))
545#define DatumGetInt32(X) ((int32) (X))
552#define Int32GetDatum(X) ((Datum) (X))
559#define DatumGetUInt32(X) ((uint32) (X))
566#define UInt32GetDatum(X) ((Datum) (X))
573#define DatumGetObjectId(X) ((Oid) (X))
580#define ObjectIdGetDatum(X) ((Datum) (X))
587#define DatumGetTransactionId(X) ((TransactionId) (X))
594#define TransactionIdGetDatum(X) ((Datum) (X))
601#define MultiXactIdGetDatum(X) ((Datum) (X))
608#define DatumGetCommandId(X) ((CommandId) (X))
615#define CommandIdGetDatum(X) ((Datum) (X))
622#define DatumGetPointer(X) ((Pointer) (X))
629#define PointerGetDatum(X) ((Datum) (X))
639#define DatumGetCString(X) ((char *) DatumGetPointer(X))
651#define CStringGetDatum(X) PointerGetDatum(X)
658#define DatumGetName(X) ((Name) DatumGetPointer(X))
668#define NameGetDatum(X) CStringGetDatum(NameStr(*(X)))
677#ifdef USE_FLOAT8_BYVAL
678#define DatumGetInt64(X) ((int64) (X))
680#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
691#ifdef USE_FLOAT8_BYVAL
692#define Int64GetDatum(X) ((Datum) (X))
704#ifdef USE_FLOAT8_BYVAL
705#define DatumGetUInt64(X) ((uint64) (X))
707#define DatumGetUInt64(X) (* ((uint64 *) DatumGetPointer(X)))
718#ifdef USE_FLOAT8_BYVAL
719#define UInt64GetDatum(X) ((Datum) (X))
721#define UInt64GetDatum(X) Int64GetDatum((int64) (X))
746 return myunion.retval;
773#ifdef USE_FLOAT8_BYVAL
784 return myunion.retval;
787#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
798#ifdef USE_FLOAT8_BYVAL
829#ifdef USE_FLOAT8_BYVAL
830#define Int64GetDatumFast(X) Int64GetDatum(X)
831#define Float8GetDatumFast(X) Float8GetDatum(X)
833#define Int64GetDatumFast(X) PointerGetDatum(&(X))
834#define Float8GetDatumFast(X) PointerGetDatum(&(X))
double float8
Definition: c.h:581
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:362
float float4
Definition: c.h:580
static Datum Float4GetDatum(float4 X)
Definition: postgres.h:747
uintptr_t Datum
Definition: postgres.h:433
static float4 DatumGetFloat4(Datum X)
Definition: postgres.h:730
Datum Int64GetDatum(int64 X)
Datum Float8GetDatum(float8 X)
struct ExpandedObjectHeader ExpandedObjectHeader
Definition: postgres.h:131
#define DatumGetFloat8(X)
Definition: postgres.h:780
#define DatumGetInt32(X)
Definition: postgres.h:538
#define Int32GetDatum(X)
Definition: postgres.h:545
vartag_external
Definition: postgres.h:144
@ VARTAG_ONDISK
Definition: postgres.h:148
@ VARTAG_EXPANDED_RW
Definition: postgres.h:147
@ VARTAG_INDIRECT
Definition: postgres.h:145
@ VARTAG_EXPANDED_RO
Definition: postgres.h:146
#define DatumGetInt64(X)
Definition: postgres.h:673
unsigned int Oid
Definition: postgres_ext.h:31
unsigned int uint32
Definition: postgres_ext_defs.in.h:16
uintptr_t Datum
Definition: postgres_ext_defs.in.h:7
signed int int32
Definition: postgres_ext_defs.in.h:11
unsigned char uint8
Definition: postgres_ext_defs.in.h:14
long int int64
Definition: postgres_ext_defs.in.h:12
Datum value
Definition: postgres.h:444
bool isnull
Definition: postgres.h:446
Definition: postgres.h:442
ExpandedObjectHeader * eohptr
Definition: postgres.h:135
Definition: postgres.h:134
uint32 va_extinfo
Definition: postgres.h:94
int32 va_rawsize
Definition: postgres.h:93
Oid va_valueid
Definition: postgres.h:96
Oid va_toastrelid
Definition: postgres.h:97
Definition: postgres.h:92
struct varlena * pointer
Definition: postgres.h:118
Definition: postgres.h:117
uint8 va_header
Definition: postgres.h:195
Definition: postgres.h:194
Definition: postgres.h:187
Definition: postgres_ext_defs.in.h:34
Definition: postgres.h:171