diff options
| author | Dean Rasheed <dean.a.rasheed@gmail.com> | 2024-06-04 11:48:01 +0100 |
|---|---|---|
| committer | Dean Rasheed <dean.a.rasheed@gmail.com> | 2024-06-04 11:48:01 +0100 |
| commit | cd2624fd97b0c36b68da278abc5362647f69b07d (patch) | |
| tree | 546ce885e69cf71857f561fcb6a3199a28eecb4e /src/test | |
| parent | 5c5bccef211cfc98e0d6c4bc1af40a33c8ac2488 (diff) | |
Fix PL/pgSQL's handling of integer ranges containing underscores.
Commit faff8f8e47 allowed integer literals to contain underscores, but
failed to update the lexer's "numericfail" rule. As a result, a
decimal integer literal containing underscores would fail to parse, if
used in an integer range with no whitespace after the first number,
such as "1_001..1_003" in a PL/pgSQL FOR loop.
Fix and backpatch to v16, where support for underscores in integer
literals was added.
Report and patch by Erik Wienhold.
Discussion: https://postgr.es/m/808ce947-46ec-4628-85fa-3dd600b2c154%40ewie.name
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/numerology.out | 11 | ||||
| -rw-r--r-- | src/test/regress/sql/numerology.sql | 9 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/test/regress/expected/numerology.out b/src/test/regress/expected/numerology.out index c8196d2c85a..8d4a3ba228a 100644 --- a/src/test/regress/expected/numerology.out +++ b/src/test/regress/expected/numerology.out @@ -297,6 +297,17 @@ SELECT 1_000.5e0_1; 10005 (1 row) +DO $$ +DECLARE + i int; +BEGIN + FOR i IN 1_001..1_003 LOOP + RAISE NOTICE 'i = %', i; + END LOOP; +END $$; +NOTICE: i = 1001 +NOTICE: i = 1002 +NOTICE: i = 1003 -- error cases SELECT _100; ERROR: column "_100" does not exist diff --git a/src/test/regress/sql/numerology.sql b/src/test/regress/sql/numerology.sql index 3f0ec34ecfa..372e7bf9bc8 100644 --- a/src/test/regress/sql/numerology.sql +++ b/src/test/regress/sql/numerology.sql @@ -77,6 +77,15 @@ SELECT 1_000.; SELECT .000_005; SELECT 1_000.5e0_1; +DO $$ +DECLARE + i int; +BEGIN + FOR i IN 1_001..1_003 LOOP + RAISE NOTICE 'i = %', i; + END LOOP; +END $$; + -- error cases SELECT _100; SELECT 100_; |
