On Wed, Sep 06, 2023 at 07:57:03AM -0300, Ranier Vilela wrote:
> I think no one objected.

Looking closer, there is much more inconsistency in this file
depending on the routine called.  How about something like the v2
attached instead to provide more context in the error message about
the function called?  Let's say, when the provider is known, we could
use:
+       elog(ERROR, "unsupported collprovider (%s): %c",
+            "pg_strncoll", locale->provider);

And when the provider is not known, we could use:
+       elog(ERROR, "unsupported collprovider (%s)", "pg_myfunc");

@Jeff (added now in CC), the refactoring done in d87d548c seems to be
at the origin of this confusion, because, before this commit, we never
generated this specific error for all these APIs where the locale is
undefined.  What is your take here?
--
Michael
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index aa9da99308..ad57249685 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -2031,7 +2031,8 @@ pg_strcoll(const char *arg1, const char *arg2, pg_locale_t locale)
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strcoll", locale->provider);
 
 	return result;
 }
@@ -2067,7 +2068,8 @@ pg_strncoll(const char *arg1, size_t len1, const char *arg2, size_t len2,
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strncoll", locale->provider);
 
 	return result;
 }
@@ -2086,7 +2088,8 @@ pg_strxfrm_libc(char *dest, const char *src, size_t destsize,
 		return strxfrm(dest, src, destsize);
 #else
 	/* shouldn't happen */
-	elog(ERROR, "unsupported collprovider: %c", locale->provider);
+	elog(ERROR, "unsupported collprovider (%s): %c",
+		 "pg_strxfrm_libc", locale->provider);
 	return 0;					/* keep compiler quiet */
 #endif
 }
@@ -2282,7 +2285,8 @@ pg_strxfrm_enabled(pg_locale_t locale)
 		return true;
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_enabled", locale->provider);
 
 	return false;				/* keep compiler quiet */
 }
@@ -2314,7 +2318,8 @@ pg_strxfrm(char *dest, const char *src, size_t destsize, pg_locale_t locale)
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm", locale->provider);
 
 	return result;
 }
@@ -2351,7 +2356,8 @@ pg_strnxfrm(char *dest, size_t destsize, const char *src, size_t srclen,
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strnxfrm", locale->provider);
 
 	return result;
 }
@@ -2369,7 +2375,8 @@ pg_strxfrm_prefix_enabled(pg_locale_t locale)
 		return true;
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_prefix_enabled", locale->provider);
 
 	return false;				/* keep compiler quiet */
 }
@@ -2393,17 +2400,15 @@ pg_strxfrm_prefix(char *dest, const char *src, size_t destsize,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
-	if (!locale || locale->provider == COLLPROVIDER_LIBC)
-		elog(ERROR, "collprovider '%c' does not support pg_strxfrm_prefix()",
-			 locale->provider);
+	if (!locale)
+		elog(ERROR, "unsupported collprovider (%s)", "pg_strxfrm_prefix");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
-
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_prefix", locale->provider);
 	return result;
 }
 
@@ -2430,16 +2435,15 @@ pg_strnxfrm_prefix(char *dest, size_t destsize, const char *src,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
-	if (!locale || locale->provider == COLLPROVIDER_LIBC)
-		elog(ERROR, "collprovider '%c' does not support pg_strnxfrm_prefix()",
-			 locale->provider);
+	if (!locale)
+		elog(ERROR, "unsupported collprovider (%s)", "pg_strnxfrm_prefix");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strnxfrm_prefix", locale->provider);
 
 	return result;
 }

Attachment: signature.asc
Description: PGP signature

Reply via email to