| /*------------------------------------------------------------------------- |
| * |
| * toast_compression.h |
| * Functions for toast compression. |
| * |
| * Copyright (c) 2021, 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 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 */ |