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

HAVE the required OID's first.

Jan
This commit is contained in:
Jan Wieck 1999-11-17 22:18:46 +00:00
parent 79c3b71c1b
commit 211ed36635
3 changed files with 49 additions and 13 deletions

View File

@ -1,10 +1,13 @@
/* ----------
* 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
* 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)
return NULL;
/* ----------
* Determine input size and eventually tuple size
* Determine input size and maximum output Datum size
* ----------
*/
rawsize = strlen(str);
@ -56,8 +59,9 @@ lztextin(char *str)
pglz_compress(str, rawsize, tmp, NULL);
/* ----------
* If we miss less than x% bytes at the end of the temp value,
* so be it. Therefore we save a memcpy().
* If we miss less than 25% bytes at the end of the temp value,
* so be it. Therefore we save a palloc()/memcpy()/pfree()
* sequence.
* ----------
*/
if (tmp_size - tmp->varsize < 256 ||
@ -141,7 +145,7 @@ lztextlen(lztext *lz)
* without multibyte support, it's the remembered rawsize
* ----------
*/
return lz->rawsize;
return PGLZ_RAW_SIZE(lz);
}
@ -166,7 +170,7 @@ lztextoctetlen(lztext *lz)
* 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)
pglz_compress(str, rawsize, tmp, NULL);
/* ----------
* If we miss less than x% bytes at the end of the temp value,
* so be it. Therefore we save a memcpy().
* If we miss less than 25% bytes at the end of the temp value,
* so be it. Therefore we save a palloc()/memcpy()/pfree()
* sequence.
* ----------
*/
if (tmp_size - tmp->varsize < 256 ||
@ -250,15 +255,15 @@ lztext_text(lztext *lz)
* 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;
/* ----------
* Decompress directly into the text data area.
* ----------
*/
pglz_decompress(lz, VARDATA(result));
VARDATA(result)[lz->rawsize] = 0;
pglz_decompress(lz, VARDATA(result));
return result;
}

View File

@ -1,7 +1,7 @@
/* ----------
* 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.
* 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,
/* ----------
* pglz_compress -
*
* Compresses source into dest using strategy.
* ----------
*/
int
@ -580,6 +582,8 @@ pglz_compress (char *source, int slen, PGLZ_Header *dest, PGLZ_Strategy *strateg
/* ----------
* pglz_decompress -
*
* Decompresses source into dest.
* ----------
*/
int

View File

@ -1,7 +1,7 @@
/* ----------
* 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
* ----------
@ -37,9 +37,36 @@ typedef struct PGLZ_Header {
*/
#define PGLZ_MAX_OUTPUT(_dlen) ((_dlen) + (((_dlen) | 0x07) >> 3) \
+ sizeof(PGLZ_Header))
/* ----------
* PGLZ_RAW_SIZE -
*
* Macro to determine the uncompressed data size contained
* in the entry.
* ----------
*/
#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 != \
_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 -