Fix PL/pgSQL's handling of integer ranges containing underscores.
authorDean Rasheed <[email protected]>
Tue, 4 Jun 2024 10:48:01 +0000 (11:48 +0100)
committerDean Rasheed <[email protected]>
Tue, 4 Jun 2024 10:48:01 +0000 (11:48 +0100)
commitcd2624fd97b0c36b68da278abc5362647f69b07d
tree546ce885e69cf71857f561fcb6a3199a28eecb4e
parent5c5bccef211cfc98e0d6c4bc1af40a33c8ac2488
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
src/backend/parser/scan.l
src/fe_utils/psqlscan.l
src/interfaces/ecpg/preproc/pgc.l
src/test/regress/expected/numerology.out
src/test/regress/sql/numerology.sql