Re: some Page/PageData const stuff

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2026-01-04T15:10:30Z
Lists: pgsql-hackers
On 03.01.26 18:23, Andres Freund wrote:
> On 2026-01-03 18:05:19 +0100, Peter Eisentraut wrote:
>> On 02.01.26 20:17, Andres Freund wrote:
>>> On 2025-01-20 15:01:08 +0100, Peter Eisentraut wrote:
>>>> This has been committed.
>>>
>>> I don't like the const markings in PageGetItem():
>>>
>>>
>>> /*
>>>    * PageGetItem
>>>    *		Retrieves an item on the given page.
>>>    *
>>>    * Note:
>>>    *		This does not change the status of any of the resources passed.
>>>    *		The semantics may change in the future.
>>>    */
>>> static inline void *
>>> PageGetItem(const PageData *page, const ItemIdData *itemId)
>>> {
>>> 	Assert(page);
>>> 	Assert(ItemIdHasStorage(itemId));
>>>
>>> 	return (void *) (((const char *) page) + ItemIdGetOffset(itemId));
>>> }
>>>
>>> The const for PageData seems like a lie to me, because we cast it away. And
>>> indeed, we often then use the returned value to set hint bits etc.
>>
>> I agree this is incorrect.  Since no callers appear to rely on the const
>> qualification of the argument, the easiest solution would be to just remove
>> it.  See attached patch.
> 
> LGTM

committed




Commits

  1. Remove bogus const qualifier on PageGetItem() argument

  2. Add some more use of Page/PageData rather than char *

  3. Add const qualifiers to bufpage.h

  4. Add PageData C type