diff options
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
-rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index fd732c8f94d..7b8aca3feb4 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.44 2000/07/05 23:11:40 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.45 2000/07/06 05:48:13 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1284,3 +1284,33 @@ Float8GetDatum(float8 X) *retval = X; return PointerGetDatum(retval); } + +/*------------------------------------------------------------------------- + * Support routines for toastable datatypes + *------------------------------------------------------------------------- + */ + +struct varlena * +pg_detoast_datum(struct varlena * datum) +{ + if (VARATT_IS_EXTENDED(datum)) + return (struct varlena *) heap_tuple_untoast_attr((varattrib *) datum); + else + return datum; +} + +struct varlena * +pg_detoast_datum_copy(struct varlena * datum) +{ + if (VARATT_IS_EXTENDED(datum)) + return (struct varlena *) heap_tuple_untoast_attr((varattrib *) datum); + else + { + /* Make a modifiable copy of the varlena object */ + Size len = VARSIZE(datum); + struct varlena *result = (struct varlena *) palloc(len); + + memcpy(result, datum, len); + return result; + } +} |