Fix time_larger, time_smaller, timetz_larger, timetz_smaller to meet
authorTom Lane <[email protected]>
Thu, 19 Oct 2000 20:52:35 +0000 (20:52 +0000)
committerTom Lane <[email protected]>
Thu, 19 Oct 2000 20:52:35 +0000 (20:52 +0000)
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.

src/backend/utils/adt/date.c

index e0d361152fa2c65190901600c738c271702cccdb..80b067548a27784bf9e4097d3b4514d2dd1c0829 100644 (file)
@@ -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()