From: Tom Lane Date: Wed, 20 Apr 2005 17:14:58 +0000 (+0000) Subject: Fix mis-display of negative fractional seconds in interval values for X-Git-Tag: REL8_0_3~34 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=25bd3019e0e47bf36bb4ac203cf09f315b5dfac2;p=postgresql Fix mis-display of negative fractional seconds in interval values for --enable-integer-datetimes case. Per report from Oliver Siegmar. --- diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 47dc28d132..ae85fcaf30 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.137 2005/01/11 18:33:45 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.137.4.1 2005/04/20 17:14:58 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3883,17 +3883,25 @@ EncodeInterval(struct pg_tm * tm, fsec_t fsec, int style, char *str) /* fractional seconds? */ if (fsec != 0) { + fsec_t sec; + #ifdef HAVE_INT64_TIMESTAMP + sec = fsec; if (is_before || ((!is_nonzero) && (tm->tm_sec < 0))) + { tm->tm_sec = -tm->tm_sec; + sec = -sec; + is_before = TRUE; + } + else if ((!is_nonzero) && (tm->tm_sec == 0) && (fsec < 0)) + { + sec = -sec; + is_before = TRUE; + } sprintf(cp, "%s%d.%02d secs", (is_nonzero ? " " : ""), - tm->tm_sec, (((int) fsec) / 10000)); + tm->tm_sec, (((int) sec) / 10000)); cp += strlen(cp); - if (!is_nonzero) - is_before = (fsec < 0); #else - fsec_t sec; - fsec += tm->tm_sec; sec = fsec; if (is_before || ((!is_nonzero) && (fsec < 0))) @@ -3905,9 +3913,8 @@ EncodeInterval(struct pg_tm * tm, fsec_t fsec, int style, char *str) is_before = (fsec < 0); #endif is_nonzero = TRUE; - - /* otherwise, integer seconds only? */ } + /* otherwise, integer seconds only? */ else if (tm->tm_sec != 0) { int sec = tm->tm_sec;