v6-0002-Rename-some-toasting-functions-based-on-whether-t.patch
application/octet-stream
Filename: v6-0002-Rename-some-toasting-functions-based-on-whether-t.patch
Type: application/octet-stream
Part: 0
Message:
Re: tableam vs. TOAST
Patch
Format: format-patch
Series: patch v6-0002
Subject: Rename some toasting functions based on whether they are heap-specific.
| File | + | − |
|---|---|---|
| src/backend/access/common/detoast.c | 13 | 13 |
| src/backend/access/common/indextuple.c | 1 | 1 |
| src/backend/access/heap/heapam.c | 4 | 4 |
| src/backend/access/heap/heaptoast.c | 13 | 12 |
| src/backend/access/heap/rewriteheap.c | 2 | 2 |
| src/backend/access/table/toast_helper.c | 2 | 2 |
| src/backend/executor/tstoreReceiver.c | 1 | 1 |
| src/backend/storage/large_object/inv_api.c | 1 | 1 |
| src/backend/utils/adt/expandedrecord.c | 2 | 2 |
| src/backend/utils/fmgr/fmgr.c | 4 | 4 |
| src/include/access/detoast.h | 8 | 8 |
| src/include/access/heaptoast.h | 6 | 7 |
| src/pl/plpgsql/src/pl_exec.c | 1 | 1 |
| src/test/regress/regress.c | 1 | 1 |
From 227ddd67a57758d9fa55c1b4b0dea33e297f454b Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Mon, 8 Jul 2019 12:34:37 -0400
Subject: [PATCH v6 2/2] Rename some toasting functions based on whether they
are heap-specific.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The old names for the attribute-detoasting functions names included the
word "heap," which seems outdated now that the heap is only one of
potentially many table access methods.
On the other hand, toast_insert_or_update and toast_delete are
heap-specific, so rename them by adding "heap_" as a prefix.
Patch by me, reviewed and tested by Prabhat Sabu, Thomas Munro,
Andres Freund, and Álvaro Herrera.
Discussion: http://postgr.es/m/CA+TgmoZv-=2iWM4jcw5ZhJeL18HF96+W1yJeYrnGMYdkFFnEpQ@mail.gmail.com
---
src/backend/access/common/detoast.c | 26 +++++++++++-----------
src/backend/access/common/indextuple.c | 2 +-
src/backend/access/heap/heapam.c | 8 +++----
src/backend/access/heap/heaptoast.c | 25 +++++++++++----------
src/backend/access/heap/rewriteheap.c | 4 ++--
src/backend/access/table/toast_helper.c | 4 ++--
src/backend/executor/tstoreReceiver.c | 2 +-
src/backend/storage/large_object/inv_api.c | 2 +-
src/backend/utils/adt/expandedrecord.c | 4 ++--
src/backend/utils/fmgr/fmgr.c | 8 +++----
src/include/access/detoast.h | 16 ++++++-------
src/include/access/heaptoast.h | 13 +++++------
src/pl/plpgsql/src/pl_exec.c | 2 +-
src/test/regress/regress.c | 2 +-
14 files changed, 59 insertions(+), 59 deletions(-)
diff --git a/src/backend/access/common/detoast.c b/src/backend/access/common/detoast.c
index 36b68e35fb..78256f91ca 100644
--- a/src/backend/access/common/detoast.c
+++ b/src/backend/access/common/detoast.c
@@ -31,7 +31,7 @@ static struct varlena *toast_decompress_datum(struct varlena *attr);
static struct varlena *toast_decompress_datum_slice(struct varlena *attr, int32 slicelength);
/* ----------
- * heap_tuple_fetch_attr -
+ * detoast_external_attr -
*
* Public entry point to get back a toasted value from
* external source (possibly still in compressed format).
@@ -43,7 +43,7 @@ static struct varlena *toast_decompress_datum_slice(struct varlena *attr, int32
* ----------
*/
struct varlena *
-heap_tuple_fetch_attr(struct varlena *attr)
+detoast_external_attr(struct varlena *attr)
{
struct varlena *result;
@@ -69,7 +69,7 @@ heap_tuple_fetch_attr(struct varlena *attr)
/* recurse if value is still external in some other way */
if (VARATT_IS_EXTERNAL(attr))
- return heap_tuple_fetch_attr(attr);
+ return detoast_external_attr(attr);
/*
* Copy into the caller's memory context, in case caller tries to
@@ -104,7 +104,7 @@ heap_tuple_fetch_attr(struct varlena *attr)
/* ----------
- * heap_tuple_untoast_attr -
+ * detoast_attr -
*
* Public entry point to get back a toasted value from compression
* or external storage. The result is always non-extended varlena form.
@@ -114,7 +114,7 @@ heap_tuple_fetch_attr(struct varlena *attr)
* ----------
*/
struct varlena *
-heap_tuple_untoast_attr(struct varlena *attr)
+detoast_attr(struct varlena *attr)
{
if (VARATT_IS_EXTERNAL_ONDISK(attr))
{
@@ -145,7 +145,7 @@ heap_tuple_untoast_attr(struct varlena *attr)
Assert(!VARATT_IS_EXTERNAL_INDIRECT(attr));
/* recurse in case value is still extended in some other way */
- attr = heap_tuple_untoast_attr(attr);
+ attr = detoast_attr(attr);
/* if it isn't, we'd better copy it */
if (attr == (struct varlena *) redirect.pointer)
@@ -162,7 +162,7 @@ heap_tuple_untoast_attr(struct varlena *attr)
/*
* This is an expanded-object pointer --- get flat format
*/
- attr = heap_tuple_fetch_attr(attr);
+ attr = detoast_external_attr(attr);
/* flatteners are not allowed to produce compressed/short output */
Assert(!VARATT_IS_EXTENDED(attr));
}
@@ -193,14 +193,14 @@ heap_tuple_untoast_attr(struct varlena *attr)
/* ----------
- * heap_tuple_untoast_attr_slice -
+ * detoast_attr_slice -
*
* Public entry point to get back part of a toasted value
* from compression or external storage.
* ----------
*/
struct varlena *
-heap_tuple_untoast_attr_slice(struct varlena *attr,
+detoast_attr_slice(struct varlena *attr,
int32 sliceoffset, int32 slicelength)
{
struct varlena *preslice;
@@ -230,13 +230,13 @@ heap_tuple_untoast_attr_slice(struct varlena *attr,
/* nested indirect Datums aren't allowed */
Assert(!VARATT_IS_EXTERNAL_INDIRECT(redirect.pointer));
- return heap_tuple_untoast_attr_slice(redirect.pointer,
+ return detoast_attr_slice(redirect.pointer,
sliceoffset, slicelength);
}
else if (VARATT_IS_EXTERNAL_EXPANDED(attr))
{
- /* pass it off to heap_tuple_fetch_attr to flatten */
- preslice = heap_tuple_fetch_attr(attr);
+ /* pass it off to detoast_external_attr to flatten */
+ preslice = detoast_external_attr(attr);
}
else
preslice = attr;
@@ -737,7 +737,7 @@ toast_decompress_datum(struct varlena *attr)
* toast_decompress_datum_slice -
*
* Decompress the front of a compressed version of a varlena datum.
- * offset handling happens in heap_tuple_untoast_attr_slice.
+ * offset handling happens in detoast_attr_slice.
* Here we just decompress a slice from the front.
*/
static struct varlena *
diff --git a/src/backend/access/common/indextuple.c b/src/backend/access/common/indextuple.c
index 07586201b9..8a5f5227a3 100644
--- a/src/backend/access/common/indextuple.c
+++ b/src/backend/access/common/indextuple.c
@@ -89,7 +89,7 @@ index_form_tuple(TupleDesc tupleDescriptor,
if (VARATT_IS_EXTERNAL(DatumGetPointer(values[i])))
{
untoasted_values[i] =
- PointerGetDatum(heap_tuple_fetch_attr((struct varlena *)
+ PointerGetDatum(detoast_external_attr((struct varlena *)
DatumGetPointer(values[i])));
untoasted_free[i] = true;
}
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 9e7cafa8e6..08bd087bc8 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -2085,7 +2085,7 @@ heap_prepare_insert(Relation relation, HeapTuple tup, TransactionId xid,
return tup;
}
else if (HeapTupleHasExternal(tup) || tup->t_len > TOAST_TUPLE_THRESHOLD)
- return toast_insert_or_update(relation, tup, NULL, options);
+ return heap_toast_insert_or_update(relation, tup, NULL, options);
else
return tup;
}
@@ -2809,7 +2809,7 @@ l1:
Assert(!HeapTupleHasExternal(&tp));
}
else if (HeapTupleHasExternal(&tp))
- toast_delete(relation, &tp, false, 0);
+ heap_toast_delete(relation, &tp, false, 0);
/*
* Mark tuple for invalidation from system caches at next command
@@ -3504,7 +3504,7 @@ l2:
if (need_toast)
{
/* Note we always use WAL and FSM during updates */
- heaptup = toast_insert_or_update(relation, newtup, &oldtup, 0);
+ heaptup = heap_toast_insert_or_update(relation, newtup, &oldtup, 0);
newtupsize = MAXALIGN(heaptup->t_len);
}
else
@@ -5673,7 +5673,7 @@ heap_abort_speculative(Relation relation, ItemPointer tid, uint32 specToken)
if (HeapTupleHasExternal(&tp))
{
Assert(!IsToastRelation(relation));
- toast_delete(relation, &tp, true, specToken);
+ heap_toast_delete(relation, &tp, true, specToken);
}
/*
diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c
index c0acefc97e..cca916a39f 100644
--- a/src/backend/access/heap/heaptoast.c
+++ b/src/backend/access/heap/heaptoast.c
@@ -12,11 +12,11 @@
*
*
* INTERFACE ROUTINES
- * toast_insert_or_update -
+ * heap_toast_insert_or_update -
* Try to make a given tuple fit into one page by compressing
* or moving off attributes
*
- * toast_delete -
+ * heap_toast_delete -
* Reclaim toast storage when a tuple is deleted
*
*-------------------------------------------------------------------------
@@ -32,14 +32,14 @@
/* ----------
- * toast_delete -
+ * heap_toast_delete -
*
* Cascaded delete toast-entries on DELETE
* ----------
*/
void
-toast_delete(Relation rel, HeapTuple oldtup, bool is_speculative,
- uint32 specToken)
+heap_toast_delete(Relation rel, HeapTuple oldtup, bool is_speculative,
+ uint32 specToken)
{
TupleDesc tupleDesc;
Datum toast_values[MaxHeapAttributeNumber];
@@ -75,7 +75,7 @@ toast_delete(Relation rel, HeapTuple oldtup, bool is_speculative,
/* ----------
- * toast_insert_or_update -
+ * heap_toast_insert_or_update -
*
* Delete no-longer-used toast-entries and create new ones to
* make the new tuple fit on INSERT or UPDATE
@@ -93,8 +93,8 @@ toast_delete(Relation rel, HeapTuple oldtup, bool is_speculative,
* ----------
*/
HeapTuple
-toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup,
- int options)
+heap_toast_insert_or_update(Relation rel, HeapTuple newtup, HeapTuple oldtup,
+ int options)
{
HeapTuple result_tuple;
TupleDesc tupleDesc;
@@ -376,7 +376,7 @@ toast_flatten_tuple(HeapTuple tup, TupleDesc tupleDesc)
new_value = (struct varlena *) DatumGetPointer(toast_values[i]);
if (VARATT_IS_EXTERNAL(new_value))
{
- new_value = heap_tuple_fetch_attr(new_value);
+ new_value = detoast_external_attr(new_value);
toast_values[i] = PointerGetDatum(new_value);
toast_free[i] = true;
}
@@ -491,7 +491,7 @@ toast_flatten_tuple_to_datum(HeapTupleHeader tup,
if (VARATT_IS_EXTERNAL(new_value) ||
VARATT_IS_COMPRESSED(new_value))
{
- new_value = heap_tuple_untoast_attr(new_value);
+ new_value = detoast_attr(new_value);
toast_values[i] = PointerGetDatum(new_value);
toast_free[i] = true;
}
@@ -501,7 +501,8 @@ toast_flatten_tuple_to_datum(HeapTupleHeader tup,
/*
* Calculate the new size of the tuple.
*
- * This should match the reconstruction code in toast_insert_or_update.
+ * This should match the reconstruction code in
+ * heap_toast_insert_or_update.
*/
new_header_len = SizeofHeapTupleHeader;
if (has_nulls)
@@ -590,7 +591,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc,
new_value = (struct varlena *) DatumGetPointer(new_values[i]);
if (VARATT_IS_EXTERNAL(new_value))
{
- new_value = heap_tuple_fetch_attr(new_value);
+ new_value = detoast_external_attr(new_value);
new_values[i] = PointerGetDatum(new_value);
freeable_values[num_to_free++] = (Pointer) new_value;
}
diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index 0172a13957..7c98a42b8b 100644
--- a/src/backend/access/heap/rewriteheap.c
+++ b/src/backend/access/heap/rewriteheap.c
@@ -664,8 +664,8 @@ raw_heap_insert(RewriteState state, HeapTuple tup)
*/
options |= HEAP_INSERT_NO_LOGICAL;
- heaptup = toast_insert_or_update(state->rs_new_rel, tup, NULL,
- options);
+ heaptup = heap_toast_insert_or_update(state->rs_new_rel, tup, NULL,
+ options);
}
else
heaptup = tup;
diff --git a/src/backend/access/table/toast_helper.c b/src/backend/access/table/toast_helper.c
index e33918a7f4..dedc123e31 100644
--- a/src/backend/access/table/toast_helper.c
+++ b/src/backend/access/table/toast_helper.c
@@ -136,9 +136,9 @@ toast_tuple_init(ToastTupleContext *ttc)
{
ttc->ttc_attr[i].tai_oldexternal = new_value;
if (att->attstorage == 'p')
- new_value = heap_tuple_untoast_attr(new_value);
+ new_value = detoast_attr(new_value);
else
- new_value = heap_tuple_fetch_attr(new_value);
+ new_value = detoast_external_attr(new_value);
ttc->ttc_values[i] = PointerGetDatum(new_value);
ttc->ttc_attr[i].tai_colflags |= TOASTCOL_NEEDS_FREE;
ttc->ttc_flags |= (TOAST_NEEDS_CHANGE | TOAST_NEEDS_FREE);
diff --git a/src/backend/executor/tstoreReceiver.c b/src/backend/executor/tstoreReceiver.c
index c0c81c82da..6306b7d0bd 100644
--- a/src/backend/executor/tstoreReceiver.c
+++ b/src/backend/executor/tstoreReceiver.c
@@ -133,7 +133,7 @@ tstoreReceiveSlot_detoast(TupleTableSlot *slot, DestReceiver *self)
{
if (VARATT_IS_EXTERNAL(DatumGetPointer(val)))
{
- val = PointerGetDatum(heap_tuple_fetch_attr((struct varlena *)
+ val = PointerGetDatum(detoast_external_attr((struct varlena *)
DatumGetPointer(val)));
myState->tofree[nfree++] = val;
}
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index e591236343..263d5be12e 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -180,7 +180,7 @@ getdatafield(Form_pg_largeobject tuple,
if (VARATT_IS_EXTENDED(datafield))
{
datafield = (bytea *)
- heap_tuple_untoast_attr((struct varlena *) datafield);
+ detoast_attr((struct varlena *) datafield);
freeit = true;
}
len = VARSIZE(datafield) - VARHDRSZ;
diff --git a/src/backend/utils/adt/expandedrecord.c b/src/backend/utils/adt/expandedrecord.c
index 369432d53c..d99d370b17 100644
--- a/src/backend/utils/adt/expandedrecord.c
+++ b/src/backend/utils/adt/expandedrecord.c
@@ -1159,7 +1159,7 @@ expanded_record_set_field_internal(ExpandedRecordHeader *erh, int fnumber,
{
/* Detoasting should be done in short-lived context. */
oldcxt = MemoryContextSwitchTo(get_short_term_cxt(erh));
- newValue = PointerGetDatum(heap_tuple_fetch_attr((struct varlena *) DatumGetPointer(newValue)));
+ newValue = PointerGetDatum(detoast_external_attr((struct varlena *) DatumGetPointer(newValue)));
MemoryContextSwitchTo(oldcxt);
}
else
@@ -1305,7 +1305,7 @@ expanded_record_set_fields(ExpandedRecordHeader *erh,
if (expand_external)
{
/* Detoast as requested while copying the value */
- newValue = PointerGetDatum(heap_tuple_fetch_attr((struct varlena *) DatumGetPointer(newValue)));
+ newValue = PointerGetDatum(detoast_external_attr((struct varlena *) DatumGetPointer(newValue)));
}
else
{
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 0484adb984..099ebd779b 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1739,7 +1739,7 @@ struct varlena *
pg_detoast_datum(struct varlena *datum)
{
if (VARATT_IS_EXTENDED(datum))
- return heap_tuple_untoast_attr(datum);
+ return detoast_attr(datum);
else
return datum;
}
@@ -1748,7 +1748,7 @@ struct varlena *
pg_detoast_datum_copy(struct varlena *datum)
{
if (VARATT_IS_EXTENDED(datum))
- return heap_tuple_untoast_attr(datum);
+ return detoast_attr(datum);
else
{
/* Make a modifiable copy of the varlena object */
@@ -1764,14 +1764,14 @@ struct varlena *
pg_detoast_datum_slice(struct varlena *datum, int32 first, int32 count)
{
/* Only get the specified portion from the toast rel */
- return heap_tuple_untoast_attr_slice(datum, first, count);
+ return detoast_attr_slice(datum, first, count);
}
struct varlena *
pg_detoast_datum_packed(struct varlena *datum)
{
if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum))
- return heap_tuple_untoast_attr(datum);
+ return detoast_attr(datum);
else
return datum;
}
diff --git a/src/include/access/detoast.h b/src/include/access/detoast.h
index 02029a991f..baf3dc2591 100644
--- a/src/include/access/detoast.h
+++ b/src/include/access/detoast.h
@@ -44,34 +44,34 @@ do { \
#define INDIRECT_POINTER_SIZE (VARHDRSZ_EXTERNAL + sizeof(varatt_indirect))
/* ----------
- * heap_tuple_fetch_attr() -
+ * detoast_external_attr() -
*
* Fetches an external stored attribute from the toast
* relation. Does NOT decompress it, if stored external
* in compressed format.
* ----------
*/
-extern struct varlena *heap_tuple_fetch_attr(struct varlena *attr);
+extern struct varlena *detoast_external_attr(struct varlena *attr);
/* ----------
- * heap_tuple_untoast_attr() -
+ * detoast_attr() -
*
* Fully detoasts one attribute, fetching and/or decompressing
* it as needed.
* ----------
*/
-extern struct varlena *heap_tuple_untoast_attr(struct varlena *attr);
+extern struct varlena *detoast_attr(struct varlena *attr);
/* ----------
- * heap_tuple_untoast_attr_slice() -
+ * detoast_attr_slice() -
*
* Fetches only the specified portion of an attribute.
* (Handles all cases for attribute storage)
* ----------
*/
-extern struct varlena *heap_tuple_untoast_attr_slice(struct varlena *attr,
- int32 sliceoffset,
- int32 slicelength);
+extern struct varlena *detoast_attr_slice(struct varlena *attr,
+ int32 sliceoffset,
+ int32 slicelength);
/* ----------
* toast_raw_datum_size -
diff --git a/src/include/access/heaptoast.h b/src/include/access/heaptoast.h
index 07d36ac968..23f62dc4af 100644
--- a/src/include/access/heaptoast.h
+++ b/src/include/access/heaptoast.h
@@ -89,23 +89,22 @@
VARHDRSZ)
/* ----------
- * toast_insert_or_update -
+ * heap_toast_insert_or_update -
*
* Called by heap_insert() and heap_update().
* ----------
*/
-extern HeapTuple toast_insert_or_update(Relation rel,
- HeapTuple newtup, HeapTuple oldtup,
- int options);
+extern HeapTuple heap_toast_insert_or_update(Relation rel, HeapTuple newtup,
+ HeapTuple oldtup, int options);
/* ----------
- * toast_delete -
+ * heap_toast_delete -
*
* Called by heap_delete().
* ----------
*/
-extern void toast_delete(Relation rel, HeapTuple oldtup,
- bool is_speculative, uint32 specToken);
+extern void heap_toast_delete(Relation rel, HeapTuple oldtup,
+ bool is_speculative, uint32 specToken);
/* ----------
* toast_flatten_tuple -
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index cb2e19cda4..345065e305 100644
--- a/src/pl/plpgsql/src/pl_exec.c
+++ b/src/pl/plpgsql/src/pl_exec.c
@@ -8344,7 +8344,7 @@ assign_simple_var(PLpgSQL_execstate *estate, PLpgSQL_var *var,
* pain, but there's little choice.
*/
oldcxt = MemoryContextSwitchTo(get_eval_mcontext(estate));
- detoasted = PointerGetDatum(heap_tuple_fetch_attr((struct varlena *) DatumGetPointer(newvalue)));
+ detoasted = PointerGetDatum(detoast_external_attr((struct varlena *) DatumGetPointer(newvalue)));
MemoryContextSwitchTo(oldcxt);
/* Now's a good time to not leak the input value if it's freeable */
if (freeable)
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c
index 826556eb29..2bbeaa0460 100644
--- a/src/test/regress/regress.c
+++ b/src/test/regress/regress.c
@@ -558,7 +558,7 @@ make_tuple_indirect(PG_FUNCTION_ARGS)
/* copy datum, so it still lives later */
if (VARATT_IS_EXTERNAL_ONDISK(attr))
- attr = heap_tuple_fetch_attr(attr);
+ attr = detoast_external_attr(attr);
else
{
struct varlena *oldattr = attr;
--
2.17.2 (Apple Git-113)