Avoid using ambiguous word "non-negative" in error messages.
authorFujii Masao <fujii@postgresql.org>
Tue, 27 Jul 2021 16:20:16 +0000 (01:20 +0900)
committerFujii Masao <fujii@postgresql.org>
Tue, 27 Jul 2021 16:20:16 +0000 (01:20 +0900)
The error messages using the word "non-negative" are confusing
because it's ambiguous about whether it accepts zero or not.
This commit improves those error messages by replacing it with
less ambiguous word like "greater than zero" or
"greater than or equal to zero".

Also this commit added the note about the word "non-negative" to
the error message style guide, to help writing the new error messages.

When postgres_fdw option fetch_size was set to zero, previously
the error message "fetch_size requires a non-negative integer value"
was reported. This error message was outright buggy. Therefore
back-patch to all supported versions where such buggy error message
could be thrown.

Reported-by: Hou Zhijie
Author: Bharath Rupireddy
Reviewed-by: Kyotaro Horiguchi, Fujii Masao
Discussion: https://postgr.es/m/OS0PR01MB5716415335A06B489F1B3A8194569@OS0PR01MB5716.jpnprd01.prod.outlook.com

contrib/postgres_fdw/option.c
doc/src/sgml/sources.sgml
src/backend/partitioning/partbounds.c
src/backend/utils/adt/tsquery_op.c
src/test/modules/test_shm_mq/test.c
src/test/regress/expected/hash_part.out

index 4593cbc540e4ca73a2b50b948ceaf21ff8e78874..c574ca2cf39fa70f4b580de56802bdccbf224e17 100644 (file)
@@ -119,7 +119,10 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
        else if (strcmp(def->defname, "fdw_startup_cost") == 0 ||
                 strcmp(def->defname, "fdw_tuple_cost") == 0)
        {
-           /* these must have a non-negative numeric value */
+           /*
+            * These must have a floating point value greater than or equal to
+            * zero.
+            */
            char       *value;
            double      real_val;
            bool        is_parsed;
@@ -136,7 +139,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
            if (real_val < 0)
                ereport(ERROR,
                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                        errmsg("\"%s\" requires a non-negative floating point value",
+                        errmsg("\"%s\" must be a floating point value greater than or equal to zero",
                                def->defname)));
        }
        else if (strcmp(def->defname, "extensions") == 0)
@@ -163,7 +166,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
            if (int_val <= 0)
                ereport(ERROR,
                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                        errmsg("\"%s\" requires a non-negative integer value",
+                        errmsg("\"%s\" must be an integer value greater than zero",
                                def->defname)));
        }
        else if (strcmp(def->defname, "password_required") == 0)
index 3f2c40b7509167131be60ee292e56e01a6434ae9..e6ae02f2af707e8ad6d776dc306999e4b3e22f7d 100644 (file)
@@ -828,6 +828,16 @@ BETTER: unrecognized node type: 42
    </para>
   </formalpara>
 
+  <formalpara>
+    <title>Non-negative</title>
+   <para>
+    Avoid <quote>non-negative</quote> as it is ambiguous
+    about whether it accepts zero.  It's better to use
+    <quote>greater than zero</quote> or
+    <quote>greater than or equal to zero</quote>.
+   </para>
+  </formalpara>
+
   </simplesect>
 
   <simplesect>
index 12599da9a8a1b7343d34bed5b0a1daaafc01d671..25018b1a8b7d10a0a6ce1c229df44890a59484f5 100644 (file)
@@ -4760,11 +4760,11 @@ satisfies_hash_partition(PG_FUNCTION_ARGS)
    if (modulus <= 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("modulus for hash partition must be a positive integer")));
+                errmsg("modulus for hash partition must be an integer value greater than zero")));
    if (remainder < 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("remainder for hash partition must be a non-negative integer")));
+                errmsg("remainder for hash partition must be an integer value greater than or equal to zero")));
    if (remainder >= modulus)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
index 0575b55272b3f8d9c9440248f122b30a534d958b..8211e6c9bc0ae1f690f8bbd473ad16b8878921a5 100644 (file)
@@ -121,7 +121,7 @@ tsquery_phrase_distance(PG_FUNCTION_ARGS)
    if (distance < 0 || distance > MAXENTRYPOS)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("distance in phrase operator should be non-negative and less than %d",
+                errmsg("distance in phrase operator must be an integer value between zero and %d inclusive",
                        MAXENTRYPOS)));
    if (a->size == 0)
    {
index e5e32abac2dd72ddfc1b0e75814de01789550c7e..2d8d695f97a7a515bd1c380a0b92ca9a32d6b110 100644 (file)
@@ -57,17 +57,17 @@ test_shm_mq(PG_FUNCTION_ARGS)
    if (loop_count < 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("repeat count size must be a non-negative integer")));
+                errmsg("repeat count size must be an integer value greater than or equal to zero")));
 
    /*
     * Since this test sends data using the blocking interfaces, it cannot
     * send data to itself.  Therefore, a minimum of 1 worker is required. Of
     * course, a negative worker count is nonsensical.
     */
-   if (nworkers < 1)
+   if (nworkers <= 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("number of workers must be a positive integer")));
+                errmsg("number of workers must be an integer value greater than zero")));
 
    /* Set up dynamic shared memory segment and background workers. */
    test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh);
@@ -149,7 +149,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
    if (loop_count < 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("repeat count size must be a non-negative integer")));
+                errmsg("repeat count size must be an integer value greater than or equal to zero")));
 
    /*
     * Using the nonblocking interfaces, we can even send data to ourselves,
@@ -158,7 +158,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
    if (nworkers < 0)
        ereport(ERROR,
                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                errmsg("number of workers must be a non-negative integer")));
+                errmsg("number of workers must be an integer value greater than or equal to zero")));
 
    /* Set up dynamic shared memory segment and background workers. */
    test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh);
index b79c2b44c1308bd290c42ef6217ab7c5e0fe1c0c..ac3aabee0286a890c8031d74784e2695a287b616 100644 (file)
@@ -19,10 +19,10 @@ SELECT satisfies_hash_partition('mchash1'::regclass, 4, 0, NULL);
 ERROR:  "mchash1" is not a hash partitioned table
 -- invalid modulus
 SELECT satisfies_hash_partition('mchash'::regclass, 0, 0, NULL);
-ERROR:  modulus for hash partition must be a positive integer
+ERROR:  modulus for hash partition must be an integer value greater than zero
 -- remainder too small
 SELECT satisfies_hash_partition('mchash'::regclass, 1, -1, NULL);
-ERROR:  remainder for hash partition must be a non-negative integer
+ERROR:  remainder for hash partition must be an integer value greater than or equal to zero
 -- remainder too large
 SELECT satisfies_hash_partition('mchash'::regclass, 1, 1, NULL);
 ERROR:  remainder for hash partition must be less than modulus