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)
#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 PointerGetDatum(const void *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)
static Datum CharGetDatum(char X)
#define SPREAD_BITS_MULTIPLIER_32
static int first_null_attr(const bits8 *bits, int natts)
static bool att_isnull(int ATT, const bits8 *BITS)
static Datum align_fetch_then_add(const char *tupptr, uint32 *off, bool attbyval, int attlen, uint8 attalignby)
static void populate_isnull_array(const bits8 *bits, int natts, bool *isnull)
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 bool VARATT_IS_SHORT(const void *PTR)
static Size VARSIZE_ANY(const void *PTR)