diff options
Diffstat (limited to 'src/backend/utils/adt/nabstime.c')
-rw-r--r-- | src/backend/utils/adt/nabstime.c | 193 |
1 files changed, 29 insertions, 164 deletions
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c index e6fa5a21fc0..408b1ee14dd 100644 --- a/src/backend/utils/adt/nabstime.c +++ b/src/backend/utils/adt/nabstime.c @@ -1,4 +1,5 @@ /*------------------------------------------------------------------------- + * * nabstime.c * Utilities for the built-in type "AbsoluteTime". * Functions for the built-in type "RelativeTime". @@ -9,9 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.103 2003/02/20 05:24:55 tgl Exp $ - * - * NOTES + * $Header: /cvsroot/pgsql/src/backend/utils/adt/nabstime.c,v 1.104 2003/02/22 05:57:45 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -23,10 +22,6 @@ #include <float.h> #include <limits.h> -#if !(defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)) -#include <sys/timeb.h> -#endif - #include "access/xact.h" #include "miscadmin.h" #include "utils/builtins.h" @@ -88,78 +83,25 @@ 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. * - * Returns the number of seconds since epoch (January 1 1970 GMT) + * Returns the number of seconds since epoch (January 1 1970 GMT). */ AbsoluteTime GetCurrentAbsoluteTime(void) { time_t now; -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) - struct tm *tm; - now = time(NULL); -#else - struct timeb tb; /* the old V7-ism */ - - ftime(&tb); - now = tb.time; -#endif - - if (!HasCTZSet) - { -#if defined(HAVE_TM_ZONE) - tm = localtime(&now); - - CTimeZone = -tm->tm_gmtoff; /* tm_gmtoff is Sun/DEC-ism */ - CDayLight = (tm->tm_isdst > 0); - -#ifdef NOT_USED - - /* - * XXX is there a better way to get local timezone string w/o - * tzname? - tgl 97/03/18 - */ - strftime(CTZName, MAXTZLEN, "%Z", tm); -#endif - - /* - * XXX FreeBSD man pages indicate that this should work - thomas - * 1998-12-12 - */ - StrNCpy(CTZName, tm->tm_zone, MAXTZLEN+1); - -#elif defined(HAVE_INT_TIMEZONE) - tm = localtime(&now); - - CDayLight = tm->tm_isdst; - CTimeZone = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL); - StrNCpy(CTZName, tzname[tm->tm_isdst], MAXTZLEN+1); -#else /* neither HAVE_TM_ZONE nor - * HAVE_INT_TIMEZONE */ - CTimeZone = tb.timezone * 60; - CDayLight = (tb.dstflag != 0); - - /* - * XXX does this work to get the local timezone string in V7? - - * tgl 97/03/18 - */ - strftime(CTZName, MAXTZLEN, "%Z", localtime(&now)); -#endif - } - return (AbsoluteTime) now; -} /* GetCurrentAbsoluteTime() */ +} /* GetCurrentAbsoluteTimeUsec() - * 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. * - * Returns the number of seconds since epoch (January 1 1970 GMT) + * Returns the number of seconds since epoch (January 1 1970 GMT), + * and returns fractional seconds (as # of microseconds) into *usec. */ AbsoluteTime GetCurrentAbsoluteTimeUsec(int *usec) @@ -167,85 +109,28 @@ GetCurrentAbsoluteTimeUsec(int *usec) time_t now; struct timeval tp; -#ifdef NOT_USED - struct timezone tpz; -#endif -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) - struct tm *tm; - -#else - struct timeb tb; /* the old V7-ism */ -#endif - gettimeofday(&tp, NULL); - now = tp.tv_sec; *usec = tp.tv_usec; - -#ifdef NOT_USED -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) - now = time(NULL); -#else - ftime(&tb); - now = tb.time; -#endif -#endif - - if (!HasCTZSet) - { -#if defined(HAVE_TM_ZONE) - tm = localtime(&now); - - CTimeZone = -tm->tm_gmtoff; /* tm_gmtoff is Sun/DEC-ism */ - CDayLight = (tm->tm_isdst > 0); - -#ifdef NOT_USED - - /* - * XXX is there a better way to get local timezone string w/o - * tzname? - tgl 97/03/18 - */ - strftime(CTZName, MAXTZLEN, "%Z", tm); -#endif - - /* - * XXX FreeBSD man pages indicate that this should work - thomas - * 1998-12-12 - */ - StrNCpy(CTZName, tm->tm_zone, MAXTZLEN+1); - -#elif defined(HAVE_INT_TIMEZONE) - tm = localtime(&now); - - CDayLight = tm->tm_isdst; - CTimeZone = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL); - StrNCpy(CTZName, tzname[tm->tm_isdst], MAXTZLEN+1); -#else /* neither HAVE_TM_ZONE nor - * HAVE_INT_TIMEZONE */ - CTimeZone = tb.timezone * 60; - CDayLight = (tb.dstflag != 0); - - /* - * XXX does this work to get the local timezone string in V7? - - * tgl 97/03/18 - */ - strftime(CTZName, MAXTZLEN, "%Z", localtime(&now)); -#endif - }; - return (AbsoluteTime) now; -} /* GetCurrentAbsoluteTimeUsec() */ +} +/* GetCurrentDateTime() + * Get the transaction start time ("now()") broken down as a struct tm. + */ void GetCurrentDateTime(struct tm * tm) { int tz; abstime2tm(GetCurrentTransactionStartTime(), &tz, tm, NULL); -} /* GetCurrentDateTime() */ - +} +/* GetCurrentTimeUsec() + * Get the transaction start time ("now()") broken down as a struct tm, + * plus fractional-second and timezone info. + */ void GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp) { @@ -253,7 +138,7 @@ GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp) int usec; abstime2tm(GetCurrentTransactionStartTimeUsec(&usec), &tz, tm, NULL); - /* Note: don't pass NULL tzp directly to abstime2tm */ + /* Note: don't pass NULL tzp to abstime2tm; affects behavior */ if (tzp != NULL) *tzp = tz; #ifdef HAVE_INT64_TIMESTAMP @@ -261,23 +146,15 @@ GetCurrentTimeUsec(struct tm * tm, fsec_t *fsec, int *tzp) #else *fsec = usec * 1.0e-6; #endif -} /* GetCurrentTimeUsec() */ +} void abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn) { time_t time = (time_t) _time; - -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) struct tm *tx; -#else - struct timeb tb; /* the old V7-ism */ - - ftime(&tb); -#endif - /* * If HasCTZSet is true then we have a brute force time zone * specified. Go ahead and rotate to the local time zone since we will @@ -286,7 +163,6 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn) if (HasCTZSet && (tzp != NULL)) time -= CTimeZone; -#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE) if ((!HasCTZSet) && (tzp != NULL)) tx = localtime((time_t *) &time); else @@ -336,7 +212,8 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn) */ StrNCpy(*tzn, tm->tm_zone, MAXTZLEN + 1); if (strlen(tm->tm_zone) > MAXTZLEN) - elog(WARNING, "Invalid timezone \'%s\'", tm->tm_zone); + elog(WARNING, "Invalid timezone \'%s\'", + tm->tm_zone); } } } @@ -369,13 +246,13 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn) */ StrNCpy(*tzn, tzname[tm->tm_isdst], MAXTZLEN + 1); if (strlen(tzname[tm->tm_isdst]) > MAXTZLEN) - elog(WARNING, "Invalid timezone \'%s\'", tzname[tm->tm_isdst]); + elog(WARNING, "Invalid timezone \'%s\'", + tzname[tm->tm_isdst]); } } } else tm->tm_isdst = -1; -#endif #else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */ if (tzp != NULL) { @@ -391,26 +268,16 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn) } else { - *tzp = tb.timezone * 60; - - /* - * XXX does this work to get the local timezone string in V7? - * - tgl 97/03/18 - */ + /* default to UTC */ + *tzp = 0; if (tzn != NULL) - { - strftime(*tzn, MAXTZLEN, "%Z", localtime(&now)); - tzn[MAXTZLEN] = '\0'; /* let's just be sure it's - * null-terminated */ - } + *tzn = NULL; } } else tm->tm_isdst = -1; #endif - - return; -} /* abstime2tm() */ +} /* tm2abstime() @@ -451,7 +318,7 @@ tm2abstime(struct tm * tm, int tz) return INVALID_ABSTIME; return sec; -} /* tm2abstime() */ +} /* nabstimein() @@ -888,9 +755,7 @@ reltime2tm(RelativeTime time, struct tm * tm) TMODULO(time, tm->tm_hour, 3600); TMODULO(time, tm->tm_min, 60); TMODULO(time, tm->tm_sec, 1); - - return; -} /* reltime2tm() */ +} /* |