Hi,

On 2017-10-04 11:36:56 +0200, Alvaro Herrera wrote:
> Andrew Dunstan wrote:
> > On 10/03/2017 04:43 PM, Tom Lane wrote:
> > > I like the new-header-file idea because it will result in minimal code
> > > churn and thus minimal back-patching hazards.

I'm not sure it's that little code churn, and the insulation isn't
great. Based on my WIP patch adding a DT_ prefix it would affect at
least:

 contrib/adminpack/adminpack.c      |   8 +-
 src/backend/parser/gram.y          |  52 ++++-----
 src/backend/utils/adt/date.c       |  50 ++++----
 src/backend/utils/adt/datetime.c   | 614 
+++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------
 src/backend/utils/adt/formatting.c |  10 +-
 src/backend/utils/adt/json.c       |   8 +-
 src/backend/utils/adt/nabstime.c   |  32 +++---
 src/backend/utils/adt/timestamp.c  | 196 +++++++++++++++----------------
 src/backend/utils/adt/xml.c        |   6 +-
 src/backend/utils/misc/tzparser.c  |   4 +-
 src/bin/pg_waldump/compat.c        |   6 +-
 src/include/utils/datetime.h       | 216 +++++++++++++++++------------------

so I'm not quite convinced this that well isolated pieces of code.  I
wonder if just moving the defines around won't primarily increase pain.


I have however, for now, worked around the need to deal with this
problem (by moving more stuff .c files that are careful about their
includes). So this is more about historical raisins, I do not have an
urgent need to work on this.


> > > I do *not* like "PG_PM".  For our own purposes that adds no uniqueness
> > > at all.  If we're to touch these symbols then I'd go for names like
> > > "DATETIME_PM".  Or maybe "DT_PM" ... there's a little bit of precedent
> > > for the DT_ prefix already.
> > 
> > Yeah. If we use a prefix +1 for DT_. If we do that then I think they
> > should *all* be prefixed, not just the ones we know of conflicts for.

Attached is a WIP patch doing exactly this conversion for
datetime.h. Note that we'd want to do something about ecpg's dt.h if we
were to go for the approach.

While the changes are fairly verbose, they're also mechanical, so I
suspect the issues around backpatching - not that that code changes that
much - wouldn't be too hard to resolve.


> Maybe it'd be good idea to unify some of that stuff so that ecpg can use
> it, too?  Having a second copy of the same stuff in
> src/interfaces/ecpg/pgtypeslib/dt.h is pretty terrible.  Even if not,
> let's make sure they don't diverge.

I agree that that would be quite an advantage. It's more than just
datetime.h that'd need to be usable by ecpg. Luckily timestamp.h would
probably be easy,
commit a7801b62f21bd051444bd1119cd3745ecc8e14ec
Author: Tom Lane <t...@sss.pgh.pa.us>
Date:   2011-09-09 13:23:41 -0400

    Move Timestamp/Interval typedefs and basic macros into datatype/timestamp.h.
provides the basics.  I suspect we'd want to do something very similar
for datetime?


I however wonder if even that would be really going far enough - we'd
still end up with a lot of copied functions:

int                     DecodeInterval(char **, int *, int, int *, struct tm *, 
fsec_t *);
int                     DecodeTime(char *, int *, struct tm *, fsec_t *);
void            EncodeDateTime(struct tm *tm, fsec_t fsec, bool print_tz, int 
tz, const char *tzn, int style, char *str, bool EuroDates);
void            EncodeInterval(struct tm *tm, fsec_t fsec, int style, char 
*str);
int                     tm2timestamp(struct tm *, fsec_t, int *, timestamp *);
int                     DecodeUnits(int field, char *lowtoken, int *val);
bool            CheckDateTokenTables(void);
void            EncodeDateOnly(struct tm *tm, int style, char *str, bool 
EuroDates);
int                     GetEpochTime(struct tm *);
int                     ParseDateTime(char *, char *, char **, int *, int *, 
char **);
int                     DecodeDateTime(char **, int *, int, int *, struct tm *, 
fsec_t *, bool);
void            j2date(int, int *, int *, int *);
void            GetCurrentDateTime(struct tm *);
int                     date2j(int, int, int);
void            TrimTrailingZeros(char *);
void            dt2time(double, int *, int *, int *, fsec_t *);

I suspect starting to implement infrastructure to deal with would be a
bit bigger a task than I can chew of right now though.  Medium term, it
seems to me, we should start actually move a lot of the adt code into a
library that can be included (or possibly just compiled?) both by
frontend and backend code.  Which kinda seems to imply we'd need
compatible elog support for frontend code, which I'd wished for many
times.

Michael, is there any problem including datatype/* headers in ecpg that
are frontend clean? I see no such usage so far, that's why I'm asking.


Greetings,

Andres Freund
>From eb8fa449c7d06763128c2c33fd1bb972f9b719d1 Mon Sep 17 00:00:00 2001
From: Andres Freund <and...@anarazel.de>
Date: Thu, 25 Jan 2018 22:06:40 -0800
Subject: [PATCH] WIP: Deconflict datetime.h macro names.

Author: Andres Freund
Discussion: https://www.postgresql.org/message-id/20171003190033.nsizxfnvgwx6f...@alap3.anarazel.de
---
 contrib/adminpack/adminpack.c      |   8 +-
 src/backend/parser/gram.y          |  52 ++--
 src/backend/utils/adt/date.c       |  50 +--
 src/backend/utils/adt/datetime.c   | 614 ++++++++++++++++++-------------------
 src/backend/utils/adt/formatting.c |  10 +-
 src/backend/utils/adt/json.c       |   8 +-
 src/backend/utils/adt/nabstime.c   |  32 +-
 src/backend/utils/adt/timestamp.c  | 196 ++++++------
 src/backend/utils/adt/xml.c        |   6 +-
 src/backend/utils/misc/tzparser.c  |   4 +-
 src/bin/pg_waldump/compat.c        |   6 +-
 src/include/utils/datetime.h       | 216 ++++++-------
 12 files changed, 601 insertions(+), 601 deletions(-)

diff --git a/contrib/adminpack/adminpack.c b/contrib/adminpack/adminpack.c
index 1785dee3a10..39fafebe78e 100644
--- a/contrib/adminpack/adminpack.c
+++ b/contrib/adminpack/adminpack.c
@@ -334,11 +334,11 @@ pg_logdir_ls(PG_FUNCTION_ARGS)
 		char	   *values[2];
 		HeapTuple	tuple;
 		char		timestampbuf[32];
-		char	   *field[MAXDATEFIELDS];
-		char		lowstr[MAXDATELEN + 1];
+		char	   *field[DT_MAXDATEFIELDS];
+		char		lowstr[DT_MAXDATELEN + 1];
 		int			dtype;
 		int			nf,
-					ftype[MAXDATEFIELDS];
+					ftype[DT_MAXDATEFIELDS];
 		fsec_t		fsec;
 		int			tz = 0;
 		struct pg_tm date;
@@ -357,7 +357,7 @@ pg_logdir_ls(PG_FUNCTION_ARGS)
 		timestampbuf[17] = '\0';
 
 		/* parse and decode expected timestamp to verify it's OK format */
-		if (ParseDateTime(timestampbuf, lowstr, MAXDATELEN, field, ftype, MAXDATEFIELDS, &nf))
+		if (ParseDateTime(timestampbuf, lowstr, DT_MAXDATELEN, field, ftype, DT_MAXDATEFIELDS, &nf))
 			continue;
 
 		if (DecodeDateTime(field, ftype, nf, &dtype, &date, &fsec, &tz))
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 5329432f25c..2834e5bafa4 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -1608,7 +1608,7 @@ zone_value:
 					if ($3 != NIL)
 					{
 						A_Const *n = (A_Const *) linitial($3);
-						if ((n->val.val.ival & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0)
+						if ((n->val.val.ival & ~(INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE))) != 0)
 							ereport(ERROR,
 									(errcode(ERRCODE_SYNTAX_ERROR),
 									 errmsg("time zone interval must be HOUR or HOUR TO MINUTE"),
@@ -12772,58 +12772,58 @@ opt_timezone:
 
 opt_interval:
 			YEAR_P
-				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(YEAR), @1)); }
+				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DT_YEAR), @1)); }
 			| MONTH_P
-				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(MONTH), @1)); }
+				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DT_MONTH), @1)); }
 			| DAY_P
-				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DAY), @1)); }
+				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DT_DAY), @1)); }
 			| HOUR_P
-				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(HOUR), @1)); }
+				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DT_HOUR), @1)); }
 			| MINUTE_P
-				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(MINUTE), @1)); }
+				{ $$ = list_make1(makeIntConst(INTERVAL_MASK(DT_MINUTE), @1)); }
 			| interval_second
 				{ $$ = $1; }
 			| YEAR_P TO MONTH_P
 				{
-					$$ = list_make1(makeIntConst(INTERVAL_MASK(YEAR) |
-												 INTERVAL_MASK(MONTH), @1));
+					$$ = list_make1(makeIntConst(INTERVAL_MASK(DT_YEAR) |
+												 INTERVAL_MASK(DT_MONTH), @1));
 				}
 			| DAY_P TO HOUR_P
 				{
-					$$ = list_make1(makeIntConst(INTERVAL_MASK(DAY) |
-												 INTERVAL_MASK(HOUR), @1));
+					$$ = list_make1(makeIntConst(INTERVAL_MASK(DT_DAY) |
+												 INTERVAL_MASK(DT_HOUR), @1));
 				}
 			| DAY_P TO MINUTE_P
 				{
-					$$ = list_make1(makeIntConst(INTERVAL_MASK(DAY) |
-												 INTERVAL_MASK(HOUR) |
-												 INTERVAL_MASK(MINUTE), @1));
+					$$ = list_make1(makeIntConst(INTERVAL_MASK(DT_DAY) |
+												 INTERVAL_MASK(DT_HOUR) |
+												 INTERVAL_MASK(DT_MINUTE), @1));
 				}
 			| DAY_P TO interval_second
 				{
 					$$ = $3;
-					linitial($$) = makeIntConst(INTERVAL_MASK(DAY) |
-												INTERVAL_MASK(HOUR) |
-												INTERVAL_MASK(MINUTE) |
-												INTERVAL_MASK(SECOND), @1);
+					linitial($$) = makeIntConst(INTERVAL_MASK(DT_DAY) |
+												INTERVAL_MASK(DT_HOUR) |
+												INTERVAL_MASK(DT_MINUTE) |
+												INTERVAL_MASK(DT_SECOND), @1);
 				}
 			| HOUR_P TO MINUTE_P
 				{
-					$$ = list_make1(makeIntConst(INTERVAL_MASK(HOUR) |
-												 INTERVAL_MASK(MINUTE), @1));
+					$$ = list_make1(makeIntConst(INTERVAL_MASK(DT_HOUR) |
+												 INTERVAL_MASK(DT_MINUTE), @1));
 				}
 			| HOUR_P TO interval_second
 				{
 					$$ = $3;
-					linitial($$) = makeIntConst(INTERVAL_MASK(HOUR) |
-												INTERVAL_MASK(MINUTE) |
-												INTERVAL_MASK(SECOND), @1);
+					linitial($$) = makeIntConst(INTERVAL_MASK(DT_HOUR) |
+												INTERVAL_MASK(DT_MINUTE) |
+												INTERVAL_MASK(DT_SECOND), @1);
 				}
 			| MINUTE_P TO interval_second
 				{
 					$$ = $3;
-					linitial($$) = makeIntConst(INTERVAL_MASK(MINUTE) |
-												INTERVAL_MASK(SECOND), @1);
+					linitial($$) = makeIntConst(INTERVAL_MASK(DT_MINUTE) |
+												INTERVAL_MASK(DT_SECOND), @1);
 				}
 			| /*EMPTY*/
 				{ $$ = NIL; }
@@ -12832,11 +12832,11 @@ opt_interval:
 interval_second:
 			SECOND_P
 				{
-					$$ = list_make1(makeIntConst(INTERVAL_MASK(SECOND), @1));
+					$$ = list_make1(makeIntConst(INTERVAL_MASK(DT_SECOND), @1));
 				}
 			| SECOND_P '(' Iconst ')'
 				{
-					$$ = list_make2(makeIntConst(INTERVAL_MASK(SECOND), @1),
+					$$ = list_make2(makeIntConst(INTERVAL_MASK(DT_SECOND), @1),
 									makeIntConst($3, @3));
 				}
 		;
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index 747ef497897..764c1c89c9b 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -122,12 +122,12 @@ date_in(PG_FUNCTION_ARGS)
 	int			dtype;
 	int			nf;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
-	int			ftype[MAXDATEFIELDS];
-	char		workbuf[MAXDATELEN + 1];
+	char	   *field[DT_MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + 1];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tzp);
 	if (dterr != 0)
@@ -190,7 +190,7 @@ date_out(PG_FUNCTION_ARGS)
 	char	   *result;
 	struct pg_tm tt,
 			   *tm = &tt;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	if (DATE_NOT_FINITE(date))
 		EncodeSpecialDate(date, buf);
@@ -297,9 +297,9 @@ void
 EncodeSpecialDate(DateADT dt, char *str)
 {
 	if (DATE_IS_NOBEGIN(dt))
-		strcpy(str, EARLY);
+		strcpy(str, DT_EARLY);
 	else if (DATE_IS_NOEND(dt))
-		strcpy(str, LATE);
+		strcpy(str, DT_LATE);
 	else						/* shouldn't happen */
 		elog(ERROR, "invalid argument for EncodeSpecialDate");
 }
@@ -1211,13 +1211,13 @@ time_in(PG_FUNCTION_ARGS)
 	int			tz;
 	int			nf;
 	int			dterr;
-	char		workbuf[MAXDATELEN + 1];
-	char	   *field[MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + 1];
+	char	   *field[DT_MAXDATEFIELDS];
 	int			dtype;
-	int			ftype[MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz);
 	if (dterr != 0)
@@ -1268,7 +1268,7 @@ time_out(PG_FUNCTION_ARGS)
 	struct pg_tm tt,
 			   *tm = &tt;
 	fsec_t		fsec;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	time2tm(time, tm, &fsec);
 	EncodeTimeOnly(tm, fsec, false, 0, DateStyle, buf);
