aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/lztext.c
diff options
context:
space:
mode:
authorJan Wieck <JanWieck@Yahoo.com>1999-11-17 22:18:46 +0000
committerJan Wieck <JanWieck@Yahoo.com>1999-11-17 22:18:46 +0000
commit211ed36635e3135c1b2435d1ff87f07507ebbf0b (patch)
tree3707f47372078226cf839c65584daa07ff4c3024 /src/backend/utils/adt/lztext.c
parent79c3b71c1be3a79ec2d1f4d64bdef13f0e0a086a (diff)
downloadpostgresql-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.c25
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;
}