Fix PL/pgSQL's handling of integer ranges containing underscores.
authorDean Rasheed <[email protected]>
Tue, 4 Jun 2024 10:51:25 +0000 (11:51 +0100)
committerDean Rasheed <[email protected]>
Tue, 4 Jun 2024 10:51:25 +0000 (11:51 +0100)
commitb4e909082fa114d5934ca622b225d2352ec639fa
tree7869348297d305f4b0a955c8744e41f5c5961b03
parent3a2cc5a5b99ab04b9dc7e5f6c46b564739b5eb1b
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