diff options
author | Jan Wieck <JanWieck@Yahoo.com> | 1999-11-17 22:18:46 +0000 |
---|---|---|
committer | Jan Wieck <JanWieck@Yahoo.com> | 1999-11-17 22:18:46 +0000 |
commit | 211ed36635e3135c1b2435d1ff87f07507ebbf0b (patch) | |
tree | 3707f47372078226cf839c65584daa07ff4c3024 /src/backend/utils/adt/lztext.c | |
parent | 79c3b71c1be3a79ec2d1f4d64bdef13f0e0a086a (diff) | |
download | postgresql-211ed36635e3135c1b2435d1ff87f07507ebbf0b.tar.gz postgresql-211ed36635e3135c1b2435d1ff87f07507ebbf0b.zip |
Some minor corrections to the LZ compression. In fact I wanted to
HAVE the required OID's first.
Jan
Diffstat (limited to 'src/backend/utils/adt/lztext.c')
-rw-r--r-- | src/backend/utils/adt/lztext.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/backend/utils/adt/lztext.c b/src/backend/utils/adt/lztext.c index 49c37def91d..a07ddebcf19 100644 --- a/src/backend/utils/adt/lztext.c +++ b/src/backend/utils/adt/lztext.c @@ -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; } |