*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.62 1999/01/20 16:29:39 thomas Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.63 1999/02/13 04:25:01 thomas Exp $
*
*-------------------------------------------------------------------------
*/
case DTK_DELTA:
if (tm2timespan(tm, fsec, span) != 0)
{
-#if FALSE
+#if NOT_USED
TIMESPAN_INVALID(span);
#endif
elog(ERROR, "Bad timespan external representation '%s'", str);
if (DATETIME_NOT_FINITE(*datetime))
{
-#if FALSE
+#if NOT_USED
/* should return null but Postgres doesn't like that currently. - tgl 97/06/12 */
elog(ERROR, "Datetime is not finite", NULL);
#endif
if (tm2datetime(tm, fsec, &tz, result) != 0)
elog(ERROR, "Unable to truncate datetime to '%s'", lowunits);
-#if FALSE
+#if NOT_USED
}
else if ((type == RESERV) && (val == DTK_EPOCH))
{
if (TIMESPAN_IS_INVALID(*timespan))
{
-#if FALSE
+#if NOT_USED
elog(ERROR, "Timespan is not finite", NULL);
#endif
result = NULL;
result = NULL;
}
-#if FALSE
+#if NOT_USED
}
else if ((type == RESERV) && (val == DTK_EPOCH))
{
if (DATETIME_NOT_FINITE(*datetime))
{
-#if FALSE
+#if NOT_USED
/* should return null but Postgres doesn't like that currently. - tgl 97/06/12 */
elog(ERROR, "Datetime is not finite", NULL);
#endif
if (TIMESPAN_IS_INVALID(*timespan))
{
-#if FALSE
+#if NOT_USED
elog(ERROR, "Timespan is not finite", NULL);
#endif
*result = 0;
break;
case DTK_DECADE:
- *result = (tm->tm_year / 10) + 1;
+ *result = (tm->tm_year / 10);
break;
case DTK_CENTURY:
- *result = (tm->tm_year / 100) + 1;
+ *result = (tm->tm_year / 100);
break;
case DTK_MILLENIUM:
- *result = (tm->tm_year / 1000) + 1;
+ *result = (tm->tm_year / 1000);
break;
default:
tm->tm_mday = tx->tm_mday;
tm->tm_hour = tx->tm_hour;
tm->tm_min = tx->tm_min;
-#if FALSE
+#if NOT_USED
/* XXX HACK
* Argh! My Linux box puts in a 1 second offset for dates less than 1970
* but only if the seconds field was non-zero. So, don't copy the seconds
int flen,
val;
int mer = HR24;
+ int haveTextMonth = FALSE;
int is2digits = FALSE;
int bc = FALSE;
#ifdef DATEDEBUG
printf("DecodeDateTime- month field %s value is %d\n", field[i], val);
#endif
+ /* 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) && (tm->tm_mon <= 31)))
+ {
+ tm->tm_mday = tm->tm_mon;
+ tmask = DTK_M(DAY);
+#ifdef DATEDEBUG
+ printf("DecodeNumber- misidentified month previously; assign as day %d\n", tm->tm_mday);
+#endif
+ }
+ haveTextMonth = TRUE;
tm->tm_mon = val;
break;
- /*
- * daylight savings time modifier (solves "MET
- * DST" syntax)
- */
case DTZMOD:
+ /* daylight savings time modifier (solves "MET DST" syntax) */
tmask |= DTK_M(DTZ);
tm->tm_isdst = 1;
if (tzp == NULL)
*tmask = DTK_M(YEAR);
/* already have a year? then see if we can substitute... */
- if (fmask & DTK_M(YEAR))
+ if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(DAY)))
+ && ((tm->tm_year >= 1) && (tm->tm_year <= 31)))
{
- if ((!(fmask & DTK_M(DAY)))
- && ((tm->tm_year >= 1) && (tm->tm_year <= 31)))
- {
+ tm->tm_mday = tm->tm_year;
+ *tmask = DTK_M(DAY);
#ifdef DATEDEBUG
- printf("DecodeNumber- misidentified year previously; swap with day %d\n", tm->tm_mday);
+ printf("DecodeNumber- misidentified year previously; assign as day %d\n", tm->tm_mday);
#endif
- tm->tm_mday = tm->tm_year;
- *tmask = DTK_M(DAY);
- }
}
tm->tm_year = val;