mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
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
|
* 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
|
static int
|
||||||
timetz_cmp_internal(TimeTzADT *time1, TimeTzADT *time2)
|
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,
|
double t1,
|
||||||
t2;
|
t2;
|
||||||
|
|
||||||
/* Primary sort is by true (GMT-equivalent) time */
|
|
||||||
t1 = time1->time + time1->zone;
|
t1 = time1->time + time1->zone;
|
||||||
t2 = time2->time + time2->zone;
|
t2 = time2->time + time2->zone;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (t1 > t2)
|
if (t1 > t2)
|
||||||
return 1;
|
return 1;
|
||||||
@ -2443,9 +2451,9 @@ timetz_part(PG_FUNCTION_ARGS)
|
|||||||
else if ((type == RESERV) && (val == DTK_EPOCH))
|
else if ((type == RESERV) && (val == DTK_EPOCH))
|
||||||
{
|
{
|
||||||
#ifdef HAVE_INT64_TIMESTAMP
|
#ifdef HAVE_INT64_TIMESTAMP
|
||||||
result = ((time->time / 1000000e0) - time->zone);
|
result = ((time->time / 1000000e0) + time->zone);
|
||||||
#else
|
#else
|
||||||
result = (time->time - time->zone);
|
result = (time->time + time->zone);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user