From 6f99c49d920da1043e8f4467c6fa0cdebd480268 Mon Sep 17 00:00:00 2001
From: Andreas Karlsson <andreas@proxel.se>
Date: Fri, 29 Nov 2024 05:49:20 +0100
Subject: [PATCH v10 04/11] Move provider specific code when looking up locales
 into pg_locale.c

---
 src/backend/catalog/namespace.c   | 14 ++++----------
 src/backend/utils/adt/pg_locale.c |  9 +++++++++
 src/include/utils/pg_locale.h     |  1 +
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index 30807f91904..6ad40a96334 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -57,6 +57,7 @@
 #include "utils/inval.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
+#include "utils/pg_locale.h"
 #include "utils/snapmgr.h"
 #include "utils/syscache.h"
 #include "utils/varlena.h"
@@ -2346,17 +2347,10 @@ lookup_collation(const char *collname, Oid collnamespace, int32 encoding)
 	if (!HeapTupleIsValid(colltup))
 		return InvalidOid;
 	collform = (Form_pg_collation) GETSTRUCT(colltup);
-	if (collform->collprovider == COLLPROVIDER_ICU)
-	{
-		if (is_encoding_supported_by_icu(encoding))
-			collid = collform->oid;
-		else
-			collid = InvalidOid;
-	}
-	else
-	{
+	if (is_encoding_supported_by_collprovider(collform->collprovider, encoding))
 		collid = collform->oid;
-	}
+	else
+		collid = InvalidOid;
 	ReleaseSysCache(colltup);
 	return collid;
 }
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index ce255a4b91f..1ec1373bbc8 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -1384,6 +1384,15 @@ get_collation_actual_version(char collprovider, const char *collcollate)
 	return collversion;
 }
 
+bool
+is_encoding_supported_by_collprovider(char collprovider, int encoding)
+{
+	if (collprovider == COLLPROVIDER_ICU)
+		return is_encoding_supported_by_icu(encoding);
+	else
+		return true;
+}
+
 /*
  * pg_strcoll
  *
diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h
index be9bb62c4b2..977bcf9fe29 100644
--- a/src/include/utils/pg_locale.h
+++ b/src/include/utils/pg_locale.h
@@ -93,6 +93,7 @@ extern void init_database_collation(void);
 extern pg_locale_t pg_newlocale_from_collation(Oid collid);
 
 extern char *get_collation_actual_version(char collprovider, const char *collcollate);
+extern bool is_encoding_supported_by_collprovider(char collprovider, int encoding);
 extern int	pg_strcoll(const char *arg1, const char *arg2, pg_locale_t locale);
 extern int	pg_strncoll(const char *arg1, ssize_t len1,
 						const char *arg2, ssize_t len2, pg_locale_t locale);
-- 
2.34.1

