提交 211ed366 编写于 作者: J Jan Wieck

Some minor corrections to the LZ compression. In fact I wanted to

HAVE the required OID's first.

Jan
上级 79c3b71c
/* ---------- /* ----------
* lztext.c - * lztext.c -
* *
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/lztext.c,v 1.1 1999/11/17 21:21:50 wieck Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/lztext.c,v 1.2 1999/11/17 22:18:45 wieck Exp $
* *
* Text type with internal LZ compressed representation. Uses the * Text type with internal LZ compressed representation. Uses the
* standard PostgreSQL compression method. * standard PostgreSQL compression method.
*
* This code requires that the LZ compressor found in pg_lzcompress
* codes a usable VARSIZE word at the beginning of the output buffer.
* ---------- * ----------
*/ */
...@@ -42,7 +45,7 @@ lztextin(char *str) ...@@ -42,7 +45,7 @@ lztextin(char *str)
return NULL; return NULL;
/* ---------- /* ----------
* Determine input size and eventually tuple size * Determine input size and maximum output Datum size
* ---------- * ----------
*/ */
rawsize = strlen(str); rawsize = strlen(str);
...@@ -56,8 +59,9 @@ lztextin(char *str) ...@@ -56,8 +59,9 @@ lztextin(char *str)
pglz_compress(str, rawsize, tmp, NULL); pglz_compress(str, rawsize, tmp, NULL);
/* ---------- /* ----------
* If we miss less than x% bytes at the end of the temp value, * If we miss less than 25% bytes at the end of the temp value,
* so be it. Therefore we save a memcpy(). * so be it. Therefore we save a palloc()/memcpy()/pfree()
* sequence.
* ---------- * ----------
*/ */
if (tmp_size - tmp->varsize < 256 || if (tmp_size - tmp->varsize < 256 ||
...@@ -141,7 +145,7 @@ lztextlen(lztext *lz) ...@@ -141,7 +145,7 @@ lztextlen(lztext *lz)
* without multibyte support, it's the remembered rawsize * without multibyte support, it's the remembered rawsize
* ---------- * ----------
*/ */
return lz->rawsize; return PGLZ_RAW_SIZE(lz);
} }
...@@ -166,7 +170,7 @@ lztextoctetlen(lztext *lz) ...@@ -166,7 +170,7 @@ lztextoctetlen(lztext *lz)
* Return the varsize minus the VARSIZE field itself. * Return the varsize minus the VARSIZE field itself.
* ---------- * ----------
*/ */
return lz->varsize - sizeof(int32); return VARSIZE(lz) - VARHDRSZ;
} }
...@@ -208,8 +212,9 @@ text_lztext(text *txt) ...@@ -208,8 +212,9 @@ text_lztext(text *txt)
pglz_compress(str, rawsize, tmp, NULL); pglz_compress(str, rawsize, tmp, NULL);
/* ---------- /* ----------
* If we miss less than x% bytes at the end of the temp value, * If we miss less than 25% bytes at the end of the temp value,
* so be it. Therefore we save a memcpy(). * so be it. Therefore we save a palloc()/memcpy()/pfree()
* sequence.
* ---------- * ----------
*/ */
if (tmp_size - tmp->varsize < 256 || if (tmp_size - tmp->varsize < 256 ||
...@@ -250,15 +255,15 @@ lztext_text(lztext *lz) ...@@ -250,15 +255,15 @@ lztext_text(lztext *lz)
* Allocate and initialize the text result * Allocate and initialize the text result
* ---------- * ----------
*/ */
result = (text *) palloc(lz->rawsize + VARHDRSZ + 1); result = (text *) palloc(PGLZ_RAW_SIZE(lz) + VARHDRSZ + 1);
VARSIZE(result) = lz->rawsize + VARHDRSZ; VARSIZE(result) = lz->rawsize + VARHDRSZ;
/* ---------- /* ----------
* Decompress directly into the text data area. * Decompress directly into the text data area.
* ---------- * ----------
*/ */
pglz_decompress(lz, VARDATA(result));
VARDATA(result)[lz->rawsize] = 0; VARDATA(result)[lz->rawsize] = 0;
pglz_decompress(lz, VARDATA(result));
return result; return result;
} }
......
/* ---------- /* ----------
* pg_lzcompress.c - * pg_lzcompress.c -
* *
* $Header: /cvsroot/pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.1 1999/11/17 21:21:50 wieck Exp $ * $Header: /cvsroot/pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.2 1999/11/17 22:18:45 wieck Exp $
* *
* This is an implementation of LZ compression for PostgreSQL. * This is an implementation of LZ compression for PostgreSQL.
* It uses a simple history table and generates 2-3 byte tags * It uses a simple history table and generates 2-3 byte tags
...@@ -385,6 +385,8 @@ pglz_find_match (PGLZ_HistEntry **hstart, char *input, char *end, ...@@ -385,6 +385,8 @@ pglz_find_match (PGLZ_HistEntry **hstart, char *input, char *end,
/* ---------- /* ----------
* pglz_compress - * pglz_compress -
*
* Compresses source into dest using strategy.
* ---------- * ----------
*/ */
int int
...@@ -580,6 +582,8 @@ pglz_compress (char *source, int slen, PGLZ_Header *dest, PGLZ_Strategy *strateg ...@@ -580,6 +582,8 @@ pglz_compress (char *source, int slen, PGLZ_Header *dest, PGLZ_Strategy *strateg
/* ---------- /* ----------
* pglz_decompress - * pglz_decompress -
*
* Decompresses source into dest.
* ---------- * ----------
*/ */
int int
......
/* ---------- /* ----------
* pg_lzcompress.h - * pg_lzcompress.h -
* *
* $Header: /cvsroot/pgsql/src/include/utils/pg_lzcompress.h,v 1.1 1999/11/17 21:21:51 wieck Exp $ * $Header: /cvsroot/pgsql/src/include/utils/pg_lzcompress.h,v 1.2 1999/11/17 22:18:46 wieck Exp $
* *
* Definitions for the builtin LZ compressor * Definitions for the builtin LZ compressor
* ---------- * ----------
...@@ -37,9 +37,36 @@ typedef struct PGLZ_Header { ...@@ -37,9 +37,36 @@ typedef struct PGLZ_Header {
*/ */
#define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + (((_dlen) | 0x07) >> 3) \ #define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + (((_dlen) | 0x07) >> 3) \
+ sizeof(PGLZ_Header)) + 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_RAW_SIZE(_lzdata) (_lzdata->rawsize)
/* ----------
* PGLZ_IS_COMPRESSED -
*
* Macro to determine if the data itself is stored as raw
* uncompressed data.
* ----------
*/
#define PGLZ_IS_COMPRESSED(_lzdata) (_lzdata->varsize != \ #define PGLZ_IS_COMPRESSED(_lzdata) (_lzdata->varsize != \
_lzdata->rawsize + sizeof(PGLZ_Header)) _lzdata->rawsize + \
sizeof(PGLZ_Header))
/* ----------
* PGLZ_RAW_DATA -
*
* Macro to get access to the plain compressed or uncompressed
* data. Useful if PGLZ_IS_COMPRESSED returns false.
* ----------
*/
#define PGLZ_RAW_DATA(_lzdata) (((char *)(_lzdata)) + \
sizeof(PGLZ_Header))
/* ---------- /* ----------
* PGLZ_Strategy - * PGLZ_Strategy -
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册