/* ----------
* pg_lzcompress . h -
*
* Definitions for the builtin LZ compressor
*
* src / include / common / pg_lzcompress . h
* - - - - - - - - - -
*/
#ifndef _PG_LZCOMPRESS_H_
#define _PG_LZCOMPRESS_H_
/* ----------
* PGLZ_MAX_OUTPUT -
*
* Macro to compute the buffer size required by pglz_compress ( ) .
* We allow 4 bytes for overrun before detecting compression failure .
* - - - - - - - - - -
*/
#define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + 4 )
/* ----------
* PGLZ_Strategy -
*
* Some values that control the compression algorithm .
*
* min_input_size Minimum input data size to consider compression .
*
* max_input_size Maximum input data size to consider compression .
*
* min_comp_rate Minimum compression rate ( 0 - 99 % ) to require .
* Regardless of min_comp_rate , the output must be
* smaller than the input , else we don ' t store
* compressed .
*
* first_success_by Abandon compression if we find no compressible
* data within the first this - many bytes .
*
* match_size_good The initial GOOD match size when starting history
* lookup . When looking up the history to find a
* match that could be expressed as a tag , the
* algorithm does not always walk back entirely .
* A good match fast is usually better than the
* best possible one very late . For each iteration
* in the lookup , this value is lowered so the
* longer the lookup takes , the smaller matches
* are considered good .
*
* match_size_drop The percentage by which match_size_good is lowered
* after each history check . Allowed values are
* 0 ( no change until end ) to 100 ( only check
* latest history entry at all ) .
* - - - - - - - - - -
*/
typedef struct PGLZ_Strategy
{
int32 min_input_size;
int32 max_input_size;
int32 min_comp_rate;
int32 first_success_by;
int32 match_size_good;
int32 match_size_drop;
} PGLZ_Strategy;
/* ----------
* The standard strategies
*
* PGLZ_strategy_default Recommended default strategy for TOAST .
*
* PGLZ_strategy_always Try to compress inputs of any length .
* Fallback to uncompressed storage only if
* output would be larger than input .
* - - - - - - - - - -
*/
extern PGDLLIMPORT const PGLZ_Strategy *const PGLZ_strategy_default;
extern PGDLLIMPORT const PGLZ_Strategy *const PGLZ_strategy_always;
/* ----------
* Global function declarations
* - - - - - - - - - -
*/
extern int32 pglz_compress(const char *source, int32 slen, char *dest,
const PGLZ_Strategy *strategy);
extern int32 pglz_decompress(const char *source, int32 slen, char *dest,
int32 rawsize, bool check_complete);
extern int32 pglz_maximum_compressed_size(int32 rawsize,
int32 total_compressed_size);
#endif /* _PG_LZCOMPRESS_H_ */
Messung V0.5 in Prozent C=92 H=99 G=95
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-08-08)
¤
*© Formatika GbR, Deutschland