@@ -1861,10 +1861,10 @@ time_part(PG_FUNCTION_ARGS)
 											false);
 
 	type = DecodeUnits(0, lowunits, &val);
-	if (type == UNKNOWN_FIELD)
+	if (type == DT_UNKNOWN_FIELD)
 		type = DecodeSpecial(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		fsec_t		fsec;
 		struct pg_tm tt,
@@ -1913,7 +1913,7 @@ time_part(PG_FUNCTION_ARGS)
 				result = 0;
 		}
 	}
-	else if (type == RESERV && val == DTK_EPOCH)
+	else if (type == DT_RESERV && val == DTK_EPOCH)
 	{
 		result = time / 1000000.0;
 	}
@@ -1963,13 +1963,13 @@ timetz_in(PG_FUNCTION_ARGS)
 	int			tz;
 	int			nf;
 	int			dterr;
-	char		workbuf[MAXDATELEN + 1];
-	char	   *field[MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + 1];
+	char	   *field[DT_MAXDATEFIELDS];
 	int			dtype;
-	int			ftype[MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz);
 	if (dterr != 0)
@@ -1991,7 +1991,7 @@ timetz_out(PG_FUNCTION_ARGS)
 			   *tm = &tt;
 	fsec_t		fsec;
 	int			tz;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	timetz2tm(time, tm, &fsec, &tz);
 	EncodeTimeOnly(tm, fsec, true, tz, DateStyle, buf);
@@ -2558,10 +2558,10 @@ timetz_part(PG_FUNCTION_ARGS)
 											false);
 
 	type = DecodeUnits(0, lowunits, &val);
-	if (type == UNKNOWN_FIELD)
+	if (type == DT_UNKNOWN_FIELD)
 		type = DecodeSpecial(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		double		dummy;
 		int			tz;
@@ -2623,7 +2623,7 @@ timetz_part(PG_FUNCTION_ARGS)
 				result = 0;
 		}
 	}
-	else if (type == RESERV && val == DTK_EPOCH)
+	else if (type == DT_RESERV && val == DTK_EPOCH)
 	{
 		result = time->time / 1000000.0 + time->zone;
 	}
@@ -2673,12 +2673,12 @@ timetz_zone(PG_FUNCTION_ARGS)
 
 	type = DecodeTimezoneAbbrev(0, lowzone, &val, &tzp);
 
-	if (type == TZ || type == DTZ)
+	if (type == DT_TZ || type == DT_DTZ)
 	{
 		/* fixed-offset abbreviation */
 		tz = -val;
 	}
