From 5da9868ed983f95cc1cff80dcd81252a513774f8 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 30 Mar 2021 18:34:27 -0400 Subject: [PATCH] In messages, use singular nouns for -1, like we do for +1. This outputs "-1 year", not "-1 years". Reported-by: neverov.max@gmail.com Bug: 16939 Discussion: https://postgr.es/m/16939-cceeb03fb72736ee@postgresql.org --- src/backend/utils/adt/datetime.c | 4 ++-- src/interfaces/ecpg/pgtypeslib/interval.c | 4 ++-- src/interfaces/libpq/fe-print.c | 4 ++-- src/test/regress/expected/interval.out | 22 +++++++++++----------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 350b0c55eac..889077f55c5 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -4190,7 +4190,7 @@ AddPostgresIntPart(char *cp, int value, const char *units, (*is_before && value > 0) ? "+" : "", value, units, - (value != 1) ? "s" : ""); + (abs(value) != 1) ? "s" : ""); /* * Each nonzero field sets is_before for (only) the next one. This is a @@ -4216,7 +4216,7 @@ AddVerboseIntPart(char *cp, int value, const char *units, } else if (*is_before) value = -value; - sprintf(cp, " %d %s%s", value, units, (value == 1) ? "" : "s"); + sprintf(cp, " %d %s%s", value, units, (abs(value) == 1) ? "" : "s"); *is_zero = false; return cp + strlen(cp); } diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c index 48ba50bbce3..82196dfe80a 100644 --- a/src/interfaces/ecpg/pgtypeslib/interval.c +++ b/src/interfaces/ecpg/pgtypeslib/interval.c @@ -694,7 +694,7 @@ AddVerboseIntPart(char *cp, int value, const char *units, } else if (*is_before) value = -value; - sprintf(cp, " %d %s%s", value, units, (value == 1) ? "" : "s"); + sprintf(cp, " %d %s%s", value, units, (abs(value) == 1) ? "" : "s"); *is_zero = false; return cp + strlen(cp); } @@ -711,7 +711,7 @@ AddPostgresIntPart(char *cp, int value, const char *units, (*is_before && value > 0) ? "+" : "", value, units, - (value != 1) ? "s" : ""); + (abs(value) != 1) ? "s" : ""); /* * Each nonzero field sets is_before for (only) the next one. This is a diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index 94219b1825b..af19b3c0a3e 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -303,7 +303,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po) } if (po->header && !po->html3) fprintf(fout, "(%d row%s)\n\n", PQntuples(res), - (PQntuples(res) == 1) ? "" : "s"); + (abs(PQntuples(res)) == 1) ? "" : "s"); if (po->html3 && !po->expanded) fputs("\n", fout); free(fieldMax); @@ -662,7 +662,7 @@ PQdisplayTuples(const PGresult *res, if (!quiet) fprintf(fp, "\nQuery returned %d row%s.\n", PQntuples(res), - (PQntuples(res) == 1) ? "" : "s"); + (abs(PQntuples(res)) == 1) ? "" : "s"); fflush(fp); diff --git a/src/test/regress/expected/interval.out b/src/test/regress/expected/interval.out index acc353a0dc3..c5ffa9f2cc1 100644 --- a/src/test/regress/expected/interval.out +++ b/src/test/regress/expected/interval.out @@ -23,15 +23,15 @@ SELECT INTERVAL '-08:00' AS "Eight hours"; (1 row) SELECT INTERVAL '-1 +02:03' AS "22 hours ago..."; - 22 hours ago... -------------------- - -1 days +02:03:00 + 22 hours ago... +------------------ + -1 day +02:03:00 (1 row) SELECT INTERVAL '-1 days +02:03' AS "22 hours ago..."; - 22 hours ago... -------------------- - -1 days +02:03:00 + 22 hours ago... +------------------ + -1 day +02:03:00 (1 row) SELECT INTERVAL '1.5 weeks' AS "Ten days twelve hours"; @@ -288,7 +288,7 @@ FROM INTERVAL_MULDIV_TBL; product ------------------------------------ 1 year 12 days 122:24:00 - -1 years -12 days +93:36:00 + -1 year -12 days +93:36:00 -3 days -14:24:00 2 mons 13 days 01:22:28.8 -10 mons +120 days 37:28:21.6567 @@ -317,7 +317,7 @@ FROM INTERVAL_MULDIV_TBL; ---------------------------------- 4 mons 4 days 40:48:00 -4 mons -4 days +31:12:00 - -1 days -04:48:00 + -1 day -04:48:00 25 days -15:32:30.4 -3 mons +30 days 12:29:27.2189 12 days @@ -785,9 +785,9 @@ SELECT interval '+1 -1:00:00', interval '-1 +1:00:00', interval '+1-2 -3 +4:05:06.789', interval '-1-2 +3 -4:05:06.789'; - interval | interval | interval | interval ------------------+-------------------+-------------------------------------+---------------------------------------- - 1 day -01:00:00 | -1 days +01:00:00 | 1 year 2 mons -3 days +04:05:06.789 | -1 years -2 mons +3 days -04:05:06.789 + interval | interval | interval | interval +-----------------+------------------+-------------------------------------+--------------------------------------- + 1 day -01:00:00 | -1 day +01:00:00 | 1 year 2 mons -3 days +04:05:06.789 | -1 year -2 mons +3 days -04:05:06.789 (1 row) -- test output of couple non-standard interval values in the sql style -- 2.30.2