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).
This commit is contained in:
parent
0e99be1c25
commit
35f9b461f1
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user