From fb224fec2251b61cc5cf57806b6741db8f8cc58c Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 30 Dec 2021 10:26:37 +0100 Subject: [PATCH v7 4/7] Add test case for trailing junk after numeric literals PostgreSQL currently accepts numeric literals with trailing non-digits, such as 123abc where the abc is treated as the next token. This may be a bit surprising. This commit adds test cases for this; subsequent commits intend to change this behavior. Discussion: https://www.postgresql.org/message-id/flat/b239564c-cad0-b23e-c57e-166d883cb97d@enterprisedb.com --- src/test/regress/expected/numerology.out | 62 ++++++++++++++++++++++++ src/test/regress/sql/numerology.sql | 16 ++++++ 2 files changed, 78 insertions(+) diff --git a/src/test/regress/expected/numerology.out b/src/test/regress/expected/numerology.out index 44d6c435de..2ffc73e854 100644 --- a/src/test/regress/expected/numerology.out +++ b/src/test/regress/expected/numerology.out @@ -2,6 +2,68 @@ -- NUMEROLOGY -- Test various combinations of numeric types and functions. -- +-- +-- Trailing junk in numeric literals +-- +SELECT 123abc; + abc +----- + 123 +(1 row) + +SELECT 0x0o; + x0o +----- + 0 +(1 row) + +SELECT 1_2_3; + _2_3 +------ + 1 +(1 row) + +SELECT 0.a; + a +--- + 0 +(1 row) + +SELECT 0.0a; + a +----- + 0.0 +(1 row) + +SELECT .0a; + a +----- + 0.0 +(1 row) + +SELECT 0.0e1a; + a +--- + 0 +(1 row) + +SELECT 0.0e; + e +----- + 0.0 +(1 row) + +SELECT 0.0e+a; +ERROR: syntax error at or near "+" +LINE 1: SELECT 0.0e+a; + ^ +PREPARE p1 AS SELECT $1a; +EXECUTE p1(1); + a +--- + 1 +(1 row) + -- -- Test implicit type conversions -- This fails for Postgres v6.1 (and earlier?) diff --git a/src/test/regress/sql/numerology.sql b/src/test/regress/sql/numerology.sql index fddb58f8fd..fb75f97832 100644 --- a/src/test/regress/sql/numerology.sql +++ b/src/test/regress/sql/numerology.sql @@ -3,6 +3,22 @@ -- Test various combinations of numeric types and functions. -- +-- +-- Trailing junk in numeric literals +-- + +SELECT 123abc; +SELECT 0x0o; +SELECT 1_2_3; +SELECT 0.a; +SELECT 0.0a; +SELECT .0a; +SELECT 0.0e1a; +SELECT 0.0e; +SELECT 0.0e+a; +PREPARE p1 AS SELECT $1a; +EXECUTE p1(1); + -- -- Test implicit type conversions -- This fails for Postgres v6.1 (and earlier?) -- 2.34.1