12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*-------------------------------------------------------------------------
- *
- * toast_compression.h
- * Functions for toast compression.
- *
- * Copyright (c) 2021-2022, PostgreSQL Global Development Group
- *
- * src/include/access/toast_compression.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef TOAST_COMPRESSION_H
- #define TOAST_COMPRESSION_H
- /*
- * GUC support.
- *
- * default_toast_compression is an integer for purposes of the GUC machinery,
- * but the value is one of the char values defined below, as they appear in
- * pg_attribute.attcompression, e.g. TOAST_PGLZ_COMPRESSION.
- */
- extern PGDLLIMPORT int default_toast_compression;
- /*
- * Built-in compression method ID. The toast compression header will store
- * this in the first 2 bits of the raw length. These built-in compression
- * method IDs are directly mapped to the built-in compression methods.
- *
- * Don't use these values for anything other than understanding the meaning
- * of the raw bits from a varlena; in particular, if the goal is to identify
- * a compression method, use the constants TOAST_PGLZ_COMPRESSION, etc.
- * below. We might someday support more than 4 compression methods, but
- * we can never have more than 4 values in this enum, because there are
- * only 2 bits available in the places where this is stored.
- */
- typedef enum ToastCompressionId
- {
- TOAST_PGLZ_COMPRESSION_ID = 0,
- TOAST_LZ4_COMPRESSION_ID = 1,
- TOAST_INVALID_COMPRESSION_ID = 2
- } ToastCompressionId;
- /*
- * Built-in compression methods. pg_attribute will store these in the
- * attcompression column. In attcompression, InvalidCompressionMethod
- * denotes the default behavior.
- */
- #define TOAST_PGLZ_COMPRESSION 'p'
- #define TOAST_LZ4_COMPRESSION 'l'
- #define InvalidCompressionMethod '\0'
- #define CompressionMethodIsValid(cm) ((cm) != InvalidCompressionMethod)
- /* pglz compression/decompression routines */
- extern struct varlena *pglz_compress_datum(const struct varlena *value);
- extern struct varlena *pglz_decompress_datum(const struct varlena *value);
- extern struct varlena *pglz_decompress_datum_slice(const struct varlena *value,
- int32 slicelength);
- /* lz4 compression/decompression routines */
- extern struct varlena *lz4_compress_datum(const struct varlena *value);
- extern struct varlena *lz4_decompress_datum(const struct varlena *value);
- extern struct varlena *lz4_decompress_datum_slice(const struct varlena *value,
- int32 slicelength);
- /* other stuff */
- extern ToastCompressionId toast_get_compression_id(struct varlena *attr);
- extern char CompressionNameToMethod(const char *compression);
- extern const char *GetCompressionMethodName(char method);
- #endif /* TOAST_COMPRESSION_H */
|