pgsql: Fix reading of most-negative integer value nodes

From: Peter Eisentraut <peter(at)eisentraut(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix reading of most-negative integer value nodes
Date: 2022-09-24 22:29:27
Message-ID: E1ocDeJ-001rN2-01@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix reading of most-negative integer value nodes

The main parser checks whether a literal fits into an int when
deciding whether it should be put into an Integer or Float node. The
parser processes integer literals without signs. So a most-negative
integer literal will not fit into Integer and will end up as a Float
node.

The node tokenizer did this differently. It included the sign when
checking whether the literal fit into int. So a most-negative integer
would indeed fit that way and end up as an Integer node.

In order to preserve the node structure correctly, we need the node
tokenizer to also analyze integer literals without sign.

There are a number of test cases in the regression tests that have a
most-negative integer argument of some utility statement, so this
issue is easily reproduced under WRITE_READ_PARSE_PLAN_TREES.

Reviewed-by: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Discussion: https://www.postgresql.org/message-id/flat/4159834(dot)1657405226(at)sss(dot)pgh(dot)pa(dot)us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/43f4b349152d972c711592b8e8a4645aea9625f4

Modified Files
--------------
src/backend/nodes/read.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2022-09-24 22:49:57 pgsql: Message style improvements
Previous Message Andres Freund 2022-09-24 20:51:30 pgsql: Remove uses of register due to incompatibility with C++17 and up