/*-------------------------------------------------------------------------
*
* detoast . h
* Access to compressed and external varlena values .
*
* Copyright ( c ) 2000 - 2025 , PostgreSQL Global Development Group
*
* src / include / access / detoast . h
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
#ifndef DETOAST_H
#define DETOAST_H
/*
* Macro to fetch the possibly - unaligned contents of an EXTERNAL datum
* into a local " struct varatt_external " toast pointer . This should be
* just a memcpy , but some versions of gcc seem to produce broken code
* that assumes the datum contents are aligned . Introducing an explicit
* intermediate " varattrib_1b_e * " variable seems to fix it .
*/
#define VARATT_EXTERNAL_GET_POINTER(toast_pointer, attr) \
do { \
varattrib_1b_e *attre = (varattrib_1b_e *) (attr); \
Assert(VARATT_IS_EXTERNAL(attre)); \
Assert(VARSIZE_EXTERNAL(attre) == sizeof (toast_pointer) + VARHDRSZ_EXTERNAL); \
memcpy(&(toast_pointer), VARDATA_EXTERNAL(attre), sizeof (toast_pointer)); \
} while (0 )
/* Size of an EXTERNAL datum that contains a standard TOAST pointer */
#define TOAST_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof (varatt_external))
/* Size of an EXTERNAL datum that contains an indirection pointer */
#define INDIRECT_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof (varatt_indirect))
/* ----------
* detoast_external_attr ( ) -
*
* Fetches an external stored attribute from the toast
* relation . Does NOT decompress it , if stored external
* in compressed format .
* - - - - - - - - - -
*/
extern struct varlena *detoast_external_attr(struct varlena *attr);
/* ----------
* detoast_attr ( ) -
*
* Fully detoasts one attribute , fetching and / or decompressing
* it as needed .
* - - - - - - - - - -
*/
extern struct varlena *detoast_attr(struct varlena *attr);
/* ----------
* detoast_attr_slice ( ) -
*
* Fetches only the specified portion of an attribute .
* ( Handles all cases for attribute storage )
* - - - - - - - - - -
*/
extern struct varlena *detoast_attr_slice(struct varlena *attr,
int32 sliceoffset,
int32 slicelength);
/* ----------
* toast_raw_datum_size -
*
* Return the raw ( detoasted ) size of a varlena datum
* - - - - - - - - - -
*/
extern Size toast_raw_datum_size(Datum value);
/* ----------
* toast_datum_size -
*
* Return the storage size of a varlena datum
* - - - - - - - - - -
*/
extern Size toast_datum_size(Datum value);
#endif /* DETOAST_H */
Messung V0.5 in Prozent C=89 H=77 G=83
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-08-05)
¤
*© Formatika GbR, Deutschland