postgres.git / summary / log / commit / refs

commit    2cfb3b6d4d59dabd401b658023629d15688f8493
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sat Apr 23 22:54:03 2005 +0000
First released in: 8.1.0, 7.2.8, 7.3.10, 7.4.8, 8.0.3

    Repair two TIME WITH TIME ZONE bugs found by Dennis Vshivkov.  Comparison
    of timetz values misbehaved in --enable-integer-datetime cases, and
    EXTRACT(EPOCH) subtracted the zone instead of adding it in all cases.
    Backpatch to all supported releases (except --enable-integer-datetime code
    does not exist in 7.2).


src/backend/utils/adt/date.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 1d710c56204..59c66bb0a63 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.73.2.7 2003/07/24 04:38:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.73.2.8 2005/04/23 22:54:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1414,12 +1414,20 @@ timetz_scale(PG_FUNCTION_ARGS) static int timetz_cmp_internal(TimeTzADT *time1, TimeTzADT *time2) { + /* Primary sort is by true (GMT-equivalent) time */ +#ifdef HAVE_INT64_TIMESTAMP + int64 t1, + t2; + + t1 = time1->time + (time1->zone * INT64CONST(1000000)); + t2 = time2->time + (time2->zone * INT64CONST(1000000)); +#else double t1, t2; - /* Primary sort is by true (GMT-equivalent) time */ t1 = time1->time + time1->zone; t2 = time2->time + time2->zone; +#endif if (t1 > t2) return 1; @@ -1986,9 +1994,9 @@ timetz_part(PG_FUNCTION_ARGS) else if ((type == RESERV) && (val == DTK_EPOCH)) { #ifdef HAVE_INT64_TIMESTAMP - result = ((time->time / 1000000e0) - time->zone); + result = ((time->time / 1000000e0) + time->zone); #else - result = (time->time - time->zone); + result = (time->time + time->zone); #endif } else [parent: ca1e578d62e2]