mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Some minor corrections to the LZ compression. In fact I wanted to
HAVE the required OID's first. Jan
This commit is contained in:
parent
79c3b71c1b
commit
211ed36635
@ -1,10 +1,13 @@
|
|||||||
/* ----------
|
/* ----------
|
||||||
* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
* 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)
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
* 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;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* ----------
|
/* ----------
|
||||||
* 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,
|
|||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* 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
|
|||||||
|
|
||||||
/* ----------
|
/* ----------
|
||||||
* pglz_decompress -
|
* pglz_decompress -
|
||||||
|
*
|
||||||
|
* Decompresses source into dest.
|
||||||
* ----------
|
* ----------
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* ----------
|
/* ----------
|
||||||
* 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 {
|
|||||||
*/
|
*/
|
||||||
#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 -
|
||||||
|
Loading…
x
Reference in New Issue
Block a user