Index: src/backend/utils/adt/datetime.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v retrieving revision 1.205 diff -c -r1.205 datetime.c *** src/backend/utils/adt/datetime.c 26 May 2009 02:17:50 -0000 1.205 --- src/backend/utils/adt/datetime.c 31 May 2009 23:45:06 -0000 *************** *** 3022,3040 **** tm->tm_hour += val; AdjustFractSeconds(fval, tm, fsec, SECS_PER_HOUR); tmask = DTK_M(HOUR); ! type = DTK_DAY; break; case DTK_DAY: tm->tm_mday += val; AdjustFractSeconds(fval, tm, fsec, SECS_PER_DAY); ! tmask = (fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY); break; case DTK_WEEK: tm->tm_mday += val * 7; AdjustFractDays(fval, tm, fsec, 7); ! tmask = (fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY); break; case DTK_MONTH: --- 3022,3040 ---- tm->tm_hour += val; AdjustFractSeconds(fval, tm, fsec, SECS_PER_HOUR); tmask = DTK_M(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); break; case DTK_WEEK: tm->tm_mday += val * 7; AdjustFractDays(fval, tm, fsec, 7); ! tmask = DTK_M(WEEK); break; case DTK_MONTH: *************** *** 3047,3074 **** tm->tm_year += val; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR; ! tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); break; case DTK_DECADE: tm->tm_year += val * 10; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR * 10; ! tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); break; case DTK_CENTURY: tm->tm_year += val * 100; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR * 100; ! tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); break; case DTK_MILLENNIUM: tm->tm_year += val * 1000; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR * 1000; ! tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); break; default: --- 3047,3074 ---- tm->tm_year += val; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR; ! tmask = DTK_M(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); break; case DTK_CENTURY: tm->tm_year += val * 100; if (fval != 0) tm->tm_mon += fval * MONTHS_PER_YEAR * 100; ! tmask = DTK_M(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); break; default: Index: src/include/utils/datetime.h =================================================================== RCS file: /cvsroot/pgsql/src/include/utils/datetime.h,v retrieving revision 1.73 diff -c -r1.73 datetime.h *** src/include/utils/datetime.h 26 May 2009 02:17:50 -0000 1.73 --- src/include/utils/datetime.h 31 May 2009 23:45:06 -0000 *************** *** 114,119 **** --- 114,124 ---- /* generic fields to help with parsing */ #define ISODATE 22 #define ISOTIME 23 + /* these are only for parsing intervals */ + #define WEEK 24 + #define DECADE 25 + #define CENTURY 26 + #define MILLENNIUM 27 /* reserved for unrecognized string values */ #define UNKNOWN_FIELD 31