Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3382fbb

Browse files
committed
Fix bug in extract/date_part for milliseconds/miscroseconds and
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
1 parent a616cbc commit 3382fbb

File tree

3 files changed

+117
-117
lines changed

3 files changed

+117
-117
lines changed

src/backend/utils/adt/timestamp.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.62 2002/01/12 04:38:27 thomas Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.63 2002/03/04 03:55:46 ishii Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -2410,11 +2410,11 @@ timestamp_part(PG_FUNCTION_ARGS)
24102410
switch (val)
24112411
{
24122412
case DTK_MICROSEC:
2413-
result = (fsec * 1000000);
2413+
result = (tm->tm_sec + fsec) * 1000000;
24142414
break;
24152415

24162416
case DTK_MILLISEC:
2417-
result = (fsec * 1000);
2417+
result = (tm->tm_sec + fsec) * 1000;
24182418
break;
24192419

24202420
case DTK_SECOND:
@@ -2574,11 +2574,11 @@ timestamptz_part(PG_FUNCTION_ARGS)
25742574
break;
25752575

25762576
case DTK_MICROSEC:
2577-
result = (fsec * 1000000);
2577+
result = (tm->tm_sec + fsec) * 1000000;
25782578
break;
25792579

25802580
case DTK_MILLISEC:
2581-
result = (fsec * 1000);
2581+
result = (tm->tm_sec + fsec) * 1000;
25822582
break;
25832583

25842584
case DTK_SECOND:

src/test/regress/expected/timestamp.out

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -627,62 +627,62 @@ SELECT '' AS "54", d1 as "timestamp",
627627
date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
628628
date_part( 'usec', d1) AS usec
629629
FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
630-
54 | timestamp | quarter | msec | usec
631-
----+-----------------------------+---------+------+--------
632-
| Thu Jan 01 00:00:00 1970 | 1 | 0 | 0
633-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
634-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
635-
| Mon Feb 10 17:32:02 1997 | 1 | 0 | 0
636-
| Mon Feb 10 17:32:01.40 1997 | 1 | 400 | 400000
637-
| Mon Feb 10 17:32:01.50 1997 | 1 | 500 | 500000
638-
| Mon Feb 10 17:32:01.60 1997 | 1 | 600 | 600000
639-
| Thu Jan 02 00:00:00 1997 | 1 | 0 | 0
640-
| Thu Jan 02 03:04:05 1997 | 1 | 0 | 0
641-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
642-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
643-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
644-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
645-
| Tue Jun 10 17:32:01 1997 | 2 | 0 | 0
646-
| Sat Sep 22 18:19:20 2001 | 3 | 0 | 0
647-
| Wed Mar 15 08:14:01 2000 | 1 | 0 | 0
648-
| Wed Mar 15 13:14:02 2000 | 1 | 0 | 0
649-
| Wed Mar 15 12:14:03 2000 | 1 | 0 | 0
650-
| Wed Mar 15 03:14:04 2000 | 1 | 0 | 0
651-
| Wed Mar 15 02:14:05 2000 | 1 | 0 | 0
652-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
653-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
654-
| Mon Feb 10 17:32:00 1997 | 1 | 0 | 0
655-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
656-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
657-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
658-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
659-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
660-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
661-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
662-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
663-
| Tue Jun 10 18:32:01 1997 | 2 | 0 | 0
664-
| Mon Feb 10 17:32:01 1997 | 1 | 0 | 0
665-
| Tue Feb 11 17:32:01 1997 | 1 | 0 | 0
666-
| Wed Feb 12 17:32:01 1997 | 1 | 0 | 0
667-
| Thu Feb 13 17:32:01 1997 | 1 | 0 | 0
668-
| Fri Feb 14 17:32:01 1997 | 1 | 0 | 0
669-
| Sat Feb 15 17:32:01 1997 | 1 | 0 | 0
670-
| Sun Feb 16 17:32:01 1997 | 1 | 0 | 0
671-
| Sun Feb 16 17:32:01 1997 | 1 | 0 | 0
672-
| Wed Feb 28 17:32:01 1996 | 1 | 0 | 0
673-
| Thu Feb 29 17:32:01 1996 | 1 | 0 | 0
674-
| Fri Mar 01 17:32:01 1996 | 1 | 0 | 0
675-
| Mon Dec 30 17:32:01 1996 | 4 | 0 | 0
676-
| Tue Dec 31 17:32:01 1996 | 4 | 0 | 0
677-
| Wed Jan 01 17:32:01 1997 | 1 | 0 | 0
678-
| Fri Feb 28 17:32:01 1997 | 1 | 0 | 0
679-
| Sat Mar 01 17:32:01 1997 | 1 | 0 | 0
680-
| Tue Dec 30 17:32:01 1997 | 4 | 0 | 0
681-
| Wed Dec 31 17:32:01 1997 | 4 | 0 | 0
682-
| Fri Dec 31 17:32:01 1999 | 4 | 0 | 0
683-
| Sat Jan 01 17:32:01 2000 | 1 | 0 | 0
684-
| Sun Dec 31 17:32:01 2000 | 4 | 0 | 0
685-
| Mon Jan 01 17:32:01 2001 | 1 | 0 | 0
630+
54 | timestamp | quarter | msec | usec
631+
----+-----------------------------+---------+-------+----------
632+
| Thu Jan 01 00:00:00 1970 | 1 | 0 | 0
633+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
634+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
635+
| Mon Feb 10 17:32:02 1997 | 1 | 2000 | 2000000
636+
| Mon Feb 10 17:32:01.40 1997 | 1 | 1400 | 1400000
637+
| Mon Feb 10 17:32:01.50 1997 | 1 | 1500 | 1500000
638+
| Mon Feb 10 17:32:01.60 1997 | 1 | 1600 | 1600000
639+
| Thu Jan 02 00:00:00 1997 | 1 | 0 | 0
640+
| Thu Jan 02 03:04:05 1997 | 1 | 5000 | 5000000
641+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
642+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
643+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
644+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
645+
| Tue Jun 10 17:32:01 1997 | 2 | 1000 | 1000000
646+
| Sat Sep 22 18:19:20 2001 | 3 | 20000 | 20000000
647+
| Wed Mar 15 08:14:01 2000 | 1 | 1000 | 1000000
648+
| Wed Mar 15 13:14:02 2000 | 1 | 2000 | 2000000
649+
| Wed Mar 15 12:14:03 2000 | 1 | 3000 | 3000000
650+
| Wed Mar 15 03:14:04 2000 | 1 | 4000 | 4000000
651+
| Wed Mar 15 02:14:05 2000 | 1 | 5000 | 5000000
652+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
653+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
654+
| Mon Feb 10 17:32:00 1997 | 1 | 0 | 0
655+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
656+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
657+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
658+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
659+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
660+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
661+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
662+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
663+
| Tue Jun 10 18:32:01 1997 | 2 | 1000 | 1000000
664+
| Mon Feb 10 17:32:01 1997 | 1 | 1000 | 1000000
665+
| Tue Feb 11 17:32:01 1997 | 1 | 1000 | 1000000
666+
| Wed Feb 12 17:32:01 1997 | 1 | 1000 | 1000000
667+
| Thu Feb 13 17:32:01 1997 | 1 | 1000 | 1000000
668+
| Fri Feb 14 17:32:01 1997 | 1 | 1000 | 1000000
669+
| Sat Feb 15 17:32:01 1997 | 1 | 1000 | 1000000
670+
| Sun Feb 16 17:32:01 1997 | 1 | 1000 | 1000000
671+
| Sun Feb 16 17:32:01 1997 | 1 | 1000 | 1000000
672+
| Wed Feb 28 17:32:01 1996 | 1 | 1000 | 1000000
673+
| Thu Feb 29 17:32:01 1996 | 1 | 1000 | 1000000
674+
| Fri Mar 01 17:32:01 1996 | 1 | 1000 | 1000000
675+
| Mon Dec 30 17:32:01 1996 | 4 | 1000 | 1000000
676+
| Tue Dec 31 17:32:01 1996 | 4 | 1000 | 1000000
677+
| Wed Jan 01 17:32:01 1997 | 1 | 1000 | 1000000
678+
| Fri Feb 28 17:32:01 1997 | 1 | 1000 | 1000000
679+
| Sat Mar 01 17:32:01 1997 | 1 | 1000 | 1000000
680+
| Tue Dec 30 17:32:01 1997 | 4 | 1000 | 1000000
681+
| Wed Dec 31 17:32:01 1997 | 4 | 1000 | 1000000
682+
| Fri Dec 31 17:32:01 1999 | 4 | 1000 | 1000000
683+
| Sat Jan 01 17:32:01 2000 | 1 | 1000 | 1000000
684+
| Sun Dec 31 17:32:01 2000 | 4 | 1000 | 1000000
685+
| Mon Jan 01 17:32:01 2001 | 1 | 1000 | 1000000
686686
(54 rows)
687687

688688
-- TO_CHAR()

src/test/regress/expected/timestamptz.out

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -621,62 +621,62 @@ SELECT '' AS "54", d1 as timestamptz,
621621
date_part( 'quarter', d1) AS quarter, date_part( 'msec', d1) AS msec,
622622
date_part( 'usec', d1) AS usec
623623
FROM TIMESTAMPTZ_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01';
624-
54 | timestamptz | quarter | msec | usec
625-
----+---------------------------------+---------+------+--------
626-
| Wed Dec 31 16:00:00 1969 PST | 4 | 0 | 0
627-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
628-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
629-
| Mon Feb 10 17:32:02 1997 PST | 1 | 0 | 0
630-
| Mon Feb 10 17:32:01.40 1997 PST | 1 | 400 | 400000
631-
| Mon Feb 10 17:32:01.50 1997 PST | 1 | 500 | 500000
632-
| Mon Feb 10 17:32:01.60 1997 PST | 1 | 600 | 600000
633-
| Thu Jan 02 00:00:00 1997 PST | 1 | 0 | 0
634-
| Thu Jan 02 03:04:05 1997 PST | 1 | 0 | 0
635-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
636-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
637-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
638-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
639-
| Tue Jun 10 17:32:01 1997 PDT | 2 | 0 | 0
640-
| Sat Sep 22 18:19:20 2001 PDT | 3 | 0 | 0
641-
| Wed Mar 15 08:14:01 2000 PST | 1 | 0 | 0
642-
| Wed Mar 15 04:14:02 2000 PST | 1 | 0 | 0
643-
| Wed Mar 15 02:14:03 2000 PST | 1 | 0 | 0
644-
| Wed Mar 15 03:14:04 2000 PST | 1 | 0 | 0
645-
| Wed Mar 15 01:14:05 2000 PST | 1 | 0 | 0
646-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
647-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
648-
| Mon Feb 10 17:32:00 1997 PST | 1 | 0 | 0
649-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
650-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
651-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
652-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
653-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
654-
| Mon Feb 10 09:32:01 1997 PST | 1 | 0 | 0
655-
| Mon Feb 10 09:32:01 1997 PST | 1 | 0 | 0
656-
| Mon Feb 10 09:32:01 1997 PST | 1 | 0 | 0
657-
| Tue Jun 10 18:32:01 1997 PDT | 2 | 0 | 0
658-
| Mon Feb 10 17:32:01 1997 PST | 1 | 0 | 0
659-
| Tue Feb 11 17:32:01 1997 PST | 1 | 0 | 0
660-
| Wed Feb 12 17:32:01 1997 PST | 1 | 0 | 0
661-
| Thu Feb 13 17:32:01 1997 PST | 1 | 0 | 0
662-
| Fri Feb 14 17:32:01 1997 PST | 1 | 0 | 0
663-
| Sat Feb 15 17:32:01 1997 PST | 1 | 0 | 0
664-
| Sun Feb 16 17:32:01 1997 PST | 1 | 0 | 0
665-
| Sun Feb 16 17:32:01 1997 PST | 1 | 0 | 0
666-
| Wed Feb 28 17:32:01 1996 PST | 1 | 0 | 0
667-
| Thu Feb 29 17:32:01 1996 PST | 1 | 0 | 0
668-
| Fri Mar 01 17:32:01 1996 PST | 1 | 0 | 0
669-
| Mon Dec 30 17:32:01 1996 PST | 4 | 0 | 0
670-
| Tue Dec 31 17:32:01 1996 PST | 4 | 0 | 0
671-
| Wed Jan 01 17:32:01 1997 PST | 1 | 0 | 0
672-
| Fri Feb 28 17:32:01 1997 PST | 1 | 0 | 0
673-
| Sat Mar 01 17:32:01 1997 PST | 1 | 0 | 0
674-
| Tue Dec 30 17:32:01 1997 PST | 4 | 0 | 0
675-
| Wed Dec 31 17:32:01 1997 PST | 4 | 0 | 0
676-
| Fri Dec 31 17:32:01 1999 PST | 4 | 0 | 0
677-
| Sat Jan 01 17:32:01 2000 PST | 1 | 0 | 0
678-
| Sun Dec 31 17:32:01 2000 PST | 4 | 0 | 0
679-
| Mon Jan 01 17:32:01 2001 PST | 1 | 0 | 0
624+
54 | timestamptz | quarter | msec | usec
625+
----+---------------------------------+---------+-------+----------
626+
| Wed Dec 31 16:00:00 1969 PST | 4 | 0 | 0
627+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
628+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
629+
| Mon Feb 10 17:32:02 1997 PST | 1 | 2000 | 2000000
630+
| Mon Feb 10 17:32:01.40 1997 PST | 1 | 1400 | 1400000
631+
| Mon Feb 10 17:32:01.50 1997 PST | 1 | 1500 | 1500000
632+
| Mon Feb 10 17:32:01.60 1997 PST | 1 | 1600 | 1600000
633+
| Thu Jan 02 00:00:00 1997 PST | 1 | 0 | 0
634+
| Thu Jan 02 03:04:05 1997 PST | 1 | 5000 | 5000000
635+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
636+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
637+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
638+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
639+
| Tue Jun 10 17:32:01 1997 PDT | 2 | 1000 | 1000000
640+
| Sat Sep 22 18:19:20 2001 PDT | 3 | 20000 | 20000000
641+
| Wed Mar 15 08:14:01 2000 PST | 1 | 1000 | 1000000
642+
| Wed Mar 15 04:14:02 2000 PST | 1 | 2000 | 2000000
643+
| Wed Mar 15 02:14:03 2000 PST | 1 | 3000 | 3000000
644+
| Wed Mar 15 03:14:04 2000 PST | 1 | 4000 | 4000000
645+
| Wed Mar 15 01:14:05 2000 PST | 1 | 5000 | 5000000
646+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
647+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
648+
| Mon Feb 10 17:32:00 1997 PST | 1 | 0 | 0
649+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
650+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
651+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
652+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
653+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
654+
| Mon Feb 10 09:32:01 1997 PST | 1 | 1000 | 1000000
655+
| Mon Feb 10 09:32:01 1997 PST | 1 | 1000 | 1000000
656+
| Mon Feb 10 09:32:01 1997 PST | 1 | 1000 | 1000000
657+
| Tue Jun 10 18:32:01 1997 PDT | 2 | 1000 | 1000000
658+
| Mon Feb 10 17:32:01 1997 PST | 1 | 1000 | 1000000
659+
| Tue Feb 11 17:32:01 1997 PST | 1 | 1000 | 1000000
660+
| Wed Feb 12 17:32:01 1997 PST | 1 | 1000 | 1000000
661+
| Thu Feb 13 17:32:01 1997 PST | 1 | 1000 | 1000000
662+
| Fri Feb 14 17:32:01 1997 PST | 1 | 1000 | 1000000
663+
| Sat Feb 15 17:32:01 1997 PST | 1 | 1000 | 1000000
664+
| Sun Feb 16 17:32:01 1997 PST | 1 | 1000 | 1000000
665+
| Sun Feb 16 17:32:01 1997 PST | 1 | 1000 | 1000000
666+
| Wed Feb 28 17:32:01 1996 PST | 1 | 1000 | 1000000
667+
| Thu Feb 29 17:32:01 1996 PST | 1 | 1000 | 1000000
668+
| Fri Mar 01 17:32:01 1996 PST | 1 | 1000 | 1000000
669+
| Mon Dec 30 17:32:01 1996 PST | 4 | 1000 | 1000000
670+
| Tue Dec 31 17:32:01 1996 PST | 4 | 1000 | 1000000
671+
| Wed Jan 01 17:32:01 1997 PST | 1 | 1000 | 1000000
672+
| Fri Feb 28 17:32:01 1997 PST | 1 | 1000 | 1000000
673+
| Sat Mar 01 17:32:01 1997 PST | 1 | 1000 | 1000000
674+
| Tue Dec 30 17:32:01 1997 PST | 4 | 1000 | 1000000
675+
| Wed Dec 31 17:32:01 1997 PST | 4 | 1000 | 1000000
676+
| Fri Dec 31 17:32:01 1999 PST | 4 | 1000 | 1000000
677+
| Sat Jan 01 17:32:01 2000 PST | 1 | 1000 | 1000000
678+
| Sun Dec 31 17:32:01 2000 PST | 4 | 1000 | 1000000
679+
| Mon Jan 01 17:32:01 2001 PST | 1 | 1000 | 1000000
680680
(54 rows)
681681

682682
-- TO_CHAR()

0 commit comments

Comments
 (0)