Commit 35f9b461 authored by Tom Lane's avatar Tom Lane

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).
parent 0e99be1c
......@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.104 2004/12/31 22:01:21 pgsql Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.105 2005/04/23 22:53:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -1869,12 +1869,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;
......@@ -2443,9 +2451,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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment