Re: Safer hash table initialization macro
Jelte Fennema-Nio <postgres@jeltef.nl>
From: "Jelte Fennema-Nio" <postgres@jeltef.nl>
To: "Thomas Munro" <thomas.munro@gmail.com>
Cc: "Bertrand Drouvot" <bertranddrouvot.pg@gmail.com>,
<pgsql-hackers@lists.postgresql.org>
Date: 2025-12-08T10:53:02Z
Lists: pgsql-hackers
Attachments
- v3-0001-Add-hash_make-macros.patch (text/x-patch)
- v3-0002-Use-hash_make-macros-throughout-the-codebase.patch (text/x-patch)
- v3-0003-Inline-functions-that-have-now-become-trivial.patch (text/x-patch)
- v3-0004-Add-foreach_hash-macro.patch (text/x-patch)
- v3-0005-Use-foreach_hash-macro-throughout-the-codebase.patch (text/x-patch)
On Sat Dec 6, 2025 at 1:56 AM CET, Thomas Munro wrote: > On Sat, Dec 6, 2025 at 3:32 AM Jelte Fennema-Nio <postgres@jeltef.nl> wrote: >> On Fri, 5 Dec 2025 at 02:30, Thomas Munro <thomas.munro@gmail.com> wrote: >> create a hashmap it's still possible to call the. > > ... C functions without the helper macros. Oops, forgot to finish that sentence. > > Yeah. I don't think we want that sort of thing all over the place. > We could eventually come up with a small set of tools in a central > place though, so people can work with this stuff without also known > C++ meta-programming voodoo. For example something like (untested, I > didn't think about char[size], just spitballing here...): > > (pg_expr_has_type_p(ptr, char *) || pg_expr_has_type_p(ptr, NameData *)) > > ... given the definition I posted recently[1]. Ugh... It would have saved me some time if I'd seen that email before. I also had no clue that 'extern "C++"' was a thing. Attached is a new patchset where your proposed macro is used. I also needed a pg_nullptr_of macro, because the trick that worked in C didn't in C++. Also, it's probably worth checking out this thread[2]. Especially because it overlaps significantly with[1]. > Sure, I was just thinking about how such cross-language usage would be > forced to unpick our macrology and call the underlying C functions > without them. Doesn't seem like the end of the world anyway, I was > just thinking out loud about the consequences of this phenomenon in > headers. It's not great, but yeah that's the situation. Stuff like PG_TRY and PG_CATCH are especially painful to reimplement. Luckily those things can usually be re-implemented similarly in the target language, so the macros only need to be disected once. > [1] https://www.postgresql.org/message-id/CA+hUKGL7trhWiJ4qxpksBztMMTWDyPnP1QN+Lq341V7QL775DA@mail.gmail.com [2]: https://www.postgresql.org/message-id/flat/CAGECzQR21OnnKiZO_1rLWO0-16kg1JBxnVq-wymYW0-_1cUNtg%40mail.gmail.com