diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index c98c27a16d..0de9584e53 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -1552,27 +1552,11 @@ zone_value: t->typmods = $3; $$ = makeStringConstCast($2, @2, t); } - | ConstInterval '(' Iconst ')' Sconst opt_interval + | ConstInterval '(' Iconst ')' Sconst { TypeName *t = $1; - if ($6 != NIL) - { - A_Const *n = (A_Const *) linitial($6); - if ((n->val.val.ival & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("time zone interval must be HOUR or HOUR TO MINUTE"), - parser_errposition(@6))); - if (list_length($6) != 1) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("interval precision specified twice"), - parser_errposition(@1))); - t->typmods = lappend($6, makeIntConst($3, @3)); - } - else - t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), - makeIntConst($3, @3)); + t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst($3, @3)); $$ = makeStringConstCast($5, @5, t); } | NumericOnly { $$ = makeAConst($1, @1); } @@ -10582,21 +10566,11 @@ SimpleTypename: $$ = $1; $$->typmods = $2; } - | ConstInterval '(' Iconst ')' opt_interval + | ConstInterval '(' Iconst ')' { $$ = $1; - if ($5 != NIL) - { - if (list_length($5) != 1) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("interval precision specified twice"), - parser_errposition(@1))); - $$->typmods = lappend($5, makeIntConst($3, @3)); - } - else - $$->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), - makeIntConst($3, @3)); + $$->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst($3, @3)); } ; @@ -12923,21 +12897,11 @@ AexprConst: Iconst t->typmods = $3; $$ = makeStringConstCast($2, @2, t); } - | ConstInterval '(' Iconst ')' Sconst opt_interval + | ConstInterval '(' Iconst ')' Sconst { TypeName *t = $1; - if ($6 != NIL) - { - if (list_length($6) != 1) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("interval precision specified twice"), - parser_errposition(@1))); - t->typmods = lappend($6, makeIntConst($3, @3)); - } - else - t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), - makeIntConst($3, @3)); + t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), + makeIntConst($3, @3)); $$ = makeStringConstCast($5, @5, t); } | TRUE_P diff --git a/src/test/regress/expected/interval.out b/src/test/regress/expected/interval.out index cf20506bc1..c873a99bd9 100644 --- a/src/test/regress/expected/interval.out +++ b/src/test/regress/expected/interval.out @@ -616,16 +616,6 @@ SELECT interval '12:34.5678' minute to second(2); -- per SQL spec 00:12:34.57 (1 row) -SELECT interval(2) '12:34.5678' minute to second; -- historical PG - interval -------------- - 00:12:34.57 -(1 row) - -SELECT interval(2) '12:34.5678' minute to second(2); -- syntax error -ERROR: interval precision specified twice -LINE 1: SELECT interval(2) '12:34.5678' minute to second(2); - ^ SELECT interval '1.234' second; interval -------------- diff --git a/src/test/regress/sql/interval.sql b/src/test/regress/sql/interval.sql index 2318917470..789c3de440 100644 --- a/src/test/regress/sql/interval.sql +++ b/src/test/regress/sql/interval.sql @@ -183,8 +183,6 @@ SELECT interval '123 2:03 -2:04'; -- not ok, redundant hh:mm fields SELECT interval(0) '1 day 01:23:45.6789'; SELECT interval(2) '1 day 01:23:45.6789'; SELECT interval '12:34.5678' minute to second(2); -- per SQL spec -SELECT interval(2) '12:34.5678' minute to second; -- historical PG -SELECT interval(2) '12:34.5678' minute to second(2); -- syntax error SELECT interval '1.234' second; SELECT interval '1.234' second(2); SELECT interval '1 2.345' day to second(2);