The newest version of this patch was applied by Tom. Thanks. ---------------------------------------------------------------------------
[EMAIL PROTECTED] wrote: [ There is text before PGP section. ] > [ PGP not available, raw data follows ] > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > NotDashEscaped: You need GnuPG to verify this message > > > > Here is another attempt at the datetime fix, to stop the ambiguity > for dates like "01-13-2003". I put the > 12 month validation in because > otherwise it is still read in as a "month", but it rolls over. > In other words, '2003-14-03' becomes '2004-02-03' > > > > -- > Greg Sabino Mullane [EMAIL PROTECTED] > PGP Key: 0x14964AC8 200306301327 > > > > > > Index: datetime.c > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/adt/datetime.c,v > retrieving revision 1.106 > diff -c -r1.106 datetime.c > *** datetime.c 25 Jun 2003 21:14:14 -0000 1.106 > --- datetime.c 30 Jun 2003 17:26:22 -0000 > *************** > *** 2379,2440 **** > ***/ > else if (flen >= 4) > { > ! *tmask = DTK_M(YEAR); > > ! /* already have a year? then see if we can substitute... */ > ! if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(DAY))) > ! && ((tm->tm_year >= 1) && (tm->tm_year <= 31))) > { > ! tm->tm_mday = tm->tm_year; > ! *tmask = DTK_M(DAY); > } > ! > ! tm->tm_year = val; > } > ! > ! /* already have year? then could be month */ > ! else if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(MONTH))) > ! && ((val >= 1) && (val <= 12))) > { > ! *tmask = DTK_M(MONTH); > ! tm->tm_mon = val; > } > ! /* no year and EuroDates enabled? then could be day */ > ! else if ((EuroDates || (fmask & DTK_M(MONTH))) > ! && (!(fmask & DTK_M(YEAR)) && !(fmask & DTK_M(DAY))) > ! && ((val >= 1) && (val <= 31))) > { > *tmask = DTK_M(DAY); > tm->tm_mday = val; > } > ! else if ((!(fmask & DTK_M(MONTH))) > ! && ((val >= 1) && (val <= 12))) > { > *tmask = DTK_M(MONTH); > tm->tm_mon = val; > } > ! else if ((!(fmask & DTK_M(DAY))) > ! && ((val >= 1) && (val <= 31))) > { > *tmask = DTK_M(DAY); > tm->tm_mday = val; > } > ! > ! /* > ! * Check for 2 or 4 or more digits, but currently we reach here only > ! * if two digits. - thomas 2000-03-28 > ! */ > ! else if (!(fmask & DTK_M(YEAR)) > ! && ((flen >= 4) || (flen == 2))) > { > ! *tmask = DTK_M(YEAR); > ! tm->tm_year = val; > ! > ! /* adjust ONLY if exactly two digits... */ > ! *is2digits = (flen == 2); > } > else > ! return -1; > > return 0; > } /* DecodeNumber() */ > --- 2379,2447 ---- > ***/ > else if (flen >= 4) > { > ! /* > ! * If no month or day, start of YYYY-MM-DD > ! * If have month AND day, end of MM-DD-YYYY or DD-MM-YYYY > ! * If neither case, throw an error > ! */ > > ! if ((!(fmask & DTK_M(YEAR))) > ! && (((!(fmask & DTK_M(DAY))) && (!(fmask & DTK_M(MONTH)))) > ! || > ! ((fmask & DTK_M(DAY)) && (fmask & DTK_M(MONTH))))) > { > ! *tmask = DTK_M(YEAR); > ! tm->tm_year = val; > } > ! else > ! return -1; > } > ! /* If we already have a day AND month, must be a 2-digit year */ > ! else if ((fmask & DTK_M(DAY)) && (fmask & DTK_M(MONTH))) > { > ! *tmask = DTK_M(YEAR); > ! tm->tm_year = val; > ! *is2digits = TRUE; > } > ! > ! /* If we already have a year and a month, must be day */ > ! else if ((fmask & DTK_M(YEAR)) && (fmask & DTK_M(MONTH))) > { > *tmask = DTK_M(DAY); > tm->tm_mday = val; > } > ! /* A year and a day is currently an error, as YYYY-DD-MM is not allowed */ > ! else if ((fmask & DTK_M(YEAR)) && (fmask & DTK_M(MONTH))) > ! return -1; > ! /* If have year or day, set the month */ > ! else if ((fmask & DTK_M(YEAR)) || (fmask & DTK_M(DAY))) > { > + /* Do not allow month to roll over */ > + if (val > 12) > + return -1; > *tmask = DTK_M(MONTH); > tm->tm_mon = val; > } > ! /* If have a month, set the day */ > ! else if ((fmask & DTK_M(MONTH))) > { > *tmask = DTK_M(DAY); > tm->tm_mday = val; > } > ! /* If using EuroDates, this must be the day, otherwise month */ > ! else if (EuroDates) > { > ! *tmask = DTK_M(DAY); > ! tm->tm_mday = val; > } > else > ! { > ! /* Do not allow month to roll over */ > ! if (val > 12) > ! return -1; > ! *tmask = DTK_M(MONTH); > ! tm->tm_mon = val; > ! } > > return 0; > } /* DecodeNumber() */ > > > > > -----BEGIN PGP SIGNATURE----- > Comment: http://www.turnstep.com/pgp.html > > iD8DBQE/AHNDvJuQZxSWSsgRApuiAKDB5CcBTxwQBnOdRkzPpLCOKHMmNgCeLJ// > Nz5sB+KyQUWv+MEVLXztBJw= > =kXb4 > -----END PGP SIGNATURE----- > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > [ Decrypting message... End of raw data. ] -- Bruce Momjian | http://candle.pha.pa.us [EMAIL PROTECTED] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]