]> granicus.if.org Git - postgresql/commitdiff
Fix bug in extract/date_part for milliseconds/miscroseconds and
authorTatsuo Ishii <ishii@postgresql.org>
Mon, 4 Mar 2002 03:55:50 +0000 (03:55 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Mon, 4 Mar 2002 03:55:50 +0000 (03:55 +0000)
timestamp/timestamptz combo. Now extract/date_part returns
seconds*1000 or 1000000 + fraction part as the manual stats.
regression test are also fixed.

See the thread in pgsql-hackers:

Subject: Re: [HACKERS] timestamp_part() bug?
Date: Sat, 02 Mar 2002 11:29:53 +0900

src/backend/utils/adt/timestamp.c
src/test/regress/expected/timestamp.out
src/test/regress/expected/timestamptz.out

index 5c2de69cb29f46f6a2a1983477bda123b7133d0a..cff48d925e99bfeda561c124225fbdaf45a30725 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.62 2002/01/12 04:38:27 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.63 2002/03/04 03:55:46 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2410,11 +2410,11 @@ timestamp_part(PG_FUNCTION_ARGS)
                switch (val)
                {
                        case DTK_MICROSEC:
-                               result = (fsec * 1000000);
+                               result = (tm->tm_sec + fsec) * 1000000;
                                break;
 
                        case DTK_MILLISEC:
-                               result = (fsec * 1000);
+                               result = (tm->tm_sec + fsec) * 1000;
                                break;
 
                        case DTK_SECOND:
@@ -2574,11 +2574,11 @@ timestamptz_part(PG_FUNCTION_ARGS)
                                break;
 
                        case DTK_MICROSEC:
-                               result = (fsec * 1000000);
+                               result = (tm->tm_sec + fsec) * 1000000;
                                break;
 
                        case DTK_MILLISEC:
-                               result = (fsec * 1000);
+                               result = (tm->tm_sec + fsec) * 1000;
                                break;
 
                        case DTK_SECOND:
index 0432cc99d9497899aa28bb9a4a77cf9dc5252cc6..ad2f1d7ec9766ab49d5d33d16371925fedc394f2 100644 (file)
@@ -627,62 +627,62 @@ SELECT '' AS "54", d1 as "timestamp",
    date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
    date_part( 'usec', d1) AS usec
    FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
- 54 |          timestamp          | quarter | msec |  usec  
-----+-----------------------------+---------+------+--------
-    | Thu Jan 01 00:00:00 1970    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:02 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01.40 1997 |       1 |  400 | 400000
-    | Mon Feb 10 17:32:01.50 1997 |       1 |  500 | 500000
-    | Mon Feb 10 17:32:01.60 1997 |       1 |  600 | 600000
-    | Thu Jan 02 00:00:00 1997    |       1 |    0 |      0
-    | Thu Jan 02 03:04:05 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Tue Jun 10 17:32:01 1997    |       2 |    0 |      0
-    | Sat Sep 22 18:19:20 2001    |       3 |    0 |      0
-    | Wed Mar 15 08:14:01 2000    |       1 |    0 |      0
-    | Wed Mar 15 13:14:02 2000    |       1 |    0 |      0
-    | Wed Mar 15 12:14:03 2000    |       1 |    0 |      0
-    | Wed Mar 15 03:14:04 2000    |       1 |    0 |      0
-    | Wed Mar 15 02:14:05 2000    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:00 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Tue Jun 10 18:32:01 1997    |       2 |    0 |      0
-    | Mon Feb 10 17:32:01 1997    |       1 |    0 |      0
-    | Tue Feb 11 17:32:01 1997    |       1 |    0 |      0
-    | Wed Feb 12 17:32:01 1997    |       1 |    0 |      0
-    | Thu Feb 13 17:32:01 1997    |       1 |    0 |      0
-    | Fri Feb 14 17:32:01 1997    |       1 |    0 |      0
-    | Sat Feb 15 17:32:01 1997    |       1 |    0 |      0
-    | Sun Feb 16 17:32:01 1997    |       1 |    0 |      0
-    | Sun Feb 16 17:32:01 1997    |       1 |    0 |      0
-    | Wed Feb 28 17:32:01 1996    |       1 |    0 |      0
-    | Thu Feb 29 17:32:01 1996    |       1 |    0 |      0
-    | Fri Mar 01 17:32:01 1996    |       1 |    0 |      0
-    | Mon Dec 30 17:32:01 1996    |       4 |    0 |      0
-    | Tue Dec 31 17:32:01 1996    |       4 |    0 |      0
-    | Wed Jan 01 17:32:01 1997    |       1 |    0 |      0
-    | Fri Feb 28 17:32:01 1997    |       1 |    0 |      0
-    | Sat Mar 01 17:32:01 1997    |       1 |    0 |      0
-    | Tue Dec 30 17:32:01 1997    |       4 |    0 |      0
-    | Wed Dec 31 17:32:01 1997    |       4 |    0 |      0
-    | Fri Dec 31 17:32:01 1999    |       4 |    0 |      0
-    | Sat Jan 01 17:32:01 2000    |       1 |    0 |      0
-    | Sun Dec 31 17:32:01 2000    |       4 |    0 |      0
-    | Mon Jan 01 17:32:01 2001    |       1 |    0 |      0
+ 54 |          timestamp          | quarter | msec  |   usec   
+----+-----------------------------+---------+-------+----------
+    | Thu Jan 01 00:00:00 1970    |       1 |     0 |        0
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:02 1997    |       1 |  2000 |  2000000
+    | Mon Feb 10 17:32:01.40 1997 |       1 |  1400 |  1400000
+    | Mon Feb 10 17:32:01.50 1997 |       1 |  1500 |  1500000
+    | Mon Feb 10 17:32:01.60 1997 |       1 |  1600 |  1600000
+    | Thu Jan 02 00:00:00 1997    |       1 |     0 |        0
+    | Thu Jan 02 03:04:05 1997    |       1 |  5000 |  5000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Tue Jun 10 17:32:01 1997    |       2 |  1000 |  1000000
+    | Sat Sep 22 18:19:20 2001    |       3 | 20000 | 20000000
+    | Wed Mar 15 08:14:01 2000    |       1 |  1000 |  1000000
+    | Wed Mar 15 13:14:02 2000    |       1 |  2000 |  2000000
+    | Wed Mar 15 12:14:03 2000    |       1 |  3000 |  3000000
+    | Wed Mar 15 03:14:04 2000    |       1 |  4000 |  4000000
+    | Wed Mar 15 02:14:05 2000    |       1 |  5000 |  5000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:00 1997    |       1 |     0 |        0
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Tue Jun 10 18:32:01 1997    |       2 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997    |       1 |  1000 |  1000000
+    | Tue Feb 11 17:32:01 1997    |       1 |  1000 |  1000000
+    | Wed Feb 12 17:32:01 1997    |       1 |  1000 |  1000000
+    | Thu Feb 13 17:32:01 1997    |       1 |  1000 |  1000000
+    | Fri Feb 14 17:32:01 1997    |       1 |  1000 |  1000000
+    | Sat Feb 15 17:32:01 1997    |       1 |  1000 |  1000000
+    | Sun Feb 16 17:32:01 1997    |       1 |  1000 |  1000000
+    | Sun Feb 16 17:32:01 1997    |       1 |  1000 |  1000000
+    | Wed Feb 28 17:32:01 1996    |       1 |  1000 |  1000000
+    | Thu Feb 29 17:32:01 1996    |       1 |  1000 |  1000000
+    | Fri Mar 01 17:32:01 1996    |       1 |  1000 |  1000000
+    | Mon Dec 30 17:32:01 1996    |       4 |  1000 |  1000000
+    | Tue Dec 31 17:32:01 1996    |       4 |  1000 |  1000000
+    | Wed Jan 01 17:32:01 1997    |       1 |  1000 |  1000000
+    | Fri Feb 28 17:32:01 1997    |       1 |  1000 |  1000000
+    | Sat Mar 01 17:32:01 1997    |       1 |  1000 |  1000000
+    | Tue Dec 30 17:32:01 1997    |       4 |  1000 |  1000000
+    | Wed Dec 31 17:32:01 1997    |       4 |  1000 |  1000000
+    | Fri Dec 31 17:32:01 1999    |       4 |  1000 |  1000000
+    | Sat Jan 01 17:32:01 2000    |       1 |  1000 |  1000000
+    | Sun Dec 31 17:32:01 2000    |       4 |  1000 |  1000000
+    | Mon Jan 01 17:32:01 2001    |       1 |  1000 |  1000000
 (54 rows)
 
 -- TO_CHAR()
index 4d0caff9a72507355d09068427c5da0d2e107f6a..1741add0ac0d45a304b12c246b5f3cdf0ce0f61d 100644 (file)
@@ -621,62 +621,62 @@ SELECT '' AS "54", d1 as timestamptz,
    date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
    date_part( 'usec', d1) AS usec
    FROM TIMESTAMPTZ_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
- 54 |           timestamptz           | quarter | msec |  usec  
-----+---------------------------------+---------+------+--------
-    | Wed Dec 31 16:00:00 1969 PST    |       4 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:02 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01.40 1997 PST |       1 |  400 | 400000
-    | Mon Feb 10 17:32:01.50 1997 PST |       1 |  500 | 500000
-    | Mon Feb 10 17:32:01.60 1997 PST |       1 |  600 | 600000
-    | Thu Jan 02 00:00:00 1997 PST    |       1 |    0 |      0
-    | Thu Jan 02 03:04:05 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Tue Jun 10 17:32:01 1997 PDT    |       2 |    0 |      0
-    | Sat Sep 22 18:19:20 2001 PDT    |       3 |    0 |      0
-    | Wed Mar 15 08:14:01 2000 PST    |       1 |    0 |      0
-    | Wed Mar 15 04:14:02 2000 PST    |       1 |    0 |      0
-    | Wed Mar 15 02:14:03 2000 PST    |       1 |    0 |      0
-    | Wed Mar 15 03:14:04 2000 PST    |       1 |    0 |      0
-    | Wed Mar 15 01:14:05 2000 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:00 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 09:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 09:32:01 1997 PST    |       1 |    0 |      0
-    | Mon Feb 10 09:32:01 1997 PST    |       1 |    0 |      0
-    | Tue Jun 10 18:32:01 1997 PDT    |       2 |    0 |      0
-    | Mon Feb 10 17:32:01 1997 PST    |       1 |    0 |      0
-    | Tue Feb 11 17:32:01 1997 PST    |       1 |    0 |      0
-    | Wed Feb 12 17:32:01 1997 PST    |       1 |    0 |      0
-    | Thu Feb 13 17:32:01 1997 PST    |       1 |    0 |      0
-    | Fri Feb 14 17:32:01 1997 PST    |       1 |    0 |      0
-    | Sat Feb 15 17:32:01 1997 PST    |       1 |    0 |      0
-    | Sun Feb 16 17:32:01 1997 PST    |       1 |    0 |      0
-    | Sun Feb 16 17:32:01 1997 PST    |       1 |    0 |      0
-    | Wed Feb 28 17:32:01 1996 PST    |       1 |    0 |      0
-    | Thu Feb 29 17:32:01 1996 PST    |       1 |    0 |      0
-    | Fri Mar 01 17:32:01 1996 PST    |       1 |    0 |      0
-    | Mon Dec 30 17:32:01 1996 PST    |       4 |    0 |      0
-    | Tue Dec 31 17:32:01 1996 PST    |       4 |    0 |      0
-    | Wed Jan 01 17:32:01 1997 PST    |       1 |    0 |      0
-    | Fri Feb 28 17:32:01 1997 PST    |       1 |    0 |      0
-    | Sat Mar 01 17:32:01 1997 PST    |       1 |    0 |      0
-    | Tue Dec 30 17:32:01 1997 PST    |       4 |    0 |      0
-    | Wed Dec 31 17:32:01 1997 PST    |       4 |    0 |      0
-    | Fri Dec 31 17:32:01 1999 PST    |       4 |    0 |      0
-    | Sat Jan 01 17:32:01 2000 PST    |       1 |    0 |      0
-    | Sun Dec 31 17:32:01 2000 PST    |       4 |    0 |      0
-    | Mon Jan 01 17:32:01 2001 PST    |       1 |    0 |      0
+ 54 |           timestamptz           | quarter | msec  |   usec   
+----+---------------------------------+---------+-------+----------
+    | Wed Dec 31 16:00:00 1969 PST    |       4 |     0 |        0
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:02 1997 PST    |       1 |  2000 |  2000000
+    | Mon Feb 10 17:32:01.40 1997 PST |       1 |  1400 |  1400000
+    | Mon Feb 10 17:32:01.50 1997 PST |       1 |  1500 |  1500000
+    | Mon Feb 10 17:32:01.60 1997 PST |       1 |  1600 |  1600000
+    | Thu Jan 02 00:00:00 1997 PST    |       1 |     0 |        0
+    | Thu Jan 02 03:04:05 1997 PST    |       1 |  5000 |  5000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Tue Jun 10 17:32:01 1997 PDT    |       2 |  1000 |  1000000
+    | Sat Sep 22 18:19:20 2001 PDT    |       3 | 20000 | 20000000
+    | Wed Mar 15 08:14:01 2000 PST    |       1 |  1000 |  1000000
+    | Wed Mar 15 04:14:02 2000 PST    |       1 |  2000 |  2000000
+    | Wed Mar 15 02:14:03 2000 PST    |       1 |  3000 |  3000000
+    | Wed Mar 15 03:14:04 2000 PST    |       1 |  4000 |  4000000
+    | Wed Mar 15 01:14:05 2000 PST    |       1 |  5000 |  5000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:00 1997 PST    |       1 |     0 |        0
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 09:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 09:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Mon Feb 10 09:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Tue Jun 10 18:32:01 1997 PDT    |       2 |  1000 |  1000000
+    | Mon Feb 10 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Tue Feb 11 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Wed Feb 12 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Thu Feb 13 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Fri Feb 14 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Sat Feb 15 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Sun Feb 16 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Sun Feb 16 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Wed Feb 28 17:32:01 1996 PST    |       1 |  1000 |  1000000
+    | Thu Feb 29 17:32:01 1996 PST    |       1 |  1000 |  1000000
+    | Fri Mar 01 17:32:01 1996 PST    |       1 |  1000 |  1000000
+    | Mon Dec 30 17:32:01 1996 PST    |       4 |  1000 |  1000000
+    | Tue Dec 31 17:32:01 1996 PST    |       4 |  1000 |  1000000
+    | Wed Jan 01 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Fri Feb 28 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Sat Mar 01 17:32:01 1997 PST    |       1 |  1000 |  1000000
+    | Tue Dec 30 17:32:01 1997 PST    |       4 |  1000 |  1000000
+    | Wed Dec 31 17:32:01 1997 PST    |       4 |  1000 |  1000000
+    | Fri Dec 31 17:32:01 1999 PST    |       4 |  1000 |  1000000
+    | Sat Jan 01 17:32:01 2000 PST    |       1 |  1000 |  1000000
+    | Sun Dec 31 17:32:01 2000 PST    |       4 |  1000 |  1000000
+    | Mon Jan 01 17:32:01 2001 PST    |       1 |  1000 |  1000000
 (54 rows)
 
 -- TO_CHAR()