From: Tom Lane Date: Wed, 20 Apr 2005 17:14:50 +0000 (+0000) Subject: Fix mis-display of negative fractional seconds in interval values for X-Git-Tag: REL9_0_0~10376 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a8ac7d8713b2b60883ff86c8cc44b706fc361bae;p=pg-rex%2Fsyncrep.git 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 0ac92c304b..ee24725bc8 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.138 2005/04/19 03:13:59 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.139 2005/04/20 17:14:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3884,17 +3884,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))) @@ -3906,9 +3914,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;