Re: BUG #15458: pg_typeof inconsistency on negative integer constant limits

From: Andres Freund <andres(at)anarazel(dot)de>
To: elprans(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15458: pg_typeof inconsistency on negative integer constant limits
Date: 2018-10-24 20:54:32
Message-ID: 20181024205432.yh2jswtvbhl3x536@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi,

On 2018-10-24 20:47:21 +0000, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 15458
> Logged by: Elvis Pranskevichus
> Email address: elprans(at)gmail(dot)com
> PostgreSQL version: 11.0
> Operating system: x86_64-pc-linux-gnu
> Description:
>
> There seems to be an inconsistency in how the parser and the integer input
> functions interpret the integers at the negative limit (-2 ^ 31 and -2 ^
> 63):
>
>
> SELECT pg_typeof(-2147483648);
>
> pg_typeof
> -----------
> integer
> (1 row)
>
> But:
>
> SELECT -2147483648::integer;
> ERROR: integer out of range

>
> The same issue applies to int8 as well.
>
> PG_INT32_MIN is explicitly defined as -(2 ^ 31 - 1), and it seems
> inconsistent that the parser does not respect that when determining the
> type of numeric constants.

It's just a precedence issue. :: binds with higher precedence, so the
above is actually -(2147483648::integer), rather than
(-2147483648)::integer. Therefore you get an overflow.

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Elvis Pranskevichus 2018-10-24 20:58:13 Re: BUG #15458: pg_typeof inconsistency on negative integer constant limits
Previous Message PG Bug reporting form 2018-10-24 20:47:21 BUG #15458: pg_typeof inconsistency on negative integer constant limits