diff options
Diffstat (limited to 'src/backend/access/heap/tuptoaster.c')
-rw-r--r-- | src/backend/access/heap/tuptoaster.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c index fb509ab66de..2a9df577b10 100644 --- a/src/backend/access/heap/tuptoaster.c +++ b/src/backend/access/heap/tuptoaster.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.21 2001/03/25 00:45:20 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.22 2001/05/07 00:43:15 tgl Exp $ * * * INTERFACE ROUTINES @@ -167,6 +167,43 @@ heap_tuple_untoast_attr(varattrib *attr) /* ---------- + * toast_raw_datum_size - + * + * Return the raw (detoasted) size of a varlena datum + * ---------- + */ +Size +toast_raw_datum_size(Datum value) +{ + varattrib *attr = (varattrib *) DatumGetPointer(value); + Size result; + + if (VARATT_IS_COMPRESSED(attr)) + { + /* + * va_rawsize shows the original data size, whether the datum + * is external or not. + */ + result = attr->va_content.va_compressed.va_rawsize + VARHDRSZ; + } + else if (VARATT_IS_EXTERNAL(attr)) + { + /* + * an uncompressed external attribute has rawsize including the + * header (not too consistent!) + */ + result = attr->va_content.va_external.va_rawsize; + } + else + { + /* plain untoasted datum */ + result = VARSIZE(attr); + } + return result; +} + + +/* ---------- * toast_delete - * * Cascaded delete toast-entries on DELETE |