summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/dt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/dt.c')
-rw-r--r--src/backend/utils/adt/dt.c1646
1 files changed, 823 insertions, 823 deletions
diff --git a/src/backend/utils/adt/dt.c b/src/backend/utils/adt/dt.c
index b3eca30144..e7968e9a40 100644
--- a/src/backend/utils/adt/dt.c
+++ b/src/backend/utils/adt/dt.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.38 1997/09/07 04:50:11 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.39 1997/09/08 02:30:37 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -31,38 +31,38 @@
#endif
#include "utils/builtins.h"
-static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
+static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
static int
DecodeNumber(int flen, char *field,
int fmask, int *tmask, struct tm * tm, double *fsec);
static int
DecodeNumberField(int len, char *str,
int fmask, int *tmask, struct tm * tm, double *fsec);
-static int DecodeSpecial(int field, char *lowtoken, int *val);
+static int DecodeSpecial(int field, char *lowtoken, int *val);
static int
DecodeTime(char *str, int fmask, int *tmask,
struct tm * tm, double *fsec);
-static int DecodeTimezone(char *str, int *tzp);
-static int DecodeUnits(int field, char *lowtoken, int *val);
-static int EncodeSpecialDateTime(DateTime dt, char *str);
+static int DecodeTimezone(char *str, int *tzp);
+static int DecodeUnits(int field, char *lowtoken, int *val);
+static int EncodeSpecialDateTime(DateTime dt, char *str);
static datetkn *datebsearch(char *key, datetkn * base, unsigned int nel);
static DateTime dt2local(DateTime dt, int timezone);
-static void dt2time(DateTime dt, int *hour, int *min, double *sec);
-static int j2day(int jd);
-static int timespan2tm(TimeSpan span, struct tm * tm, float8 * fsec);
-static int tm2timespan(struct tm * tm, double fsec, TimeSpan * span);
+static void dt2time(DateTime dt, int *hour, int *min, double *sec);
+static int j2day(int jd);
+static int timespan2tm(TimeSpan span, struct tm * tm, float8 * fsec);
+static int tm2timespan(struct tm * tm, double fsec, TimeSpan * span);
#define USE_DATE_CACHE 1
#define ROUND_ALL 0
#define isleap(y) (((y % 4) == 0) && (((y % 100) != 0) || ((y % 400) == 0)))
-int mdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0};
+int mdays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0};
-char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
-char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
+char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", NULL};
/* TMODULO()
@@ -71,7 +71,7 @@ char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
#define TMODULO(t,q,u) {q = ((t < 0)? ceil(t / u): floor(t / u)); \
if (q != 0) t -= rint(q * u);}
-static void GetEpochTime(struct tm * tm);
+static void GetEpochTime(struct tm * tm);
#define UTIME_MINYEAR (1901)
#define UTIME_MINMONTH (12)
@@ -95,20 +95,20 @@ static void GetEpochTime(struct tm * tm);
/* datetime_in()
* Convert a string to internal form.
*/
-DateTime *
+DateTime *
datetime_in(char *str)
{
- DateTime *result;
-
- double fsec;
- struct tm tt,
- *tm = &tt;
- int tz;
- int dtype;
- int nf;
- char *field[MAXDATEFIELDS];
- int ftype[MAXDATEFIELDS];
- char lowstr[MAXDATELEN + 1];
+ DateTime *result;
+
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
+ int tz;
+ int dtype;
+ int nf;
+ char *field[MAXDATEFIELDS];
+ int ftype[MAXDATEFIELDS];
+ char lowstr[MAXDATELEN + 1];
if (!PointerIsValid(str))
elog(WARN, "Bad (null) datetime external representation", NULL);
@@ -121,38 +121,38 @@ datetime_in(char *str)
switch (dtype)
{
- case DTK_DATE:
- if (tm2datetime(tm, fsec, &tz, result) != 0)
- elog(WARN, "Datetime out of range %s", str);
+ case DTK_DATE:
+ if (tm2datetime(tm, fsec, &tz, result) != 0)
+ elog(WARN, "Datetime out of range %s", str);
#ifdef DATEDEBUG
- printf("datetime_in- date is %f\n", *result);
+ printf("datetime_in- date is %f\n", *result);
#endif
- break;
+ break;
- case DTK_EPOCH:
- DATETIME_EPOCH(*result);
- break;
+ case DTK_EPOCH:
+ DATETIME_EPOCH(*result);
+ break;
- case DTK_CURRENT:
- DATETIME_CURRENT(*result);
- break;
+ case DTK_CURRENT:
+ DATETIME_CURRENT(*result);
+ break;
- case DTK_LATE:
- DATETIME_NOEND(*result);
- break;
+ case DTK_LATE:
+ DATETIME_NOEND(*result);
+ break;
- case DTK_EARLY:
- DATETIME_NOBEGIN(*result);
- break;
+ case DTK_EARLY:
+ DATETIME_NOBEGIN(*result);
+ break;
- case DTK_INVALID:
- DATETIME_INVALID(*result);
- break;
+ case DTK_INVALID:
+ DATETIME_INVALID(*result);
+ break;
- default:
- elog(WARN, "Internal coding error, can't input datetime '%s'", str);
+ default:
+ elog(WARN, "Internal coding error, can't input datetime '%s'", str);
}
return (result);
@@ -161,16 +161,16 @@ datetime_in(char *str)
/* datetime_out()
* Convert a datetime to external form.
*/
-char *
+char *
datetime_out(DateTime * dt)
{
- char *result;
- int tz;
- struct tm tt,
- *tm = &tt;
- double fsec;
- char *tzn;
- char buf[MAXDATELEN + 1];
+ char *result;
+ int tz;
+ struct tm tt,
+ *tm = &tt;
+ double fsec;
+ char *tzn;
+ char buf[MAXDATELEN + 1];
if (!PointerIsValid(dt))
return (NULL);
@@ -204,19 +204,19 @@ datetime_out(DateTime * dt)
* External format(s):
* Uses the generic date/time parsing and decoding routines.
*/
-TimeSpan *
+TimeSpan *
timespan_in(char *str)
{
- TimeSpan *span;
+ TimeSpan *span;
- double fsec;
- struct tm tt,
- *tm = &tt;
- int dtype;
- int nf;
- char *field[MAXDATEFIELDS];
- int ftype[MAXDATEFIELDS];
- char lowstr[MAXDATELEN + 1];
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
+ int dtype;
+ int nf;
+ char *field[MAXDATEFIELDS];
+ int ftype[MAXDATEFIELDS];
+ char lowstr[MAXDATELEN + 1];
tm->tm_year = 0;
tm->tm_mon = 0;
@@ -237,18 +237,18 @@ timespan_in(char *str)
switch (dtype)
{
- case DTK_DELTA:
- if (tm2timespan(tm, fsec, span) != 0)
- {
+ case DTK_DELTA:
+ if (tm2timespan(tm, fsec, span) != 0)
+ {
#if FALSE
- TIMESPAN_INVALID(span);
+ TIMESPAN_INVALID(span);
#endif
- elog(WARN, "Bad timespan external representation %s", str);
- }
- break;
+ elog(WARN, "Bad timespan external representation %s", str);
+ }
+ break;
- default:
- elog(WARN, "Internal coding error, can't input timespan '%s'", str);
+ default:
+ elog(WARN, "Internal coding error, can't input timespan '%s'", str);
}
return (span);
@@ -257,15 +257,15 @@ timespan_in(char *str)
/* timespan_out()
* Convert a time span to external form.
*/
-char *
+char *
timespan_out(TimeSpan * span)
{
- char *result;
+ char *result;
- struct tm tt,
- *tm = &tt;
- double fsec;
- char buf[MAXDATELEN + 1];
+ struct tm tt,
+ *tm = &tt;
+ double fsec;
+ char buf[MAXDATELEN + 1];
if (!PointerIsValid(span))
return (NULL);
@@ -317,8 +317,8 @@ timespan_finite(TimeSpan * timespan)
static void
GetEpochTime(struct tm * tm)
{
- struct tm *t0;
- time_t epoch = 0;
+ struct tm *t0;
+ time_t epoch = 0;
t0 = gmtime(&epoch);
@@ -344,7 +344,7 @@ GetEpochTime(struct tm * tm)
DateTime
SetDateTime(DateTime dt)
{
- struct tm tt;
+ struct tm tt;
if (DATETIME_IS_CURRENT(dt))
{
@@ -373,8 +373,8 @@ SetDateTime(DateTime dt)
bool
datetime_eq(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -396,8 +396,8 @@ datetime_eq(DateTime * datetime1, DateTime * datetime2)
bool
datetime_ne(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -419,8 +419,8 @@ datetime_ne(DateTime * datetime1, DateTime * datetime2)
bool
datetime_lt(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -442,8 +442,8 @@ datetime_lt(DateTime * datetime1, DateTime * datetime2)
bool
datetime_gt(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -468,8 +468,8 @@ datetime_gt(DateTime * datetime1, DateTime * datetime2)
bool
datetime_le(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -491,8 +491,8 @@ datetime_le(DateTime * datetime1, DateTime * datetime2)
bool
datetime_ge(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return FALSE;
@@ -518,8 +518,8 @@ datetime_ge(DateTime * datetime1, DateTime * datetime2)
int
datetime_cmp(DateTime * datetime1, DateTime * datetime2)
{
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return 0;
@@ -580,8 +580,8 @@ timespan_ne(TimeSpan * timespan1, TimeSpan * timespan2)
bool
timespan_lt(TimeSpan * timespan1, TimeSpan * timespan2)
{
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return FALSE;
@@ -602,8 +602,8 @@ timespan_lt(TimeSpan * timespan1, TimeSpan * timespan2)
bool
timespan_gt(TimeSpan * timespan1, TimeSpan * timespan2)
{
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return FALSE;
@@ -624,8 +624,8 @@ timespan_gt(TimeSpan * timespan1, TimeSpan * timespan2)
bool
timespan_le(TimeSpan * timespan1, TimeSpan * timespan2)
{
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return FALSE;
@@ -646,8 +646,8 @@ timespan_le(TimeSpan * timespan1, TimeSpan * timespan2)
bool
timespan_ge(TimeSpan * timespan1, TimeSpan * timespan2)
{
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return FALSE;
@@ -671,8 +671,8 @@ timespan_ge(TimeSpan * timespan1, TimeSpan * timespan2)
int
timespan_cmp(TimeSpan * timespan1, TimeSpan * timespan2)
{
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return 0;
@@ -706,13 +706,13 @@ timespan_cmp(TimeSpan * timespan1, TimeSpan * timespan2)
* actual value.
*---------------------------------------------------------*/
-DateTime *
+DateTime *
datetime_smaller(DateTime * datetime1, DateTime * datetime2)
{
- DateTime *result;
+ DateTime *result;
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return NULL;
@@ -743,13 +743,13 @@ datetime_smaller(DateTime * datetime1, DateTime * datetime2)
return (result);
} /* datetime_smaller() */
-DateTime *
+DateTime *
datetime_larger(DateTime * datetime1, DateTime * datetime2)
{
- DateTime *result;
+ DateTime *result;
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return NULL;
@@ -781,13 +781,13 @@ datetime_larger(DateTime * datetime1, DateTime * datetime2)
} /* datetime_larger() */
-TimeSpan *
+TimeSpan *
datetime_mi(DateTime * datetime1, DateTime * datetime2)
{
- TimeSpan *result;
+ TimeSpan *result;
- DateTime dt1,
- dt2;
+ DateTime dt1,
+ dt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return NULL;
@@ -830,13 +830,13 @@ datetime_mi(DateTime * datetime1, DateTime * datetime2)
* Then, if the next month has fewer days, set the day of month
* to the last day of month.
*/
-DateTime *
+DateTime *
datetime_pl_span(DateTime * datetime, TimeSpan * span)
{
- DateTime *result;
- DateTime dt;
- int tz;
- char *tzn;
+ DateTime *result;
+ DateTime dt;
+ int tz;
+ char *tzn;
if ((!PointerIsValid(datetime)) || (!PointerIsValid(span)))
return NULL;
@@ -869,9 +869,9 @@ datetime_pl_span(DateTime * datetime, TimeSpan * span)
if (span->month != 0)
{
- struct tm tt,
- *tm = &tt;
- double fsec;
+ struct tm tt,
+ *tm = &tt;
+ double fsec;
if (datetime2tm(dt, &tz, tm, &fsec, &tzn) == 0)
{
@@ -924,11 +924,11 @@ datetime_pl_span(DateTime * datetime, TimeSpan * span)
return (result);
} /* datetime_pl_span() */
-DateTime *
+DateTime *
datetime_mi_span(DateTime * datetime, TimeSpan * span)
{
- DateTime *result;
- TimeSpan tspan;
+ DateTime *result;
+ TimeSpan tspan;
if (!PointerIsValid(datetime) || !PointerIsValid(span))
return NULL;
@@ -942,10 +942,10 @@ datetime_mi_span(DateTime * datetime, TimeSpan * span)
} /* datetime_mi_span() */
-TimeSpan *
+TimeSpan *
timespan_um(TimeSpan * timespan)
{
- TimeSpan *result;
+ TimeSpan *result;
if (!PointerIsValid(timespan))
return NULL;
@@ -959,13 +959,13 @@ timespan_um(TimeSpan * timespan)
} /* timespan_um() */
-TimeSpan *
+TimeSpan *
timespan_smaller(TimeSpan * timespan1, TimeSpan * timespan2)
{
- TimeSpan *result;
+ TimeSpan *result;
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return NULL;
@@ -1014,13 +1014,13 @@ timespan_smaller(TimeSpan * timespan1, TimeSpan * timespan2)
return (result);
} /* timespan_smaller() */
-TimeSpan *
+TimeSpan *
timespan_larger(TimeSpan * timespan1, TimeSpan * timespan2)
{
- TimeSpan *result;
+ TimeSpan *result;
- double span1,
- span2;
+ double span1,
+ span2;
if (!PointerIsValid(timespan1) || !PointerIsValid(timespan2))
return NULL;
@@ -1070,10 +1070,10 @@ timespan_larger(TimeSpan * timespan1, TimeSpan * timespan2)
} /* timespan_larger() */
-TimeSpan *
+TimeSpan *
timespan_pl(TimeSpan * span1, TimeSpan * span2)
{
- TimeSpan *result;
+ TimeSpan *result;
if ((!PointerIsValid(span1)) || (!PointerIsValid(span2)))
return NULL;
@@ -1086,10 +1086,10 @@ timespan_pl(TimeSpan * span1, TimeSpan * span2)
return (result);
} /* timespan_pl() */
-TimeSpan *
+TimeSpan *
timespan_mi(TimeSpan * span1, TimeSpan * span2)
{
- TimeSpan *result;
+ TimeSpan *result;
if ((!PointerIsValid(span1)) || (!PointerIsValid(span2)))
return NULL;
@@ -1102,10 +1102,10 @@ timespan_mi(TimeSpan * span1, TimeSpan * span2)
return (result);
} /* timespan_mi() */
-TimeSpan *
+TimeSpan *
timespan_div(TimeSpan * span1, float8 * arg2)
{
- TimeSpan *result;
+ TimeSpan *result;
if ((!PointerIsValid(span1)) || (!PointerIsValid(arg2)))
return NULL;
@@ -1128,22 +1128,22 @@ timespan_div(TimeSpan * span1, float8 * arg2)
* since year and month are out of context once the arithmetic
* is done.
*/
-TimeSpan *
+TimeSpan *
datetime_age(DateTime * datetime1, DateTime * datetime2)
{
- TimeSpan *result;
-
- DateTime dt1,
- dt2;
- double fsec,
- fsec1,
- fsec2;
- struct tm tt,
- *tm = &tt;
- struct tm tt1,
- *tm1 = &tt1;
- struct tm tt2,
- *tm2 = &tt2;
+ TimeSpan *result;
+
+ DateTime dt1,
+ dt2;
+ double fsec,
+ fsec1,
+ fsec2;
+ struct tm tt,
+ *tm = &tt;
+ struct tm tt1,
+ *tm1 = &tt1;
+ struct tm tt2,
+ *tm2 = &tt2;
if (!PointerIsValid(datetime1) || !PointerIsValid(datetime2))
return NULL;
@@ -1275,12 +1275,12 @@ datetime_age(DateTime * datetime1, DateTime * datetime2)
/* datetime_text()
* Convert datetime to text data type.
*/
-text *
+text *
datetime_text(DateTime * datetime)
{
- text *result;
- char *str;
- int len;
+ text *result;
+ char *str;
+ int len;
if (!PointerIsValid(datetime))
return NULL;
@@ -1308,14 +1308,14 @@ datetime_text(DateTime * datetime)
* Text type is not null terminated, so use temporary string
* then call the standard input routine.
*/
-DateTime *
+DateTime *
text_datetime(text * str)
{
- DateTime *result;
- int i;
- char *sp,
- *dp,
- dstr[MAXDATELEN + 1];
+ DateTime *result;
+ int i;
+ char *sp,
+ *dp,
+ dstr[MAXDATELEN + 1];
if (!PointerIsValid(str))
return NULL;
@@ -1335,12 +1335,12 @@ text_datetime(text * str)
/* timespan_text()
* Convert timespan to text data type.
*/
-text *
+text *
timespan_text(TimeSpan * timespan)
{
- text *result;
- char *str;
- int len;
+ text *result;
+ char *str;
+ int len;
if (!PointerIsValid(timespan))
return NULL;
@@ -1369,14 +1369,14 @@ timespan_text(TimeSpan * timespan)
* then call the standard input routine.
*/
#ifdef NOT_USED
-TimeSpan *
+TimeSpan *
text_timespan(text * str)
{
- TimeSpan *result;
- int i;
- char *sp,
- *dp,
- dstr[MAXDATELEN + 1];
+ TimeSpan *result;
+ int i;
+ char *sp,
+ *dp,
+ dstr[MAXDATELEN + 1];
if (!PointerIsValid(str))
return NULL;
@@ -1397,23 +1397,23 @@ text_timespan(text * str)
/* datetime_trunc()
* Extract specified field from datetime.
*/
-DateTime *
+DateTime *
datetime_trunc(text * units, DateTime * datetime)
{
- DateTime *result;
-
- DateTime dt;
- int tz;
- int type,
- val;
- int i;
- char *up,
- *lp,
- lowunits[MAXDATELEN + 1];
- double fsec;
- char *tzn;
- struct tm tt,
- *tm = &tt;
+ DateTime *result;
+
+ DateTime dt;
+ int tz;
+ int type,
+ val;
+ int i;
+ char *up,
+ *lp,
+ lowunits[MAXDATELEN + 1];
+ double fsec;
+ char *tzn;
+ struct tm tt,
+ *tm = &tt;
if ((!PointerIsValid(units)) || (!PointerIsValid(datetime)))
return NULL;
@@ -1457,39 +1457,39 @@ datetime_trunc(text * units, DateTime * datetime)
{
switch (val)
{
- case DTK_MILLENIUM:
- tm->tm_year = (tm->tm_year / 1000) * 1000;
- case DTK_CENTURY:
- tm->tm_year = (tm->tm_year / 100) * 100;
- case DTK_DECADE:
- tm->tm_year = (tm->tm_year / 10) * 10;
- case DTK_YEAR:
- tm->tm_mon = 1;
- case DTK_QUARTER:
- tm->tm_mon = (3 * (tm->tm_mon / 4)) + 1;
- case DTK_MONTH:
- tm->tm_mday = 1;
- case DTK_DAY:
- tm->tm_hour = 0;
- case DTK_HOUR:
- tm->tm_min = 0;
- case DTK_MINUTE:
- tm->tm_sec = 0;
- case DTK_SECOND:
- fsec = 0;
- break;
+ case DTK_MILLENIUM:
+ tm->tm_year = (tm->tm_year / 1000) * 1000;
+ case DTK_CENTURY:
+ tm->tm_year = (tm->tm_year / 100) * 100;
+ case DTK_DECADE:
+ tm->tm_year = (tm->tm_year / 10) * 10;
+ case DTK_YEAR:
+ tm->tm_mon = 1;
+ case DTK_QUARTER:
+ tm->tm_mon = (3 * (tm->tm_mon / 4)) + 1;
+ case DTK_MONTH:
+ tm->tm_mday = 1;
+ case DTK_DAY:
+ tm->tm_hour = 0;
+ case DTK_HOUR:
+ tm->tm_min = 0;
+ case DTK_MINUTE:
+ tm->tm_sec = 0;
+ case DTK_SECOND:
+ fsec = 0;
+ break;
- case DTK_MILLISEC:
- fsec = rint(fsec * 1000) / 1000;
- break;
+ case DTK_MILLISEC:
+ fsec = rint(fsec * 1000) / 1000;
+ break;
- case DTK_MICROSEC:
- fsec = rint(fsec * 1000) / 1000;
- break;
+ case DTK_MICROSEC:
+ fsec = rint(fsec * 1000) / 1000;
+ break;
- default:
- elog(WARN, "Datetime units %s not supported", lowunits);
- result = NULL;
+ default:
+ elog(WARN, "Datetime units %s not supported", lowunits);
+ result = NULL;
}
if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday))
@@ -1545,20 +1545,20 @@ datetime_trunc(text * units, DateTime * datetime)
/* timespan_trunc()
* Extract specified field from timespan.
*/
-TimeSpan *
+TimeSpan *
timespan_trunc(text * units, TimeSpan * timespan)
{
- TimeSpan *result;
-
- int type,
- val;
- int i;
- char *up,
- *lp,
- lowunits[MAXDATELEN + 1];
- double fsec;
- struct tm tt,
- *tm = &tt;
+ TimeSpan *result;
+
+ int type,
+ val;
+ int i;
+ char *up,
+ *lp,
+ lowunits[MAXDATELEN + 1];
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
if ((!PointerIsValid(units)) || (!PointerIsValid(timespan)))
return NULL;
@@ -1600,39 +1600,39 @@ timespan_trunc(text * units, TimeSpan * timespan)
{
switch (val)
{
- case DTK_MILLENIUM:
- tm->tm_year = (tm->tm_year / 1000) * 1000;
- case DTK_CENTURY:
- tm->tm_year = (tm->tm_year / 100) * 100;
- case DTK_DECADE:
- tm->tm_year = (tm->tm_year / 10) * 10;
- case DTK_YEAR:
- tm->tm_mon = 0;
- case DTK_QUARTER:
- tm->tm_mon = (3 * (tm->tm_mon / 4));
- case DTK_MONTH:
- tm->tm_mday = 0;
- case DTK_DAY:
- tm->tm_hour = 0;
- case DTK_HOUR:
- tm->tm_min = 0;
- case DTK_MINUTE:
- tm->tm_sec = 0;
- case DTK_SECOND:
- fsec = 0;
- break;
+ case DTK_MILLENIUM:
+ tm->tm_year = (tm->tm_year / 1000) * 1000;
+ case DTK_CENTURY:
+ tm->tm_year = (tm->tm_year / 100) * 100;
+ case DTK_DECADE:
+ tm->tm_year = (tm->tm_year / 10) * 10;
+ case DTK_YEAR:
+ tm->tm_mon = 0;
+ case DTK_QUARTER:
+ tm->tm_mon = (3 * (tm->tm_mon / 4));
+ case DTK_MONTH:
+ tm->tm_mday = 0;
+ case DTK_DAY:
+ tm->tm_hour = 0;
+ case DTK_HOUR:
+ tm->tm_min = 0;
+ case DTK_MINUTE:
+ tm->tm_sec = 0;
+ case DTK_SECOND:
+ fsec = 0;
+ break;
- case DTK_MILLISEC:
- fsec = rint(fsec * 1000) / 1000;
- break;
+ case DTK_MILLISEC:
+ fsec = rint(fsec * 1000) / 1000;
+ break;
- case DTK_MICROSEC:
- fsec = rint(fsec * 1000) / 1000;
- break;
+ case DTK_MICROSEC:
+ fsec = rint(fsec * 1000) / 1000;
+ break;
- default:
- elog(WARN, "Timespan units %s not supported", lowunits);
- result = NULL;
+ default:
+ elog(WARN, "Timespan units %s not supported", lowunits);
+ result = NULL;
}
if (tm2timespan(tm, fsec, result) != 0)
@@ -1674,20 +1674,20 @@ timespan_trunc(text * units, TimeSpan * timespan)
float64
datetime_part(text * units, DateTime * datetime)
{
- float64 result;
-
- DateTime dt;
- int tz;
- int type,
- val;
- int i;
- char *up,
- *lp,
- lowunits[MAXDATELEN + 1];
- double fsec;
- char *tzn;
- struct tm tt,
- *tm = &tt;
+ float64 result;
+
+ DateTime dt;
+ int tz;
+ int type,
+ val;
+ int i;
+ char *up,
+ *lp,
+ lowunits[MAXDATELEN + 1];
+ double fsec;
+ char *tzn;
+ struct tm tt,
+ *tm = &tt;
if ((!PointerIsValid(units)) || (!PointerIsValid(datetime)))
return NULL;
@@ -1729,61 +1729,61 @@ datetime_part(text * units, DateTime * datetime)
{
switch (val)
{
- case DTK_TZ:
- *result = tz;
- break;
+ case DTK_TZ:
+ *result = tz;
+ break;
- case DTK_MICROSEC:
- *result = (fsec * 1000000);
- break;
+ case DTK_MICROSEC:
+ *result = (fsec * 1000000);
+ break;
- case DTK_MILLISEC:
- *result = (fsec * 1000);
- break;
+ case DTK_MILLISEC:
+ *result = (fsec * 1000);
+ break;
- case DTK_SECOND:
- *result = (tm->tm_sec + fsec);
- break;
+ case DTK_SECOND:
+ *result = (tm->tm_sec + fsec);
+ break;
- case DTK_MINUTE:
- *result = tm->tm_min;
- break;
+ case DTK_MINUTE:
+ *result = tm->tm_min;
+ break;
- case DTK_HOUR:
- *result = tm->tm_hour;
- break;
+ case DTK_HOUR:
+ *result = tm->tm_hour;
+ break;
- case DTK_DAY:
- *result = tm->tm_mday;
- break;
+ case DTK_DAY:
+ *result = tm->tm_mday;
+ break;
- case DTK_MONTH:
- *result = tm->tm_mon;
- break;
+ case DTK_MONTH:
+ *result = tm->tm_mon;
+ break;
- case DTK_QUARTER:
- *result = (tm->tm_mon / 4) + 1;
- break;
+ case DTK_QUARTER:
+ *result = (tm->tm_mon / 4) + 1;
+ break;
- case DTK_YEAR:
- *result = tm->tm_year;
- break;
+ case DTK_YEAR:
+ *result = tm->tm_year;
+ break;
- case DTK_DECADE:
- *result = (tm->tm_year / 10) + 1;
- break;
+ case DTK_DECADE:
+ *result = (tm->tm_year / 10) + 1;
+ break;
- case DTK_CENTURY:
- *result = (tm->tm_year / 100) + 1;
- break;
+ case DTK_CENTURY:
+ *result = (tm->tm_year / 100) + 1;
+ break;
- case DTK_MILLENIUM:
- *result = (tm->tm_year / 1000) + 1;
- break;
+ case DTK_MILLENIUM:
+ *result = (tm->tm_year / 1000) + 1;
+ break;
- default:
- elog(WARN, "Datetime units %s not supported", lowunits);
- *result = 0;
+ default:
+ elog(WARN, "Datetime units %s not supported", lowunits);
+ *result = 0;
}
}
@@ -1791,21 +1791,21 @@ datetime_part(text * units, DateTime * datetime)
{
switch (val)
{
- case DTK_EPOCH:
- DATETIME_EPOCH(*result);
- *result = dt - SetDateTime(*result);
- break;
+ case DTK_EPOCH:
+ DATETIME_EPOCH(*result);
+ *result = dt - SetDateTime(*result);
+ break;
- case DTK_DOW:
- if (datetime2tm(dt, &tz, tm, &fsec, &tzn) != 0)
- elog(WARN, "Unable to encode datetime", NULL);
+ case DTK_DOW:
+ if (datetime2tm(dt, &tz, tm, &fsec, &tzn) != 0)
+ elog(WARN, "Unable to encode datetime", NULL);
- *result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
- break;
+ *result = j2day(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday));
+ break;
- default:
- elog(WARN, "Datetime units %s not supported", lowunits);
- *result = 0;
+ default:
+ elog(WARN, "Datetime units %s not supported", lowunits);
+ *result = 0;
}
}
@@ -1826,17 +1826,17 @@ datetime_part(text * units, DateTime * datetime)
float64
timespan_part(text * units, TimeSpan * timespan)
{
- float64 result;
-
- int type,
- val;
- int i;
- char *up,
- *lp,
- lowunits[MAXDATELEN + 1];
- double fsec;
- struct tm tt,
- *tm = &tt;
+ float64 result;
+
+ int type,
+ val;
+ int i;
+ char *up,
+ *lp,
+ lowunits[MAXDATELEN + 1];
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
if ((!PointerIsValid(units)) || (!PointerIsValid(timespan)))
return NULL;
@@ -1876,57 +1876,57 @@ timespan_part(text * units, TimeSpan * timespan)
{
switch (val)
{
- case DTK_MICROSEC:
- *result = (fsec * 1000000);
- break;
+ case DTK_MICROSEC:
+ *result = (fsec * 1000000);
+ break;
- case DTK_MILLISEC:
- *result = (fsec * 1000);
- break;
+ case DTK_MILLISEC:
+ *result = (fsec * 1000);
+ break;
- case DTK_SECOND:
- *result = (tm->tm_sec + fsec);
- break;
+ case DTK_SECOND:
+ *result = (tm->tm_sec + fsec);
+ break;
- case DTK_MINUTE:
- *result = tm->tm_min;
- break;
+ case DTK_MINUTE:
+ *result = tm->tm_min;
+ break;
- case DTK_HOUR:
- *result = tm->tm_hour;
- break;
+ case DTK_HOUR:
+ *result = tm->tm_hour;
+ break;
- case DTK_DAY:
- *result = tm->tm_mday;
- break;
+ case DTK_DAY:
+ *result = tm->tm_mday;
+ break;
- case DTK_MONTH:
- *result = tm->tm_mon;
- break;
+ case DTK_MONTH:
+ *result = tm->tm_mon;
+ break;
- case DTK_QUARTER:
- *result = (tm->tm_mon / 4) + 1;
- break;
+ case DTK_QUARTER:
+ *result = (tm->tm_mon / 4) + 1;
+ break;
- case DTK_YEAR:
- *result = tm->tm_year;
- break;
+ case DTK_YEAR:
+ *result = tm->tm_year;
+ break;
- case DTK_DECADE:
- *result = (tm->tm_year / 10) + 1;
- break;
+ case DTK_DECADE:
+ *result = (tm->tm_year / 10) + 1;
+ break;
- case DTK_CENTURY:
- *result = (tm->tm_year / 100) + 1;
- break;
+ case DTK_CENTURY:
+ *result = (tm->tm_year / 100) + 1;
+ break;
- case DTK_MILLENIUM:
- *result = (tm->tm_year / 1000) + 1;
- break;
+ case DTK_MILLENIUM:
+ *result = (tm->tm_year / 1000) + 1;
+ break;
- default:
- elog(WARN, "Timespan units %s not yet supported", units);
- result = NULL;
+ default:
+ elog(WARN, "Timespan units %s not yet supported", units);
+ result = NULL;
}
}
@@ -1960,26 +1960,26 @@ timespan_part(text * units, TimeSpan * timespan)
/* datetime_zone()
* Encode datetime type with specified time zone.
*/
-text *
+text *
datetime_zone(text * zone, DateTime * datetime)
{
- text *result;
-
- DateTime dt;
- int tz;
- int type,
- val;
- int i;
- char *up,
- *lp,
- lowzone[MAXDATELEN + 1];
- char *tzn,
- upzone[MAXDATELEN + 1];
- double fsec;
- struct tm tt,
- *tm = &tt;
- char buf[MAXDATELEN + 1];
- int len;
+ text *result;
+
+ DateTime dt;
+ int tz;
+ int type,
+ val;
+ int i;
+ char *up,
+ *lp,
+ lowzone[MAXDATELEN + 1];
+ char *tzn,
+ upzone[MAXDATELEN + 1];
+ double fsec;
+ struct tm tt,
+ *tm = &tt;
+ char buf[MAXDATELEN + 1];
+ int len;
if ((!PointerIsValid(zone)) || (!PointerIsValid(datetime)))
return NULL;
@@ -2064,7 +2064,7 @@ datetime_zone(text * zone, DateTime * datetime)
* entries by 10 and truncate the text field at MAXTOKLEN characters.
* the text field is not guaranteed to be NULL-terminated.
*/
-static datetkn datetktbl[] = {
+static datetkn datetktbl[] = {
/* text token lexval */
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
{"acsst", DTZ, 63}, /* Cent. Australia */
@@ -2218,7 +2218,7 @@ static datetkn datetktbl[] = {
static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
-static datetkn deltatktbl[] = {
+static datetkn deltatktbl[] = {
/* text token lexval */
{"@", IGNORE, 0}, /* postgres relative time prefix */
{DAGO, AGO, 0}, /* "ago" indicates negative time offset */
@@ -2302,9 +2302,9 @@ static datetkn deltatktbl[] = {
static unsigned int szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0];
#if USE_DATE_CACHE
-datetkn *datecache[MAXDATEFIELDS] = {NULL};
+datetkn *datecache[MAXDATEFIELDS] = {NULL};
-datetkn *deltacache[MAXDATEFIELDS] = {NULL};
+datetkn *deltacache[MAXDATEFIELDS] = {NULL};
#endif
@@ -2341,7 +2341,7 @@ datetkn *deltacache[MAXDATEFIELDS] = {NULL};
int
date2j(int y, int m, int d)
{
- int m12 = (m - 14) / 12;
+ int m12 = (m - 14) / 12;
return ((1461 * (y + 4800 + m12)) / 4 + (367 * (m - 2 - 12 * (m12))) / 12
- (3 * ((y + 4900 + m12) / 100)) / 4 + d - 32075);
@@ -2350,14 +2350,14 @@ date2j(int y, int m, int d)
void
j2date(int jd, int *year, int *month, int *day)
{
- int j,
- y,
- m,
- d;
+ int j,
+ y,
+ m,
+ d;
- int i,
- l,
- n;
+ int i,
+ l,
+ n;
l = jd + 68569;
n = (4 * l) / 146097;
@@ -2379,7 +2379,7 @@ j2date(int jd, int *year, int *month, int *day)
static int
j2day(int date)
{
- int day;
+ int day;
day = (date + 1) % 7;
@@ -2401,14 +2401,14 @@ j2day(int date)
int
datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn)
{
- double date,
- date0,
- time,
- sec;
- time_t utime;
+ double date,
+ date0,
+ time,
+ sec;
+ time_t utime;
#ifdef USE_POSIX_TIME
- struct tm *tx;
+ struct tm *tx;
#endif
@@ -2556,8 +2556,8 @@ int
tm2datetime(struct tm * tm, double fsec, int *tzp, DateTime * result)
{
- double date,
- time;
+ double date,
+ time;
/* Julian day routines are not correct for negative Julian days */
if (!IS_VALID_JULIAN(tm->tm_year, tm->tm_mon, tm->tm_mday))
@@ -2583,7 +2583,7 @@ tm2datetime(struct tm * tm, double fsec, int *tzp, DateTime * result)
static int
timespan2tm(TimeSpan span, struct tm * tm, float8 * fsec)
{
- double time;
+ double time;
if (span.month != 0)
{
@@ -2633,7 +2633,7 @@ tm2timespan(struct tm * tm, double fsec, TimeSpan * span)
} /* tm2timespan() */
-static DateTime
+static DateTime
dt2local(DateTime dt, int tz)
{
dt -= tz;
@@ -2650,7 +2650,7 @@ time2t(const int hour, const int min, const double sec)
static void
dt2time(DateTime jd, int *hour, int *min, double *sec)
{
- double time;
+ double time;
time = jd;
@@ -2677,9 +2677,9 @@ int
ParseDateTime(char *timestr, char *lowstr,
char *field[], int ftype[], int maxfields, int *numfields)
{
- int nf = 0;
- char *cp = timestr;
- char *lp = lowstr;
+ int nf = 0;
+ char *cp = timestr;
+ char *lp = lowstr;
#ifdef DATEDEBUG
printf("ParseDateTime- input string is %s\n", timestr);
@@ -2833,14 +2833,14 @@ int
DecodeDateTime(char *field[], int ftype[], int nf,
int *dtype, struct tm * tm, double *fsec, int *tzp)
{
- int fmask = 0,
- tmask,
- type;
- int i;
- int flen,
- val;
- int mer = HR24;
- int bc = FALSE;
+ int fmask = 0,
+ tmask,
+ type;
+ int i;
+ int flen,
+ val;
+ int mer = HR24;
+ int bc = FALSE;
*dtype = DTK_DATE;
tm->tm_hour = 0;
@@ -2859,181 +2859,181 @@ DecodeDateTime(char *field[], int ftype[], int nf,
#endif
switch (ftype[i])
{
- case DTK_DATE:
- if (DecodeDate(field[i], fmask, &tmask, tm) != 0)
- return -1;
- break;
-
- case DTK_TIME:
- if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
- return -1;
-
- /*
- * check upper limit on hours; other limits checked in
- * DecodeTime()
- */
- if (tm->tm_hour > 23)
- return -1;
- break;
-
- case DTK_TZ:
- if (tzp == NULL)
- return -1;
- if (DecodeTimezone(field[i], tzp) != 0)
- return -1;
- tmask = DTK_M(TZ);
- break;
-
- case DTK_NUMBER:
- flen = strlen(field[i]);
-
- if (flen > 4)
- {
- if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec) != 0)
- return -1;
-
- }
- else
- {
- if (DecodeNumber(flen, field[i], fmask, &tmask, tm, fsec) != 0)
+ case DTK_DATE:
+ if (DecodeDate(field[i], fmask, &tmask, tm) != 0)
return -1;
- }
- break;
-
- case DTK_STRING:
- case DTK_SPECIAL:
- type = DecodeSpecial(i, field[i], &val);
-#ifdef DATEDEBUG
- printf("DecodeDateTime- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
-#endif
- if (type == IGNORE)
- continue;
-
- tmask = DTK_M(type);
- switch (type)
- {
- case RESERV:
-#ifdef DATEDEBUG
- printf("DecodeDateTime- RESERV field %s value is %d\n", field[i], val);
-#endif
- switch (val)
- {
- case DTK_NOW:
- tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
- *dtype = DTK_DATE;
- GetCurrentTime(tm);
- if (tzp != NULL)
- *tzp = CTimeZone;
- break;
-
- case DTK_YESTERDAY:
- tmask = DTK_DATE_M;
- *dtype = DTK_DATE;
- GetCurrentTime(tm);
- j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - 1),
- &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- break;
-
- case DTK_TODAY:
- tmask = DTK_DATE_M;
- *dtype = DTK_DATE;
- GetCurrentTime(tm);
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- break;
-
- case DTK_TOMORROW:
- tmask = DTK_DATE_M;
- *dtype = DTK_DATE;
- GetCurrentTime(tm);
- j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + 1),
- &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- break;
-
- case DTK_ZULU:
- tmask = (DTK_TIME_M | DTK_M(TZ));
- *dtype = DTK_DATE;
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- if (tzp != NULL)
- *tzp = 0;
- break;
-
- default:
- *dtype = val;
- }
-
- break;
-
- case MONTH:
-#ifdef DATEDEBUG
- printf("DecodeDateTime- month field %s value is %d\n", field[i], val);
-#endif
- tm->tm_mon = val;
break;
- /*
- * daylight savings time modifier (solves "MET DST"
- * syntax)
- */
- case DTZMOD:
- tmask |= DTK_M(DTZ);
- tm->tm_isdst = 1;
- if (tzp == NULL)
+ case DTK_TIME:
+ if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
return -1;
- *tzp += val * 60;
- break;
-
- case DTZ:
/*
- * set mask for TZ here _or_ check for DTZ later when
- * getting default timezone
+ * check upper limit on hours; other limits checked in
+ * DecodeTime()
*/
- tmask |= DTK_M(TZ);
- tm->tm_isdst = 1;
- if (tzp == NULL)
+ if (tm->tm_hour > 23)
return -1;
- *tzp = val * 60;
break;
- case TZ:
- tm->tm_isdst = 0;
+ case DTK_TZ:
if (tzp == NULL)
return -1;
- *tzp = val * 60;
+ if (DecodeTimezone(field[i], tzp) != 0)
+ return -1;
+ tmask = DTK_M(TZ);
break;
- case IGNORE:
- break;
+ case DTK_NUMBER:
+ flen = strlen(field[i]);
- case AMPM:
- mer = val;
- break;
+ if (flen > 4)
+ {
+ if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec) != 0)
+ return -1;
- case ADBC:
- bc = (val == BC);
+ }
+ else
+ {
+ if (DecodeNumber(flen, field[i], fmask, &tmask, tm, fsec) != 0)
+ return -1;
+ }
break;
- case DOW:
- tm->tm_wday = val;
+ case DTK_STRING:
+ case DTK_SPECIAL:
+ type = DecodeSpecial(i, field[i], &val);
+#ifdef DATEDEBUG
+ printf("DecodeDateTime- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
+#endif
+ if (type == IGNORE)
+ continue;
+
+ tmask = DTK_M(type);
+ switch (type)
+ {
+ case RESERV:
+#ifdef DATEDEBUG
+ printf("DecodeDateTime- RESERV field %s value is %d\n", field[i], val);
+#endif
+ switch (val)
+ {
+ case DTK_NOW:
+ tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
+ *dtype = DTK_DATE;
+ GetCurrentTime(tm);
+ if (tzp != NULL)
+ *tzp = CTimeZone;
+ break;
+
+ case DTK_YESTERDAY:
+ tmask = DTK_DATE_M;
+ *dtype = DTK_DATE;
+ GetCurrentTime(tm);
+ j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - 1),
+ &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ break;
+
+ case DTK_TODAY:
+ tmask = DTK_DATE_M;
+ *dtype = DTK_DATE;
+ GetCurrentTime(tm);
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ break;
+
+ case DTK_TOMORROW:
+ tmask = DTK_DATE_M;
+ *dtype = DTK_DATE;
+ GetCurrentTime(tm);
+ j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + 1),
+ &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ break;
+
+ case DTK_ZULU:
+ tmask = (DTK_TIME_M | DTK_M(TZ));
+ *dtype = DTK_DATE;
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ if (tzp != NULL)
+ *tzp = 0;
+ break;
+
+ default:
+ *dtype = val;
+ }
+
+ break;
+
+ case MONTH:
+#ifdef DATEDEBUG
+ printf("DecodeDateTime- month field %s value is %d\n", field[i], val);
+#endif
+ tm->tm_mon = val;
+ break;
+
+ /*
+ * daylight savings time modifier (solves "MET
+ * DST" syntax)
+ */
+ case DTZMOD:
+ tmask |= DTK_M(DTZ);
+ tm->tm_isdst = 1;
+ if (tzp == NULL)
+ return -1;
+ *tzp += val * 60;
+ break;
+
+ case DTZ:
+
+ /*
+ * set mask for TZ here _or_ check for DTZ later
+ * when getting default timezone
+ */
+ tmask |= DTK_M(TZ);
+ tm->tm_isdst = 1;
+ if (tzp == NULL)
+ return -1;
+ *tzp = val * 60;
+ break;
+
+ case TZ:
+ tm->tm_isdst = 0;
+ if (tzp == NULL)
+ return -1;
+ *tzp = val * 60;
+ break;
+
+ case IGNORE:
+ break;
+
+ case AMPM:
+ mer = val;
+ break;
+
+ case ADBC:
+ bc = (val == BC);
+ break;
+
+ case DOW:
+ tm->tm_wday = val;
+ break;
+
+ default:
+ return -1;
+ }
break;
default:
return -1;
- }
- break;
-
- default:
- return -1;
}
#ifdef DATEDEBUG
@@ -3114,13 +3114,13 @@ DecodeDateTime(char *field[], int ftype[], int nf,
int
DecodeTimeOnly(char *field[], int ftype[], int nf, int *dtype, struct tm * tm, double *fsec)
{
- int fmask,
- tmask,
- type;
- int i;
- int flen,
- val;
- int mer = HR24;
+ int fmask,
+ tmask,
+ type;
+ int i;
+ int flen,
+ val;
+ int mer = HR24;
*dtype = DTK_TIME;
tm->tm_hour = 0;
@@ -3138,71 +3138,71 @@ DecodeTimeOnly(char *field[], int ftype[], int nf, int *dtype, struct tm * tm, d
#endif
switch (ftype[i])
{
- case DTK_TIME:
- if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
- return -1;
- break;
+ case DTK_TIME:
+ if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
+ return -1;
+ break;
- case DTK_NUMBER:
- flen = strlen(field[i]);
+ case DTK_NUMBER:
+ flen = strlen(field[i]);
- if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec) != 0)
- return -1;
- break;
+ if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec) != 0)
+ return -1;
+ break;
- case DTK_STRING:
- case DTK_SPECIAL:
- type = DecodeSpecial(i, field[i], &val);
+ case DTK_STRING:
+ case DTK_SPECIAL:
+ type = DecodeSpecial(i, field[i], &val);
#ifdef DATEDEBUG
- printf("DecodeTimeOnly- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
+ printf("DecodeTimeOnly- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
#endif
- if (type == IGNORE)
- continue;
+ if (type == IGNORE)
+ continue;
- tmask = DTK_M(type);
- switch (type)
- {
- case RESERV:
+ tmask = DTK_M(type);
+ switch (type)
+ {
+ case RESERV:
#ifdef DATEDEBUG
- printf("DecodeTimeOnly- RESERV field %s value is %d\n", field[i], val);
+ printf("DecodeTimeOnly- RESERV field %s value is %d\n", field[i], val);
#endif
- switch (val)
- {
- case DTK_NOW:
- tmask = DTK_TIME_M;
- *dtype = DTK_TIME;
- GetCurrentTime(tm);
- break;
-
- case DTK_ZULU:
- tmask = (DTK_TIME_M | DTK_M(TZ));
- *dtype = DTK_TIME;
- tm->tm_hour = 0;
- tm->tm_min = 0;
- tm->tm_sec = 0;
- tm->tm_isdst = 0;
- break;
-
- default:
- return -1;
+ switch (val)
+ {
+ case DTK_NOW:
+ tmask = DTK_TIME_M;
+ *dtype = DTK_TIME;
+ GetCurrentTime(tm);
+ break;
+
+ case DTK_ZULU:
+ tmask = (DTK_TIME_M | DTK_M(TZ));
+ *dtype = DTK_TIME;
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ tm->tm_isdst = 0;
+ break;
+
+ default:
+ return -1;
+ }
+
+ break;
+
+ case IGNORE:
+ break;
+
+ case AMPM:
+ mer = val;
+ break;
+
+ default:
+ return -1;
}
-
- break;
-
- case IGNORE:
- break;
-
- case AMPM:
- mer = val;
break;
default:
return -1;
- }
- break;
-
- default:
- return -1;
}
if (tmask & fmask)
@@ -3238,15 +3238,15 @@ DecodeTimeOnly(char *field[], int ftype[], int nf, int *dtype, struct tm * tm, d
static int
DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
{
- double fsec;
+ double fsec;
- int nf = 0;
- int i,
- len;
- int type,
- val,
- dmask = 0;
- char *field[MAXDATEFIELDS];
+ int nf = 0;
+ int i,
+ len;
+ int type,
+ val,
+ dmask = 0;
+ char *field[MAXDATEFIELDS];
/* parse this string... */
while ((*str != '\0') && (nf < MAXDATEFIELDS))
@@ -3290,18 +3290,18 @@ DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
dmask = DTK_M(type);
switch (type)
{
- case MONTH:
+ case MONTH:
#ifdef DATEDEBUG
- printf("DecodeDate- month field %s value is %d\n", field[i], val);
+ printf("DecodeDate- month field %s value is %d\n", field[i], val);
#endif
- tm->tm_mon = val;
- break;
+ tm->tm_mon = val;
+ break;
- default:
+ default:
#ifdef DATEDEBUG
- printf("DecodeDate- illegal field %s value is %d\n", field[i], val);
+ printf("DecodeDate- illegal field %s value is %d\n", field[i], val);
#endif
- return -1;
+ return -1;
}
if (fmask & dmask)
return -1;
@@ -3345,7 +3345,7 @@ DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
static int
DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, double *fsec)
{
- char *cp;
+ char *cp;
*tmask = DTK_TIME_M;
@@ -3402,8 +3402,8 @@ DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, double *fsec)
static int
DecodeNumber(int flen, char *str, int fmask, int *tmask, struct tm * tm, double *fsec)
{
- int val;
- char *cp;
+ int val;
+ char *cp;
*tmask = 0;
@@ -3531,7 +3531,7 @@ DecodeNumber(int flen, char *str, int fmask, int *tmask, struct tm * tm, double
static int
DecodeNumberField(int len, char *str, int fmask, int *tmask, struct tm * tm, double *fsec)
{
- char *cp;
+ char *cp;
/* yyyymmdd? */
if (len == 8)
@@ -3616,11 +3616,11 @@ DecodeNumberField(int len, char *str, int fmask, int *tmask, struct tm * tm, dou
static int
DecodeTimezone(char *str, int *tzp)
{
- int tz;
- int hr,
- min;
- char *cp;
- int len;
+ int tz;
+ int hr,
+ min;
+ char *cp;
+ int len;
/* assume leading character is "+" or "-" */
hr = strtol((str + 1), &cp, 10);
@@ -3661,8 +3661,8 @@ DecodeTimezone(char *str, int *tzp)
static int
DecodeSpecial(int field, char *lowtoken, int *val)
{
- int type;
- datetkn *tp;
+ int type;
+ datetkn *tp;
#if USE_DATE_CACHE
if ((datecache[field] != NULL)
@@ -3688,15 +3688,15 @@ DecodeSpecial(int field, char *lowtoken, int *val)
type = tp->type;
switch (type)
{
- case TZ:
- case DTZ:
- case DTZMOD:
- *val = FROMVAL(tp);
- break;
+ case TZ:
+ case DTZ:
+ case DTZMOD:
+ *val = FROMVAL(tp);
+ break;
- default:
- *val = tp->value;
- break;
+ default:
+ *val = tp->value;
+ break;
}
}
@@ -3715,22 +3715,22 @@ DecodeSpecial(int field, char *lowtoken, int *val)
int
DecodeDateDelta(char *field[], int ftype[], int nf, int *dtype, struct tm * tm, double *fsec)
{
- int is_before = FALSE;
+ int is_before = FALSE;
#if READ_FORWARD
- int is_neg = FALSE;
+ int is_neg = FALSE;
#endif
- int fmask = 0,
- tmask,
- type;
- int i,
- ii;
- int flen,
- val;
- char *cp;
- double sec;
+ int fmask = 0,
+ tmask,
+ type;
+ int i,
+ ii;
+ int flen,
+ val;
+ char *cp;
+ double sec;
*dtype = DTK_DELTA;
@@ -3773,137 +3773,137 @@ DecodeDateDelta(char *field[], int ftype[], int nf, int *dtype, struct tm * tm,
#endif
switch (ftype[i])
{
- case DTK_TIME:
- /* already read in forward-scan above so return error */
+ case DTK_TIME:
+ /* already read in forward-scan above so return error */
#if FALSE
- if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
- return -1;
+ if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
+ return -1;
#endif
- return -1;
- break;
+ return -1;
+ break;
- case DTK_TZ: /* timezone is a token with a leading sign
+ case DTK_TZ: /* timezone is a token with a leading sign
* character */
#if READ_FORWARD
- is_neg = (*field[i] == '-');
+ is_neg = (*field[i] == '-');
#endif
- case DTK_NUMBER:
- val = strtol(field[i], &cp, 10);
+ case DTK_NUMBER:
+ val = strtol(field[i], &cp, 10);
#if READ_FORWARD
- if (is_neg && (val > 0))
- val = -val;
+ if (is_neg && (val > 0))
+ val = -val;
#endif
- if (*cp == '.')
- {
- *fsec = strtod(cp, NULL);
- if (val < 0)
- *fsec = -(*fsec);
- }
- flen = strlen(field[i]);
- tmask = 0; /* DTK_M(type); */
-
- switch (type)
- {
- case DTK_MICROSEC:
- *fsec += (val * 1e-6);
- break;
-
- case DTK_MILLISEC:
- *fsec += (val * 1e-3);
- break;
-
- case DTK_SECOND:
- tm->tm_sec += val;
- tmask = DTK_M(SECOND);
- break;
-
- case DTK_MINUTE:
- tm->tm_min += val;
- tmask = DTK_M(MINUTE);
- break;
-
- case DTK_HOUR:
- tm->tm_hour += val;
- tmask = DTK_M(HOUR);
- break;
-
- case DTK_DAY:
- tm->tm_mday += val;
- tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
- break;
-
- case DTK_WEEK:
- tm->tm_mday += val * 7;
- tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
- break;
-
- case DTK_MONTH:
- tm->tm_mon += val;
- tmask = DTK_M(MONTH);
- break;
-
- case DTK_YEAR:
- tm->tm_year += val;
- tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
- break;
-
- case DTK_DECADE:
- tm->tm_year += val * 10;
- tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
- break;
-
- case DTK_CENTURY:
- tm->tm_year += val * 100;
- tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
- break;
+ if (*cp == '.')
+ {
+ *fsec = strtod(cp, NULL);
+ if (val < 0)
+ *fsec = -(*fsec);
+ }
+ flen = strlen(field[i]);
+ tmask = 0; /* DTK_M(type); */
- case DTK_MILLENIUM:
- tm->tm_year += val * 1000;
- tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
+ switch (type)
+ {
+ case DTK_MICROSEC:
+ *fsec += (val * 1e-6);
+ break;
+
+ case DTK_MILLISEC:
+ *fsec += (val * 1e-3);
+ break;
+
+ case DTK_SECOND:
+ tm->tm_sec += val;
+ tmask = DTK_M(SECOND);
+ break;
+
+ case DTK_MINUTE:
+ tm->tm_min += val;
+ tmask = DTK_M(MINUTE);
+ break;
+
+ case DTK_HOUR:
+ tm->tm_hour += val;
+ tmask = DTK_M(HOUR);
+ break;
+
+ case DTK_DAY:
+ tm->tm_mday += val;
+ tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
+ break;
+
+ case DTK_WEEK:
+ tm->tm_mday += val * 7;
+ tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
+ break;
+
+ case DTK_MONTH:
+ tm->tm_mon += val;
+ tmask = DTK_M(MONTH);
+ break;
+
+ case DTK_YEAR:
+ tm->tm_year += val;
+ tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
+ break;
+
+ case DTK_DECADE:
+ tm->tm_year += val * 10;
+ tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
+ break;
+
+ case DTK_CENTURY:
+ tm->tm_year += val * 100;
+ tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
+ break;
+
+ case DTK_MILLENIUM:
+ tm->tm_year += val * 1000;
+ tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
+ break;
+
+ default:
+ return -1;
+ }
break;
- default:
- return -1;
- }
- break;
-
- case DTK_STRING:
- case DTK_SPECIAL:
- type = DecodeUnits(i, field[i], &val);
+ case DTK_STRING:
+ case DTK_SPECIAL:
+ type = DecodeUnits(i, field[i], &val);
#ifdef DATEDEBUG
- printf("DecodeDateDelta- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
+ printf("DecodeDateDelta- special field[%d] %s type=%d value=%d\n", i, field[i], type, val);
#endif
- if (type == IGNORE)
- continue;
+ if (type == IGNORE)
+ continue;
- tmask = 0; /* DTK_M(type); */
- switch (type)
- {
- case UNITS:
+ tmask = 0; /* DTK_M(type); */
+ switch (type)
+ {
+ case UNITS:
#ifdef DATEDEBUG
- printf("DecodeDateDelta- UNITS field %s value is %d\n", field[i], val);
+ printf("DecodeDateDelta- UNITS field %s value is %d\n", field[i], val);
#endif
- type = val;
- break;
+ type = val;
+ break;
- case AGO:
- is_before = TRUE;
- type = val;
- break;
+ case AGO:
+ is_before = TRUE;
+ type = val;
+ break;
+
+ case RESERV:
+ tmask = (DTK_DATE_M || DTK_TIME_M);
+ *dtype = val;
+ break;
- case RESERV:
- tmask = (DTK_DATE_M || DTK_TIME_M);
- *dtype = val;
+ default:
+ return -1;
+ }
break;
default:
return -1;
- }
- break;
-
- default:
- return -1;
}
#ifdef DATEDEBUG
@@ -3951,8 +3951,8 @@ DecodeDateDelta(char *field[], int ftype[], int nf, int *dtype, struct tm * tm,
static int
DecodeUnits(int field, char *lowtoken, int *val)
{
- int type;
- datetkn *tp;
+ int type;
+ datetkn *tp;
#if USE_DATE_CACHE
if ((deltacache[field] != NULL)
@@ -3998,8 +3998,8 @@ static datetkn *
datebsearch(char *key, datetkn * base, unsigned int nel)
{
register datetkn *last = base + nel - 1,
- *position;
- register int result;
+ *position;
+ register int result;
while (last >= base)
{
@@ -4074,7 +4074,7 @@ int
EncodeDateOnly(struct tm * tm, int style, char *str)
{
#if FALSE
- int day;
+ int day;
#endif
@@ -4186,7 +4186,7 @@ EncodeDateOnly(struct tm * tm, int style, char *str)
int
EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
{
- double sec;
+ double sec;
if ((tm->tm_hour < 0) || (tm->tm_hour > 24))
return -1;
@@ -4210,10 +4210,10 @@ EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
int
EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str)
{
- int day,
- hour,
- min;
- double sec;
+ int day,
+ hour,
+ min;
+ double sec;
if ((tm->tm_mon < 1) || (tm->tm_mon > 12))
return -1;
@@ -4372,9 +4372,9 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
int
EncodeTimeSpan(struct tm * tm, double fsec, int style, char *str)
{
- int is_before = FALSE;
- int is_nonzero = FALSE;
- char *cp;
+ int is_before = FALSE;
+ int is_nonzero = FALSE;
+ char *cp;
strcpy(str, "@");
cp = str + strlen(str);
@@ -4465,9 +4465,9 @@ datetime_is_epoch(double j)
{
static union
{
- double epoch;
- unsigned char c[8];
- } u;
+ double epoch;
+ unsigned char c[8];
+ } u;
u.c[0] = 0x80; /* sign bit */
u.c[1] = 0x10; /* DBL_MIN */
@@ -4479,9 +4479,9 @@ datetime_is_current(double j)
{
static union
{
- double current;
- unsigned char c[8];
- } u;
+ double current;
+ unsigned char c[8];
+ } u;
u.c[1] = 0x10; /* DBL_MIN */