Обсуждение: BUG #1526: SHRT_MIN out of range on explicit type conversion

Поиск
Список
Период
Сортировка

BUG #1526: SHRT_MIN out of range on explicit type conversion

От
"Kelly Burkhart"
Дата:
The following bug has been logged online:

Bug reference:      1526
Logged by:          Kelly Burkhart
Email address:      pgkrb@kkcsm.net
PostgreSQL version: 7.4.2
Operating system:   SuSE Linux 9.1   i386 & x86-64
Description:        SHRT_MIN out of range on explicit type conversion
Details:

An explicit type conversion of an integer constant representing the minimum
value that type can hold results in an 'integer out of range' error.

From psql, the following will fail:

select -32768::int2;
select -2147483648::int4;
select -9223372036854775808::int8;

If the constants are strings, there is no failure.  For instance the
following will succeed:

select '-32768'::int2;
select '-2147483648'::int4;
select '-9223372036854775808'::int8;

Also increasing the value by one does not result in failure.  The following
will succeed:

select -32767::int2;
select -2147483647::int4;
select -9223372036854775807::int8;

Re: BUG #1526: SHRT_MIN out of range on explicit type conversion

От
Tom Lane
Дата:
"Kelly Burkhart" <pgkrb@kkcsm.net> writes:
> From psql, the following will fail:

> select -32768::int2;

This is not a bug.  The reason is that :: binds more tightly than -,
so what you have written is equivalent to

select -(32768::int2);

which obviously *should* fail.  Try it as

select (-32768)::int2;

            regards, tom lane