Subject: heapam_tuple_complete_speculative : remove unnecessary tuple fetch

From: Chao Li <[email-masked]>
Date: Tue, 24 Mar 2026 14:56:28 +0800

Hi,

While reviewing another patch, I noticed this:
```
static void
heapam_tuple_complete_speculative(Relation relation, TupleTableSlot *slot,
								  uint32 specToken, bool succeeded)
{
	bool		shouldFree = true;
	HeapTuple	tuple = ExecFetchSlotHeapTuple(slot, true, &shouldFree); // <== tuple is not used

	/* adjust the tuple's state accordingly */
	if (succeeded)
		heap_finish_speculative(relation, &slot->tts_tid);
	else
		heap_abort_speculative(relation, &slot->tts_tid);

	if (shouldFree)
		pfree(tuple);
}
```

In this function, tuple is not used at all, so there seems to be no need to fetch it, and shouldFree is thus not needed either.

This appears to have been there since 5db6df0c011, where the function was introduced. It looks like a copy-pasto from the previous function, heapam_tuple_insert_speculative(), which does need to fetch and possibly free the tuple.

I tried simply removing ExecFetchSlotHeapTuple(), and "make check" still passes. But I may be missing something, so I’d like to confirm.

The attached patch just removes the unused tuple and shouldFree from this function. As touching the file, I also fixed a typo in the file header comment.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/

---

From: Japin Li <[email-masked]>
Date: Tue, 24 Mar 2026 12:15:50 +0000

> 在 2026年3月24日，14:57，Chao Li <[email-masked]> 写道：
> 
> Hi,
> 

Makes sense! All test cases passed with make check-world.

---

From: Xuneng Zhou <[email-masked]>
Date: Tue, 31 Mar 2026 09:09:47 +0800

> Makes sense! All test cases passed with make check-world.

+1, looks like a simple copy-pasto and the patch LGTM.

-- 
Best,
Xuneng

---

From: surya poondla <[email-masked]>
Date: Thu, 2 Apr 2026 16:51:09 -0700

Hi Chao,

That's a nice catch.

I applied the patch, it passes make check, make check-world.

The change looks good to me.

Regards,
Surya Poondla