On Tue, Jan 04, 2022 at 05:03:10PM +0100, Peter Eisentraut wrote: > On 04.01.22 03:21, Julien Rouhaud wrote: > > > > - if (!lc_collate_is_c(collid) && collid != DEFAULT_COLLATION_OID) > > > - mylocale = pg_newlocale_from_collation(collid); > > > + if (!lc_collate_is_c(collid)) > > > + { > > > + if (collid != DEFAULT_COLLATION_OID) > > > + mylocale = pg_newlocale_from_collation(collid); > > > + else if (default_locale.provider == COLLPROVIDER_ICU) > > > + mylocale = &default_locale; > > > + } > > > > There are really a lot of places with this new code. Maybe it could be some > > new function/macro to wrap that for the normal case (e.g. not formatting.c)? > > Right, we could just put this into pg_newlocale_from_collation(), but the > comment there says > > * In fact, they shouldn't call this function at all when they are dealing > * with the default locale. That can save quite a bit in hotspots. > > I don't know how to assess that. > > We could pack this into a macro or inline function if we are concerned about > this.
Yes that was my idea, just have a new function (inline function or a macro then since pg_newlocale_from_collation() clearly warns about performance concerns) that have the whole is-not-c-collation-and-is-default-collation-or-icu-collation logic and calls pg_newlocale_from_collation() only when needed.