Revert use singular for -1 (commits 9ee7d533da and 5da9868ed9
authorBruce Momjian
Sat, 1 May 2021 14:42:44 +0000 (10:42 -0400)
committerBruce Momjian
Sat, 1 May 2021 14:42:44 +0000 (10:42 -0400)
Turns out you can specify negative values using plurals:

https://english.stackexchange.com/questions/9735/is-1-followed-by-a-singular-or-plural-noun

so the previous code was correct enough, and consistent with other usage
in our code.  Also add comment in the two places where this could be
confused.

Reported-by: Noah Misch
Diagnosed-by: [email protected]
contrib/dblink/expected/dblink.out
src/backend/utils/adt/datetime.c
src/interfaces/ecpg/pgtypeslib/interval.c
src/interfaces/libpq/fe-print.c
src/test/regress/expected/interval.out

index 33ceaddd89cb579c796f58b3ae4ec453b326df85..6516d4f13133e3be2d88303b63e4cb0340accc86 100644 (file)
@@ -1099,9 +1099,9 @@ SELECT *
 FROM dblink('myconn',
     'SELECT * FROM (VALUES (''-1 2:03:04'')) i')
   AS i(i interval);
-        i         
-------------------
- -1 day -02:03:04
+         i         
+-------------------
+ -1 days -02:03:04
 (1 row)
 
 -- Try swapping to another format to ensure the GUCs are tracked
index 889077f55c558c0d236dd4b036d565de5c54c68b..54ae632de242a1b79bc959c5ca7ff4e481b7fc35 100644 (file)
@@ -4190,7 +4190,7 @@ AddPostgresIntPart(char *cp, int value, const char *units,
            (*is_before && value > 0) ? "+" : "",
            value,
            units,
-           (abs(value) != 1) ? "s" : "");
+           (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, (abs(value) == 1) ? "" : "s");
+   sprintf(cp, " %d %s%s", value, units, (value == 1) ? "" : "s");
    *is_zero = false;
    return cp + strlen(cp);
 }
@@ -4414,6 +4414,7 @@ EncodeInterval(struct pg_tm *tm, fsec_t fsec, int style, char *str)
                else if (is_before)
                    *cp++ = '-';
                cp = AppendSeconds(cp, sec, fsec, MAX_INTERVAL_PRECISION, false);
+               /* We output "ago", not negatives, so use abs(). */
                sprintf(cp, " sec%s",
                        (abs(sec) != 1 || fsec != 0) ? "s" : "");
                is_zero = false;
index 4245016c8e83bf39fa87dd81b3047c47af86c84c..02b3c4722330950574740464a9e0ba10189a00bf 100644 (file)
@@ -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, (abs(value) == 1) ? "" : "s");
+   sprintf(cp, " %d %s%s", value, units, (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,
-           (abs(value) != 1) ? "s" : "");
+           (value != 1) ? "s" : "");
 
    /*
     * Each nonzero field sets is_before for (only) the next one.  This is a
@@ -924,6 +924,7 @@ EncodeInterval(struct /* pg_ */ tm *tm, fsec_t fsec, int style, char *str)
                    *cp++ = '-';
                AppendSeconds(cp, sec, fsec, MAX_INTERVAL_PRECISION, false);
                cp += strlen(cp);
+               /* We output "ago", not negatives, so use abs(). */
                sprintf(cp, " sec%s",
                        (abs(sec) != 1 || fsec != 0) ? "s" : "");
                is_zero = false;
index af19b3c0a3e355d4ee0ecd1ab5b69e3bf1b15ae7..94219b1825bcbcabeee342f99c318aa1bf89210d 100644 (file)
@@ -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),
-                   (abs(PQntuples(res)) == 1) ? "" : "s");
+                   (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),
-               (abs(PQntuples(res)) == 1) ? "" : "s");
+               (PQntuples(res) == 1) ? "" : "s");
 
    fflush(fp);
 
index 0191949137657c1887455997125042642f9e5898..e4b1246f4534977fefa1ff3e26ba14aebeaab44c 100644 (file)
@@ -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 day +02:03:00
 22 hours ago...  
+-------------------
+ -1 days +02:03:00
 (1 row)
 
 SELECT INTERVAL '-1 days +02:03' AS "22 hours ago...";
- 22 hours ago...  
-------------------
- -1 day +02:03:00
 22 hours ago...  
+-------------------
+ -1 days +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 year -12 days +93:36:00
+ -1 years -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 day -04:48:00
+ -1 days -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 day +01:00:00 | 1 year 2 mons -3 days +04:05:06.789 | -1 year -2 mons +3 days -04: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
 (1 row)
 
 -- test output of couple non-standard interval values in the sql style