17#include "catalog/pg_type_d.h"
30 return !(
BITS[
ATT >> 3] & (1 << (
ATT & 0x07)));
45 int nbytes = (natts + 7) >> 3;
58#define SPREAD_BITS_MULTIPLIER_32 0x204081U
60 for (
int i = 0;
i < nbytes;
i++, isnull += 8)
102#define fetchatt(A,T) fetch_att(T, (A)->attbyval, (A)->attlen)
250#ifdef USE_ASSERT_CHECKING
254 for (
int i = 0;
i < natts;
i++)
287 res =
Min(res, natts);
341#define att_align_datum(cur_offset, attalign, attlen, attdatum) \
343 ((attlen) == -1 && VARATT_IS_SHORT(DatumGetPointer(attdatum))) ? \
344 (uintptr_t) (cur_offset) : \
345 att_align_nominal(cur_offset, attalign) \
352#define att_datum_alignby(cur_offset, attalignby, attlen, attdatum) \
354 ((attlen) == -1 && VARATT_IS_SHORT(DatumGetPointer(attdatum))) ? \
355 (uintptr_t) (cur_offset) : \
356 TYPEALIGN(attalignby, cur_offset))
372#define att_align_pointer(cur_offset, attalign, attlen, attptr) \
374 ((attlen) == -1 && VARATT_NOT_PAD_BYTE(attptr)) ? \
375 (uintptr_t) (cur_offset) : \
376 att_align_nominal(cur_offset, attalign) \
383#define att_pointer_alignby(cur_offset, attalignby, attlen, attptr) \
385 ((attlen) == -1 && VARATT_NOT_PAD_BYTE(attptr)) ? \
386 (uintptr_t) (cur_offset) : \
387 TYPEALIGN(attalignby, cur_offset))
404#define att_align_nominal(cur_offset, attalign) \
405 att_nominal_alignby(cur_offset, typalign_to_alignby(attalign))
411#define att_nominal_alignby(cur_offset, attalignby) \
412 TYPEALIGN(attalignby, cur_offset)
419#define att_addlength_datum(cur_offset, attlen, attdatum) \
420 att_addlength_pointer(cur_offset, attlen, DatumGetPointer(attdatum))
431#define att_addlength_pointer(cur_offset, attlen, attptr) \
435 (cur_offset) + (attlen) \
437 : (((attlen) == -1) ? \
439 (cur_offset) + VARSIZE_ANY(attptr) \
443 AssertMacro((attlen) == -2), \
444 (cur_offset) + (strlen((const char *) (attptr)) + 1) \
#define TYPEALIGN(ALIGNVAL, LEN)
#define Assert(condition)
memcpy(sums, checksumBaseOffsets, sizeof(checksumBaseOffsets))
#define fprintf(file, fmt, msg)
static const uint32 T[65]
static int pg_rightmost_one_pos32(uint32 word)
static uint64 pg_bswap64(uint64 x)
static Datum Int64GetDatum(int64 X)
static int64 DatumGetInt64(Datum X)
static Datum Int16GetDatum(int16 X)
static Pointer DatumGetPointer(Datum X)
static char DatumGetChar(Datum X)
static Datum Int32GetDatum(int32 X)
static int16 DatumGetInt16(Datum X)
static int32 DatumGetInt32(Datum X)
#define PointerGetDatum(X)
static Datum CharGetDatum(char X)
#define SPREAD_BITS_MULTIPLIER_32
static void populate_isnull_array(const uint8 *bits, int natts, bool *isnull)
static Datum align_fetch_then_add(const char *tupptr, uint32 *off, bool attbyval, int attlen, uint8 attalignby)
static uint8 typalign_to_alignby(char typalign)
static Datum fetch_att(const void *T, bool attbyval, int attlen)
static Datum fetch_att_noerr(const void *T, bool attbyval, int attlen)
static void store_att_byval(void *T, Datum newdatum, int attlen)
static int first_null_attr(const uint8 *bits, int natts)
static bool att_isnull(int ATT, const uint8 *BITS)
static bool VARATT_IS_SHORT(const void *PTR)
static Size VARSIZE_ANY(const void *PTR)