From 83d95b572b8ef344b74da2ceb1fdfa8579a20638 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 12 Jun 2007 15:58:39 +0000 Subject: Fix DecodeDateTime to allow timezone to appear before year. This had historically worked in some but not all cases, but as of 8.2 it failed for all timezone formats. Fix, and add regression test cases to catch future regressions in this area. Per gripe from Adam Witney. --- src/backend/utils/adt/datetime.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/backend/utils/adt/datetime.c') diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 5a1613ef7d0..c9ec9aff19d 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.174.2.1 2007/05/29 04:59:13 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.174.2.2 2007/06/12 15:58:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -719,11 +719,17 @@ DecodeDateTime(char **field, int *ftype, int nf, } /*** * Already have a date? Then this might be a time zone name - * with embedded punctuation (e.g. "America/New_York") or - * a run-together time with trailing time zone (e.g. hhmmss-zz). + * with embedded punctuation (e.g. "America/New_York") or a + * run-together time with trailing time zone (e.g. hhmmss-zz). * - thomas 2001-12-25 + * + * We consider it a time zone if we already have month & day. + * This is to allow the form "mmm dd hhmmss tz year", which + * we've historically accepted. ***/ - else if ((fmask & DTK_DATE_M) == DTK_DATE_M || ptype != 0) + else if (ptype != 0 || + ((fmask & (DTK_M(MONTH) | DTK_M(DAY))) == + (DTK_M(MONTH) | DTK_M(DAY)))) { /* No time zone accepted? Then quit... */ if (tzp == NULL) -- cgit v1.2.3