AdjustTimestampForTypmod does not work (at least not portably) on
-infinity and +infinity. Put TIMESTAMP_NOT_FINITE guard into the routine, instead of forgetting it at some call sites. Fixes regression test failures here.
This commit is contained in:
parent
a390975cc1
commit
77be5f9451
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.52 2001/10/03 05:29:24 thomas Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v 1.53 2001/10/03 15:50:48 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
@ -32,8 +32,7 @@
|
|||
static double time2t(const int hour, const int min, const double sec);
|
||||
static int EncodeSpecialTimestamp(Timestamp dt, char *str);
|
||||
static Timestamp dt2local(Timestamp dt, int timezone);
|
||||
static void
|
||||
AdjustTimestampForTypmod(Timestamp *time, int32 typmod);
|
||||
static void AdjustTimestampForTypmod(Timestamp *time, int32 typmod);
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -138,7 +137,6 @@ timestamp_scale(PG_FUNCTION_ARGS)
|
|||
|
||||
result = timestamp;
|
||||
|
||||
if (! TIMESTAMP_NOT_FINITE(result))
|
||||
AdjustTimestampForTypmod(&result, typmod);
|
||||
|
||||
PG_RETURN_TIMESTAMP(result);
|
||||
|
@ -147,7 +145,8 @@ timestamp_scale(PG_FUNCTION_ARGS)
|
|||
static void
|
||||
AdjustTimestampForTypmod(Timestamp *time, int32 typmod)
|
||||
{
|
||||
if ((typmod >= 0) && (typmod <= 13))
|
||||
if (! TIMESTAMP_NOT_FINITE(*time) &&
|
||||
(typmod >= 0) && (typmod <= 13))
|
||||
{
|
||||
static double TimestampScale = 1;
|
||||
static int32 TimestampTypmod = 0;
|
||||
|
@ -157,8 +156,6 @@ AdjustTimestampForTypmod(Timestamp *time, int32 typmod)
|
|||
|
||||
*time = (rint(((double) *time)*TimestampScale)/TimestampScale);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
@ -261,7 +258,6 @@ timestamptz_scale(PG_FUNCTION_ARGS)
|
|||
|
||||
result = timestamp;
|
||||
|
||||
if (! TIMESTAMP_NOT_FINITE(result))
|
||||
AdjustTimestampForTypmod(&result, typmod);
|
||||
|
||||
PG_RETURN_TIMESTAMPTZ(result);
|
||||
|
|
Loading…
Reference in New Issue