diff options
Diffstat (limited to 'src/backend/utils/adt/date.c')
-rw-r--r-- | src/backend/utils/adt/date.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index 10c11e00db9..3c5a8a69858 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -122,13 +122,15 @@ date_in(PG_FUNCTION_ARGS) char *field[MAXDATEFIELDS]; int ftype[MAXDATEFIELDS]; char workbuf[MAXDATELEN + 1]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tzp); + dterr = DecodeDateTime(field, ftype, nf, + &dtype, tm, &fsec, &tzp, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "date"); + DateTimeParseError(dterr, &extra, str, "date"); switch (dtype) { @@ -148,7 +150,7 @@ date_in(PG_FUNCTION_ARGS) PG_RETURN_DATEADT(date); default: - DateTimeParseError(DTERR_BAD_FORMAT, str, "date"); + DateTimeParseError(DTERR_BAD_FORMAT, &extra, str, "date"); break; } @@ -1398,13 +1400,15 @@ time_in(PG_FUNCTION_ARGS) char *field[MAXDATEFIELDS]; int dtype; int ftype[MAXDATEFIELDS]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz); + dterr = DecodeTimeOnly(field, ftype, nf, + &dtype, tm, &fsec, &tz, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "time"); + DateTimeParseError(dterr, &extra, str, "time"); tm2time(tm, fsec, &result); AdjustTimeForTypmod(&result, typmod); @@ -2284,13 +2288,15 @@ timetz_in(PG_FUNCTION_ARGS) char *field[MAXDATEFIELDS]; int dtype; int ftype[MAXDATEFIELDS]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeTimeOnly(field, ftype, nf, &dtype, tm, &fsec, &tz); + dterr = DecodeTimeOnly(field, ftype, nf, + &dtype, tm, &fsec, &tz, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "time with time zone"); + DateTimeParseError(dterr, &extra, str, "time with time zone"); result = (TimeTzADT *) palloc(sizeof(TimeTzADT)); tm2timetz(tm, fsec, tz, result); @@ -3042,9 +3048,11 @@ timetz_zone(PG_FUNCTION_ARGS) int tz; char tzname[TZ_STRLEN_MAX + 1]; char *lowzone; - int type, + int dterr, + type, val; pg_tz *tzp; + DateTimeErrorExtra extra; /* * Look up the requested timezone. First we look in the timezone @@ -3061,7 +3069,9 @@ timetz_zone(PG_FUNCTION_ARGS) strlen(tzname), false); - type = DecodeTimezoneAbbrev(0, lowzone, &val, &tzp); + dterr = DecodeTimezoneAbbrev(0, lowzone, &type, &val, &tzp, &extra); + if (dterr) + DateTimeParseError(dterr, &extra, NULL, NULL); if (type == TZ || type == DTZ) { |