1 /* ---------- 2 * pg_lzcompress.h - 3 * 4 * Definitions for the builtin LZ compressor 5 * 6 * src/include/common/pg_lzcompress.h 7 * ---------- 8 */ 9 10 #ifndef _PG_LZCOMPRESS_H_ 11 #define _PG_LZCOMPRESS_H_ 12 13 14 /* ---------- 15 * PGLZ_MAX_OUTPUT - 16 * 17 * Macro to compute the buffer size required by pglz_compress(). 18 * We allow 4 bytes for overrun before detecting compression failure. 19 * ---------- 20 */ 21 #define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + 4) 22 23 24 /* ---------- 25 * PGLZ_Strategy - 26 * 27 * Some values that control the compression algorithm. 28 * 29 * min_input_size Minimum input data size to consider compression. 30 * 31 * max_input_size Maximum input data size to consider compression. 32 * 33 * min_comp_rate Minimum compression rate (0-99%) to require. 34 * Regardless of min_comp_rate, the output must be 35 * smaller than the input, else we don't store 36 * compressed. 37 * 38 * first_success_by Abandon compression if we find no compressible 39 * data within the first this-many bytes. 40 * 41 * match_size_good The initial GOOD match size when starting history 42 * lookup. When looking up the history to find a 43 * match that could be expressed as a tag, the 44 * algorithm does not always walk back entirely. 45 * A good match fast is usually better than the 46 * best possible one very late. For each iteration 47 * in the lookup, this value is lowered so the 48 * longer the lookup takes, the smaller matches 49 * are considered good. 50 * 51 * match_size_drop The percentage by which match_size_good is lowered 52 * after each history check. Allowed values are 53 * 0 (no change until end) to 100 (only check 54 * latest history entry at all). 55 * ---------- 56 */ 57 typedef struct PGLZ_Strategy 58 { 59 int32 min_input_size; 60 int32 max_input_size; 61 int32 min_comp_rate; 62 int32 first_success_by; 63 int32 match_size_good; 64 int32 match_size_drop; 65 } PGLZ_Strategy; 66 67 68 /* ---------- 69 * The standard strategies 70 * 71 * PGLZ_strategy_default Recommended default strategy for TOAST. 72 * 73 * PGLZ_strategy_always Try to compress inputs of any length. 74 * Fallback to uncompressed storage only if 75 * output would be larger than input. 76 * ---------- 77 */ 78 extern const PGLZ_Strategy *const PGLZ_strategy_default; 79 extern const PGLZ_Strategy *const PGLZ_strategy_always; 80 81 82 /* ---------- 83 * Global function declarations 84 * ---------- 85 */ 86 extern int32 pglz_compress(const char *source, int32 slen, char *dest, 87 const PGLZ_Strategy *strategy); 88 extern int32 pglz_decompress(const char *source, int32 slen, char *dest, 89 int32 rawsize); 90 91 #endif /* _PG_LZCOMPRESS_H_ */ 92