aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/datetime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r--src/backend/utils/adt/datetime.c667
1 files changed, 357 insertions, 310 deletions
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 9809ebf5f11..a88bea36e9c 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -1,17 +1,17 @@
/*-------------------------------------------------------------------------
*
* datetime.c--
- * implements DATE and TIME data types specified in SQL-92 standard
+ * implements DATE and TIME data types specified in SQL-92 standard
*
* Copyright (c) 1994-5, Regents of the University of California
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.13 1997/09/05 18:11:10 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.14 1997/09/07 04:50:08 momjian Exp $
*
*-------------------------------------------------------------------------
*/
-#include <stdio.h> /* for sprintf() */
+#include <stdio.h> /* for sprintf() */
#include <string.h>
#include <limits.h>
@@ -25,12 +25,12 @@
#include "utils/datetime.h"
#include "access/xact.h"
-static int date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn);
+static int date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn);
-static int day_tab[2][12] = {
- {31,28,31,30,31,30,31,31,30,31,30,31},
- {31,29,31,30,31,30,31,31,30,31,30,31} };
+static int day_tab[2][12] = {
+ {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
#define isleap(y) (((y % 4) == 0 && (y % 100) != 0) || (y % 400) == 0)
@@ -49,7 +49,7 @@ static int day_tab[2][12] = {
|| ((m == UTIME_MAXMONTH) && (d <= UTIME_MAXDAY))))))
/*****************************************************************************
- * Date ADT
+ * Date ADT
*****************************************************************************/
@@ -59,234 +59,250 @@ static int day_tab[2][12] = {
DateADT
date_in(char *str)
{
- DateADT date;
- double fsec;
- struct tm tt, *tm = &tt;
- int tzp;
- int dtype;
- int nf;
- char *field[MAXDATEFIELDS];
- int ftype[MAXDATEFIELDS];
- char lowstr[MAXDATELEN+1];
-
- if (!PointerIsValid(str))
- elog(WARN,"Bad (null) date external representation",NULL);
+ DateADT date;
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
+ int tzp;
+ int dtype;
+ int nf;
+ char *field[MAXDATEFIELDS];
+ int ftype[MAXDATEFIELDS];
+ char lowstr[MAXDATELEN + 1];
+
+ if (!PointerIsValid(str))
+ elog(WARN, "Bad (null) date external representation", NULL);
#ifdef DATEDEBUG
-printf( "date_in- input string is %s\n", str);
+ printf("date_in- input string is %s\n", str);
#endif
- if ((ParseDateTime( str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
- || (DecodeDateTime( field, ftype, nf, &dtype, tm, &fsec, &tzp) != 0))
- elog(WARN,"Bad date external representation %s",str);
-
- switch (dtype) {
- case DTK_DATE:
- break;
-
- case DTK_CURRENT:
- GetCurrentTime(tm);
- break;
-
- case DTK_EPOCH:
- tm->tm_year = 1970;
- tm->tm_mon = 1;
- tm->tm_mday = 1;
- break;
-
- default:
- elog(WARN,"Unrecognized date external representation %s",str);
- }
+ if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
+ || (DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tzp) != 0))
+ elog(WARN, "Bad date external representation %s", str);
+
+ switch (dtype)
+ {
+ case DTK_DATE:
+ break;
+
+ case DTK_CURRENT:
+ GetCurrentTime(tm);
+ break;
+
+ case DTK_EPOCH:
+ tm->tm_year = 1970;
+ tm->tm_mon = 1;
+ tm->tm_mday = 1;
+ break;
+
+ default:
+ elog(WARN, "Unrecognized date external representation %s", str);
+ }
- if (tm->tm_year < 0 || tm->tm_year > 32767)
- elog(WARN, "date_in: year must be limited to values 0 through 32767 in '%s'", str);
- if (tm->tm_mon < 1 || tm->tm_mon > 12)
- elog(WARN, "date_in: month must be limited to values 1 through 12 in '%s'", str);
- if (tm->tm_mday < 1 || tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon-1])
- elog(WARN, "date_in: day must be limited to values 1 through %d in '%s'",
- day_tab[isleap(tm->tm_year)][tm->tm_mon-1], str);
+ if (tm->tm_year < 0 || tm->tm_year > 32767)
+ elog(WARN, "date_in: year must be limited to values 0 through 32767 in '%s'", str);
+ if (tm->tm_mon < 1 || tm->tm_mon > 12)
+ elog(WARN, "date_in: month must be limited to values 1 through 12 in '%s'", str);
+ if (tm->tm_mday < 1 || tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1])
+ elog(WARN, "date_in: day must be limited to values 1 through %d in '%s'",
+ day_tab[isleap(tm->tm_year)][tm->tm_mon - 1], str);
- date = (date2j( tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000,1,1));
+ date = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1));
- return(date);
-} /* date_in() */
+ return (date);
+} /* date_in() */
/* date_out()
* Given internal format date, convert to text string.
*/
-char *
+char *
date_out(DateADT date)
{
- char *result;
- struct tm tt, *tm = &tt;
- char buf[MAXDATELEN+1];
+ char *result;
+ struct tm tt,
+ *tm = &tt;
+ char buf[MAXDATELEN + 1];
#if FALSE
- int year, month, day;
+ int year,
+ month,
+ day;
+
#endif
- j2date( (date + date2j(2000,1,1)),
- &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
+ j2date((date + date2j(2000, 1, 1)),
+ &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
- EncodeDateOnly( tm, DateStyle, buf);
+ EncodeDateOnly(tm, DateStyle, buf);
#if FALSE
- if (EuroDates == 1) /* Output European-format dates */
- sprintf(buf, "%02d-%02d-%04d", day, month, year);
- else
- sprintf(buf, "%02d-%02d-%04d", month, day, year);
+ if (EuroDates == 1) /* Output European-format dates */
+ sprintf(buf, "%02d-%02d-%04d", day, month, year);
+ else
+ sprintf(buf, "%02d-%02d-%04d", month, day, year);
#endif
- result = PALLOC(strlen(buf)+1);
+ result = PALLOC(strlen(buf) + 1);
- strcpy( result, buf);
+ strcpy(result, buf);
- return(result);
-} /* date_out() */
+ return (result);
+} /* date_out() */
bool
date_eq(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 == dateVal2);
+ return (dateVal1 == dateVal2);
}
bool
date_ne(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 != dateVal2);
+ return (dateVal1 != dateVal2);
}
bool
date_lt(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 < dateVal2);
-} /* date_lt() */
+ return (dateVal1 < dateVal2);
+} /* date_lt() */
bool
date_le(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 <= dateVal2);
-} /* date_le() */
+ return (dateVal1 <= dateVal2);
+} /* date_le() */
bool
date_gt(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 > dateVal2);
-} /* date_gt() */
+ return (dateVal1 > dateVal2);
+} /* date_gt() */
bool
date_ge(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1 >= dateVal2);
-} /* date_ge() */
+ return (dateVal1 >= dateVal2);
+} /* date_ge() */
int
date_cmp(DateADT dateVal1, DateADT dateVal2)
{
- if (dateVal1 < dateVal2) {
- return -1;
- } else if (dateVal1 > dateVal2) {
- return 1;
- }
- return 0;
-} /* date_cmp() */
+ if (dateVal1 < dateVal2)
+ {
+ return -1;
+ }
+ else if (dateVal1 > dateVal2)
+ {
+ return 1;
+ }
+ return 0;
+} /* date_cmp() */
DateADT
date_larger(DateADT dateVal1, DateADT dateVal2)
{
- return(date_gt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
-} /* date_larger() */
+ return (date_gt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
+} /* date_larger() */
DateADT
date_smaller(DateADT dateVal1, DateADT dateVal2)
{
- return(date_lt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
-} /* date_smaller() */
+ return (date_lt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
+} /* date_smaller() */
/* Compute difference between two dates in days. */
int4
date_mi(DateADT dateVal1, DateADT dateVal2)
{
- return(dateVal1-dateVal2);
-} /* date_mi() */
+ return (dateVal1 - dateVal2);
+} /* date_mi() */
/* Add a number of days to a date, giving a new date.
- Must handle both positive and negative numbers of days. */
+ Must handle both positive and negative numbers of days. */
DateADT
date_pli(DateADT dateVal, int4 days)
{
- return(dateVal+days);
-} /* date_pli() */
+ return (dateVal + days);
+} /* date_pli() */
/* Subtract a number of days from a date, giving a new date. */
DateADT
date_mii(DateADT dateVal, int4 days)
{
- return(date_pli(dateVal, -days));
-} /* date_mii() */
+ return (date_pli(dateVal, -days));
+} /* date_mii() */
/* date_datetime()
* Convert date to datetime data type.
*/
-DateTime *
+DateTime *
date_datetime(DateADT dateVal)
{
- DateTime *result;
- struct tm tt, *tm = &tt;
- int tz;
- double fsec = 0;
- char *tzn;
+ DateTime *result;
+ struct tm tt,
+ *tm = &tt;
+ int tz;
+ double fsec = 0;
+ char *tzn;
- result = PALLOCTYPE(DateTime);
+ result = PALLOCTYPE(DateTime);
- if (date2tm( dateVal, &tz, tm, &fsec, &tzn) != 0)
- elog(WARN,"Unable to convert date to datetime",NULL);
+ if (date2tm(dateVal, &tz, tm, &fsec, &tzn) != 0)
+ elog(WARN, "Unable to convert date to datetime", NULL);
#ifdef DATEDEBUG
-printf( "date_datetime- date is %d.%02d.%02d\n", tm->tm_year, tm->tm_mon, tm->tm_mday);
-printf( "date_datetime- time is %02d:%02d:%02d %.7f\n", tm->tm_hour, tm->tm_min, tm->tm_sec, fsec);
+ printf("date_datetime- date is %d.%02d.%02d\n", tm->tm_year, tm->tm_mon, tm->tm_mday);
+ printf("date_datetime- time is %02d:%02d:%02d %.7f\n", tm->tm_hour, tm->tm_min, tm->tm_sec, fsec);
#endif
- if (tm2datetime( tm, fsec, &tz, result) != 0)
- elog(WARN,"Datetime out of range",NULL);
+ if (tm2datetime(tm, fsec, &tz, result) != 0)
+ elog(WARN, "Datetime out of range", NULL);
- return(result);
-} /* date_datetime() */
+ return (result);
+} /* date_datetime() */
/* datetime_date()
* Convert datetime to date data type.
*/
DateADT
-datetime_date(DateTime *datetime)
+datetime_date(DateTime * datetime)
{
- DateADT result;
- struct tm tt, *tm = &tt;
- int tz;
- double fsec;
- char *tzn;
+ DateADT result;
+ struct tm tt,
+ *tm = &tt;
+ int tz;
+ double fsec;
+ char *tzn;
- if (!PointerIsValid(datetime))
- elog(WARN,"Unable to convert null datetime to date",NULL);
+ if (!PointerIsValid(datetime))
+ elog(WARN, "Unable to convert null datetime to date", NULL);
- if (DATETIME_NOT_FINITE(*datetime))
- elog(WARN,"Unable to convert datetime to date",NULL);
+ if (DATETIME_NOT_FINITE(*datetime))
+ elog(WARN, "Unable to convert datetime to date", NULL);
- if (DATETIME_IS_EPOCH(*datetime)) {
- datetime2tm( SetDateTime(*datetime), NULL, tm, &fsec, NULL);
+ if (DATETIME_IS_EPOCH(*datetime))
+ {
+ datetime2tm(SetDateTime(*datetime), NULL, tm, &fsec, NULL);
- } else if (DATETIME_IS_CURRENT(*datetime)) {
- datetime2tm( SetDateTime(*datetime), &tz, tm, &fsec, &tzn);
+ }
+ else if (DATETIME_IS_CURRENT(*datetime))
+ {
+ datetime2tm(SetDateTime(*datetime), &tz, tm, &fsec, &tzn);
- } else {
- if (datetime2tm( *datetime, &tz, tm, &fsec, &tzn) != 0)
- elog(WARN,"Unable to convert datetime to date",NULL);
- }
+ }
+ else
+ {
+ if (datetime2tm(*datetime, &tz, tm, &fsec, &tzn) != 0)
+ elog(WARN, "Unable to convert datetime to date", NULL);
+ }
- result = (date2j( tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j( 2000, 1, 1));
+ result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1));
- return(result);
-} /* datetime_date() */
+ return (result);
+} /* datetime_date() */
/* abstime_date()
@@ -295,289 +311,320 @@ datetime_date(DateTime *datetime)
DateADT
abstime_date(AbsoluteTime abstime)
{
- DateADT result;
- struct tm tt, *tm = &tt;
- int tz;
-
- switch (abstime) {
- case INVALID_ABSTIME:
- case NOSTART_ABSTIME:
- case NOEND_ABSTIME:
- elog(WARN,"Unable to convert reserved abstime value to date",NULL);
- /* pretend to drop through to make compiler think that result will be set */
-
- case EPOCH_ABSTIME:
- result = date2j(1970,1,1) - date2j(2000,1,1);
- break;
-
- case CURRENT_ABSTIME:
- GetCurrentTime(tm);
- result = date2j( tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000,1,1);
- break;
-
- default:
- abstime2tm(abstime, &tz, tm, NULL);
- result = date2j(tm->tm_year,tm->tm_mon,tm->tm_mday) - date2j(2000,1,1);
- break;
- }
+ DateADT result;
+ struct tm tt,
+ *tm = &tt;
+ int tz;
+
+ switch (abstime)
+ {
+ case INVALID_ABSTIME:
+ case NOSTART_ABSTIME:
+ case NOEND_ABSTIME:
+ elog(WARN, "Unable to convert reserved abstime value to date", NULL);
+
+ /*
+ * pretend to drop through to make compiler think that result will
+ * be set
+ */
+
+ case EPOCH_ABSTIME:
+ result = date2j(1970, 1, 1) - date2j(2000, 1, 1);
+ break;
+
+ case CURRENT_ABSTIME:
+ GetCurrentTime(tm);
+ result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
+ break;
+
+ default:
+ abstime2tm(abstime, &tz, tm, NULL);
+ result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1);
+ break;
+ }
- return(result);
-} /* abstime_date() */
+ return (result);
+} /* abstime_date() */
/* date2tm()
* Convert date to time structure.
* Note that date is an implicit local time, but the system calls assume
- * that everything is GMT. So, convert to GMT, rotate to local time,
- * and then convert again to try to get the time zones correct.
+ * that everything is GMT. So, convert to GMT, rotate to local time,
+ * and then convert again to try to get the time zones correct.
*/
static int
-date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn)
+date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
{
- struct tm *tx;
- time_t utime;
- *fsec = 0;
+ struct tm *tx;
+ time_t utime;
- j2date( (dateVal + date2j( 2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- tm->tm_isdst = -1;
+ *fsec = 0;
- if (IS_VALID_UTIME( tm->tm_year, tm->tm_mon, tm->tm_mday)) {
+ j2date((dateVal + date2j(2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ tm->tm_isdst = -1;
+
+ if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday))
+ {
- /* convert to system time */
- utime = ((dateVal + (date2j(2000,1,1)-date2j(1970,1,1)))*86400);
- utime += (12*60*60); /* rotate to noon to get the right day in time zone */
+ /* convert to system time */
+ utime = ((dateVal + (date2j(2000, 1, 1) - date2j(1970, 1, 1))) * 86400);
+ utime += (12 * 60 * 60);/* rotate to noon to get the right day in
+ * time zone */
#ifdef USE_POSIX_TIME
- tx = localtime(&utime);
+ tx = localtime(&utime);
#ifdef DATEDEBUG
#ifdef HAVE_INT_TIMEZONE
-printf( "date2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s %s dst=%d\n",
- tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, (double) tm->tm_sec,
- tzname[0], tzname[1], tx->tm_isdst);
+ printf("date2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s %s dst=%d\n",
+ tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, (double) tm->tm_sec,
+ tzname[0], tzname[1], tx->tm_isdst);
#endif
#endif
- tm->tm_year = tx->tm_year + 1900;
- tm->tm_mon = tx->tm_mon + 1;
- tm->tm_mday = tx->tm_mday;
+ tm->tm_year = tx->tm_year + 1900;
+ tm->tm_mon = tx->tm_mon + 1;
+ tm->tm_mday = tx->tm_mday;
#if FALSE
- tm->tm_hour = tx->tm_hour;
- tm->tm_min = tx->tm_min;
- tm->tm_sec = tx->tm_sec;
+ tm->tm_hour = tx->tm_hour;
+ tm->tm_min = tx->tm_min;
+ tm->tm_sec = tx->tm_sec;
#endif
- tm->tm_isdst = tx->tm_isdst;
+ tm->tm_isdst = tx->tm_isdst;
#ifdef HAVE_INT_TIMEZONE
- *tzp = (tm->tm_isdst? (timezone - 3600): timezone);
- if (tzn != NULL) *tzn = tzname[(tm->tm_isdst > 0)];
-
-#else /* !HAVE_INT_TIMEZONE */
- tm->tm_gmtoff = tx->tm_gmtoff;
- tm->tm_zone = tx->tm_zone;
-
- *tzp = (tm->tm_isdst? (tm->tm_gmtoff - 3600): tm->tm_gmtoff); /* tm_gmtoff is Sun/DEC-ism */
- if (tzn != NULL) *tzn = tm->tm_zone;
+ *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
+ if (tzn != NULL)
+ *tzn = tzname[(tm->tm_isdst > 0)];
+
+#else /* !HAVE_INT_TIMEZONE */
+ tm->tm_gmtoff = tx->tm_gmtoff;
+ tm->tm_zone = tx->tm_zone;
+
+ *tzp = (tm->tm_isdst ? (tm->tm_gmtoff - 3600) : tm->tm_gmtoff); /* tm_gmtoff is
+ * Sun/DEC-ism */
+ if (tzn != NULL)
+ *tzn = tm->tm_zone;
#endif
-#else /* !USE_POSIX_TIME */
- *tzp = CTimeZone; /* V7 conventions; don't know timezone? */
- if (tzn != NULL) *tzn = CTZName;
+#else /* !USE_POSIX_TIME */
+ *tzp = CTimeZone; /* V7 conventions; don't know timezone? */
+ if (tzn != NULL)
+ *tzn = CTZName;
#endif
- /* otherwise, outside of timezone range so convert to GMT... */
- } else {
+ /* otherwise, outside of timezone range so convert to GMT... */
+ }
+ else
+ {
#if FALSE
- j2date( (dateVal + date2j( 2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
+ j2date((dateVal + date2j(2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
#endif
#ifdef DATEDEBUG
-printf( "date2tm- convert %d-%d-%d %d:%d%d to datetime\n",
- tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
+ printf("date2tm- convert %d-%d-%d %d:%d%d to datetime\n",
+ tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
#endif
- *tzp = 0;
- tm->tm_isdst = 0;
- if (tzn != NULL) *tzn = NULL;
- }
+ *tzp = 0;
+ tm->tm_isdst = 0;
+ if (tzn != NULL)
+ *tzn = NULL;
+ }
- return 0;
-} /* date2tm() */
+ return 0;
+} /* date2tm() */
/*****************************************************************************
- * Time ADT
+ * Time ADT
*****************************************************************************/
-TimeADT *
+TimeADT *
time_in(char *str)
{
- TimeADT *time;
+ TimeADT *time;
- double fsec;
- struct tm tt, *tm = &tt;
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
- int nf;
- char lowstr[MAXDATELEN+1];
- char *field[MAXDATEFIELDS];
- int dtype;
- int ftype[MAXDATEFIELDS];
+ int nf;
+ char lowstr[MAXDATELEN + 1];
+ char *field[MAXDATEFIELDS];
+ int dtype;
+ int ftype[MAXDATEFIELDS];
- if (!PointerIsValid(str))
- elog(WARN,"Bad (null) time external representation",NULL);
+ if (!PointerIsValid(str))
+ elog(WARN, "Bad (null) time external representation", NULL);
- if ((ParseDateTime( str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
- || (DecodeTimeOnly( field, ftype, nf, &dtype, tm, &fsec) != 0))
- elog(WARN,"Bad time external representation '%s'",str);
+ if ((ParseDateTime(str, lowstr, field, ftype, MAXDATEFIELDS, &nf) != 0)
+ || (DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec) != 0))
+ elog(WARN, "Bad time external representation '%s'", str);
- if ((tm->tm_hour < 0) || (tm->tm_hour > 23))
- elog(WARN,"Hour must be limited to values 0 through 23 in '%s'",str);
- if ((tm->tm_min < 0) || (tm->tm_min > 59))
- elog(WARN,"Minute must be limited to values 0 through 59 in '%s'",str);
- if ((tm->tm_sec < 0) || ((tm->tm_sec + fsec) >= 60))
- elog(WARN,"Second must be limited to values 0 through < 60 in '%s'",str);
+ if ((tm->tm_hour < 0) || (tm->tm_hour > 23))
+ elog(WARN, "Hour must be limited to values 0 through 23 in '%s'", str);
+ if ((tm->tm_min < 0) || (tm->tm_min > 59))
+ elog(WARN, "Minute must be limited to values 0 through 59 in '%s'", str);
+ if ((tm->tm_sec < 0) || ((tm->tm_sec + fsec) >= 60))
+ elog(WARN, "Second must be limited to values 0 through < 60 in '%s'", str);
- time = PALLOCTYPE(TimeADT);
+ time = PALLOCTYPE(TimeADT);
- *time = ((((tm->tm_hour*60)+tm->tm_min)*60)+tm->tm_sec+fsec);
+ *time = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
- return(time);
-} /* time_in() */
+ return (time);
+} /* time_in() */
-char *
-time_out(TimeADT *time)
+char *
+time_out(TimeADT * time)
{
- char *result;
- struct tm tt, *tm = &tt;
+ char *result;
+ struct tm tt,
+ *tm = &tt;
+
#if FALSE
- int hour, min, sec;
+ int hour,
+ min,
+ sec;
+
#endif
- double fsec;
- char buf[MAXDATELEN+1];
+ double fsec;
+ char buf[MAXDATELEN + 1];
- if (!PointerIsValid(time))
- return NULL;
+ if (!PointerIsValid(time))
+ return NULL;
- tm->tm_hour = (*time / (60*60));
- tm->tm_min = (((int) (*time / 60)) % 60);
- tm->tm_sec = (((int) *time) % 60);
+ tm->tm_hour = (*time / (60 * 60));
+ tm->tm_min = (((int) (*time / 60)) % 60);
+ tm->tm_sec = (((int) *time) % 60);
- fsec = 0;
+ fsec = 0;
- EncodeTimeOnly( tm, fsec, DateStyle, buf);
+ EncodeTimeOnly(tm, fsec, DateStyle, buf);
#if FALSE
- if (sec == 0.0) {
- sprintf(buf, "%02d:%02d", hour, min);
-
- } else {
- if (fsec == 0) {
- sprintf(buf, "%02d:%02d:%02d", hour, min, sec);
- } else {
- sprintf(buf, "%02d:%02d:%05.2f", hour, min, (sec+fsec));
+ if (sec == 0.0)
+ {
+ sprintf(buf, "%02d:%02d", hour, min);
+
+ }
+ else
+ {
+ if (fsec == 0)
+ {
+ sprintf(buf, "%02d:%02d:%02d", hour, min, sec);
+ }
+ else
+ {
+ sprintf(buf, "%02d:%02d:%05.2f", hour, min, (sec + fsec));
+ }
}
- }
#endif
- result = PALLOC(strlen(buf)+1);
+ result = PALLOC(strlen(buf) + 1);
- strcpy( result, buf);
+ strcpy(result, buf);
- return(result);
-} /* time_out() */
+ return (result);
+} /* time_out() */
bool
-time_eq(TimeADT *time1, TimeADT *time2)
+time_eq(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 == *time2);
-} /* time_eq() */
+ return (*time1 == *time2);
+} /* time_eq() */
bool
-time_ne(TimeADT *time1, TimeADT *time2)
+time_ne(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 != *time2);
-} /* time_eq() */
+ return (*time1 != *time2);
+} /* time_eq() */
bool
-time_lt(TimeADT *time1, TimeADT *time2)
+time_lt(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 < *time2);
-} /* time_eq() */
+ return (*time1 < *time2);
+} /* time_eq() */
bool
-time_le(TimeADT *time1, TimeADT *time2)
+time_le(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 <= *time2);
-} /* time_eq() */
+ return (*time1 <= *time2);
+} /* time_eq() */
bool
-time_gt(TimeADT *time1, TimeADT *time2)
+time_gt(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 > *time2);
-} /* time_eq() */
+ return (*time1 > *time2);
+} /* time_eq() */
bool
-time_ge(TimeADT *time1, TimeADT *time2)
+time_ge(TimeADT * time1, TimeADT * time2)
{
- if (!PointerIsValid(time1) || !PointerIsValid(time2))
- return(FALSE);
+ if (!PointerIsValid(time1) || !PointerIsValid(time2))
+ return (FALSE);
- return(*time1 >= *time2);
-} /* time_eq() */
+ return (*time1 >= *time2);
+} /* time_eq() */
int
-time_cmp(TimeADT *time1, TimeADT *time2)
+time_cmp(TimeADT * time1, TimeADT * time2)
{
- return((*time1 < *time2)? -1: (((*time1 > *time2)? 1: 0)));
-} /* time_cmp() */
+ return ((*time1 < *time2) ? -1 : (((*time1 > *time2) ? 1 : 0)));
+} /* time_cmp() */
/* datetime_datetime()
* Convert date and time to datetime data type.
*/
-DateTime *
-datetime_datetime(DateADT date, TimeADT *time)
+DateTime *
+datetime_datetime(DateADT date, TimeADT * time)
{
- DateTime *result;
+ DateTime *result;
- if (!PointerIsValid(time)) {
- result = PALLOCTYPE(DateTime);
- DATETIME_INVALID(*result);
+ if (!PointerIsValid(time))
+ {
+ result = PALLOCTYPE(DateTime);
+ DATETIME_INVALID(*result);
- } else {
- result = date_datetime(date);
- *result += *time;
- }
+ }
+ else
+ {
+ result = date_datetime(date);
+ *result += *time;
+ }
- return(result);
-} /* datetime_datetime() */
+ return (result);
+} /* datetime_datetime() */
-int32 /* RelativeTime */
+int32 /* RelativeTime */
int42reltime(int32 timevalue)
{
- return(timevalue);
+ return (timevalue);
}