From: Tom Lane Date: Thu, 19 Oct 2000 20:52:35 +0000 (+0000) Subject: Fix time_larger, time_smaller, timetz_larger, timetz_smaller to meet X-Git-Tag: REL7_0_3~10 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=d11d8d0501e62d146017b9b79d2a4dec55e95603;p=postgresql.git Fix time_larger, time_smaller, timetz_larger, timetz_smaller to meet nodeAgg.c's expectation that aggregate transition functions never return pointers to their input values. This is fixed in a much better way in current sources, but in 7.0.* it's gotta be done like this. --- diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index e0d361152fa..80b067548a2 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.44 2000/04/12 17:15:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.44.2.1 2000/10/19 20:52:35 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -495,13 +495,23 @@ time_cmp(TimeADT *time1, TimeADT *time2) TimeADT * time_larger(TimeADT *time1, TimeADT *time2) { - return time_gt(time1, time2) ? time1 : time2; + TimeADT *result; + + /* nodeAgg.c expects me to return a copied datum! */ + result = palloc(sizeof(*result)); + *result = time_gt(time1, time2) ? *time1 : *time2; + return result; } /* time_larger() */ TimeADT * time_smaller(TimeADT *time1, TimeADT *time2) { - return time_lt(time1, time2) ? time1 : time2; + TimeADT *result; + + /* nodeAgg.c expects me to return a copied datum! */ + result = palloc(sizeof(*result)); + *result = time_lt(time1, time2) ? *time1 : *time2; + return result; } /* time_smaller() */ /* overlaps_time() @@ -742,13 +752,23 @@ timetz_cmp(TimeTzADT *time1, TimeTzADT *time2) TimeTzADT * timetz_larger(TimeTzADT *time1, TimeTzADT *time2) { - return timetz_gt(time1, time2) ? time1 : time2; + TimeTzADT *result; + + /* nodeAgg.c expects me to return a copied datum! */ + result = palloc(sizeof(*result)); + *result = timetz_gt(time1, time2) ? *time1 : *time2; + return result; } /* timetz_larger() */ TimeTzADT * timetz_smaller(TimeTzADT *time1, TimeTzADT *time2) { - return timetz_lt(time1, time2) ? time1 : time2; + TimeTzADT *result; + + /* nodeAgg.c expects me to return a copied datum! */ + result = palloc(sizeof(*result)); + *result = timetz_lt(time1, time2) ? *time1 : *time2; + return result; } /* timetz_smaller() */ /* overlaps_timetz()