PostgreSQL Source Code git master
Loading...
Searching...
No Matches
tupmacs.h File Reference
#include "catalog/pg_type_d.h"
Include dependency graph for tupmacs.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define fetchatt(A, T)   fetch_att(T, (A)->attbyval, (A)->attlen)
 
#define att_align_datum(cur_offset, attalign, attlen, attdatum)
 
#define att_datum_alignby(cur_offset, attalignby, attlen, attdatum)
 
#define att_align_pointer(cur_offset, attalign, attlen, attptr)
 
#define att_pointer_alignby(cur_offset, attalignby, attlen, attptr)
 
#define att_align_nominal(cur_offset, attalign)    att_nominal_alignby(cur_offset, typalign_to_alignby(attalign))
 
#define att_nominal_alignby(cur_offset, attalignby)    TYPEALIGN(attalignby, cur_offset)
 
#define att_addlength_datum(cur_offset, attlen, attdatum)    att_addlength_pointer(cur_offset, attlen, DatumGetPointer(attdatum))
 
#define att_addlength_pointer(cur_offset, attlen, attptr)
 

Functions

static bool att_isnull (int ATT, const bits8 *BITS)
 
static Datum fetch_att (const void *T, bool attbyval, int attlen)
 
static uint8 typalign_to_alignby (char typalign)
 
static void store_att_byval (void *T, Datum newdatum, int attlen)
 

Macro Definition Documentation

◆ att_addlength_datum

Definition at line 197 of file tupmacs.h.

214 : (((attlen) == -1) ? \
215 ( \
217 ) \
218 : \
219 ( \
220 AssertMacro((attlen) == -2), \
221 (cur_offset) + (strlen((const char *) (attptr)) + 1) \
222 )) \
223)
224
226/*
227 * store_att_byval is a partial inverse of fetch_att: store a given Datum
228 * value into a tuple data area at the specified address. However, it only
229 * handles the byval case, because in typical usage the caller needs to
230 * distinguish by-val and by-ref cases anyway, and so a do-it-all function
231 * wouldn't be convenient.
232 */
235{
236 switch (attlen)
237 {
238 case sizeof(char):
239 *(char *) T = DatumGetChar(newdatum);
240 break;
241 case sizeof(int16):
243 break;
244 case sizeof(int32):
246 break;
247 case sizeof(int64):
249 break;
250 default:
251 elog(ERROR, "unsupported byval length: %d", attlen);
252 }
253}
254#endif /* FRONTEND */
255
256#endif /* TUPMACS_H */
#define FRONTEND
#define AssertMacro(condition)
Definition c.h:874
int64_t int64
Definition c.h:543
int16_t int16
Definition c.h:541
int32_t int32
Definition c.h:542
#define ERROR
Definition elog.h:39
#define elog(elevel,...)
Definition elog.h:226
static const uint32 T[65]
Definition md5.c:119
int16 attlen
static int64 DatumGetInt64(Datum X)
Definition postgres.h:413
uint64_t Datum
Definition postgres.h:70
static char DatumGetChar(Datum X)
Definition postgres.h:122
static int16 DatumGetInt16(Datum X)
Definition postgres.h:172
static int32 DatumGetInt32(Datum X)
Definition postgres.h:212
static int fb(int x)
static void store_att_byval(void *T, Datum newdatum, int attlen)
Definition tupmacs.h:235
static Size VARSIZE_ANY(const void *PTR)
Definition varatt.h:460

◆ att_addlength_pointer

#define att_addlength_pointer (   cur_offset,
  attlen,
  attptr 
)
Value:
( \
((attlen) > 0) ? \
( \
) \
: (((attlen) == -1) ? \
( \
) \
: \
( \
AssertMacro((attlen) == -2), \
(cur_offset) + (strlen((const char *) (attptr)) + 1) \
)) \
)

Definition at line 209 of file tupmacs.h.

215 : (((attlen) == -1) ? \
216 ( \
218 ) \
219 : \
220 ( \
221 AssertMacro((attlen) == -2), \
222 (cur_offset) + (strlen((const char *) (attptr)) + 1) \
223 )) \
224)

◆ att_align_datum

#define att_align_datum (   cur_offset,
  attalign,
  attlen,
  attdatum 
)
Value:
( \
)
char attalign
static Pointer DatumGetPointer(Datum X)
Definition postgres.h:342
static bool VARATT_IS_SHORT(const void *PTR)
Definition varatt.h:403

Definition at line 119 of file tupmacs.h.

◆ att_align_nominal

Definition at line 182 of file tupmacs.h.

◆ att_align_pointer

#define att_align_pointer (   cur_offset,
  attalign,
  attlen,
  attptr 
)
Value:
( \
((attlen) == -1 && VARATT_NOT_PAD_BYTE(attptr)) ? \
)
#define att_align_nominal(cur_offset, attalign)
Definition tupmacs.h:182
#define VARATT_NOT_PAD_BYTE(PTR)
Definition varatt.h:238

Definition at line 150 of file tupmacs.h.

◆ att_datum_alignby

