1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-31 22:04:40 +03:00

Avoid repeated computation of the constants date2j(1970, 1, 1) and

date2j(2000, 1, 1).  Should make for some marginal speed improvement
in date/time operations.
This commit is contained in:
Tom Lane
2003-04-04 04:50:44 +00:00
parent 3b4ca4c0d9
commit d685417fbb
7 changed files with 91 additions and 72 deletions

View File

@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.105 2003/03/20 03:34:56 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.106 2003/04/04 04:50:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -85,10 +85,7 @@ static int istinterval(char *i_string,
/*
* GetCurrentAbsoluteTime()
*
* Get the current system time. Set timezone parameters if not specified
* elsewhere. Define HasCTZSet to allow clients to specify the default
* timezone.
*
* Get the current system time (relative to Unix epoch).
*/
AbsoluteTime
GetCurrentAbsoluteTime(void)
@ -100,11 +97,11 @@ GetCurrentAbsoluteTime(void)
}
/* GetCurrentAbsoluteTimeUsec()
* Get the current system time.
/*
* GetCurrentAbsoluteTimeUsec()
*
* Returns the number of seconds since epoch (January 1 1970 GMT),
* and returns fractional seconds (as # of microseconds) into *usec.
* Get the current system time (relative to Unix epoch), including fractional
* seconds expressed as microseconds.
*/
AbsoluteTime
GetCurrentAbsoluteTimeUsec(int *usec)
@ -119,7 +116,31 @@ GetCurrentAbsoluteTimeUsec(int *usec)
}
/* GetCurrentDateTime()
/*
* AbsoluteTimeUsecToTimestampTz()
*
* Convert system time including microseconds to TimestampTz representation.
*/
TimestampTz
AbsoluteTimeUsecToTimestampTz(AbsoluteTime sec, int usec)
{
TimestampTz result;
#ifdef HAVE_INT64_TIMESTAMP
result = ((sec - ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * 86400))
* INT64CONST(1000000)) + usec;
#else
result = sec - ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * 86400)
+ (usec / 1000000.0);
#endif
return result;
}
/*
* GetCurrentDateTime()
*
* Get the transaction start time ("now()") broken down as a struct tm.
*/
void
@ -131,13 +152,10 @@ GetCurrentDateTime(struct tm * tm)
}
/*
* GetCurrentAbsoluteTimeUsec()
* GetCurrentTimeUsec()
*
* Get the current system time. Set timezone parameters if not specified
* elsewhere. Define HasCTZSet to allow clients to specify the default
* timezone.
*
* Returns the number of seconds since epoch (January 1 1970 GMT)
* Get the transaction start time ("now()") broken down as a struct tm,
* including fractional seconds and timezone offset.
*/
void
GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp)
@ -152,7 +170,7 @@ GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp)
#ifdef HAVE_INT64_TIMESTAMP
*fsec = usec;
#else
*fsec = usec * 1.0e-6;
*fsec = usec / 1000000.0;
#endif
}
@ -307,7 +325,7 @@ tm2abstime(struct tm * tm, int tz)
|| tm->tm_sec < 0 || tm->tm_sec > 59)
return INVALID_ABSTIME;
day = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(1970, 1, 1));
day = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - UNIX_EPOCH_JDATE;
/* check for time out of range */
if ((day < MIN_DAYNUM) || (day > MAX_DAYNUM))