Re: some Page/PageData const stuff - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: some Page/PageData const stuff
Date
Msg-id de2a82a7-bef5-4fef-955e-1477e1836d8f@eisentraut.org
Whole thread Raw
In response to Re: some Page/PageData const stuff  (Andres Freund <andres@anarazel.de>)
Responses Re: some Page/PageData const stuff
List pgsql-hackers
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.

(In the future, this might be a candidate for a qualifier-preserving 
polymorphic function like the C23 string functions, but that's for 
another day.)

Attachment

pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: remove pg_restrict workaround
Next
From: "David E. Wheeler"
Date:
Subject: Re: access numeric data in module