diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/access/htup.h | 4 | ||||
-rw-r--r-- | src/include/access/tuptoaster.h | 12 | ||||
-rw-r--r-- | src/include/fmgr.h | 2 | ||||
-rw-r--r-- | src/include/funcapi.h | 7 |
4 files changed, 15 insertions, 10 deletions
diff --git a/src/include/access/htup.h b/src/include/access/htup.h index b289e149269..d2ba0acb8f3 100644 --- a/src/include/access/htup.h +++ b/src/include/access/htup.h @@ -375,6 +375,9 @@ do { \ (tup)->t_infomask2 = ((tup)->t_infomask2 & ~HEAP_NATTS_MASK) | (natts) \ ) +#define HeapTupleHeaderHasExternal(tup) \ + (((tup)->t_infomask & HEAP_HASEXTERNAL) != 0) + /* * BITMAPLEN(NATTS) - @@ -900,6 +903,7 @@ extern Datum heap_getsysattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull); extern HeapTuple heap_copytuple(HeapTuple tuple); extern void heap_copytuple_with_tuple(HeapTuple src, HeapTuple dest); +extern Datum heap_copy_tuple_as_datum(HeapTuple tuple, TupleDesc tupleDesc); extern HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, Datum *values, bool *isnull); extern HeapTuple heap_modify_tuple(HeapTuple tuple, diff --git a/src/include/access/tuptoaster.h b/src/include/access/tuptoaster.h index e3dbde0def4..79e45ab7935 100644 --- a/src/include/access/tuptoaster.h +++ b/src/include/access/tuptoaster.h @@ -153,16 +153,14 @@ extern struct varlena *heap_tuple_untoast_attr_slice(struct varlena * attr, extern HeapTuple toast_flatten_tuple(HeapTuple tup, TupleDesc tupleDesc); /* ---------- - * toast_flatten_tuple_attribute - + * toast_flatten_tuple_to_datum - * - * If a Datum is of composite type, "flatten" it to contain no toasted fields. - * This must be invoked on any potentially-composite field that is to be - * inserted into a tuple. Doing this preserves the invariant that toasting - * goes only one level deep in a tuple. + * "Flatten" a tuple containing out-of-line toasted fields into a Datum. * ---------- */ -extern Datum toast_flatten_tuple_attribute(Datum value, - Oid typeId, int32 typeMod); +extern Datum toast_flatten_tuple_to_datum(HeapTupleHeader tup, + uint32 tup_len, + TupleDesc tupleDesc); /* ---------- * toast_compress_datum - diff --git a/src/include/fmgr.h b/src/include/fmgr.h index f944cc6a8ca..a97e2ff19c3 100644 --- a/src/include/fmgr.h +++ b/src/include/fmgr.h @@ -310,7 +310,7 @@ extern struct varlena *pg_detoast_datum_packed(struct varlena * datum); #define PG_RETURN_TEXT_P(x) PG_RETURN_POINTER(x) #define PG_RETURN_BPCHAR_P(x) PG_RETURN_POINTER(x) #define PG_RETURN_VARCHAR_P(x) PG_RETURN_POINTER(x) -#define PG_RETURN_HEAPTUPLEHEADER(x) PG_RETURN_POINTER(x) +#define PG_RETURN_HEAPTUPLEHEADER(x) return HeapTupleHeaderGetDatum(x) /*------------------------------------------------------------------------- diff --git a/src/include/funcapi.h b/src/include/funcapi.h index 2da9fea5373..31e2cc9b0bc 100644 --- a/src/include/funcapi.h +++ b/src/include/funcapi.h @@ -200,6 +200,8 @@ extern TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple); * HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values) - * build a HeapTuple given user data in C string form. values is an array * of C strings, one for each attribute of the return tuple. + * Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple) - convert a + * HeapTupleHeader to a Datum. * * Macro declarations: * HeapTupleGetDatum(HeapTuple tuple) - convert a HeapTuple to a Datum. @@ -216,9 +218,9 @@ extern TupleDesc build_function_result_tupdesc_t(HeapTuple procTuple); *---------- */ -#define HeapTupleGetDatum(_tuple) PointerGetDatum((_tuple)->t_data) +#define HeapTupleGetDatum(tuple) HeapTupleHeaderGetDatum((tuple)->t_data) /* obsolete version of above */ -#define TupleGetDatum(_slot, _tuple) PointerGetDatum((_tuple)->t_data) +#define TupleGetDatum(_slot, _tuple) HeapTupleGetDatum(_tuple) extern TupleDesc RelationNameGetTupleDesc(const char *relname); extern TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases); @@ -227,6 +229,7 @@ extern TupleDesc TypeGetTupleDesc(Oid typeoid, List *colaliases); extern TupleDesc BlessTupleDesc(TupleDesc tupdesc); extern AttInMetadata *TupleDescGetAttInMetadata(TupleDesc tupdesc); extern HeapTuple BuildTupleFromCStrings(AttInMetadata *attinmeta, char **values); +extern Datum HeapTupleHeaderGetDatum(HeapTupleHeader tuple); extern TupleTableSlot *TupleDescGetSlot(TupleDesc tupdesc); |