Re: Collation & ctype method table, and extension hooks

Jeff Davis <pgsql@j-davis.com>

From: Jeff Davis <pgsql@j-davis.com>
To: Peter Eisentraut <peter@eisentraut.org>, Andreas Karlsson <andreas@proxel.se>, pgsql-hackers@postgresql.org
Date: 2025-06-30T19:21:47Z
Lists: pgsql-hackers
On Sun, 2025-06-29 at 12:43 +0200, Peter Eisentraut wrote:
> I wish we could take this further and also run the "ctype is c" case 
> through the method table.  Right now, there are still a bunch of 
> open-coded special cases all over the place, which could be unified. 
> I 
> guess this isn't any worse than before, but maybe this could be a
> future 
> project?

+1. A few things need to be sorted out, but I don't see any major
problem with that.

> Patch 0003 I don't understand.  It replaces type safety by no type 
> safety, and it doesn't have any explanation or comments.  I suppose
> you 
> have further plans in this direction, but until we have seen those
> and 
> have more clarification and explanation, I would hold this back.

Part of it is simply #include cleanliness, because we can't do v16-0004
if we have the provider-specific details in the union. I don't really
like the idea of including ICU headers (indirectly) so many places.
Another part is that I'd like to abstract the providers more completely
-- I've alluded to that a few times but I haven't made an independent
proposal for that yet. Also, the union doesn't offer a lot of type
safety, so I don't see it as a big loss.

But it's not critical right now either, so I won't push for it.

> Patch 0004 seems ok.  But maybe you could explain this better in the 
> commit message, like remove includes from pg_locale.h but instead put
> them in the .c files as needed, and explain why this is possible or 
> suitable now.

It goes with v16-0003, so I will hold this back for now as well.

Regards,
	Jeff Davis




Commits

  1. Remove provider field from pg_locale_t.

  2. Control ctype behavior internally with a method table.

  3. Control collation behavior with a method table.

  4. Move code for collation version into provider-specific files.

  5. Refactor string case conversion into provider-specific files.

  6. Move check for ucol_strcollUTF8 to pg_locale_icu.c

  7. Perform provider-specific initialization in new functions.

  8. Refactor the code to create a pg_locale_t into new function.