summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorFujii Masao2015-02-09 06:15:24 +0000
committerFujii Masao2015-02-09 06:15:24 +0000
commit40bede5477bb5bce98ce9548841cb414634c26f7 (patch)
tree5d60712a6fb180b315d4e66f599ad9a90e10a344 /src/include
parent237795a7b4ccf359423bdd99476782d4880eda83 (diff)
Move pg_lzcompress.c to src/common.
The meta data of PGLZ symbolized by PGLZ_Header is removed, to make the compression and decompression code independent on the backend-only varlena facility. PGLZ_Header is being used to store some meta data related to the data being compressed like the raw length of the uncompressed record or some varlena-related data, making it unpluggable once PGLZ is stored in src/common as it contains some backend-only code paths with the management of varlena structures. The APIs of PGLZ are reworked at the same time to do only compression and decompression of buffers without the meta-data layer, simplifying its use for a more general usage. On-disk format is preserved as well, so there is no incompatibility with previous major versions of PostgreSQL for TOAST entries. Exposing compression and decompression APIs of pglz makes possible its use by extensions and contrib modules. Especially this commit is required for upcoming WAL compression feature so that the WAL reader facility can decompress the WAL data by using pglz_decompress. Michael Paquier, reviewed by me.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/common/pg_lzcompress.h (renamed from src/include/utils/pg_lzcompress.h)31
1 files changed, 5 insertions, 26 deletions
diff --git a/src/include/utils/pg_lzcompress.h b/src/include/common/pg_lzcompress.h
index 4af24a32a4..52bcaf14b1 100644
--- a/src/include/utils/pg_lzcompress.h
+++ b/src/include/common/pg_lzcompress.h
@@ -3,7 +3,7 @@
*
* Definitions for the builtin LZ compressor
*
- * src/include/utils/pg_lzcompress.h
+ * src/include/common/pg_lzcompress.h
* ----------
*/
@@ -12,35 +12,13 @@
/* ----------
- * PGLZ_Header -
- *
- * The information at the start of the compressed data.
- * ----------
- */
-typedef struct PGLZ_Header
-{
- int32 vl_len_; /* varlena header (do not touch directly!) */
- int32 rawsize;
-} PGLZ_Header;
-
-
-/* ----------
* 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 + sizeof(PGLZ_Header))
-
-/* ----------
- * PGLZ_RAW_SIZE -
- *
- * Macro to determine the uncompressed data size contained
- * in the entry.
- * ----------
- */
-#define PGLZ_RAW_SIZE(_lzdata) ((_lzdata)->rawsize)
+#define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + 4)
/* ----------
@@ -105,8 +83,9 @@ extern const PGLZ_Strategy *const PGLZ_strategy_always;
* Global function declarations
* ----------
*/
-extern bool pglz_compress(const char *source, int32 slen, PGLZ_Header *dest,
+extern int32 pglz_compress(const char *source, int32 slen, char *dest,
const PGLZ_Strategy *strategy);
-extern void pglz_decompress(const PGLZ_Header *source, char *dest);
+extern int32 pglz_decompress(const char *source, int32 slen, char *dest,
+ int32 rawsize);
#endif /* _PG_LZCOMPRESS_H_ */