#define att_datum_alignby (   cur_offset,
  attalignby,
  attlen,
  attdatum 
)
Value:

Definition at line 130 of file tupmacs.h.

133 : \
134 TYPEALIGN(attalignby, cur_offset))

◆ att_nominal_alignby

#define att_nominal_alignby (   cur_offset,
  attalignby 
)     TYPEALIGN(attalignby, cur_offset)

Definition at line 189 of file tupmacs.h.

◆ att_pointer_alignby

#define att_pointer_alignby (   cur_offset,
  attalignby,
  attlen,
  attptr 
)
Value:
( \
((attlen) == -1 && VARATT_NOT_PAD_BYTE(attptr)) ? \
TYPEALIGN(attalignby, cur_offset))
#define TYPEALIGN(ALIGNVAL, LEN)
Definition c.h:819

Definition at line 161 of file tupmacs.h.

164 : \
165 TYPEALIGN(attalignby, cur_offset))

◆ fetchatt

#define fetchatt (   A,
  T 
)    fetch_att(T, (A)->attbyval, (A)->attlen)

Definition at line 44 of file tupmacs.h.

Function Documentation

◆ att_isnull()

◆ fetch_att()

static Datum fetch_att ( const void T,
bool  attbyval,
int  attlen 
)
inlinestatic

Definition at line 50 of file tupmacs.h.

51{
52 if (attbyval)
53 {
54 switch (attlen)
55 {
56 case sizeof(char):
58 case sizeof(int16):
60 case sizeof(int32):
62 case sizeof(int64):
64 default:
65 elog(ERROR, "unsupported byval length: %d", attlen);
66 return 0;
67 }
68 }
69 else
70 return PointerGetDatum(T);
71}
bool attbyval
static Datum Int64GetDatum(int64 X)
Definition postgres.h:423
static Datum PointerGetDatum(const void *X)
Definition postgres.h:352
static Datum Int16GetDatum(int16 X)
Definition postgres.h:182
static Datum Int32GetDatum(int32 X)
Definition postgres.h:222
static Datum CharGetDatum(char X)
Definition postgres.h:132

References attbyval, attlen, CharGetDatum(), elog, ERROR, fb(), Int16GetDatum(), Int32GetDatum(), Int64GetDatum(), PointerGetDatum(), and T.

Referenced by array_iter_next(), array_iterate(), array_replace_internal(), array_to_text_internal(), ArrayCast(), brin_range_deserialize(), deconstruct_array(), ExecEvalHashedScalarArrayOp(), ExecEvalScalarArrayOp(), multirange_get_bounds(), PLyList_FromArray_recurse(), range_deserialize(), statext_mcv_deserialize(), width_bucket_array_fixed(), and width_bucket_array_variable().

◆ store_att_byval()

static void store_att_byval ( void T,
Datum  newdatum,
int  attlen 
)
inlinestatic

Definition at line 235 of file tupmacs.h.

236{
237 switch (attlen)
238 {
239 case sizeof(char):
240 *(char *) T = DatumGetChar(newdatum);
241 break;
242 case sizeof(int16):
244 break;
245 case sizeof(int32):
247 break;
248 case sizeof(int64):
250 break;
251 default:
252 elog(ERROR, "unsupported byval length: %d", attlen);
253 }
254}

References attlen, DatumGetChar(), DatumGetInt16(), DatumGetInt32(), DatumGetInt64(), elog, ERROR, fb(), and T.

Referenced by ArrayCastAndSet(), brin_range_serialize(), datum_write(), fill_val(), and statext_mcv_serialize().

◆ typalign_to_alignby()

static uint8 typalign_to_alignby ( char  typalign)
inlinestatic

Definition at line 80 of file tupmacs.h.

81{
83
84 switch (typalign)
85 {
86 case TYPALIGN_CHAR:
87 alignby = sizeof(char);
88 break;
89 case TYPALIGN_SHORT:
91 break;
92 case TYPALIGN_INT:
94 break;
95 case TYPALIGN_DOUBLE:
97 break;
98 default:
99#ifndef FRONTEND
100 elog(ERROR, "invalid typalign value: %c", typalign);
101#else
102 fprintf(stderr, "invalid typalign value: %c\n", typalign);
103 exit(1);
104#endif
105 alignby = 0;
106 break;
107 }
108 return alignby;
109}
uint8_t uint8
Definition c.h:544
#define fprintf(file, fmt, msg)
Definition cubescan.l:21
char typalign
Definition pg_type.h:176

References elog, ERROR, fb(), fprintf, and typalign.

Referenced by array_create_iterator(), array_fill_internal(), array_in(), array_iter_setup(), array_map(), array_replace_internal(), array_seek(), array_set_element(), array_slice_size(), array_to_text_internal(), construct_md_array(), CopyArrayEls(), deconstruct_array(), EA_get_flat_size(), ExecEvalHashedScalarArrayOp(), ExecEvalScalarArrayOp(), get_text_array_contents(), multirange_size_estimate(), PLyList_FromArray_recurse(), populate_compact_attribute_internal(), ReadArrayBinary(), width_bucket_array_variable(), and write_multirange_data().