Standardize error reports in unimplemented I/O functions.
authorTom Lane <[email protected]>
Sat, 10 Dec 2022 23:26:43 +0000 (18:26 -0500)
committerTom Lane <[email protected]>
Sat, 10 Dec 2022 23:26:43 +0000 (18:26 -0500)
We chose a specific wording of the not-implemented errors for
pseudotype I/O functions and other cases where there's little
value in implementing input and/or output.  gtsvectorin never
got that memo though, nor did most of contrib.  Make these all
fall in line, mostly because I'm a neatnik but also to remove
unnecessary translatable strings.

gbtreekey_in needs a bit of extra love since it supports
multiple SQL types.  Sadly, gbtreekey_out doesn't have the
ability to do that, but I think it's unreachable anyway.

Noted while surveying datatype input functions to see what we
have left to fix.

contrib/btree_gist/btree_gist.c
contrib/hstore/hstore_gist.c
contrib/intarray/_intbig_gist.c
contrib/ltree/ltree_gist.c
contrib/pg_trgm/trgm_gist.c
src/backend/utils/adt/tsgistidx.c

index e1dc253c96e164570c7fe79bb26500789f58ea1c..92520aedae1c07f0eb2fd3e051c826ae2fce3dfb 100644 (file)
@@ -3,7 +3,7 @@
  */
 #include "postgres.h"
 
-#include "btree_gist.h"
+#include "utils/builtins.h"
 
 PG_MODULE_MAGIC;
 
@@ -19,22 +19,26 @@ PG_FUNCTION_INFO_V1(gbtreekey_out);
 Datum
 gbtreekey_in(PG_FUNCTION_ARGS)
 {
+       Oid                     typioparam = PG_GETARG_OID(1);
+
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("<datatype>key_in() not implemented")));
+                        errmsg("cannot accept a value of type %s",
+                                       format_type_extended(typioparam, -1,
+                                                                                FORMAT_TYPE_ALLOW_INVALID))));
 
-       PG_RETURN_POINTER(NULL);
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
-#include "btree_utils_var.h"
-#include "utils/builtins.h"
 Datum
 gbtreekey_out(PG_FUNCTION_ARGS)
 {
+       /* Sadly, we do not receive any indication of the specific type */
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("<datatype>key_out() not implemented")));
-       PG_RETURN_POINTER(NULL);
+                        errmsg("cannot display a value of type %s", "gbtreekey?")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 
index 39ba92a6bf4115152b8c6fe984e83563f3779553..5d8b806d30a09c553f207e88493466620db7759c 100644 (file)
@@ -96,15 +96,21 @@ PG_FUNCTION_INFO_V1(ghstore_out);
 Datum
 ghstore_in(PG_FUNCTION_ARGS)
 {
-       elog(ERROR, "Not implemented");
-       PG_RETURN_DATUM(0);
+       ereport(ERROR,
+                       (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                        errmsg("cannot accept a value of type %s", "ghstore")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 Datum
 ghstore_out(PG_FUNCTION_ARGS)
 {
-       elog(ERROR, "Not implemented");
-       PG_RETURN_DATUM(0);
+       ereport(ERROR,
+                       (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                        errmsg("cannot display a value of type %s", "ghstore")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 static GISTTYPE *
index 887940ca3586e0f32ad0462607f2e7b4832df94c..dadc18646a8acc916a2ab5944f45dfc8b65177c9 100644 (file)
@@ -32,8 +32,9 @@ _intbig_in(PG_FUNCTION_ARGS)
 {
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("_intbig_in() not implemented")));
-       PG_RETURN_DATUM(0);
+                        errmsg("cannot accept a value of type %s", "intbig_gkey")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 Datum
@@ -41,8 +42,9 @@ _intbig_out(PG_FUNCTION_ARGS)
 {
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("_intbig_out() not implemented")));
-       PG_RETURN_DATUM(0);
+                        errmsg("cannot display a value of type %s", "intbig_gkey")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 static GISTTYPE *
index b582867a938d44f081b7855c21f11b1cadc57ba0..5d2db6c62be845fd9ede6abfe18a867271dabea7 100644 (file)
@@ -23,8 +23,9 @@ ltree_gist_in(PG_FUNCTION_ARGS)
 {
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("ltree_gist_in() not implemented")));
-       PG_RETURN_DATUM(0);
+                        errmsg("cannot accept a value of type %s", "ltree_gist")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 Datum
@@ -32,8 +33,9 @@ ltree_gist_out(PG_FUNCTION_ARGS)
 {
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("ltree_gist_out() not implemented")));
-       PG_RETURN_DATUM(0);
+                        errmsg("cannot display a value of type %s", "ltree_gist")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 ltree_gist *
index 7a7be807af16a4fb4d325d2ba0cac4972e6fe6d3..3d74a1463a6d9ec3095b06964a8ebae203638680 100644 (file)
@@ -55,15 +55,21 @@ PG_FUNCTION_INFO_V1(gtrgm_options);
 Datum
 gtrgm_in(PG_FUNCTION_ARGS)
 {
-       elog(ERROR, "not implemented");
-       PG_RETURN_DATUM(0);
+       ereport(ERROR,
+                       (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                        errmsg("cannot accept a value of type %s", "gtrgm")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 Datum
 gtrgm_out(PG_FUNCTION_ARGS)
 {
-       elog(ERROR, "not implemented");
-       PG_RETURN_DATUM(0);
+       ereport(ERROR,
+                       (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+                        errmsg("cannot display a value of type %s", "gtrgm")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 static TRGM *
index 728b5e9e713040292d68e192f38c973fece1646d..cabfe4d1485b70a15730f014cdb06048d6a9df3c 100644 (file)
@@ -87,10 +87,12 @@ static int32 sizebitvec(BITVECP sign, int siglen);
 Datum
 gtsvectorin(PG_FUNCTION_ARGS)
 {
+       /* There's no need to support input of gtsvectors */
        ereport(ERROR,
                        (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-                        errmsg("gtsvector_in not implemented")));
-       PG_RETURN_DATUM(0);
+                        errmsg("cannot accept a value of type %s", "gtsvector")));
+
+       PG_RETURN_VOID();                       /* keep compiler quiet */
 }
 
 #define SINGOUTSTR     "%d true bits, %d false bits"