summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/date.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-08-08 00:10:31 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-08-08 00:10:31 +0000
commitf2b6bb42ab24242a9b9d73d0324b00db5194b1cf (patch)
treeefb065fbd019e32a36c8cd389fc25b110c27a517 /src/backend/utils/adt/date.c
parente060701f510e0938617c30a6209cf956ceab36e9 (diff)
Fix floating-point timestamp comparisons to not go nuts if NaN is
encountered; per bug report from Christian van der Leeden 8/7/03. Also, adjust larger/smaller routines (MAX/MIN) to share code with comparisons for timestamp, interval, timetz.
Diffstat (limited to 'src/backend/utils/adt/date.c')
-rw-r--r--src/backend/utils/adt/date.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 1e1a15da258..0f9fcaded9e 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.89 2003/08/04 02:40:04 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.90 2003/08/08 00:10:31 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1671,12 +1671,13 @@ timetz_larger(PG_FUNCTION_ARGS)
{
TimeTzADT *time1 = PG_GETARG_TIMETZADT_P(0);
TimeTzADT *time2 = PG_GETARG_TIMETZADT_P(1);
+ TimeTzADT *result;
- if (DatumGetBool(DirectFunctionCall2(timetz_gt,
- TimeTzADTPGetDatum(time1),
- TimeTzADTPGetDatum(time2))))
- PG_RETURN_TIMETZADT_P(time1);
- PG_RETURN_TIMETZADT_P(time2);
+ if (timetz_cmp_internal(time1, time2) > 0)
+ result = time1;
+ else
+ result = time2;
+ PG_RETURN_TIMETZADT_P(result);
}
Datum
@@ -1684,12 +1685,13 @@ timetz_smaller(PG_FUNCTION_ARGS)
{
TimeTzADT *time1 = PG_GETARG_TIMETZADT_P(0);
TimeTzADT *time2 = PG_GETARG_TIMETZADT_P(1);
+ TimeTzADT *result;
- if (DatumGetBool(DirectFunctionCall2(timetz_lt,
- TimeTzADTPGetDatum(time1),
- TimeTzADTPGetDatum(time2))))
- PG_RETURN_TIMETZADT_P(time1);
- PG_RETURN_TIMETZADT_P(time2);
+ if (timetz_cmp_internal(time1, time2) < 0)
+ result = time1;
+ else
+ result = time2;
+ PG_RETURN_TIMETZADT_P(result);
}
/* timetz_pl_interval()