Fix integral timestamps so the output is consistent in all cases to
authorBruce Momjian <bruce@momjian.us>
Wed, 24 Sep 2008 19:46:44 +0000 (19:46 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 24 Sep 2008 19:46:44 +0000 (19:46 +0000)
round:

select interval '0:0:0.7', interval '@ 0.70 secs', interval '0.7
seconds';

Ron Mayer

src/backend/utils/adt/datetime.c

index 9640684cb10762d607a36d0ae5a028194a02561a..21043311cef0773905ef051f77cffaffbf664e5b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.193 2008/09/16 22:31:21 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.194 2008/09/24 19:46:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2888,7 +2888,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                {
                    case DTK_MICROSEC:
 #ifdef HAVE_INT64_TIMESTAMP
-                       *fsec += val + fval;
+                       *fsec += rint(val + fval);
 #else
                        *fsec += (val + fval) * 1e-6;
 #endif
@@ -2897,7 +2897,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 
                    case DTK_MILLISEC:
 #ifdef HAVE_INT64_TIMESTAMP
-                       *fsec += (val + fval) * 1000;
+                       *fsec += rint((val + fval) * 1000);
 #else
                        *fsec += (val + fval) * 1e-3;
 #endif
@@ -2907,7 +2907,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                    case DTK_SECOND:
                        tm->tm_sec += val;
 #ifdef HAVE_INT64_TIMESTAMP
-                       *fsec += fval * 1000000;
+                       *fsec += rint(fval * 1000000);
 #else
                        *fsec += fval;
 #endif
@@ -2932,7 +2932,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                            sec = fval;
                            tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
-                           *fsec += (fval - sec) * 1000000;
+                           *fsec += rint((fval - sec) * 1000000);
 #else
                            *fsec += fval - sec;
 #endif
@@ -2950,7 +2950,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                            sec = fval;
                            tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
-                           *fsec += (fval - sec) * 1000000;
+                           *fsec += rint((fval - sec) * 1000000);
 #else
                            *fsec += fval - sec;
 #endif
@@ -2969,7 +2969,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                            sec = fval;
                            tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
-                           *fsec += (fval - sec) * 1000000;
+                           *fsec += rint((fval - sec) * 1000000);
 #else
                            *fsec += fval - sec;
 #endif
@@ -2995,7 +2995,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                                sec = fval;
                                tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
-                               *fsec += (fval - sec) * 1000000;
+                               *fsec += rint((fval - sec) * 1000000);
 #else
                                *fsec += fval - sec;
 #endif
@@ -3022,7 +3022,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
                                sec = fval;
                                tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
-                               *fsec += (fval - sec) * 1000000;
+                               *fsec += rint((fval - sec) * 1000000);
 #else
                                *fsec += fval - sec;
 #endif