Re: Collation & ctype method table, and extension hooks

Jeff Davis <pgsql@j-davis.com>

From: Jeff Davis <pgsql@j-davis.com>
To: Andreas Karlsson <andreas@proxel.se>, pgsql-hackers@postgresql.org
Date: 2024-12-05T00:21:34Z
Lists: pgsql-hackers
On Mon, 2024-12-02 at 16:39 +0100, Andreas Karlsson wrote:
> My patches:
> 
> = v9-0002-Move-check-for-ucol_strcollUTF8-to-pg_locale_icu..patch

Committed.

> = v9-0003-Move-code-for-collation-version-into-provider-spe.patch
> 
> Moves some code from pg_collate.c into provider specific files.

I agree with the general idea, but it seems we are accumulating a lot
of provider-specific functions. Should we define a provider struct with
its own methods?

That would be a good step toward making the provider catalog-driven.
Even if we don't support CREATE LOCALE PROVIDER, having space in the
catalog would be a good place to track the provider version.

> = v9-0004-Move-ICU-database-encoding-check-into-validation-.patch

This seems to be causing a test failure in 020_createdb.pl.

> = v9-0005-Move-provider-specific-code-when-looking-up-local.patch
> 
> I did not like how namespace.c had knowledge of ICU.

See comments above about v9-0003.

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.