123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*-------------------------------------------------------------------------
- *
- * toast_internals.h
- * Internal definitions for the TOAST system.
- *
- * Copyright (c) 2000-2022, PostgreSQL Global Development Group
- *
- * src/include/access/toast_internals.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef TOAST_INTERNALS_H
- #define TOAST_INTERNALS_H
- #include "access/toast_compression.h"
- #include "storage/lockdefs.h"
- #include "utils/relcache.h"
- #include "utils/snapshot.h"
- /*
- * The information at the start of the compressed toast data.
- */
- typedef struct toast_compress_header
- {
- int32 vl_len_; /* varlena header (do not touch directly!) */
- uint32 tcinfo; /* 2 bits for compression method and 30 bits
- * external size; see va_extinfo */
- } toast_compress_header;
- /*
- * Utilities for manipulation of header information for compressed
- * toast entries.
- */
- #define TOAST_COMPRESS_EXTSIZE(ptr) \
- (((toast_compress_header *) (ptr))->tcinfo & VARLENA_EXTSIZE_MASK)
- #define TOAST_COMPRESS_METHOD(ptr) \
- (((toast_compress_header *) (ptr))->tcinfo >> VARLENA_EXTSIZE_BITS)
- #define TOAST_COMPRESS_SET_SIZE_AND_COMPRESS_METHOD(ptr, len, cm_method) \
- do { \
- Assert((len) > 0 && (len) <= VARLENA_EXTSIZE_MASK); \
- Assert((cm_method) == TOAST_PGLZ_COMPRESSION_ID || \
- (cm_method) == TOAST_LZ4_COMPRESSION_ID); \
- ((toast_compress_header *) (ptr))->tcinfo = \
- (len) | ((uint32) (cm_method) << VARLENA_EXTSIZE_BITS); \
- } while (0)
- extern Datum toast_compress_datum(Datum value, char cmethod);
- extern Oid toast_get_valid_index(Oid toastoid, LOCKMODE lock);
- extern void toast_delete_datum(Relation rel, Datum value, bool is_speculative);
- extern Datum toast_save_datum(Relation rel, Datum value,
- struct varlena *oldexternal, int options);
- extern int toast_open_indexes(Relation toastrel,
- LOCKMODE lock,
- Relation **toastidxs,
- int *num_indexes);
- extern void toast_close_indexes(Relation *toastidxs, int num_indexes,
- LOCKMODE lock);
- extern void init_toast_snapshot(Snapshot toast_snapshot);
- #endif /* TOAST_INTERNALS_H */
|