Commit 9afc5839 authored by Tom Lane's avatar Tom Lane

Reject nonzero day fields in AT TIME ZONE INTERVAL functions.

It's not sensible for an interval that's used as a time zone value to be
larger than a day.  When we changed the interval type to contain a separate
day field, check_timezone() was adjusted to reject nonzero day values, but
timetz_izone(), timestamp_izone(), and timestamptz_izone() evidently were
overlooked.

While at it, make the error messages for these three cases consistent.
parent bfb8a8d3
...@@ -2696,10 +2696,10 @@ timetz_izone(PG_FUNCTION_ARGS) ...@@ -2696,10 +2696,10 @@ timetz_izone(PG_FUNCTION_ARGS)
TimeTzADT *result; TimeTzADT *result;
int tz; int tz;
if (zone->month != 0) if (zone->month != 0 || zone->day != 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("\"interval\" time zone \"%s\" not valid", errmsg("interval time zone \"%s\" must not include months or days",
DatumGetCString(DirectFunctionCall1(interval_out, DatumGetCString(DirectFunctionCall1(interval_out,
PointerGetDatum(zone)))))); PointerGetDatum(zone))))));
......
...@@ -4604,10 +4604,10 @@ timestamp_izone(PG_FUNCTION_ARGS) ...@@ -4604,10 +4604,10 @@ timestamp_izone(PG_FUNCTION_ARGS)
if (TIMESTAMP_NOT_FINITE(timestamp)) if (TIMESTAMP_NOT_FINITE(timestamp))
PG_RETURN_TIMESTAMPTZ(timestamp); PG_RETURN_TIMESTAMPTZ(timestamp);
if (zone->month != 0) if (zone->month != 0 || zone->day != 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("interval time zone \"%s\" must not specify month", errmsg("interval time zone \"%s\" must not include months or days",
DatumGetCString(DirectFunctionCall1(interval_out, DatumGetCString(DirectFunctionCall1(interval_out,
PointerGetDatum(zone)))))); PointerGetDatum(zone))))));
...@@ -4777,10 +4777,10 @@ timestamptz_izone(PG_FUNCTION_ARGS) ...@@ -4777,10 +4777,10 @@ timestamptz_izone(PG_FUNCTION_ARGS)
if (TIMESTAMP_NOT_FINITE(timestamp)) if (TIMESTAMP_NOT_FINITE(timestamp))
PG_RETURN_TIMESTAMP(timestamp); PG_RETURN_TIMESTAMP(timestamp);
if (zone->month != 0) if (zone->month != 0 || zone->day != 0)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("interval time zone \"%s\" must not specify month", errmsg("interval time zone \"%s\" must not include months or days",
DatumGetCString(DirectFunctionCall1(interval_out, DatumGetCString(DirectFunctionCall1(interval_out,
PointerGetDatum(zone)))))); PointerGetDatum(zone))))));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment