From e6b72d6af6fbe94e90019ca374199472bb1958a4 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 21 Jul 2005 18:06:13 +0000
Subject: [PATCH] Update DAYS_PER_MONTH comment.

Add SECS_PER_YEAR and MINS_PER_HOUR macros.
---
 src/backend/postmaster/syslogger.c         |  4 +--
 src/backend/utils/adt/date.c               | 18 ++++++------
 src/backend/utils/adt/datetime.c           | 32 +++++++++++-----------
 src/backend/utils/adt/nabstime.c           | 14 +++++-----
 src/backend/utils/adt/timestamp.c          | 25 ++++++++---------
 src/backend/utils/misc/guc.c               |  4 +--
 src/include/utils/timestamp.h              | 12 ++++++--
 src/interfaces/ecpg/pgtypeslib/dt.h        | 10 +++++--
 src/interfaces/ecpg/pgtypeslib/dt_common.c | 28 +++++++++----------
 src/interfaces/ecpg/pgtypeslib/interval.c  |  2 +-
 src/interfaces/ecpg/pgtypeslib/timestamp.c |  4 +--
 11 files changed, 82 insertions(+), 71 deletions(-)

diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index 0084cff226e..a97a4183df4 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -18,7 +18,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.17 2005/07/21 03:56:11 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.18 2005/07/21 18:06:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,7 +60,7 @@
  * start, but the rest can change at SIGHUP.
  */
 bool		Redirect_stderr = false;
