diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/execTuples.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 78cfcadea03..ea06aeedb21 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -626,8 +626,7 @@ ExecCopySlotMinimalTuple(TupleTableSlot *slot) return heap_copy_minimal_tuple(slot->tts_mintuple); if (slot->tts_tuple) { - if (TTS_HAS_PHYSICAL_TUPLE(slot) && - HeapTupleHeaderGetNatts(slot->tts_tuple->t_data) + if (HeapTupleHeaderGetNatts(slot->tts_tuple->t_data) < slot->tts_tupleDescriptor->natts) return minimal_expand_tuple(slot->tts_tuple, slot->tts_tupleDescriptor); @@ -675,18 +674,15 @@ ExecFetchSlotTuple(TupleTableSlot *slot) if (HeapTupleHeaderGetNatts(slot->tts_tuple->t_data) < slot->tts_tupleDescriptor->natts) { + HeapTuple tuple; MemoryContext oldContext = MemoryContextSwitchTo(slot->tts_mcxt); - slot->tts_tuple = heap_expand_tuple(slot->tts_tuple, - slot->tts_tupleDescriptor); - slot->tts_shouldFree = true; + tuple = heap_expand_tuple(slot->tts_tuple, + slot->tts_tupleDescriptor); MemoryContextSwitchTo(oldContext); - return slot->tts_tuple; - } - else - { - return slot->tts_tuple; + slot = ExecStoreTuple(tuple, slot, InvalidBuffer, true); } + return slot->tts_tuple; } /* |