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:
Tom Lane 2001-10-03 15:50:48 +00:00
parent a390975cc1
commit 77be5f9451
1 changed files with 6 additions and 10 deletions

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 double time2t(const int hour, const int min, const double sec);
static int EncodeSpecialTimestamp(Timestamp dt, char *str); static int EncodeSpecialTimestamp(Timestamp dt, char *str);
static Timestamp dt2local(Timestamp dt, int timezone); static Timestamp dt2local(Timestamp dt, int timezone);
static void static void AdjustTimestampForTypmod(Timestamp *time, int32 typmod);
AdjustTimestampForTypmod(Timestamp *time, int32 typmod);
/***************************************************************************** /*****************************************************************************
@ -138,8 +137,7 @@ timestamp_scale(PG_FUNCTION_ARGS)
result = timestamp; result = timestamp;
if (! TIMESTAMP_NOT_FINITE(result)) AdjustTimestampForTypmod(&result, typmod);
AdjustTimestampForTypmod(&result, typmod);
PG_RETURN_TIMESTAMP(result); PG_RETURN_TIMESTAMP(result);
} }
@ -147,7 +145,8 @@ timestamp_scale(PG_FUNCTION_ARGS)
static void static void
AdjustTimestampForTypmod(Timestamp *time, int32 typmod) AdjustTimestampForTypmod(Timestamp *time, int32 typmod)
{ {
if ((typmod >= 0) && (typmod <= 13)) if (! TIMESTAMP_NOT_FINITE(*time) &&
(typmod >= 0) && (typmod <= 13))
{ {
static double TimestampScale = 1; static double TimestampScale = 1;
static int32 TimestampTypmod = 0; static int32 TimestampTypmod = 0;
@ -157,8 +156,6 @@ AdjustTimestampForTypmod(Timestamp *time, int32 typmod)
*time = (rint(((double) *time)*TimestampScale)/TimestampScale); *time = (rint(((double) *time)*TimestampScale)/TimestampScale);
} }
return;
} }
@ -261,8 +258,7 @@ timestamptz_scale(PG_FUNCTION_ARGS)
result = timestamp; result = timestamp;
if (! TIMESTAMP_NOT_FINITE(result)) AdjustTimestampForTypmod(&result, typmod);
AdjustTimestampForTypmod(&result, typmod);
PG_RETURN_TIMESTAMPTZ(result); PG_RETURN_TIMESTAMPTZ(result);
} }