-int			Log_RotationAge = HOURS_PER_DAY * SECS_PER_MINUTE;
+int			Log_RotationAge = HOURS_PER_DAY * MINS_PER_HOUR;
 int			Log_RotationSize = 10 * 1024;
 char	   *Log_directory = NULL;
 char	   *Log_filename = NULL;
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 828ca9ec7c9..bd29db56233 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.115 2005/07/21 04:41:43 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.116 2005/07/21 18:06:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -917,10 +917,10 @@ static int
 tm2time(struct pg_tm * tm, fsec_t fsec, TimeADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
-	*result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec)
+	*result = ((((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec)
 				* USECS_PER_SEC) + fsec;
 #else
-	*result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
+	*result = ((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 	return 0;
 }
@@ -1347,10 +1347,10 @@ timestamp_time(PG_FUNCTION_ARGS)
 	 * Could also do this with time = (timestamp / USECS_PER_DAY *
 	 * USECS_PER_DAY) - timestamp;
 	 */
-	result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
+	result = ((((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 				USECS_PER_SEC) + fsec;
 #else
-	result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
+	result = ((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 
 	PG_RETURN_TIMEADT(result);
@@ -1384,10 +1384,10 @@ timestamptz_time(PG_FUNCTION_ARGS)
 	 * Could also do this with time = (timestamp / USECS_PER_DAY *
 	 * USECS_PER_DAY) - timestamp;
 	 */
-	result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
+	result = ((((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 				USECS_PER_SEC) + fsec;
 #else
-	result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
+	result = ((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 
 	PG_RETURN_TIMEADT(result);
@@ -1714,10 +1714,10 @@ static int
 tm2timetz(struct pg_tm * tm, fsec_t fsec, int tz, TimeTzADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
-	result->time = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
+	result->time = ((((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 					USECS_PER_SEC) + fsec;
 #else
-	result->time = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
+	result->time = ((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 	result->zone = tz;
 
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 681ec039247..34a650af1ce 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.154 2005/07/21 04:41:43 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.155 2005/07/21 18:06:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1447,7 +1447,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp += val * SECS_PER_MINUTE;
+						*tzp += val * MINS_PER_HOUR;
 						break;
 
 					case DTZ:
@@ -1460,7 +1460,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -1468,7 +1468,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -1667,7 +1667,7 @@ DetermineLocalTimeZone(struct pg_tm * tm)
 	day = ((pg_time_t) date) *SECS_PER_DAY;
 	if (day / SECS_PER_DAY != date)
 		goto overflow;
-	sec = tm->tm_sec + (tm->tm_min + tm->tm_hour * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+	sec = tm->tm_sec + (tm->tm_min + tm->tm_hour * MINS_PER_HOUR) * SECS_PER_MINUTE;
 	mytime = day + sec;
 	/* since sec >= 0, overflow could only be from +day to -mytime */
 	if (mytime < 0 && day > 0)
@@ -1679,7 +1679,7 @@ DetermineLocalTimeZone(struct pg_tm * tm)
 	 * that DST boundaries can't be closer together than 48 hours, so
 	 * backing up 24 hours and finding the "next" boundary will work.
 	 */
-	prevtime = mytime - (HOURS_PER_DAY * SECS_PER_MINUTE * SECS_PER_MINUTE);
+	prevtime = mytime - SECS_PER_DAY;
 	if (mytime < 0 && prevtime > 0)
 		goto overflow;
 
@@ -2167,7 +2167,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp += val * SECS_PER_MINUTE;
+						*tzp += val * MINS_PER_HOUR;
 						break;
 
 					case DTZ:
@@ -2180,7 +2180,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2188,7 +2188,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2833,7 +2833,7 @@ DecodeTimezone(char *str, int *tzp)
 	if (min < 0 || min >= 60)
 		return DTERR_TZDISP_OVERFLOW;
 
-	tz = (hr * SECS_PER_MINUTE + min) * SECS_PER_MINUTE;
+	tz = (hr * MINS_PER_HOUR + min) * SECS_PER_MINUTE;
 	if (*str == '-')
 		tz = -tz;
 
@@ -2890,7 +2890,7 @@ DecodePosixTimezone(char *str, int *tzp)
 	{
 		case DTZ:
 		case TZ:
-			*tzp = (val * SECS_PER_MINUTE) - tz;
+			*tzp = (val * MINS_PER_HOUR) - tz;
 			break;
 
 		default:
@@ -3510,7 +3510,7 @@ EncodeTimeOnly(struct pg_tm * tm, fsec_t fsec, int *tzp, int style, char *str)
 					min;
 
 		hour = -(*tzp / SECS_PER_HOUR);
-		min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+		min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 		sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 	}
 
@@ -3583,7 +3583,7 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 			if (tzp != NULL && tm->tm_isdst >= 0)
 			{
 				hour = -(*tzp / SECS_PER_HOUR);
-				min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+				min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 				sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 			}
 
@@ -3633,7 +3633,7 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 				else
 				{
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -3681,7 +3681,7 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 				else
 				{
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -3747,7 +3747,7 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 					 * 2001-10-19
 					 */
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? " %+03d:%02d" : " %+03d", hour, min);
 				}
 			}
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index df5dc51ba21..4935422352c 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.138 2005/07/21 04:41:43 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.139 2005/07/21 18:06:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -199,7 +199,7 @@ tm2abstime(struct pg_tm * tm, int tz)
 		return INVALID_ABSTIME;
 
 	/* convert to seconds */
-	sec = tm->tm_sec + tz + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+	sec = tm->tm_sec + tz + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
 
 	/* check for overflow */
 	if ((day == MAX_DAYNUM && sec < 0) ||
@@ -638,8 +638,8 @@ reltimein(PG_FUNCTION_ARGS)
 	switch (dtype)
 	{
 		case DTK_DELTA:
-			result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec;
-			result += tm->tm_year * 36525 * 864 + ((tm->tm_mon * DAYS_PER_MONTH) + tm->tm_mday) * SECS_PER_DAY;
+			result = ((tm->tm_hour * MINS_PER_HOUR + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec;
+			result += tm->tm_year * SECS_PER_YEAR + ((tm->tm_mon * DAYS_PER_MONTH) + tm->tm_mday) * SECS_PER_DAY;
 			break;
 
 		default:
@@ -884,8 +884,8 @@ reltime_interval(PG_FUNCTION_ARGS)
 
 		default:
 #ifdef HAVE_INT64_TIMESTAMP
-			year = reltime / (36525 * 864);
-			reltime -= year * (36525 * 864);
+			year = reltime / SECS_PER_YEAR;
+			reltime -= year * SECS_PER_YEAR;
 			month = reltime / (DAYS_PER_MONTH * SECS_PER_DAY);
 			reltime -= month * (DAYS_PER_MONTH * SECS_PER_DAY);
 			day = reltime / SECS_PER_DAY;
@@ -893,7 +893,7 @@ reltime_interval(PG_FUNCTION_ARGS)
 
 			result->time = (reltime * USECS_PER_SEC);
 #else
-			TMODULO(reltime, year, 36525 * 864);
+			TMODULO(reltime, year, SECS_PER_YEAR);
 			TMODULO(reltime, month, DAYS_PER_MONTH * SECS_PER_DAY);
 			TMODULO(reltime, day, SECS_PER_DAY);
 
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 0ef505ed907..09002d9f1ea 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.137 2005/07/21 05:18:26 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.138 2005/07/21 18:06:12 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -748,7 +748,6 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			interval->time -= hour * USECS_PER_HOUR;
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 								USECS_PER_MINUTE;
-
 #else
 			TMODULO(interval->time, hour, (double)SECS_PER_HOUR);
 			interval->time = ((int)(interval->time / SECS_PER_MINUTE)) * (double)SECS_PER_MINUTE;
@@ -1212,7 +1211,7 @@ tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span)
 						tm->tm_min) * INT64CONST(60)) +
 						tm->tm_sec) * USECS_PER_SEC) + fsec;
 #else
-	span->time = (((tm->tm_hour * (double)SECS_PER_MINUTE) +
+	span->time = (((tm->tm_hour * (double)MINS_PER_HOUR) +
 						tm->tm_min) * (double)SECS_PER_MINUTE) +
 						tm->tm_sec;
 	span->time = JROUND(span->time + fsec);
@@ -1225,14 +1224,14 @@ tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span)
 static int64
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
+	return (((((hour * MINS_PER_HOUR) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
 }	/* time2t() */
 
 #else
 static double
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec + fsec;
+	return (((hour * MINS_PER_HOUR) + min) * SECS_PER_MINUTE) + sec + fsec;
 }	/* time2t() */
 #endif
 
@@ -2475,7 +2474,7 @@ timestamp_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_min < 0)
 		{
-			tm->tm_min += SECS_PER_MINUTE;
+			tm->tm_min += MINS_PER_HOUR;
 			tm->tm_hour--;
 		}
 
@@ -2589,7 +2588,7 @@ timestamptz_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_min < 0)
 		{
-			tm->tm_min += SECS_PER_MINUTE;
+			tm->tm_min += MINS_PER_HOUR;
 			tm->tm_hour--;
 		}
 
@@ -3492,10 +3491,10 @@ timestamp_part(PG_FUNCTION_ARGS)
 			case DTK_JULIAN:
 				result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
 #ifdef HAVE_INT64_TIMESTAMP
-				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
+				result += ((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + (fsec / 1000000.0)) / (double)SECS_PER_DAY;
 #else
-				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
+				result += ((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + fsec) / (double)SECS_PER_DAY;
 #endif
 				break;
@@ -3628,8 +3627,8 @@ timestamptz_part(PG_FUNCTION_ARGS)
 
 			case DTK_TZ_MINUTE:
 				result = -tz;
-				result /= SECS_PER_MINUTE;
-				FMODULO(result, dummy, (double)SECS_PER_MINUTE);
+				result /= MINS_PER_HOUR;
+				FMODULO(result, dummy, (double)MINS_PER_HOUR);
 				break;
 
 			case DTK_TZ_HOUR:
@@ -3720,10 +3719,10 @@ timestamptz_part(PG_FUNCTION_ARGS)
 			case DTK_JULIAN:
 				result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
 #ifdef HAVE_INT64_TIMESTAMP
-				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
+				result += ((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + (fsec / 1000000.0)) / (double)SECS_PER_DAY;
 #else
-				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
+				result += ((((tm->tm_hour * MINS_PER_HOUR) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + fsec) / (double)SECS_PER_DAY;
 #endif
 				break;
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 0c843d96f78..20ebfee7126 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.275 2005/07/21 03:56:21 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.276 2005/07/21 18:06:12 momjian Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -1349,7 +1349,7 @@ static struct config_int ConfigureNamesInt[] =
 			NULL
 		},
 		&Log_RotationAge,
-		HOURS_PER_DAY * SECS_PER_MINUTE, 0, INT_MAX / SECS_PER_MINUTE, NULL, NULL
+		HOURS_PER_DAY * MINS_PER_HOUR, 0, INT_MAX / MINS_PER_HOUR, NULL, NULL
 	},
 
 	{
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
index 35221d5f1df..3e2ac94a215 100644
--- a/src/include/utils/timestamp.h
+++ b/src/include/utils/timestamp.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.50 2005/07/21 15:16:27 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.51 2005/07/21 18:06:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -65,16 +65,22 @@ typedef struct
 #define MONTHS_PER_YEAR	12
 /*
  *	DAYS_PER_MONTH is very imprecise.  The more accurate value is
- *	365.25/12 = 30.4375, or '30 days 10:30:00'.  Right now we only
+ *	365.2425/12 = 30.436875, or '30 days 10:29:06'.  Right now we only
  *	return an integral number of days, but someday perhaps we should
  *	also return a 'time' value to be used as well.
  */
 #define DAYS_PER_MONTH	30		/* assumes exactly 30 days per month */
 #define HOURS_PER_DAY	24		/* assume no daylight savings time changes */
 
-#define SECS_PER_DAY	86400	/* assumes no leap second */
+/*
+ *	This doesn't adjust for uneven daylight savings time intervals, nor
+ *	leap seconds.
+ */
+#define SECS_PER_YEAR	(36525 * 864)	/* avoid floating-point computation */
+#define SECS_PER_DAY	86400
 #define SECS_PER_HOUR   3600
 #define SECS_PER_MINUTE 60
+#define MINS_PER_HOUR	60
 
 #ifdef HAVE_INT64_TIMESTAMP
 #define USECS_PER_DAY	INT64CONST(86400000000)
diff --git a/src/interfaces/ecpg/pgtypeslib/dt.h b/src/interfaces/ecpg/pgtypeslib/dt.h
index 01b44fb27ac..008ac3b0a31 100644
--- a/src/interfaces/ecpg/pgtypeslib/dt.h
+++ b/src/interfaces/ecpg/pgtypeslib/dt.h
@@ -221,16 +221,22 @@ do { \
 #define MONTHS_PER_YEAR	12
 /*
  *	DAYS_PER_MONTH is very imprecise.  The more accurate value is
- *	365.25/12 = 30.4375, or '30 days 10:30:00'.  Right now we only
+ *	365.2425/12 = 30.436875, or '30 days 10:29:06'.  Right now we only
  *	return an integral number of days, but someday perhaps we should
  *	also return a 'time' value to be used as well.
  */
 #define DAYS_PER_MONTH	30		/* assumes exactly 30 days per month */
 #define HOURS_PER_DAY	24		/* assume no daylight savings time changes */
 
-#define SECS_PER_DAY	86400	/* assumes no leap second */
+/*
+ *	This doesn't adjust for uneven daylight savings time intervals, nor
+ *	leap seconds.
+ */
+#define SECS_PER_YEAR	(36525 * 864)	/* avoid floating-point computation */
+#define SECS_PER_DAY	86400
 #define SECS_PER_HOUR   3600
 #define SECS_PER_MINUTE 60
+#define MINS_PER_HOUR	60
 
 #ifdef HAVE_INT64_TIMESTAMP
 #define USECS_PER_DAY	INT64CONST(86400000000)
diff --git a/src/interfaces/ecpg/pgtypeslib/dt_common.c b/src/interfaces/ecpg/pgtypeslib/dt_common.c
index 65a70cdc874..bc2bfd4ee7e 100644
--- a/src/interfaces/ecpg/pgtypeslib/dt_common.c
+++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c
@@ -814,7 +814,7 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 			if (tzp != NULL && tm->tm_isdst >= 0)
 			{
 				hour = -(*tzp / SECS_PER_HOUR);
-				min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+				min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 				sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 			}
 			break;
@@ -862,7 +862,7 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 				else
 				{
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -908,7 +908,7 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 				else
 				{
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -971,7 +971,7 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 					 * 2001-10-19
 					 */
 					hour = -(*tzp / SECS_PER_HOUR);
-					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
+					min = (abs(*tzp) / MINS_PER_HOUR) % MINS_PER_HOUR;
 					sprintf(str + strlen(str), (min != 0) ? " %+03d:%02d" : " %+03d", hour, min);
 				}
 			}
@@ -1161,7 +1161,7 @@ DetermineLocalTimeZone(struct tm * tm)
 
 			day = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) -
 				   date2j(1970, 1, 1));
-			mysec = tm->tm_sec + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+			mysec = tm->tm_sec + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
 			mytime = (time_t) mysec;
 
 			/*
@@ -1171,7 +1171,7 @@ DetermineLocalTimeZone(struct tm * tm)
 			tmp = localtime(&mytime);
 			day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 				   date2j(1970, 1, 1));
-			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
 
 			/*
 			 * The local time offset corresponding to that GMT time is now
@@ -1201,7 +1201,7 @@ DetermineLocalTimeZone(struct tm * tm)
 			tmp = localtime(&mytime);
 			day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 				   date2j(1970, 1, 1));
-			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
 			delta2 = mysec - locsec;
 			if (delta2 != delta1)
 			{
@@ -1210,7 +1210,7 @@ DetermineLocalTimeZone(struct tm * tm)
 				tmp = localtime(&mytime);
 				day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 					   date2j(1970, 1, 1));
-				locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
+				locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * MINS_PER_HOUR) * SECS_PER_MINUTE;
 				delta2 = mysec - locsec;
 			}
 			tm->tm_isdst = tmp->tm_isdst;
@@ -1712,7 +1712,7 @@ DecodeTimezone(char *str, int *tzp)
 	else
 		min = 0;
 
-	tz = (hr * SECS_PER_MINUTE + min) * SECS_PER_MINUTE;
+	tz = (hr * MINS_PER_HOUR + min) * SECS_PER_MINUTE;
 	if (*str == '-')
 		tz = -tz;
 
@@ -1752,7 +1752,7 @@ DecodePosixTimezone(char *str, int *tzp)
 	{
 		case DTZ:
 		case TZ:
-			*tzp = (val * SECS_PER_MINUTE) - tz;
+			*tzp = (val * MINS_PER_HOUR) - tz;
 			break;
 
 		default:
@@ -2398,7 +2398,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return -1;
-						*tzp += val * SECS_PER_MINUTE;
+						*tzp += val * MINS_PER_HOUR;
 						break;
 
 					case DTZ:
@@ -2411,7 +2411,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return -1;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2419,7 +2419,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return -1;
-						*tzp = val * SECS_PER_MINUTE;
+						*tzp = val * MINS_PER_HOUR;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -3108,7 +3108,7 @@ PGTYPEStimestamp_defmt_scan(char **str, char *fmt, timestamp *d,
 						 * timezone value of the datetktbl table is in
 						 * quarter hours
 						 */
-						*tz = -15 * SECS_PER_MINUTE * datetktbl[j].value;
+						*tz = -15 * MINS_PER_HOUR * datetktbl[j].value;
 						break;
 					}
 				}
diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c
index 3fa176be84e..6c3af18eced 100644
--- a/src/interfaces/ecpg/pgtypeslib/interval.c
+++ b/src/interfaces/ecpg/pgtypeslib/interval.c
@@ -723,7 +723,7 @@ tm2interval(struct tm *tm, fsec_t fsec, interval *span)
 						tm->tm_sec) * USECS_PER_SEC) + fsec;
 #else
 	span->time = (((((tm->tm_mday * (double)HOURS_PER_DAY) +
-						tm->tm_hour) * (double)SECS_PER_MINUTE) +
+						tm->tm_hour) * (double)MINS_PER_HOUR) +
 						tm->tm_min) * (double)SECS_PER_MINUTE) +
 						tm->tm_sec;
 	span->time = JROUND(span->time + fsec);
diff --git a/src/interfaces/ecpg/pgtypeslib/timestamp.c b/src/interfaces/ecpg/pgtypeslib/timestamp.c
index 5382022d71a..5f9ec2f2f93 100644
--- a/src/interfaces/ecpg/pgtypeslib/timestamp.c
+++ b/src/interfaces/ecpg/pgtypeslib/timestamp.c
@@ -20,14 +20,14 @@ int PGTYPEStimestamp_defmt_scan(char **, char *, timestamp *, int *, int *, int
 static int64
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
+	return (((((hour * MINS_PER_HOUR) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
 }	/* time2t() */
 
 #else
 static double
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec + fsec;
+	return (((hour * MINS_PER_HOUR) + min) * SECS_PER_MINUTE) + sec + fsec;
 }	/* time2t() */
 #endif
 
-- 
GitLab