-	else if (type == DYNTZ)
+	else if (type == DT_DYNTZ)
 	{
 		/* dynamic-offset abbreviation, resolve using current time */
 		pg_time_t	now = (pg_time_t) time(NULL);
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index 8375b93c397..7f577784d67 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -89,80 +89,80 @@ const char *const days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
  */
 static const datetkn datetktbl[] = {
 	/* token, type, value */
-	{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
-	{DA_D, ADBC, AD},			/* "ad" for years > 0 */
-	{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
-	{"am", AMPM, AM},
-	{"apr", MONTH, 4},
-	{"april", MONTH, 4},
-	{"at", IGNORE_DTF, 0},		/* "at" (throwaway) */
-	{"aug", MONTH, 8},
-	{"august", MONTH, 8},
-	{DB_C, ADBC, BC},			/* "bc" for years <= 0 */
-	{DCURRENT, RESERV, DTK_CURRENT},	/* "current" is always now */
-	{"d", UNITS, DTK_DAY},		/* "day of month" for ISO input */
-	{"dec", MONTH, 12},
-	{"december", MONTH, 12},
-	{"dow", UNITS, DTK_DOW},	/* day of week */
-	{"doy", UNITS, DTK_DOY},	/* day of year */
-	{"dst", DTZMOD, SECS_PER_HOUR},
-	{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
-	{"feb", MONTH, 2},
-	{"february", MONTH, 2},
-	{"fri", DOW, 5},
-	{"friday", DOW, 5},
-	{"h", UNITS, DTK_HOUR},		/* "hour" */
-	{LATE, RESERV, DTK_LATE},	/* "infinity" reserved for "late time" */
-	{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
-	{"isodow", UNITS, DTK_ISODOW},	/* ISO day of week, Sunday == 7 */
-	{"isoyear", UNITS, DTK_ISOYEAR},	/* year in terms of the ISO week date */
-	{"j", UNITS, DTK_JULIAN},
-	{"jan", MONTH, 1},
-	{"january", MONTH, 1},
-	{"jd", UNITS, DTK_JULIAN},
-	{"jul", MONTH, 7},
-	{"julian", UNITS, DTK_JULIAN},
-	{"july", MONTH, 7},
-	{"jun", MONTH, 6},
-	{"june", MONTH, 6},
-	{"m", UNITS, DTK_MONTH},	/* "month" for ISO input */
-	{"mar", MONTH, 3},
-	{"march", MONTH, 3},
-	{"may", MONTH, 5},
-	{"mm", UNITS, DTK_MINUTE},	/* "minute" for ISO input */
-	{"mon", DOW, 1},
-	{"monday", DOW, 1},
-	{"nov", MONTH, 11},
-	{"november", MONTH, 11},
-	{NOW, RESERV, DTK_NOW},		/* current transaction time */
-	{"oct", MONTH, 10},
-	{"october", MONTH, 10},
-	{"on", IGNORE_DTF, 0},		/* "on" (throwaway) */
-	{"pm", AMPM, PM},
-	{"s", UNITS, DTK_SECOND},	/* "seconds" for ISO input */
-	{"sat", DOW, 6},
-	{"saturday", DOW, 6},
-	{"sep", MONTH, 9},
-	{"sept", MONTH, 9},
-	{"september", MONTH, 9},
-	{"sun", DOW, 0},
-	{"sunday", DOW, 0},
-	{"t", ISOTIME, DTK_TIME},	/* Filler for ISO time fields */
-	{"thu", DOW, 4},
-	{"thur", DOW, 4},
-	{"thurs", DOW, 4},
-	{"thursday", DOW, 4},
-	{TODAY, RESERV, DTK_TODAY}, /* midnight */
-	{TOMORROW, RESERV, DTK_TOMORROW},	/* tomorrow midnight */
-	{"tue", DOW, 2},
-	{"tues", DOW, 2},
-	{"tuesday", DOW, 2},
-	{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
-	{"wed", DOW, 3},
-	{"wednesday", DOW, 3},
-	{"weds", DOW, 3},
-	{"y", UNITS, DTK_YEAR},		/* "year" for ISO input */
-	{YESTERDAY, RESERV, DTK_YESTERDAY}	/* yesterday midnight */
+	{DT_EARLY, DT_RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
+	{DT_DA_D, DT_ADBC, DT_AD},			/* "ad" for years > 0 */
+	{"allballs", DT_RESERV, DTK_ZULU}, /* 00:00:00 */
+	{"am", DT_AMPM, DT_AM},
+	{"apr", DT_MONTH, 4},
+	{"april", DT_MONTH, 4},
+	{"at", DT_IGNORE_DTF, 0},		/* "at" (throwaway) */
+	{"aug", DT_MONTH, 8},
+	{"august", DT_MONTH, 8},
+	{DT_DB_C, DT_ADBC, DT_BC},			/* "bc" for years <= 0 */
+	{DT_DCURRENT, DT_RESERV, DTK_CURRENT},	/* "current" is always now */
+	{"d", DT_UNITS, DTK_DAY},		/* "day of month" for ISO input */
+	{"dec", DT_MONTH, 12},
+	{"december", DT_MONTH, 12},
+	{"dow", DT_UNITS, DTK_DOW},	/* day of week */
+	{"doy", DT_UNITS, DTK_DOY},	/* day of year */
+	{"dst", DT_ZMOD, SECS_PER_HOUR},
+	{DT_EPOCH, DT_RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
+	{"feb", DT_MONTH, 2},
+	{"february", DT_MONTH, 2},
+	{"fri", DT_DOW, 5},
+	{"friday", DT_DOW, 5},
+	{"h", DT_UNITS, DTK_HOUR},		/* "hour" */
+	{DT_LATE, DT_RESERV, DTK_LATE},	/* "infinity" reserved for "late time" */
+	{DT_INVALID, DT_RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
+	{"isodow", DT_UNITS, DTK_ISODOW},	/* ISO day of week, Sunday == 7 */
+	{"isoyear", DT_UNITS, DTK_ISOYEAR},	/* year in terms of the ISO week date */
+	{"j", DT_UNITS, DTK_JULIAN},
+	{"jan", DT_MONTH, 1},
+	{"january", DT_MONTH, 1},
+	{"jd", DT_UNITS, DTK_JULIAN},
+	{"jul", DT_MONTH, 7},
+	{"julian", DT_UNITS, DTK_JULIAN},
+	{"july", DT_MONTH, 7},
+	{"jun", DT_MONTH, 6},
+	{"june", DT_MONTH, 6},
+	{"m", DT_UNITS, DTK_MONTH},	/* "month" for ISO input */
+	{"mar", DT_MONTH, 3},
+	{"march", DT_MONTH, 3},
+	{"may", DT_MONTH, 5},
+	{"mm", DT_UNITS, DTK_MINUTE},	/* "minute" for ISO input */
+	{"mon", DT_DOW, 1},
+	{"monday", DT_DOW, 1},
+	{"nov", DT_MONTH, 11},
+	{"november", DT_MONTH, 11},
+	{DT_NOW, DT_RESERV, DTK_NOW},		/* current transaction time */
+	{"oct", DT_MONTH, 10},
+	{"october", DT_MONTH, 10},
+	{"on", DT_IGNORE_DTF, 0},		/* "on" (throwaway) */
+	{"pm", DT_AMPM, DT_PM},
+	{"s", DT_UNITS, DTK_SECOND},	/* "seconds" for ISO input */
+	{"sat", DT_DOW, 6},
+	{"saturday", DT_DOW, 6},
+	{"sep", DT_MONTH, 9},
+	{"sept", DT_MONTH, 9},
+	{"september", DT_MONTH, 9},
+	{"sun", DT_DOW, 0},
+	{"sunday", DT_DOW, 0},
+	{"t", DT_ISOTIME, DTK_TIME},	/* Filler for ISO time fields */
+	{"thu", DT_DOW, 4},
+	{"thur", DT_DOW, 4},
+	{"thurs", DT_DOW, 4},
+	{"thursday", DT_DOW, 4},
+	{DT_TODAY, DT_RESERV, DTK_TODAY}, /* midnight */
+	{DT_TOMORROW, DT_RESERV, DTK_TOMORROW},	/* tomorrow midnight */
+	{"tue", DT_DOW, 2},
+	{"tues", DT_DOW, 2},
+	{"tuesday", DT_DOW, 2},
+	{"undefined", DT_RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
+	{"wed", DT_DOW, 3},
+	{"wednesday", DT_DOW, 3},
+	{"weds", DT_DOW, 3},
+	{"y", DT_UNITS, DTK_YEAR},		/* "year" for ISO input */
+	{DT_YESTERDAY, DT_RESERV, DTK_YESTERDAY}	/* yesterday midnight */
 };
 
 static int	szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
@@ -173,69 +173,69 @@ static int	szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
  */
 static const datetkn deltatktbl[] = {
 	/* token, type, value */
-	{"@", IGNORE_DTF, 0},		/* postgres relative prefix */
-	{DAGO, AGO, 0},				/* "ago" indicates negative time offset */
-	{"c", UNITS, DTK_CENTURY},	/* "century" relative */
-	{"cent", UNITS, DTK_CENTURY},	/* "century" relative */
-	{"centuries", UNITS, DTK_CENTURY},	/* "centuries" relative */
-	{DCENTURY, UNITS, DTK_CENTURY}, /* "century" relative */
-	{"d", UNITS, DTK_DAY},		/* "day" relative */
-	{DDAY, UNITS, DTK_DAY},		/* "day" relative */
-	{"days", UNITS, DTK_DAY},	/* "days" relative */
-	{"dec", UNITS, DTK_DECADE}, /* "decade" relative */
-	{DDECADE, UNITS, DTK_DECADE},	/* "decade" relative */
-	{"decades", UNITS, DTK_DECADE}, /* "decades" relative */
-	{"decs", UNITS, DTK_DECADE},	/* "decades" relative */
-	{"h", UNITS, DTK_HOUR},		/* "hour" relative */
-	{DHOUR, UNITS, DTK_HOUR},	/* "hour" relative */
-	{"hours", UNITS, DTK_HOUR}, /* "hours" relative */
-	{"hr", UNITS, DTK_HOUR},	/* "hour" relative */
-	{"hrs", UNITS, DTK_HOUR},	/* "hours" relative */
-	{INVALID, RESERV, DTK_INVALID}, /* reserved for invalid time */
-	{"m", UNITS, DTK_MINUTE},	/* "minute" relative */
-	{"microsecon", UNITS, DTK_MICROSEC},	/* "microsecond" relative */
-	{"mil", UNITS, DTK_MILLENNIUM}, /* "millennium" relative */
-	{"millennia", UNITS, DTK_MILLENNIUM},	/* "millennia" relative */
-	{DMILLENNIUM, UNITS, DTK_MILLENNIUM},	/* "millennium" relative */
-	{"millisecon", UNITS, DTK_MILLISEC},	/* relative */
-	{"mils", UNITS, DTK_MILLENNIUM},	/* "millennia" relative */
-	{"min", UNITS, DTK_MINUTE}, /* "minute" relative */
-	{"mins", UNITS, DTK_MINUTE},	/* "minutes" relative */
-	{DMINUTE, UNITS, DTK_MINUTE},	/* "minute" relative */
-	{"minutes", UNITS, DTK_MINUTE}, /* "minutes" relative */
-	{"mon", UNITS, DTK_MONTH},	/* "months" relative */
-	{"mons", UNITS, DTK_MONTH}, /* "months" relative */
-	{DMONTH, UNITS, DTK_MONTH}, /* "month" relative */
-	{"months", UNITS, DTK_MONTH},
-	{"ms", UNITS, DTK_MILLISEC},
-	{"msec", UNITS, DTK_MILLISEC},
-	{DMILLISEC, UNITS, DTK_MILLISEC},
-	{"mseconds", UNITS, DTK_MILLISEC},
-	{"msecs", UNITS, DTK_MILLISEC},
-	{"qtr", UNITS, DTK_QUARTER},	/* "quarter" relative */
-	{DQUARTER, UNITS, DTK_QUARTER}, /* "quarter" relative */
-	{"s", UNITS, DTK_SECOND},
-	{"sec", UNITS, DTK_SECOND},
-	{DSECOND, UNITS, DTK_SECOND},
-	{"seconds", UNITS, DTK_SECOND},
-	{"secs", UNITS, DTK_SECOND},
-	{DTIMEZONE, UNITS, DTK_TZ}, /* "timezone" time offset */
-	{"timezone_h", UNITS, DTK_TZ_HOUR}, /* timezone hour units */
-	{"timezone_m", UNITS, DTK_TZ_MINUTE},	/* timezone minutes units */
-	{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
-	{"us", UNITS, DTK_MICROSEC},	/* "microsecond" relative */
-	{"usec", UNITS, DTK_MICROSEC},	/* "microsecond" relative */
-	{DMICROSEC, UNITS, DTK_MICROSEC},	/* "microsecond" relative */
-	{"useconds", UNITS, DTK_MICROSEC},	/* "microseconds" relative */
-	{"usecs", UNITS, DTK_MICROSEC}, /* "microseconds" relative */
-	{"w", UNITS, DTK_WEEK},		/* "week" relative */
-	{DWEEK, UNITS, DTK_WEEK},	/* "week" relative */
-	{"weeks", UNITS, DTK_WEEK}, /* "weeks" relative */
-	{"y", UNITS, DTK_YEAR},		/* "year" relative */
-	{DYEAR, UNITS, DTK_YEAR},	/* "year" relative */
-	{"years", UNITS, DTK_YEAR}, /* "years" relative */
-	{"yr", UNITS, DTK_YEAR},	/* "year" relative */
-	{"yrs", UNITS, DTK_YEAR}	/* "years" relative */
+	{"@", DT_IGNORE_DTF, 0},		/* postgres relative prefix */
+	{DT_DAGO, DT_AGO, 0},				/* "ago" indicates negative time offset */
+	{"c", DT_UNITS, DTK_CENTURY},	/* "century" relative */
+	{"cent", DT_UNITS, DTK_CENTURY},	/* "century" relative */
+	{"centuries", DT_UNITS, DTK_CENTURY},	/* "centuries" relative */
+	{DT_DCENTURY, DT_UNITS, DTK_CENTURY}, /* "century" relative */
+	{"d", DT_UNITS, DTK_DAY},		/* "day" relative */
+	{DT_DDAY, DT_UNITS, DTK_DAY},		/* "day" relative */
+	{"days", DT_UNITS, DTK_DAY},	/* "days" relative */
+	{"dec", DT_UNITS, DTK_DECADE}, /* "decade" relative */
+	{DT_DDECADE, DT_UNITS, DTK_DECADE},	/* "decade" relative */
+	{"decades", DT_UNITS, DTK_DECADE}, /* "decades" relative */
+	{"decs", DT_UNITS, DTK_DECADE},	/* "decades" relative */
+	{"h", DT_UNITS, DTK_HOUR},		/* "hour" relative */
+	{DT_DHOUR, DT_UNITS, DTK_HOUR},	/* "hour" relative */
+	{"hours", DT_UNITS, DTK_HOUR}, /* "hours" relative */
+	{"hr", DT_UNITS, DTK_HOUR},	/* "hour" relative */
+	{"hrs", DT_UNITS, DTK_HOUR},	/* "hours" relative */
+	{DT_INVALID, DT_RESERV, DTK_INVALID}, /* reserved for invalid time */
+	{"m", DT_UNITS, DTK_MINUTE},	/* "minute" relative */
+	{"microsecon", DT_UNITS, DTK_MICROSEC},	/* "microsecond" relative */
+	{"mil", DT_UNITS, DTK_MILLENNIUM}, /* "millennium" relative */
+	{"millennia", DT_UNITS, DTK_MILLENNIUM},	/* "millennia" relative */
+	{DT_DMILLENNIUM, DT_UNITS, DTK_MILLENNIUM},	/* "millennium" relative */
+	{"millisecon", DT_UNITS, DTK_MILLISEC},	/* relative */
+	{"mils", DT_UNITS, DTK_MILLENNIUM},	/* "millennia" relative */
+	{"min", DT_UNITS, DTK_MINUTE}, /* "minute" relative */
+	{"mins", DT_UNITS, DTK_MINUTE},	/* "minutes" relative */
+	{DT_DMINUTE, DT_UNITS, DTK_MINUTE},	/* "minute" relative */
+	{"minutes", DT_UNITS, DTK_MINUTE}, /* "minutes" relative */
+	{"mon", DT_UNITS, DTK_MONTH},	/* "months" relative */
+	{"mons", DT_UNITS, DTK_MONTH}, /* "months" relative */
+	{DT_DMONTH, DT_UNITS, DTK_MONTH}, /* "month" relative */
+	{"months", DT_UNITS, DTK_MONTH},
+	{"ms", DT_UNITS, DTK_MILLISEC},
+	{"msec", DT_UNITS, DTK_MILLISEC},
+	{DT_DMILLISEC, DT_UNITS, DTK_MILLISEC},
+	{"mseconds", DT_UNITS, DTK_MILLISEC},
+	{"msecs", DT_UNITS, DTK_MILLISEC},
+	{"qtr", DT_UNITS, DTK_QUARTER},	/* "quarter" relative */
+	{DT_DQUARTER, DT_UNITS, DTK_QUARTER}, /* "quarter" relative */
+	{"s", DT_UNITS, DTK_SECOND},
+	{"sec", DT_UNITS, DTK_SECOND},
+	{DT_DSECOND, DT_UNITS, DTK_SECOND},
+	{"seconds", DT_UNITS, DTK_SECOND},
+	{"secs", DT_UNITS, DTK_SECOND},
+	{DT_DTIMEZONE, DT_UNITS, DTK_TZ}, /* "timezone" time offset */
+	{"timezone_h", DT_UNITS, DTK_TZ_HOUR}, /* timezone hour units */
+	{"timezone_m", DT_UNITS, DTK_TZ_MINUTE},	/* timezone minutes units */
+	{"undefined", DT_RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
+	{"us", DT_UNITS, DTK_MICROSEC},	/* "microsecond" relative */
+	{"usec", DT_UNITS, DTK_MICROSEC},	/* "microsecond" relative */
+	{DT_DMICROSEC, DT_UNITS, DTK_MICROSEC},	/* "microsecond" relative */
+	{"useconds", DT_UNITS, DTK_MICROSEC},	/* "microseconds" relative */
+	{"usecs", DT_UNITS, DTK_MICROSEC}, /* "microseconds" relative */
+	{"w", DT_UNITS, DTK_WEEK},		/* "week" relative */
+	{DT_DWEEK, DT_UNITS, DTK_WEEK},	/* "week" relative */
+	{"weeks", DT_UNITS, DTK_WEEK}, /* "weeks" relative */
+	{"y", DT_UNITS, DTK_YEAR},		/* "year" relative */
+	{DT_DYEAR, DT_UNITS, DTK_YEAR},	/* "year" relative */
+	{"years", DT_UNITS, DTK_YEAR}, /* "years" relative */
+	{"yr", DT_UNITS, DTK_YEAR},	/* "year" relative */
+	{"yrs", DT_UNITS, DTK_YEAR}	/* "years" relative */
 };
 
 static int	szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0];
@@ -244,11 +244,11 @@ static TimeZoneAbbrevTable *zoneabbrevtbl = NULL;
 
 /* Caches of recent lookup results in the above tables */
 
-static const datetkn *datecache[MAXDATEFIELDS] = {NULL};
+static const datetkn *datecache[DT_MAXDATEFIELDS] = {NULL};
 
-static const datetkn *deltacache[MAXDATEFIELDS] = {NULL};
+static const datetkn *deltacache[DT_MAXDATEFIELDS] = {NULL};
 
-static const datetkn *abbrevcache[MAXDATEFIELDS] = {NULL};
+static const datetkn *abbrevcache[DT_MAXDATEFIELDS] = {NULL};
 
 
 /*
@@ -790,7 +790,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 	int			i;
 	int			val;
 	int			dterr;
-	int			mer = HR24;
+	int			mer = DT_HR24;
 	bool		haveTextMonth = false;
 	bool		isjulian = false;
 	bool		is2digits = false;
@@ -847,7 +847,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 					if (dterr)
 						return dterr;
 
-					tmask = DTK_DATE_M | DTK_TIME_M | DTK_M(TZ);
+					tmask = DTK_DATE_M | DTK_TIME_M | DTK_M(DT_TZ);
 					ptype = 0;
 					break;
 				}
@@ -863,8 +863,8 @@ DecodeDateTime(char **field, int *ftype, int nf,
 				 * we've historically accepted.
 				 */
 				else if (ptype != 0 ||
-						 ((fmask & (DTK_M(MONTH) | DTK_M(DAY))) ==
-						  (DTK_M(MONTH) | DTK_M(DAY))))
+						 ((fmask & (DTK_M(DT_MONTH) | DTK_M(DT_DAY))) ==
+						  (DTK_M(DT_MONTH) | DTK_M(DT_DAY))))
 				{
 					/* No time zone accepted? Then quit... */
 					if (tzp == NULL)
@@ -914,7 +914,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						 * modify tmask after returning from
 						 * DecodeNumberField()
 						 */
-						tmask |= DTK_M(TZ);
+						tmask |= DTK_M(DT_TZ);
 					}
 					else
 					{
@@ -932,7 +932,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 											field[i])));
 						}
 						/* we'll apply the zone setting below */
-						tmask = DTK_M(TZ);
+						tmask = DTK_M(DT_TZ);
 					}
 				}
 				else
@@ -983,7 +983,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 					if (dterr)
 						return dterr;
 					*tzp = tz;
-					tmask = DTK_M(TZ);
+					tmask = DTK_M(DT_TZ);
 				}
 				break;
 
@@ -1025,7 +1025,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 					{
 						case DTK_YEAR:
 							tm->tm_year = val;
-							tmask = DTK_M(YEAR);
+							tmask = DTK_M(DT_YEAR);
 							break;
 
 						case DTK_MONTH:
@@ -1034,37 +1034,37 @@ DecodeDateTime(char **field, int *ftype, int nf,
 							 * already have a month and hour? then assume
 							 * minutes
 							 */
-							if ((fmask & DTK_M(MONTH)) != 0 &&
-								(fmask & DTK_M(HOUR)) != 0)
+							if ((fmask & DTK_M(DT_MONTH)) != 0 &&
+								(fmask & DTK_M(DT_HOUR)) != 0)
 							{
 								tm->tm_min = val;
-								tmask = DTK_M(MINUTE);
+								tmask = DTK_M(DT_MINUTE);
 							}
 							else
 							{
 								tm->tm_mon = val;
-								tmask = DTK_M(MONTH);
+								tmask = DTK_M(DT_MONTH);
 							}
 							break;
 
 						case DTK_DAY:
 							tm->tm_mday = val;
-							tmask = DTK_M(DAY);
+							tmask = DTK_M(DT_DAY);
 							break;
 
 						case DTK_HOUR:
 							tm->tm_hour = val;
-							tmask = DTK_M(HOUR);
+							tmask = DTK_M(DT_HOUR);
 							break;
 
 						case DTK_MINUTE:
 							tm->tm_min = val;
-							tmask = DTK_M(MINUTE);
+							tmask = DTK_M(DT_MINUTE);
 							break;
 
 						case DTK_SECOND:
 							tm->tm_sec = val;
-							tmask = DTK_M(SECOND);
+							tmask = DTK_M(DT_SECOND);
 							if (*cp == '.')
 							{
 								dterr = ParseFractionalSecond(cp, fsec);
@@ -1075,7 +1075,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 							break;
 
 						case DTK_TZ:
-							tmask = DTK_M(TZ);
+							tmask = DTK_M(DT_TZ);
 							dterr = DecodeTimezone(field[i], tzp);
 							if (dterr)
 								return dterr;
@@ -1192,15 +1192,15 @@ DecodeDateTime(char **field, int *ftype, int nf,
 			case DTK_SPECIAL:
 				/* timezone abbrevs take precedence over built-in tokens */
 				type = DecodeTimezoneAbbrev(i, field[i], &val, &valtz);
-				if (type == UNKNOWN_FIELD)
+				if (type == DT_UNKNOWN_FIELD)
 					type = DecodeSpecial(i, field[i], &val);
-				if (type == IGNORE_DTF)
+				if (type == DT_IGNORE_DTF)
 					continue;
 
 				tmask = DTK_M(type);
 				switch (type)
 				{
-					case RESERV:
+					case DT_RESERV:
 						switch (val)
 						{
 							case DTK_CURRENT:
@@ -1212,7 +1212,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 								break;
 
 							case DTK_NOW:
-								tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
+								tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(DT_TZ));
 								*dtype = DTK_DATE;
 								GetCurrentTimeUsec(tm, fsec, tzp);
 								break;
@@ -1243,7 +1243,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 								break;
 
 							case DTK_ZULU:
-								tmask = (DTK_TIME_M | DTK_M(TZ));
+								tmask = (DTK_TIME_M | DTK_M(DT_TZ));
 								*dtype = DTK_DATE;
 								tm->tm_hour = 0;
 								tm->tm_min = 0;
@@ -1258,58 +1258,58 @@ DecodeDateTime(char **field, int *ftype, int nf,
 
 						break;
 
-					case MONTH:
+					case DT_MONTH:
 
 						/*
 						 * already have a (numeric) month? then see if we can
 						 * substitute...
 						 */
-						if ((fmask & DTK_M(MONTH)) && !haveTextMonth &&
-							!(fmask & DTK_M(DAY)) && tm->tm_mon >= 1 &&
+						if ((fmask & DTK_M(DT_MONTH)) && !haveTextMonth &&
+							!(fmask & DTK_M(DT_DAY)) && tm->tm_mon >= 1 &&
 							tm->tm_mon <= 31)
 						{
 							tm->tm_mday = tm->tm_mon;
-							tmask = DTK_M(DAY);
+							tmask = DTK_M(DT_DAY);
 						}
 						haveTextMonth = true;
 						tm->tm_mon = val;
 						break;
 
-					case DTZMOD:
+					case DT_ZMOD:
 
 						/*
 						 * daylight savings time modifier (solves "MET DST"
 						 * syntax)
 						 */
-						tmask |= DTK_M(DTZ);
+						tmask |= DTK_M(DT_DTZ);
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						*tzp -= val;
 						break;
 
-					case DTZ:
+					case DT_DTZ:
 
 						/*
 						 * set mask for TZ here _or_ check for DTZ later when
 						 * getting default timezone
 						 */
-						tmask |= DTK_M(TZ);
+						tmask |= DTK_M(DT_TZ);
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						*tzp = -val;
 						break;
 
-					case TZ:
+					case DT_TZ:
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						*tzp = -val;
 						break;
 
-					case DYNTZ:
-						tmask |= DTK_M(TZ);
+					case DT_DYNTZ:
+						tmask |= DTK_M(DT_TZ);
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						/* we'll determine the actual offset later */
@@ -1317,24 +1317,24 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						abbrev = field[i];
 						break;
 
-					case AMPM:
+					case DT_AMPM:
 						mer = val;
 						break;
 
-					case ADBC:
-						bc = (val == BC);
+					case DT_ADBC:
+						bc = (val == DT_BC);
 						break;
 
-					case DOW:
+					case DT_DOW:
 						tm->tm_wday = val;
 						break;
 
-					case UNITS:
+					case DT_UNITS:
 						tmask = 0;
 						ptype = val;
 						break;
 
-					case ISOTIME:
+					case DT_ISOTIME:
 
 						/*
 						 * This is a filler field "t" indicating that the next
@@ -1361,7 +1361,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						ptype = val;
 						break;
 
-					case UNKNOWN_FIELD:
+					case DT_UNKNOWN_FIELD:
 
 						/*
 						 * Before giving up and declaring error, check to see
@@ -1371,7 +1371,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						if (!namedTz)
 							return DTERR_BAD_FORMAT;
 						/* we'll apply the zone setting below */
-						tmask = DTK_M(TZ);
+						tmask = DTK_M(DT_TZ);
 						break;
 
 					default:
@@ -1394,11 +1394,11 @@ DecodeDateTime(char **field, int *ftype, int nf,
 		return dterr;
 
 	/* handle AM/PM */
-	if (mer != HR24 && tm->tm_hour > HOURS_PER_DAY / 2)
+	if (mer != DT_HR24 && tm->tm_hour > HOURS_PER_DAY / 2)
 		return DTERR_FIELD_OVERFLOW;
-	if (mer == AM && tm->tm_hour == HOURS_PER_DAY / 2)
+	if (mer == DT_AM && tm->tm_hour == HOURS_PER_DAY / 2)
 		tm->tm_hour = 0;
-	else if (mer == PM && tm->tm_hour != HOURS_PER_DAY / 2)
+	else if (mer == DT_PM && tm->tm_hour != HOURS_PER_DAY / 2)
 		tm->tm_hour += HOURS_PER_DAY / 2;
 
 	/* do additional checking for full date specs... */
@@ -1418,7 +1418,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 		if (namedTz != NULL)
 		{
 			/* daylight savings time modifier disallowed with full TZ */
-			if (fmask & DTK_M(DTZMOD))
+			if (fmask & DTK_M(DT_ZMOD))
 				return DTERR_BAD_FORMAT;
 
 			*tzp = DetermineTimeZoneOffset(tm, namedTz);
@@ -1431,20 +1431,20 @@ DecodeDateTime(char **field, int *ftype, int nf,
 		if (abbrevTz != NULL)
 		{
 			/* daylight savings time modifier disallowed with dynamic TZ */
-			if (fmask & DTK_M(DTZMOD))
+			if (fmask & DTK_M(DT_ZMOD))
 				return DTERR_BAD_FORMAT;
 
 			*tzp = DetermineTimeZoneAbbrevOffset(tm, abbrev, abbrevTz);
 		}
 
 		/* timezone not specified? then use session timezone */
-		if (tzp != NULL && !(fmask & DTK_M(TZ)))
+		if (tzp != NULL && !(fmask & DTK_M(DT_TZ)))
 		{
 			/*
 			 * daylight savings time modifier but no standard timezone? then
 			 * error
 			 */
-			if (fmask & DTK_M(DTZMOD))
+			if (fmask & DTK_M(DT_ZMOD))
 				return DTERR_BAD_FORMAT;
 
 			*tzp = DetermineTimeZoneOffset(tm, session_timezone);
@@ -1754,7 +1754,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 	bool		isjulian = false;
 	bool		is2digits = false;
 	bool		bc = false;
-	int			mer = HR24;
+	int			mer = DT_HR24;
 	pg_tz	   *namedTz = NULL;
 	pg_tz	   *abbrevTz = NULL;
 	char	   *abbrev = NULL;
@@ -1831,7 +1831,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 							return dterr;
 						ftype[i] = dterr;
 
-						tmask |= DTK_M(TZ);
+						tmask |= DTK_M(DT_TZ);
 					}
 					else
 					{
@@ -1850,7 +1850,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						}
 						/* we'll apply the zone setting below */
 						ftype[i] = DTK_TZ;
-						tmask = DTK_M(TZ);
+						tmask = DTK_M(DT_TZ);
 					}
 				}
 				break;
@@ -1874,7 +1874,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 					if (dterr)
 						return dterr;
 					*tzp = tz;
-					tmask = DTK_M(TZ);
+					tmask = DTK_M(DT_TZ);
 				}
 				break;
 
@@ -1929,7 +1929,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 					{
 						case DTK_YEAR:
 							tm->tm_year = val;
-							tmask = DTK_M(YEAR);
+							tmask = DTK_M(DT_YEAR);
 							break;
 
 						case DTK_MONTH:
@@ -1938,37 +1938,37 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 							 * already have a month and hour? then assume
 							 * minutes
 							 */
-							if ((fmask & DTK_M(MONTH)) != 0 &&
-								(fmask & DTK_M(HOUR)) != 0)
+							if ((fmask & DTK_M(DT_MONTH)) != 0 &&
+								(fmask & DTK_M(DT_HOUR)) != 0)
 							{
 								tm->tm_min = val;
-								tmask = DTK_M(MINUTE);
+								tmask = DTK_M(DT_MINUTE);
 							}
 							else
 							{
 								tm->tm_mon = val;
-								tmask = DTK_M(MONTH);
+								tmask = DTK_M(DT_MONTH);
 							}
 							break;
 
 						case DTK_DAY:
 							tm->tm_mday = val;
-							tmask = DTK_M(DAY);
+							tmask = DTK_M(DT_DAY);
 							break;
 
 						case DTK_HOUR:
 							tm->tm_hour = val;
-							tmask = DTK_M(HOUR);
+							tmask = DTK_M(DT_HOUR);
 							break;
 
 						case DTK_MINUTE:
 							tm->tm_min = val;
-							tmask = DTK_M(MINUTE);
+							tmask = DTK_M(DT_MINUTE);
 							break;
 
 						case DTK_SECOND:
 							tm->tm_sec = val;
-							tmask = DTK_M(SECOND);
+							tmask = DTK_M(DT_SECOND);
 							if (*cp == '.')
 							{
 								dterr = ParseFractionalSecond(cp, fsec);
@@ -1979,7 +1979,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 							break;
 
 						case DTK_TZ:
-							tmask = DTK_M(TZ);
+							tmask = DTK_M(DT_TZ);
 							dterr = DecodeTimezone(field[i], tzp);
 							if (dterr)
 								return dterr;
@@ -2100,15 +2100,15 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 			case DTK_SPECIAL:
 				/* timezone abbrevs take precedence over built-in tokens */
 				type = DecodeTimezoneAbbrev(i, field[i], &val, &valtz);
-				if (type == UNKNOWN_FIELD)
+				if (type == DT_UNKNOWN_FIELD)
 					type = DecodeSpecial(i, field[i], &val);
-				if (type == IGNORE_DTF)
+				if (type == DT_IGNORE_DTF)
 					continue;
 
 				tmask = DTK_M(type);
 				switch (type)
 				{
-					case RESERV:
+					case DT_RESERV:
 						switch (val)
 						{
 							case DTK_CURRENT:
@@ -2125,7 +2125,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 								break;
 
 							case DTK_ZULU:
-								tmask = (DTK_TIME_M | DTK_M(TZ));
+								tmask = (DTK_TIME_M | DTK_M(DT_TZ));
 								*dtype = DTK_TIME;
 								tm->tm_hour = 0;
 								tm->tm_min = 0;
@@ -2139,26 +2139,26 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 
 						break;
 
-					case DTZMOD:
+					case DT_ZMOD:
 
 						/*
 						 * daylight savings time modifier (solves "MET DST"
 						 * syntax)
 						 */
-						tmask |= DTK_M(DTZ);
+						tmask |= DTK_M(DT_DTZ);
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						*tzp -= val;
 						break;
 
-					case DTZ:
+					case DT_DTZ:
 
 						/*
 						 * set mask for TZ here _or_ check for DTZ later when
 						 * getting default timezone
 						 */
-						tmask |= DTK_M(TZ);
+						tmask |= DTK_M(DT_TZ);
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
@@ -2166,7 +2166,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						ftype[i] = DTK_TZ;
 						break;
 
-					case TZ:
+					case DT_TZ:
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
@@ -2174,8 +2174,8 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						ftype[i] = DTK_TZ;
 						break;
 
-					case DYNTZ:
-						tmask |= DTK_M(TZ);
+					case DT_DYNTZ:
+						tmask |= DTK_M(DT_TZ);
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
 						/* we'll determine the actual offset later */
@@ -2184,20 +2184,20 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						ftype[i] = DTK_TZ;
 						break;
 
-					case AMPM:
+					case DT_AMPM:
 						mer = val;
 						break;
 
-					case ADBC:
-						bc = (val == BC);
+					case DT_ADBC:
+						bc = (val == DT_BC);
 						break;
 
-					case UNITS:
+					case DT_UNITS:
 						tmask = 0;
 						ptype = val;
 						break;
 
-					case ISOTIME:
+					case DT_ISOTIME:
 						tmask = 0;
 
 						/***
@@ -2215,7 +2215,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						ptype = val;
 						break;
 
-					case UNKNOWN_FIELD:
+					case DT_UNKNOWN_FIELD:
 
 						/*
 						 * Before giving up and declaring error, check to see
@@ -2225,7 +2225,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						if (!namedTz)
 							return DTERR_BAD_FORMAT;
 						/* we'll apply the zone setting below */
-						tmask = DTK_M(TZ);
+						tmask = DTK_M(DT_TZ);
 						break;
 
 					default:
@@ -2248,11 +2248,11 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 		return dterr;
 
 	/* handle AM/PM */
-	if (mer != HR24 && tm->tm_hour > HOURS_PER_DAY / 2)
+	if (mer != DT_HR24 && tm->tm_hour > HOURS_PER_DAY / 2)
 		return DTERR_FIELD_OVERFLOW;
-	if (mer == AM && tm->tm_hour == HOURS_PER_DAY / 2)
+	if (mer == DT_AM && tm->tm_hour == HOURS_PER_DAY / 2)
 		tm->tm_hour = 0;
-	else if (mer == PM && tm->tm_hour != HOURS_PER_DAY / 2)
+	else if (mer == DT_PM && tm->tm_hour != HOURS_PER_DAY / 2)
 		tm->tm_hour += HOURS_PER_DAY / 2;
 
 	/*
@@ -2279,7 +2279,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 		long int	gmtoff;
 
 		/* daylight savings time modifier disallowed with full TZ */
-		if (fmask & DTK_M(DTZMOD))
+		if (fmask & DTK_M(DT_ZMOD))
 			return DTERR_BAD_FORMAT;
 
 		/* if non-DST zone, we do not need to know the date */
@@ -2307,7 +2307,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 		/*
 		 * daylight savings time modifier but no standard timezone? then error
 		 */
-		if (fmask & DTK_M(DTZMOD))
+		if (fmask & DTK_M(DT_ZMOD))
 			return DTERR_BAD_FORMAT;
 
 		if ((fmask & DTK_DATE_M) == 0)
@@ -2326,7 +2326,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 	}
 
 	/* timezone not specified? then use session timezone */
-	if (tzp != NULL && !(fmask & DTK_M(TZ)))
+	if (tzp != NULL && !(fmask & DTK_M(DT_TZ)))
 	{
 		struct pg_tm tt,
 				   *tmp = &tt;
@@ -2334,7 +2334,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 		/*
 		 * daylight savings time modifier but no standard timezone? then error
 		 */
-		if (fmask & DTK_M(DTZMOD))
+		if (fmask & DTK_M(DT_ZMOD))
 			return DTERR_BAD_FORMAT;
 
 		if ((fmask & DTK_DATE_M) == 0)
@@ -2378,12 +2378,12 @@ DecodeDate(char *str, int fmask, int *tmask, bool *is2digits,
 	int			type,
 				val,
 				dmask = 0;
-	char	   *field[MAXDATEFIELDS];
+	char	   *field[DT_MAXDATEFIELDS];
 
 	*tmask = 0;
 
 	/* parse this string... */
-	while (*str != '\0' && nf < MAXDATEFIELDS)
+	while (*str != '\0' && nf < DT_MAXDATEFIELDS)
 	{
 		/* skip field separators */
 		while (*str != '\0' && !isalnum((unsigned char) *str))
@@ -2416,13 +2416,13 @@ DecodeDate(char *str, int fmask, int *tmask, bool *is2digits,
 		if (isalpha((unsigned char) *field[i]))
 		{
 			type = DecodeSpecial(i, field[i], &val);
-			if (type == IGNORE_DTF)
+			if (type == DT_IGNORE_DTF)
 				continue;
 
 			dmask = DTK_M(type);
 			switch (type)
 			{
-				case MONTH:
+				case DT_MONTH:
 					tm->tm_mon = val;
 					haveTextMonth = true;
 					break;
@@ -2463,7 +2463,7 @@ DecodeDate(char *str, int fmask, int *tmask, bool *is2digits,
 		*tmask |= dmask;
 	}
 
-	if ((fmask & ~(DTK_M(DOY) | DTK_M(TZ))) != DTK_DATE_M)
+	if ((fmask & ~(DTK_M(DT_DOY) | DTK_M(DT_TZ))) != DTK_DATE_M)
 		return DTERR_BAD_FORMAT;
 
 	/* validation of the field values must wait until ValidateDate() */
@@ -2479,7 +2479,7 @@ int
 ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc,
 			 struct pg_tm *tm)
 {
-	if (fmask & DTK_M(YEAR))
+	if (fmask & DTK_M(DT_YEAR))
 	{
 		if (isjulian)
 		{
@@ -2512,21 +2512,21 @@ ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc,
 	}
 
 	/* now that we have correct year, decode DOY */
-	if (fmask & DTK_M(DOY))
+	if (fmask & DTK_M(DT_DOY))
 	{
 		j2date(date2j(tm->tm_year, 1, 1) + tm->tm_yday - 1,
 			   &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
 	}
 
 	/* check for valid month */
-	if (fmask & DTK_M(MONTH))
+	if (fmask & DTK_M(DT_MONTH))
 	{
 		if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR)
 			return DTERR_MD_FIELD_OVERFLOW;
 	}
 
 	/* minimal check for valid day */
-	if (fmask & DTK_M(DAY))
+	if (fmask & DTK_M(DT_DAY))
 	{
 		if (tm->tm_mday < 1 || tm->tm_mday > 31)
 			return DTERR_MD_FIELD_OVERFLOW;
@@ -2578,7 +2578,7 @@ DecodeTime(char *str, int fmask, int range,
 		tm->tm_sec = 0;
 		*fsec = 0;
 		/* If it's a MINUTE TO SECOND interval, take 2 fields as being mm:ss */
-		if (range == (INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND)))
+		if (range == (INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND)))
 		{
 			tm->tm_sec = tm->tm_min;
 			tm->tm_min = tm->tm_hour;
@@ -2672,10 +2672,10 @@ DecodeNumber(int flen, char *str, bool haveTextMonth, int fmask,
 		return DTERR_BAD_FORMAT;
 
 	/* Special case for day of year */
-	if (flen == 3 && (fmask & DTK_DATE_M) == DTK_M(YEAR) && val >= 1 &&
+	if (flen == 3 && (fmask & DTK_DATE_M) == DTK_M(DT_YEAR) && val >= 1 &&
 		val <= 366)
 	{
-		*tmask = (DTK_M(DOY) | DTK_M(MONTH) | DTK_M(DAY));
+		*tmask = (DTK_M(DT_DOY) | DTK_M(DT_MONTH) | DTK_M(DT_DAY));
 		tm->tm_yday = val;
 		/* tm_mon and tm_mday can't actually be set yet ... */
 		return 0;
@@ -2695,28 +2695,28 @@ DecodeNumber(int flen, char *str, bool haveTextMonth, int fmask,
 			 */
 			if (flen >= 3 || DateOrder == DATEORDER_YMD)
 			{
-				*tmask = DTK_M(YEAR);
+				*tmask = DTK_M(DT_YEAR);
 				tm->tm_year = val;
 			}
 			else if (DateOrder == DATEORDER_DMY)
 			{
-				*tmask = DTK_M(DAY);
+				*tmask = DTK_M(DT_DAY);
 				tm->tm_mday = val;
 			}
 			else
 			{
-				*tmask = DTK_M(MONTH);
+				*tmask = DTK_M(DT_MONTH);
 				tm->tm_mon = val;
 			}
 			break;
 
-		case (DTK_M(YEAR)):
+		case (DTK_M(DT_YEAR)):
 			/* Must be at second field of YY-MM-DD */
-			*tmask = DTK_M(MONTH);
+			*tmask = DTK_M(DT_MONTH);
 			tm->tm_mon = val;
 			break;
 
-		case (DTK_M(MONTH)):
+		case (DTK_M(DT_MONTH)):
 			if (haveTextMonth)
 			{
 				/*
@@ -2728,62 +2728,62 @@ DecodeNumber(int flen, char *str, bool haveTextMonth, int fmask,
 				 */
 				if (flen >= 3 || DateOrder == DATEORDER_YMD)
 				{
-					*tmask = DTK_M(YEAR);
+					*tmask = DTK_M(DT_YEAR);
 					tm->tm_year = val;
 				}
 				else
 				{
-					*tmask = DTK_M(DAY);
+					*tmask = DTK_M(DT_DAY);
 					tm->tm_mday = val;
 				}
 			}
 			else
 			{
 				/* Must be at second field of MM-DD-YY */
-				*tmask = DTK_M(DAY);
+				*tmask = DTK_M(DT_DAY);
 				tm->tm_mday = val;
 			}
 			break;
 
-		case (DTK_M(YEAR) | DTK_M(MONTH)):
+		case (DTK_M(DT_YEAR) | DTK_M(DT_MONTH)):
 			if (haveTextMonth)
 			{
 				/* Need to accept DD-MON-YYYY even in YMD mode */
 				if (flen >= 3 && *is2digits)
 				{
 					/* Guess that first numeric field is day was wrong */
-					*tmask = DTK_M(DAY);	/* YEAR is already set */
+					*tmask = DTK_M(DT_DAY);	/* YEAR is already set */
 					tm->tm_mday = tm->tm_year;
 					tm->tm_year = val;
 					*is2digits = false;
 				}
 				else
 				{
-					*tmask = DTK_M(DAY);
+					*tmask = DTK_M(DT_DAY);
 					tm->tm_mday = val;
 				}
 			}
 			else
 			{
 				/* Must be at third field of YY-MM-DD */
-				*tmask = DTK_M(DAY);
+				*tmask = DTK_M(DT_DAY);
 				tm->tm_mday = val;
 			}
 			break;
 
-		case (DTK_M(DAY)):
+		case (DTK_M(DT_DAY)):
 			/* Must be at second field of DD-MM-YY */
-			*tmask = DTK_M(MONTH);
+			*tmask = DTK_M(DT_MONTH);
 			tm->tm_mon = val;
 			break;
 
-		case (DTK_M(MONTH) | DTK_M(DAY)):
+		case (DTK_M(DT_MONTH) | DTK_M(DT_DAY)):
 			/* Must be at third field of DD-MM-YY or MM-DD-YY */
-			*tmask = DTK_M(YEAR);
+			*tmask = DTK_M(DT_YEAR);
 			tm->tm_year = val;
 			break;
 
-		case (DTK_M(YEAR) | DTK_M(MONTH) | DTK_M(DAY)):
+		case (DTK_M(DT_YEAR) | DTK_M(DT_MONTH) | DTK_M(DT_DAY)):
 			/* we have all the date, so it must be a time field */
 			dterr = DecodeNumberField(flen, str, fmask,
 									  tmask, tm,
@@ -2801,7 +2801,7 @@ DecodeNumber(int flen, char *str, bool haveTextMonth, int fmask,
 	 * When processing a year field, mark it for adjustment if it's only one
 	 * or two digits.
 	 */
-	if (*tmask == DTK_M(YEAR))
+	if (*tmask == DTK_M(DT_YEAR))
 		*is2digits = (flen <= 2);
 
 	return 0;
@@ -2989,7 +2989,7 @@ DecodeTimezoneAbbrev(int field, char *lowtoken,
 
 	tp = abbrevcache[field];
 	/* use strncmp so that we match truncated tokens */
-	if (tp == NULL || strncmp(lowtoken, tp->token, TOKMAXLEN) != 0)
+	if (tp == NULL || strncmp(lowtoken, tp->token, DT_TOKMAXLEN) != 0)
 	{
 		if (zoneabbrevtbl)
 			tp = datebsearch(lowtoken, zoneabbrevtbl->abbrevs,
@@ -2999,7 +2999,7 @@ DecodeTimezoneAbbrev(int field, char *lowtoken,
 	}
 	if (tp == NULL)
 	{
-		type = UNKNOWN_FIELD;
+		type = DT_UNKNOWN_FIELD;
 		*offset = 0;
 		*tz = NULL;
 	}
@@ -3007,7 +3007,7 @@ DecodeTimezoneAbbrev(int field, char *lowtoken,
 	{
 		abbrevcache[field] = tp;
 		type = tp->type;
-		if (type == DYNTZ)
+		if (type == DT_DYNTZ)
 		{
 			*offset = 0;
 			*tz = FetchDynamicTimeZone(zoneabbrevtbl, tp);
@@ -3043,13 +3043,13 @@ DecodeSpecial(int field, char *lowtoken, int *val)
 
 	tp = datecache[field];
 	/* use strncmp so that we match truncated tokens */
-	if (tp == NULL || strncmp(lowtoken, tp->token, TOKMAXLEN) != 0)
+	if (tp == NULL || strncmp(lowtoken, tp->token, DT_TOKMAXLEN) != 0)
 	{
 		tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
 	}
 	if (tp == NULL)
 	{
-		type = UNKNOWN_FIELD;
+		type = DT_UNKNOWN_FIELD;
 		*val = 0;
 	}
 	else
@@ -3106,7 +3106,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 	double		fval;
 
 	*dtype = DTK_DELTA;
-	type = IGNORE_DTF;
+	type = DT_IGNORE_DTF;
 	ClearPgTm(tm, fsec);
 
 	/* read through list backwards to pick up units before values */
@@ -3166,34 +3166,34 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 
 			case DTK_DATE:
 			case DTK_NUMBER:
-				if (type == IGNORE_DTF)
+				if (type == DT_IGNORE_DTF)
 				{
 					/* use typmod to decide what rightmost field is */
 					switch (range)
 					{
-						case INTERVAL_MASK(YEAR):
+						case INTERVAL_MASK(DT_YEAR):
 							type = DTK_YEAR;
 							break;
-						case INTERVAL_MASK(MONTH):
-						case INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH):
+						case INTERVAL_MASK(DT_MONTH):
+						case INTERVAL_MASK(DT_YEAR) | INTERVAL_MASK(DT_MONTH):
 							type = DTK_MONTH;
 							break;
-						case INTERVAL_MASK(DAY):
+						case INTERVAL_MASK(DT_DAY):
 							type = DTK_DAY;
 							break;
-						case INTERVAL_MASK(HOUR):
-						case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR):
+						case INTERVAL_MASK(DT_HOUR):
+						case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR):
 							type = DTK_HOUR;
 							break;
-						case INTERVAL_MASK(MINUTE):
-						case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
-						case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
+						case INTERVAL_MASK(DT_MINUTE):
+						case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
+						case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
 							type = DTK_MINUTE;
 							break;
-						case INTERVAL_MASK(SECOND):
-						case INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
-						case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
-						case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+						case INTERVAL_MASK(DT_SECOND):
+						case INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
+						case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
+						case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 							type = DTK_SECOND;
 							break;
 						default:
@@ -3247,7 +3247,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 				{
 					case DTK_MICROSEC:
 						*fsec += rint(val + fval);
-						tmask = DTK_M(MICROSECOND);
+						tmask = DTK_M(DT_MICROSECOND);
 						break;
 
 					case DTK_MILLISEC:
@@ -3255,7 +3255,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 						tm->tm_sec += val / 1000;
 						val -= (val / 1000) * 1000;
 						*fsec += rint((val + fval) * 1000);
-						tmask = DTK_M(MILLISECOND);
+						tmask = DTK_M(DT_MILLISECOND);
 						break;
 
 					case DTK_SECOND:
@@ -3267,7 +3267,7 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 						 * microsecond and millisecond input as well.
 						 */
 						if (fval == 0)
-							tmask = DTK_M(SECOND);
+							tmask = DTK_M(DT_SECOND);
 						else
 							tmask = DTK_ALL_SECS_M;
 						break;
@@ -3275,60 +3275,60 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 					case DTK_MINUTE:
 						tm->tm_min += val;
 						AdjustFractSeconds(fval, tm, fsec, SECS_PER_MINUTE);
-						tmask = DTK_M(MINUTE);
+						tmask = DTK_M(DT_MINUTE);
 						break;
 
 					case DTK_HOUR:
 						tm->tm_hour += val;
 						AdjustFractSeconds(fval, tm, fsec, SECS_PER_HOUR);
-						tmask = DTK_M(HOUR);
+						tmask = DTK_M(DT_HOUR);
 						type = DTK_DAY; /* set for next field */
 						break;
 
 					case DTK_DAY:
 						tm->tm_mday += val;
 						AdjustFractSeconds(fval, tm, fsec, SECS_PER_DAY);
-						tmask = DTK_M(DAY);
+						tmask = DTK_M(DT_DAY);
 						break;
 
 					case DTK_WEEK:
 						tm->tm_mday += val * 7;
 						AdjustFractDays(fval, tm, fsec, 7);
-						tmask = DTK_M(WEEK);
+						tmask = DTK_M(DT_WEEK);
 						break;
 
 					case DTK_MONTH:
 						tm->tm_mon += val;
 						AdjustFractDays(fval, tm, fsec, DAYS_PER_MONTH);
-						tmask = DTK_M(MONTH);
+						tmask = DTK_M(DT_MONTH);
 						break;
 
 					case DTK_YEAR:
 						tm->tm_year += val;
 						if (fval != 0)
 							tm->tm_mon += fval * MONTHS_PER_YEAR;
-						tmask = DTK_M(YEAR);
+						tmask = DTK_M(DT_YEAR);
 						break;
 
 					case DTK_DECADE:
 						tm->tm_year += val * 10;
 						if (fval != 0)
 							tm->tm_mon += fval * MONTHS_PER_YEAR * 10;
-						tmask = DTK_M(DECADE);
+						tmask = DTK_M(DT_DECADE);
 						break;
 
 					case DTK_CENTURY:
 						tm->tm_year += val * 100;
 						if (fval != 0)
 							tm->tm_mon += fval * MONTHS_PER_YEAR * 100;
-						tmask = DTK_M(CENTURY);
+						tmask = DTK_M(DT_CENTURY);
 						break;
 
 					case DTK_MILLENNIUM:
 						tm->tm_year += val * 1000;
 						if (fval != 0)
 							tm->tm_mon += fval * MONTHS_PER_YEAR * 1000;
-						tmask = DTK_M(MILLENNIUM);
+						tmask = DTK_M(DT_MILLENNIUM);
 						break;
 
 					default:
@@ -3339,22 +3339,22 @@ DecodeInterval(char **field, int *ftype, int nf, int range,
 			case DTK_STRING:
 			case DTK_SPECIAL:
 				type = DecodeUnits(i, field[i], &val);
-				if (type == IGNORE_DTF)
+				if (type == DT_IGNORE_DTF)
 					continue;
 
 				tmask = 0;		/* DTK_M(type); */
 				switch (type)
 				{
-					case UNITS:
+					case DT_UNITS:
 						type = val;
 						break;
 
-					case AGO:
+					case DT_AGO:
 						is_before = true;
 						type = val;
 						break;
 
-					case RESERV:
+					case DT_RESERV:
 						tmask = (DTK_DATE_M | DTK_TIME_M);
 						*dtype = val;
 						break;
@@ -3732,13 +3732,13 @@ DecodeUnits(int field, char *lowtoken, int *val)
 
 	tp = deltacache[field];
 	/* use strncmp so that we match truncated tokens */
-	if (tp == NULL || strncmp(lowtoken, tp->token, TOKMAXLEN) != 0)
+	if (tp == NULL || strncmp(lowtoken, tp->token, DT_TOKMAXLEN) != 0)
 	{
 		tp = datebsearch(lowtoken, deltatktbl, szdeltatktbl);
 	}
 	if (tp == NULL)
 	{
-		type = UNKNOWN_FIELD;
+		type = DT_UNKNOWN_FIELD;
 		*val = 0;
 	}
 	else
@@ -3823,7 +3823,7 @@ datebsearch(const char *key, const datetkn *base, int nel)
 			if (result == 0)
 			{
 				/* use strncmp so that we match truncated tokens */
-				result = strncmp(key, position->token, TOKMAXLEN);
+				result = strncmp(key, position->token, DT_TOKMAXLEN);
 				if (result == 0)
 					return position;
 			}
@@ -4437,12 +4437,12 @@ CheckDateTokenTable(const char *tablename, const datetkn *base, int nel)
 	for (i = 0; i < nel; i++)
 	{
 		/* check for token strings that don't fit */
-		if (strlen(base[i].token) > TOKMAXLEN)
+		if (strlen(base[i].token) > DT_TOKMAXLEN)
 		{
 			/* %.*s is safe since all our tokens are ASCII */
 			elog(LOG, "token too long in %s table: \"%.*s\"",
 				 tablename,
-				 TOKMAXLEN + 1, base[i].token);
+				 DT_TOKMAXLEN + 1, base[i].token);
 			ok = false;
 			break;				/* don't risk applying strcmp */
 		}
@@ -4559,7 +4559,7 @@ ConvertTimeZoneAbbrevs(struct tzEntry *abbrevs, int n)
 		datetkn    *dtoken = tbl->abbrevs + i;
 
 		/* use strlcpy to truncate name if necessary */
-		strlcpy(dtoken->token, abbr->abbrev, TOKMAXLEN + 1);
+		strlcpy(dtoken->token, abbr->abbrev, DT_TOKMAXLEN + 1);
 		if (abbr->zone != NULL)
 		{
 			/* Allocate a DynamicZoneAbbrev for this abbreviation */
@@ -4570,7 +4570,7 @@ ConvertTimeZoneAbbrevs(struct tzEntry *abbrevs, int n)
 			dtza->tz = NULL;
 			strcpy(dtza->zone, abbr->zone);
 
-			dtoken->type = DYNTZ;
+			dtoken->type = DT_DYNTZ;
 			/* value is offset from table start to DynamicZoneAbbrev */
 			dtoken->value = (int32) tbl_size;
 
@@ -4580,7 +4580,7 @@ ConvertTimeZoneAbbrevs(struct tzEntry *abbrevs, int n)
 		}
 		else
 		{
-			dtoken->type = abbr->is_dst ? DTZ : TZ;
+			dtoken->type = abbr->is_dst ? DT_DTZ : DT_TZ;
 			dtoken->value = abbr->offset;
 		}
 	}
@@ -4616,7 +4616,7 @@ FetchDynamicTimeZone(TimeZoneAbbrevTable *tbl, const datetkn *tp)
 	DynamicZoneAbbrev *dtza;
 
 	/* Just some sanity checks to prevent indexing off into nowhere */
-	Assert(tp->type == DYNTZ);
+	Assert(tp->type == DT_DYNTZ);
 	Assert(tp->value > 0 && tp->value < tbl->tblsize);
 
 	dtza = (DynamicZoneAbbrev *) ((char *) tbl + tp->value);
@@ -4656,7 +4656,7 @@ pg_timezone_abbrevs(PG_FUNCTION_ARGS)
 	Datum		values[3];
 	bool		nulls[3];
 	const datetkn *tp;
-	char		buffer[TOKMAXLEN + 1];
+	char		buffer[DT_TOKMAXLEN + 1];
 	int			gmtoffset;
 	bool		is_dst;
 	unsigned char *p;
@@ -4710,15 +4710,15 @@ pg_timezone_abbrevs(PG_FUNCTION_ARGS)
 
 	switch (tp->type)
 	{
-		case TZ:
+		case DT_TZ:
 			gmtoffset = tp->value;
 			is_dst = false;
 			break;
-		case DTZ:
+		case DT_DTZ:
 			gmtoffset = tp->value;
 			is_dst = true;
 			break;
-		case DYNTZ:
+		case DT_DYNTZ:
 			{
 				/* Determine the current meaning of the abbrev */
 				pg_tz	   *tzp;
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index b8bd4caa3e7..d7c1f849c81 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -3771,7 +3771,7 @@ do_to_timestamp(text *date_txt, text *fmt,
 			if (tmfc.bc && tm->tm_year > 0)
 				tm->tm_year = -(tm->tm_year - 1);
 		}
-		fmask |= DTK_M(YEAR);
+		fmask |= DTK_M(DT_YEAR);
 	}
 	else if (tmfc.cc)
 	{
@@ -3784,7 +3784,7 @@ do_to_timestamp(text *date_txt, text *fmt,
 		else
 			/* +1 because year == 599 is 600 BC */
 			tm->tm_year = tmfc.cc * 100 + 1;
-		fmask |= DTK_M(YEAR);
+		fmask |= DTK_M(DT_YEAR);
 	}
 
 	if (tmfc.j)
@@ -3816,12 +3816,12 @@ do_to_timestamp(text *date_txt, text *fmt,
 	if (tmfc.dd)
 	{
 		tm->tm_mday = tmfc.dd;
-		fmask |= DTK_M(DAY);
+		fmask |= DTK_M(DT_DAY);
 	}
 	if (tmfc.mm)
 	{
 		tm->tm_mon = tmfc.mm;
-		fmask |= DTK_M(MONTH);
+		fmask |= DTK_M(DT_MONTH);
 	}
 
 	if (tmfc.ddd && (tm->tm_mon <= 1 || tm->tm_mday <= 1))
@@ -3869,7 +3869,7 @@ do_to_timestamp(text *date_txt, text *fmt,
 			if (tm->tm_mday <= 1)
 				tm->tm_mday = tmfc.ddd - y[i - 1];
 
-			fmask |= DTK_M(MONTH) | DTK_M(DAY);
+			fmask |= DTK_M(DT_MONTH) | DTK_M(DT_DAY);
 		}
 	}
 
diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index 97a5b85516f..8392d0eb538 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -1504,7 +1504,7 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
 			break;
 		case JSONTYPE_DATE:
 			{
-				char		buf[MAXDATELEN + 1];
+				char		buf[DT_MAXDATELEN + 1];
 
 				JsonEncodeDateTime(buf, val, DATEOID);
 				appendStringInfo(result, "\"%s\"", buf);
@@ -1512,7 +1512,7 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
 			break;
 		case JSONTYPE_TIMESTAMP:
 			{
-				char		buf[MAXDATELEN + 1];
+				char		buf[DT_MAXDATELEN + 1];
 
 				JsonEncodeDateTime(buf, val, TIMESTAMPOID);
 				appendStringInfo(result, "\"%s\"", buf);
@@ -1520,7 +1520,7 @@ datum_to_json(Datum val, bool is_null, StringInfo result,
 			break;
 		case JSONTYPE_TIMESTAMPTZ:
 			{
-				char		buf[MAXDATELEN + 1];
+				char		buf[DT_MAXDATELEN + 1];
 
 				JsonEncodeDateTime(buf, val, TIMESTAMPTZOID);
 				appendStringInfo(result, "\"%s\"", buf);
@@ -1556,7 +1556,7 @@ char *
 JsonEncodeDateTime(char *buf, Datum value, Oid typid)
 {
 	if (!buf)
-		buf = palloc(MAXDATELEN + 1);
+		buf = palloc(DT_MAXDATELEN + 1);
 
 	switch (typid)
 	{
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index ec857958273..f64356d31a3 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -202,14 +202,14 @@ abstimein(PG_FUNCTION_ARGS)
 	struct pg_tm date,
 			   *tm = &date;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
-	char		workbuf[MAXDATELEN + 1];
+	char	   *field[DT_MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + 1];
 	int			dtype;
 	int			nf,
-				ftype[MAXDATEFIELDS];
+				ftype[DT_MAXDATEFIELDS];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz);
 	if (dterr != 0)
@@ -265,8 +265,8 @@ abstimeout(PG_FUNCTION_ARGS)
 	double		fsec = 0;
 	struct pg_tm tt,
 			   *tm = &tt;
-	char		buf[MAXDATELEN + 1];
-	char		zone[MAXDATELEN + 1],
+	char		buf[DT_MAXDATELEN + 1];
+	char		zone[DT_MAXDATELEN + 1],
 			   *tzn = zone;
 
 	switch (time)
@@ -276,13 +276,13 @@ abstimeout(PG_FUNCTION_ARGS)
 			 * 'invalid' for abstime for now, but dump it someday.
 			 */
 		case INVALID_ABSTIME:
-			strcpy(buf, INVALID);
+			strcpy(buf, DT_INVALID);
 			break;
 		case NOEND_ABSTIME:
-			strcpy(buf, LATE);
+			strcpy(buf, DT_LATE);
 			break;
 		case NOSTART_ABSTIME:
-			strcpy(buf, EARLY);
+			strcpy(buf, DT_EARLY);
 			break;
 		default:
 			abstime2tm(time, &tz, tm, &tzn);
@@ -471,7 +471,7 @@ abstime_timestamp(PG_FUNCTION_ARGS)
 	struct pg_tm tt,
 			   *tm = &tt;
 	int			tz;
-	char		zone[MAXDATELEN + 1],
+	char		zone[DT_MAXDATELEN + 1],
 			   *tzn = zone;
 
 	switch (abstime)
@@ -544,7 +544,7 @@ abstime_timestamptz(PG_FUNCTION_ARGS)
 	struct pg_tm tt,
 			   *tm = &tt;
 	int			tz;
-	char		zone[MAXDATELEN + 1],
+	char		zone[DT_MAXDATELEN + 1],
 			   *tzn = zone;
 
 	switch (abstime)
@@ -594,13 +594,13 @@ reltimein(PG_FUNCTION_ARGS)
 	fsec_t		fsec;
 	int			dtype;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
+	char	   *field[DT_MAXDATEFIELDS];
 	int			nf,
-				ftype[MAXDATEFIELDS];
-	char		workbuf[MAXDATELEN + 1];
+				ftype[DT_MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + 1];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeInterval(field, ftype, nf, INTERVAL_FULL_RANGE,
 							   &dtype, tm, &fsec);
@@ -644,7 +644,7 @@ reltimeout(PG_FUNCTION_ARGS)
 	char	   *result;
 	struct pg_tm tt,
 			   *tm = &tt;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	reltime2tm(time, tm);
 	EncodeInterval(tm, 0, IntervalStyle, buf);
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index e6a1eed191e..02ff9f042d9 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -156,12 +156,12 @@ timestamp_in(PG_FUNCTION_ARGS)
 	int			dtype;
 	int			nf;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
-	int			ftype[MAXDATEFIELDS];
-	char		workbuf[MAXDATELEN + MAXDATEFIELDS];
+	char	   *field[DT_MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + DT_MAXDATEFIELDS];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz);
 	if (dterr != 0)
@@ -218,7 +218,7 @@ timestamp_out(PG_FUNCTION_ARGS)
 	struct pg_tm tt,
 			   *tm = &tt;
 	fsec_t		fsec;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	if (TIMESTAMP_NOT_FINITE(timestamp))
 		EncodeSpecialTimestamp(timestamp, buf);
@@ -396,12 +396,12 @@ timestamptz_in(PG_FUNCTION_ARGS)
 	int			dtype;
 	int			nf;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
-	int			ftype[MAXDATEFIELDS];
-	char		workbuf[MAXDATELEN + MAXDATEFIELDS];
+	char	   *field[DT_MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
+	char		workbuf[DT_MAXDATELEN + DT_MAXDATEFIELDS];
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf),
-						  field, ftype, MAXDATEFIELDS, &nf);
+						  field, ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz);
 	if (dterr != 0)
@@ -508,12 +508,12 @@ parse_sane_timezone(struct pg_tm *tm, text *zone)
 											   false);
 		type = DecodeTimezoneAbbrev(0, lowzone, &val, &tzp);
 
-		if (type == TZ || type == DTZ)
+		if (type == DT_TZ || type == DT_DTZ)
 		{
 			/* fixed-offset abbreviation */
 			tz = -val;
 		}
-		else if (type == DYNTZ)
+		else if (type == DT_DYNTZ)
 		{
 			/* dynamic-offset abbreviation, resolve using specified time */
 			tz = DetermineTimeZoneAbbrevOffset(tm, tzname, tzp);
@@ -767,7 +767,7 @@ timestamptz_out(PG_FUNCTION_ARGS)
 			   *tm = &tt;
 	fsec_t		fsec;
 	const char *tzn;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	if (TIMESTAMP_NOT_FINITE(dt))
 		EncodeSpecialTimestamp(dt, buf);
@@ -889,8 +889,8 @@ interval_in(PG_FUNCTION_ARGS)
 	int			nf;
 	int			range;
 	int			dterr;
-	char	   *field[MAXDATEFIELDS];
-	int			ftype[MAXDATEFIELDS];
+	char	   *field[DT_MAXDATEFIELDS];
+	int			ftype[DT_MAXDATEFIELDS];
 	char		workbuf[256];
 
 	tm->tm_year = 0;
@@ -907,7 +907,7 @@ interval_in(PG_FUNCTION_ARGS)
 		range = INTERVAL_FULL_RANGE;
 
 	dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field,
-						  ftype, MAXDATEFIELDS, &nf);
+						  ftype, DT_MAXDATEFIELDS, &nf);
 	if (dterr == 0)
 		dterr = DecodeInterval(field, ftype, nf, range,
 							   &dtype, tm, &fsec);
@@ -962,7 +962,7 @@ interval_out(PG_FUNCTION_ARGS)
 	struct pg_tm tt,
 			   *tm = &tt;
 	fsec_t		fsec;
-	char		buf[MAXDATELEN + 1];
+	char		buf[DT_MAXDATELEN + 1];
 
 	if (interval2tm(*span, tm, &fsec) != 0)
 		elog(ERROR, "could not convert interval to tm");
@@ -1046,19 +1046,19 @@ intervaltypmodin(PG_FUNCTION_ARGS)
 	{
 		switch (tl[0])
 		{
-			case INTERVAL_MASK(YEAR):
-			case INTERVAL_MASK(MONTH):
-			case INTERVAL_MASK(DAY):
-			case INTERVAL_MASK(HOUR):
-			case INTERVAL_MASK(MINUTE):
-			case INTERVAL_MASK(SECOND):
-			case INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH):
-			case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR):
-			case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
-			case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
-			case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
-			case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
-			case INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+			case INTERVAL_MASK(DT_YEAR):
+			case INTERVAL_MASK(DT_MONTH):
+			case INTERVAL_MASK(DT_DAY):
+			case INTERVAL_MASK(DT_HOUR):
+			case INTERVAL_MASK(DT_MINUTE):
+			case INTERVAL_MASK(DT_SECOND):
+			case INTERVAL_MASK(DT_YEAR) | INTERVAL_MASK(DT_MONTH):
+			case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR):
+			case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
+			case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
+			case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
+			case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
+			case INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			case INTERVAL_FULL_RANGE:
 				/* all OK */
 				break;
@@ -1125,43 +1125,43 @@ intervaltypmodout(PG_FUNCTION_ARGS)
 
 	switch (fields)
 	{
-		case INTERVAL_MASK(YEAR):
+		case INTERVAL_MASK(DT_YEAR):
 			fieldstr = " year";
 			break;
-		case INTERVAL_MASK(MONTH):
+		case INTERVAL_MASK(DT_MONTH):
 			fieldstr = " month";
 			break;
-		case INTERVAL_MASK(DAY):
+		case INTERVAL_MASK(DT_DAY):
 			fieldstr = " day";
 			break;
-		case INTERVAL_MASK(HOUR):
+		case INTERVAL_MASK(DT_HOUR):
 			fieldstr = " hour";
 			break;
-		case INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_MINUTE):
 			fieldstr = " minute";
 			break;
-		case INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_SECOND):
 			fieldstr = " second";
 			break;
-		case INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH):
+		case INTERVAL_MASK(DT_YEAR) | INTERVAL_MASK(DT_MONTH):
 			fieldstr = " year to month";
 			break;
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR):
 			fieldstr = " day to hour";
 			break;
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
 			fieldstr = " day to minute";
 			break;
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			fieldstr = " day to second";
 			break;
-		case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
 			fieldstr = " hour to minute";
 			break;
-		case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			fieldstr = " hour to second";
 			break;
-		case INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			fieldstr = " minute to second";
 			break;
 		case INTERVAL_FULL_RANGE:
@@ -1199,31 +1199,31 @@ intervaltypmodleastfield(int32 typmod)
 
 	switch (INTERVAL_RANGE(typmod))
 	{
-		case INTERVAL_MASK(YEAR):
+		case INTERVAL_MASK(DT_YEAR):
 			return 5;			/* YEAR */
-		case INTERVAL_MASK(MONTH):
+		case INTERVAL_MASK(DT_MONTH):
 			return 4;			/* MONTH */
-		case INTERVAL_MASK(DAY):
+		case INTERVAL_MASK(DT_DAY):
 			return 3;			/* DAY */
-		case INTERVAL_MASK(HOUR):
+		case INTERVAL_MASK(DT_HOUR):
 			return 2;			/* HOUR */
-		case INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_MINUTE):
 			return 1;			/* MINUTE */
-		case INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_SECOND):
 			return 0;			/* SECOND */
-		case INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH):
+		case INTERVAL_MASK(DT_YEAR) | INTERVAL_MASK(DT_MONTH):
 			return 4;			/* MONTH */
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR):
 			return 2;			/* HOUR */
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
 			return 1;			/* MINUTE */
-		case INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_DAY) | INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			return 0;			/* SECOND */
-		case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE):
+		case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE):
 			return 1;			/* MINUTE */
-		case INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_HOUR) | INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			return 0;			/* SECOND */
-		case INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND):
+		case INTERVAL_MASK(DT_MINUTE) | INTERVAL_MASK(DT_SECOND):
 			return 0;			/* SECOND */
 		case INTERVAL_FULL_RANGE:
 			return 0;			/* SECOND */
@@ -1372,81 +1372,81 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 		{
 			/* Do nothing... */
 		}
-		else if (range == INTERVAL_MASK(YEAR))
+		else if (range == INTERVAL_MASK(DT_YEAR))
 		{
 			interval->month = (interval->month / MONTHS_PER_YEAR) * MONTHS_PER_YEAR;
 			interval->day = 0;
 			interval->time = 0;
 		}
-		else if (range == INTERVAL_MASK(MONTH))
+		else if (range == INTERVAL_MASK(DT_MONTH))
 		{
 			interval->day = 0;
 			interval->time = 0;
 		}
 		/* YEAR TO MONTH */
-		else if (range == (INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH)))
+		else if (range == (INTERVAL_MASK(DT_YEAR) | INTERVAL_MASK(DT_MONTH)))
 		{
 			interval->day = 0;
 			interval->time = 0;
 		}
-		else if (range == INTERVAL_MASK(DAY))
+		else if (range == INTERVAL_MASK(DT_DAY))
 		{
 			interval->time = 0;
 		}
-		else if (range == INTERVAL_MASK(HOUR))
+		else if (range == INTERVAL_MASK(DT_HOUR))
 		{
 			interval->time = (interval->time / USECS_PER_HOUR) *
 				USECS_PER_HOUR;
 		}
-		else if (range == INTERVAL_MASK(MINUTE))
+		else if (range == INTERVAL_MASK(DT_MINUTE))
 		{
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 				USECS_PER_MINUTE;
 		}
-		else if (range == INTERVAL_MASK(SECOND))
+		else if (range == INTERVAL_MASK(DT_SECOND))
 		{
 			/* fractional-second rounding will be dealt with below */
 		}
 		/* DAY TO HOUR */
-		else if (range == (INTERVAL_MASK(DAY) |
-						   INTERVAL_MASK(HOUR)))
+		else if (range == (INTERVAL_MASK(DT_DAY) |
+						   INTERVAL_MASK(DT_HOUR)))
 		{
 			interval->time = (interval->time / USECS_PER_HOUR) *
 				USECS_PER_HOUR;
 		}
 		/* DAY TO MINUTE */
-		else if (range == (INTERVAL_MASK(DAY) |
-						   INTERVAL_MASK(HOUR) |
-						   INTERVAL_MASK(MINUTE)))
+		else if (range == (INTERVAL_MASK(DT_DAY) |
+						   INTERVAL_MASK(DT_HOUR) |
+						   INTERVAL_MASK(DT_MINUTE)))
 		{
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 				USECS_PER_MINUTE;
 		}
 		/* DAY TO SECOND */
-		else if (range == (INTERVAL_MASK(DAY) |
-						   INTERVAL_MASK(HOUR) |
-						   INTERVAL_MASK(MINUTE) |
-						   INTERVAL_MASK(SECOND)))
+		else if (range == (INTERVAL_MASK(DT_DAY) |
+						   INTERVAL_MASK(DT_HOUR) |
+						   INTERVAL_MASK(DT_MINUTE) |
+						   INTERVAL_MASK(DT_SECOND)))
 		{
 			/* fractional-second rounding will be dealt with below */
 		}
 		/* HOUR TO MINUTE */
-		else if (range == (INTERVAL_MASK(HOUR) |
-						   INTERVAL_MASK(MINUTE)))
+		else if (range == (INTERVAL_MASK(DT_HOUR) |
+						   INTERVAL_MASK(DT_MINUTE)))
 		{
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 				USECS_PER_MINUTE;
 		}
 		/* HOUR TO SECOND */
-		else if (range == (INTERVAL_MASK(HOUR) |
-						   INTERVAL_MASK(MINUTE) |
-						   INTERVAL_MASK(SECOND)))
+		else if (range == (INTERVAL_MASK(DT_HOUR) |
+						   INTERVAL_MASK(DT_MINUTE) |
+						   INTERVAL_MASK(DT_SECOND)))
 		{
 			/* fractional-second rounding will be dealt with below */
 		}
 		/* MINUTE TO SECOND */
-		else if (range == (INTERVAL_MASK(MINUTE) |
-						   INTERVAL_MASK(SECOND)))
+		else if (range == (INTERVAL_MASK(DT_MINUTE) |
+						   INTERVAL_MASK(DT_SECOND)))
 		{
 			/* fractional-second rounding will be dealt with below */
 		}
@@ -1523,9 +1523,9 @@ void
 EncodeSpecialTimestamp(Timestamp dt, char *str)
 {
 	if (TIMESTAMP_IS_NOBEGIN(dt))
-		strcpy(str, EARLY);
+		strcpy(str, DT_EARLY);
 	else if (TIMESTAMP_IS_NOEND(dt))
-		strcpy(str, LATE);
+		strcpy(str, DT_LATE);
 	else						/* shouldn't happen */
 		elog(ERROR, "invalid argument for EncodeSpecialTimestamp");
 }
@@ -1709,7 +1709,7 @@ timestamptz_to_time_t(TimestampTz t)
 const char *
 timestamptz_to_str(TimestampTz t)
 {
-	static char buf[MAXDATELEN + 1];
+	static char buf[DT_MAXDATELEN + 1];
 	int			tz;
 	struct pg_tm tt,
 			   *tm = &tt;
@@ -3689,7 +3689,7 @@ timestamp_trunc(PG_FUNCTION_ARGS)
 
 	type = DecodeUnits(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0)
 			ereport(ERROR,
@@ -3816,7 +3816,7 @@ timestamptz_trunc(PG_FUNCTION_ARGS)
 
 	type = DecodeUnits(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0)
 			ereport(ERROR,
@@ -3962,7 +3962,7 @@ interval_trunc(PG_FUNCTION_ARGS)
 
 	type = DecodeUnits(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (interval2tm(*interval, tm, &fsec) == 0)
 		{
@@ -4220,7 +4220,7 @@ static float8
 NonFiniteTimestampTzPart(int type, int unit, char *lowunits,
 						 bool isNegative, bool isTz)
 {
-	if ((type != UNITS) && (type != RESERV))
+	if ((type != DT_UNITS) && (type != DT_RESERV))
 	{
 		if (isTz)
 			ereport(ERROR,
@@ -4304,7 +4304,7 @@ timestamp_part(PG_FUNCTION_ARGS)
 											false);
 
 	type = DecodeUnits(0, lowunits, &val);
-	if (type == UNKNOWN_FIELD)
+	if (type == DT_UNKNOWN_FIELD)
 		type = DecodeSpecial(0, lowunits, &val);
 
 	if (TIMESTAMP_NOT_FINITE(timestamp))
@@ -4318,7 +4318,7 @@ timestamp_part(PG_FUNCTION_ARGS)
 			PG_RETURN_NULL();
 	}
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL, NULL) != 0)
 			ereport(ERROR,
@@ -4448,7 +4448,7 @@ timestamp_part(PG_FUNCTION_ARGS)
 				result = 0;
 		}
 	}
-	else if (type == RESERV)
+	else if (type == DT_RESERV)
 	{
 		switch (val)
 		{
@@ -4505,7 +4505,7 @@ timestamptz_part(PG_FUNCTION_ARGS)
 											false);
 
 	type = DecodeUnits(0, lowunits, &val);
-	if (type == UNKNOWN_FIELD)
+	if (type == DT_UNKNOWN_FIELD)
 		type = DecodeSpecial(0, lowunits, &val);
 
 	if (TIMESTAMP_NOT_FINITE(timestamp))
@@ -4519,7 +4519,7 @@ timestamptz_part(PG_FUNCTION_ARGS)
 			PG_RETURN_NULL();
 	}
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (timestamp2tm(timestamp, &tz, tm, &fsec, NULL, NULL) != 0)
 			ereport(ERROR,
@@ -4650,7 +4650,7 @@ timestamptz_part(PG_FUNCTION_ARGS)
 		}
 
 	}
-	else if (type == RESERV)
+	else if (type == DT_RESERV)
 	{
 		switch (val)
 		{
@@ -4706,10 +4706,10 @@ interval_part(PG_FUNCTION_ARGS)
 											false);
 
 	type = DecodeUnits(0, lowunits, &val);
-	if (type == UNKNOWN_FIELD)
+	if (type == DT_UNKNOWN_FIELD)
 		type = DecodeSpecial(0, lowunits, &val);
 
-	if (type == UNITS)
+	if (type == DT_UNITS)
 	{
 		if (interval2tm(*interval, tm, &fsec) == 0)
 		{
@@ -4781,7 +4781,7 @@ interval_part(PG_FUNCTION_ARGS)
 			result = 0;
 		}
 	}
-	else if (type == RESERV && val == DTK_EPOCH)
+	else if (type == DT_RESERV && val == DTK_EPOCH)
 	{
 		result = interval->time / 1000000.0;
 		result += ((double) DAYS_PER_YEAR * SECS_PER_DAY) * (interval->month / MONTHS_PER_YEAR);
@@ -4856,13 +4856,13 @@ timestamp_zone(PG_FUNCTION_ARGS)
 
 	type = DecodeTimezoneAbbrev(0, lowzone, &val, &tzp);
 
-	if (type == TZ || type == DTZ)
+	if (type == DT_TZ || type == DT_DTZ)
 	{
 		/* fixed-offset abbreviation */
 		tz = val;
 		result = dt2local(timestamp, tz);
 	}
-	else if (type == DYNTZ)
+	else if (type == DT_DYNTZ)
 	{
 		/* dynamic-offset abbreviation, resolve using specified time */
 		if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, tzp) != 0)
@@ -5064,13 +5064,13 @@ timestamptz_zone(PG_FUNCTION_ARGS)
 
 	type = DecodeTimezoneAbbrev(0, lowzone, &val, &tzp);
 
-	if (type == TZ || type == DTZ)
+	if (type == DT_TZ || type == DT_DTZ)
 	{
 		/* fixed-offset abbreviation */
 		tz = -val;
 		result = dt2local(timestamp, tz);
 	}
-	else if (type == DYNTZ)
+	else if (type == DT_DYNTZ)
 	{
 		/* dynamic-offset abbreviation, resolve using specified time */
 		int			isdst;
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index 7cdb87ef85b..fc39bd68184 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -2079,7 +2079,7 @@ map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings)
 				{
 					DateADT		date;
 					struct pg_tm tm;
-					char		buf[MAXDATELEN + 1];
+					char		buf[DT_MAXDATELEN + 1];
 
 					date = DatumGetDateADT(value);
 					/* XSD doesn't support infinite values */
@@ -2100,7 +2100,7 @@ map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings)
 					Timestamp	timestamp;
 					struct pg_tm tm;
 					fsec_t		fsec;
-					char		buf[MAXDATELEN + 1];
+					char		buf[DT_MAXDATELEN + 1];
 
 					timestamp = DatumGetTimestamp(value);
 
@@ -2127,7 +2127,7 @@ map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings)
 					int			tz;
 					fsec_t		fsec;
 					const char *tzn = NULL;
-					char		buf[MAXDATELEN + 1];
+					char		buf[DT_MAXDATELEN + 1];
 
 					timestamp = DatumGetTimestamp(value);
 
diff --git a/src/backend/utils/misc/tzparser.c b/src/backend/utils/misc/tzparser.c
index 3d07eb7265d..d63ef9e311f 100644
--- a/src/backend/utils/misc/tzparser.c
+++ b/src/backend/utils/misc/tzparser.c
@@ -56,10 +56,10 @@ validateTzEntry(tzEntry *tzentry)
 	 * Check restrictions imposed by datetkntbl storage format (see
 	 * datetime.c)
 	 */
-	if (strlen(tzentry->abbrev) > TOKMAXLEN)
+	if (strlen(tzentry->abbrev) > DT_TOKMAXLEN)
 	{
 		GUC_check_errmsg("time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d",
-						 tzentry->abbrev, TOKMAXLEN,
+						 tzentry->abbrev, DT_TOKMAXLEN,
 						 tzentry->filename, tzentry->lineno);
 		return false;
 	}
diff --git a/src/bin/pg_waldump/compat.c b/src/bin/pg_waldump/compat.c
index 6ff9eb7e77b..d5af971c527 100644
--- a/src/bin/pg_waldump/compat.c
+++ b/src/bin/pg_waldump/compat.c
@@ -49,9 +49,9 @@ timestamptz_to_time_t(TimestampTz t)
 const char *
 timestamptz_to_str(TimestampTz dt)
 {
-	static char buf[MAXDATELEN + 1];
-	char		ts[MAXDATELEN + 1];
-	char		zone[MAXDATELEN + 1];
+	static char buf[DT_MAXDATELEN + 1];
+	char		ts[DT_MAXDATELEN + 1];
+	char		zone[DT_MAXDATELEN + 1];
 	time_t		result = (time_t) timestamptz_to_time_t(dt);
 	struct tm  *ltime = localtime(&result);
 
diff --git a/src/include/utils/datetime.h b/src/include/utils/datetime.h
index d66582b7a2b..8658958bda8 100644
--- a/src/include/utils/datetime.h
+++ b/src/include/utils/datetime.h
@@ -33,34 +33,34 @@ struct tzEntry;
  * ----------------------------------------------------------------
  */
 
-#define DAGO			"ago"
-#define DCURRENT		"current"
-#define EPOCH			"epoch"
-#define INVALID			"invalid"
-#define EARLY			"-infinity"
-#define LATE			"infinity"
-#define NOW				"now"
-#define TODAY			"today"
-#define TOMORROW		"tomorrow"
-#define YESTERDAY		"yesterday"
-#define ZULU			"zulu"
+#define DT_DAGO				"ago"
+#define DT_DCURRENT			"current"
+#define DT_EPOCH			"epoch"
+#define DT_INVALID			"invalid"
+#define DT_EARLY			"-infinity"
+#define DT_LATE				"infinity"
+#define DT_NOW				"now"
+#define DT_TODAY			"today"
+#define DT_TOMORROW			"tomorrow"
+#define DT_YESTERDAY		"yesterday"
+#define DT_ZULU				"zulu"
 
-#define DMICROSEC		"usecond"
-#define DMILLISEC		"msecond"
-#define DSECOND			"second"
-#define DMINUTE			"minute"
-#define DHOUR			"hour"
-#define DDAY			"day"
-#define DWEEK			"week"
-#define DMONTH			"month"
-#define DQUARTER		"quarter"
-#define DYEAR			"year"
-#define DDECADE			"decade"
-#define DCENTURY		"century"
-#define DMILLENNIUM		"millennium"
-#define DA_D			"ad"
-#define DB_C			"bc"
-#define DTIMEZONE		"timezone"
+#define DT_DMICROSEC		"usecond"
+#define DT_DMILLISEC		"msecond"
+#define DT_DSECOND			"second"
+#define DT_DMINUTE			"minute"
+#define DT_DHOUR			"hour"
+#define DT_DDAY				"day"
+#define DT_DWEEK			"week"
+#define DT_DMONTH			"month"
+#define DT_DQUARTER			"quarter"
+#define DT_DYEAR			"year"
+#define DT_DDECADE			"decade"
+#define DT_DCENTURY			"century"
+#define DT_DMILLENNIUM		"millennium"
+#define DT_DA_D				"ad"
+#define DT_DB_C				"bc"
+#define DT_DTIMEZONE		"timezone"
 
 /*
  * Fundamental time field definitions for parsing.
@@ -69,12 +69,12 @@ struct tzEntry;
  *	Millennium: ad, bc
  */
 
-#define AM		0
-#define PM		1
-#define HR24	2
+#define DT_AM				0
+#define DT_PM				1
+#define DT_HR24				2
 
-#define AD		0
-#define BC		1
+#define DT_AD				0
+#define DT_BC				1
 
 /*
  * Field types for time decoding.
@@ -88,41 +88,41 @@ struct tzEntry;
  * are stored in typmods, you can't change them without initdb!
  */
 
-#define RESERV	0
-#define MONTH	1
-#define YEAR	2
-#define DAY		3
-#define JULIAN	4
-#define TZ		5				/* fixed-offset timezone abbreviation */
-#define DTZ		6				/* fixed-offset timezone abbrev, DST */
-#define DYNTZ	7				/* dynamic timezone abbreviation */
-#define IGNORE_DTF	8
-#define AMPM	9
-#define HOUR	10
-#define MINUTE	11
-#define SECOND	12
-#define MILLISECOND 13
-#define MICROSECOND 14
-#define DOY		15
-#define DOW		16
-#define UNITS	17
-#define ADBC	18
+#define DT_RESERV			0
+#define DT_MONTH			1
+#define DT_YEAR				2
+#define DT_DAY				3
+#define DT_JULIAN			4
+#define DT_TZ				5			/* fixed-offset timezone abbreviation */
+#define DT_DTZ				6			/* fixed-offset timezone abbrev, DST */
+#define DT_DYNTZ			7			/* dynamic timezone abbreviation */
+#define DT_IGNORE_DTF		8
+#define DT_AMPM				9
+#define DT_HOUR				10
+#define DT_MINUTE			11
+#define DT_SECOND			12
+#define DT_MILLISECOND		13
+#define DT_MICROSECOND		14
+#define DT_DOY				15
+#define DT_DOW				16
+#define DT_UNITS			17
+#define DT_ADBC				18
 /* these are only for relative dates */
-#define AGO		19
-#define ABS_BEFORE		20
-#define ABS_AFTER		21
+#define DT_AGO				19
+#define DT_ABS_BEFORE		20
+#define DT_ABS_AFTER		21
 /* generic fields to help with parsing */
-#define ISODATE 22
-#define ISOTIME 23
+#define DT_ISODATE			22
+#define DT_ISOTIME			23
 /* these are only for parsing intervals */
-#define WEEK		24
-#define DECADE		25
-#define CENTURY		26
-#define MILLENNIUM	27
+#define DT_WEEK				24
+#define DT_DECADE			25
+#define DT_CENTURY			26
+#define DT_MILLENNIUM		27
 /* hack for parsing two-word timezone specs "MET DST" etc */
-#define DTZMOD	28				/* "DST" as a separate word */
+#define DT_ZMOD				28			/* "DST" as a separate word */
 /* reserved for unrecognized string values */
-#define UNKNOWN_FIELD	31
+#define DT_UNKNOWN_FIELD	31
 
 /*
  * Token field definitions for time parsing and decoding.
@@ -139,60 +139,60 @@ struct tzEntry;
  * renumbering values in either of these apparently-independent lists :-(
  */
 
-#define DTK_NUMBER		0
-#define DTK_STRING		1
+#define DTK_NUMBER			0
+#define DTK_STRING			1
 
-#define DTK_DATE		2
-#define DTK_TIME		3
-#define DTK_TZ			4
-#define DTK_AGO			5
+#define DTK_DATE			2
+#define DTK_TIME			3
+#define DTK_TZ				4
+#define DTK_AGO				5
 
-#define DTK_SPECIAL		6
-#define DTK_INVALID		7
-#define DTK_CURRENT		8
-#define DTK_EARLY		9
-#define DTK_LATE		10
-#define DTK_EPOCH		11
-#define DTK_NOW			12
-#define DTK_YESTERDAY	13
-#define DTK_TODAY		14
-#define DTK_TOMORROW	15
-#define DTK_ZULU		16
+#define DTK_SPECIAL			6
+#define DTK_INVALID			7
+#define DTK_CURRENT			8
+#define DTK_EARLY			9
+#define DTK_LATE			10
+#define DTK_EPOCH			11
+#define DTK_NOW				12
+#define DTK_YESTERDAY		13
+#define DTK_TODAY			14
+#define DTK_TOMORROW		15
+#define DTK_ZULU			16
 
-#define DTK_DELTA		17
-#define DTK_SECOND		18
-#define DTK_MINUTE		19
-#define DTK_HOUR		20
-#define DTK_DAY			21
-#define DTK_WEEK		22
-#define DTK_MONTH		23
-#define DTK_QUARTER		24
-#define DTK_YEAR		25
-#define DTK_DECADE		26
-#define DTK_CENTURY		27
-#define DTK_MILLENNIUM	28
-#define DTK_MILLISEC	29
-#define DTK_MICROSEC	30
-#define DTK_JULIAN		31
+#define DTK_DELTA			17
+#define DTK_SECOND			18
+#define DTK_MINUTE			19
+#define DTK_HOUR			20
+#define DTK_DAY				21
+#define DTK_WEEK			22
+#define DTK_MONTH			23
+#define DTK_QUARTER			24
+#define DTK_YEAR			25
+#define DTK_DECADE			26
+#define DTK_CENTURY			27
+#define DTK_MILLENNIUM		28
+#define DTK_MILLISEC		29
+#define DTK_MICROSEC		30
+#define DTK_JULIAN			31
 
-#define DTK_DOW			32
-#define DTK_DOY			33
-#define DTK_TZ_HOUR		34
-#define DTK_TZ_MINUTE	35
-#define DTK_ISOYEAR		36
-#define DTK_ISODOW		37
+#define DTK_DOW				32
+#define DTK_DOY				33
+#define DTK_TZ_HOUR			34
+#define DTK_TZ_MINUTE		35
+#define DTK_ISOYEAR			36
+#define DTK_ISODOW			37
 
 
 /*
  * Bit mask definitions for time parsing.
  */
 
-#define DTK_M(t)		(0x01 << (t))
+#define DTK_M(t)			(0x01 << (t))
 
 /* Convenience: a second, plus any fractional component */
-#define DTK_ALL_SECS_M	(DTK_M(SECOND) | DTK_M(MILLISECOND) | DTK_M(MICROSECOND))
-#define DTK_DATE_M		(DTK_M(YEAR) | DTK_M(MONTH) | DTK_M(DAY))
-#define DTK_TIME_M		(DTK_M(HOUR) | DTK_M(MINUTE) | DTK_ALL_SECS_M)
+#define DTK_ALL_SECS_M		(DTK_M(DT_SECOND) | DTK_M(DT_MILLISECOND) | DTK_M(DT_MICROSECOND))
+#define DTK_DATE_M			(DTK_M(DT_YEAR) | DTK_M(DT_MONTH) | DTK_M(DT_DAY))
+#define DTK_TIME_M			(DTK_M(DT_HOUR) | DTK_M(DT_MINUTE) | DTK_ALL_SECS_M)
 
 /*
  * Working buffer size for input and output of interval, timestamp, etc.
@@ -200,16 +200,16 @@ struct tzEntry;
  * will overrun buffers, so this must suffice for all possible output.  As of
  * this writing, interval_out() needs the most space at ~90 bytes.
  */
-#define MAXDATELEN		128
+#define DT_MAXDATELEN		128
 /* maximum possible number of fields in a date string */
-#define MAXDATEFIELDS	25
+#define DT_MAXDATEFIELDS	25
 /* only this many chars are stored in datetktbl */
-#define TOKMAXLEN		10
+#define DT_TOKMAXLEN		10
 
 /* keep this struct small; it gets used a lot */
 typedef struct
 {
-	char		token[TOKMAXLEN + 1];	/* always NUL-terminated */
+	char		token[DT_TOKMAXLEN + 1];	/* always NUL-terminated */
 	char		type;			/* see field type codes above */
 	int32		value;			/* meaning depends on type */
 } datetkn;
-- 
2.15.1.354.g95ec6b1b33.dirty

Reply via email to