v10-0004-Move-provider-specific-code-when-looking-up-loca.patch
text/x-patch
Filename: v10-0004-Move-provider-specific-code-when-looking-up-loca.patch
Type: text/x-patch
Part: 3
Patch
Format: format-patch
Series: patch v10-0004
Subject: Move provider specific code when looking up locales into pg_locale.c
| File | + | − |
|---|---|---|
| src/backend/catalog/namespace.c | 4 | 10 |
| src/backend/utils/adt/pg_locale.c | 9 | 0 |
| src/include/utils/pg_locale.h | 1 | 0 |
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