aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/fmgr/fmgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/fmgr/fmgr.c')
-rw-r--r--src/backend/utils/fmgr/fmgr.c32
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;
+ }
+}