Commit fd90f6ba authored by Fujii Masao's avatar Fujii Masao

Avoid using ambiguous word "non-negative" in error messages.

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
parent 5a353a2d
...@@ -119,7 +119,10 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) ...@@ -119,7 +119,10 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
else if (strcmp(def->defname, "fdw_startup_cost") == 0 || else if (strcmp(def->defname, "fdw_startup_cost") == 0 ||
strcmp(def->defname, "fdw_tuple_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; char *value;
double real_val; double real_val;
bool is_parsed; bool is_parsed;
...@@ -136,7 +139,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) ...@@ -136,7 +139,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
if (real_val < 0) if (real_val < 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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))); def->defname)));
} }
else if (strcmp(def->defname, "extensions") == 0) else if (strcmp(def->defname, "extensions") == 0)
...@@ -163,7 +166,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS) ...@@ -163,7 +166,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
if (int_val <= 0) if (int_val <= 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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))); def->defname)));
} }
else if (strcmp(def->defname, "password_required") == 0) else if (strcmp(def->defname, "password_required") == 0)
......
...@@ -828,6 +828,16 @@ BETTER: unrecognized node type: 42 ...@@ -828,6 +828,16 @@ BETTER: unrecognized node type: 42
</para> </para>
</formalpara> </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>
<simplesect> <simplesect>
......
...@@ -4708,11 +4708,11 @@ satisfies_hash_partition(PG_FUNCTION_ARGS) ...@@ -4708,11 +4708,11 @@ satisfies_hash_partition(PG_FUNCTION_ARGS)
if (modulus <= 0) if (modulus <= 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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) if (remainder < 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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) if (remainder >= modulus)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
......
...@@ -121,7 +121,7 @@ tsquery_phrase_distance(PG_FUNCTION_ARGS) ...@@ -121,7 +121,7 @@ tsquery_phrase_distance(PG_FUNCTION_ARGS)
if (distance < 0 || distance > MAXENTRYPOS) if (distance < 0 || distance > MAXENTRYPOS)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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))); MAXENTRYPOS)));
if (a->size == 0) if (a->size == 0)
{ {
......
...@@ -57,17 +57,17 @@ test_shm_mq(PG_FUNCTION_ARGS) ...@@ -57,17 +57,17 @@ test_shm_mq(PG_FUNCTION_ARGS)
if (loop_count < 0) if (loop_count < 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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 * Since this test sends data using the blocking interfaces, it cannot
* send data to itself. Therefore, a minimum of 1 worker is required. Of * send data to itself. Therefore, a minimum of 1 worker is required. Of
* course, a negative worker count is nonsensical. * course, a negative worker count is nonsensical.
*/ */
if (nworkers < 1) if (nworkers <= 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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. */ /* Set up dynamic shared memory segment and background workers. */
test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh); test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh);
...@@ -149,7 +149,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS) ...@@ -149,7 +149,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
if (loop_count < 0) if (loop_count < 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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, * Using the nonblocking interfaces, we can even send data to ourselves,
...@@ -158,7 +158,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS) ...@@ -158,7 +158,7 @@ test_shm_mq_pipelined(PG_FUNCTION_ARGS)
if (nworkers < 0) if (nworkers < 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (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. */ /* Set up dynamic shared memory segment and background workers. */
test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh); test_shm_mq_setup(queue_size, nworkers, &seg, &outqh, &inqh);
......
...@@ -19,10 +19,10 @@ SELECT satisfies_hash_partition('mchash1'::regclass, 4, 0, NULL); ...@@ -19,10 +19,10 @@ SELECT satisfies_hash_partition('mchash1'::regclass, 4, 0, NULL);
ERROR: "mchash1" is not a hash partitioned table ERROR: "mchash1" is not a hash partitioned table
-- invalid modulus -- invalid modulus
SELECT satisfies_hash_partition('mchash'::regclass, 0, 0, NULL); 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 -- remainder too small
SELECT satisfies_hash_partition('mchash'::regclass, 1, -1, NULL); 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 -- remainder too large
SELECT satisfies_hash_partition('mchash'::regclass, 1, 1, NULL); SELECT satisfies_hash_partition('mchash'::regclass, 1, 1, NULL);
ERROR: remainder for hash partition must be less than modulus ERROR: remainder for hash partition must be less than modulus
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment