diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index b2216a9eacd..07d6cef2e41 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -419,8 +419,9 @@ bininteger_junk {bininteger}{ident_start} numeric_junk {numeric}{ident_start} real_junk {real}{ident_start} -param \${decinteger} -param_junk \${decinteger}{ident_start} +/* Positional parameters don't accept underscores. */ +param \${decdigit}+ +param_junk \${decdigit}+{ident_start} other . diff --git a/src/fe_utils/psqlscan.l b/src/fe_utils/psqlscan.l index 84754aca4a9..cd8a000e942 100644 --- a/src/fe_utils/psqlscan.l +++ b/src/fe_utils/psqlscan.l @@ -355,8 +355,9 @@ bininteger_junk {bininteger}{ident_start} numeric_junk {numeric}{ident_start} real_junk {real}{ident_start} -param \${decinteger} -param_junk \${decinteger}{ident_start} +/* Positional parameters don't accept underscores. */ +param \${decdigit}+ +param_junk \${decdigit}+{ident_start} /* psql-specific: characters allowed in variable names */ variable_char [A-Za-z\200-\377_0-9] diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index bed86cc6804..86d40696847 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -388,8 +388,9 @@ bininteger_junk {bininteger}{ident_start} numeric_junk {numeric}{ident_start} real_junk {real}{ident_start} -param \${decinteger} -param_junk \${decinteger}{ident_start} +/* Positional parameters don't accept underscores. */ +param \${decdigit}+ +param_junk \${decdigit}+{ident_start} /* special characters for other dbms */ /* we have to react differently in compat mode */ diff --git a/src/test/regress/expected/numerology.out b/src/test/regress/expected/numerology.out index f662a5050ac..c8196d2c85a 100644 --- a/src/test/regress/expected/numerology.out +++ b/src/test/regress/expected/numerology.out @@ -330,6 +330,10 @@ SELECT 1_000.5e_1; ERROR: trailing junk after numeric literal at or near "1_000.5e" LINE 1: SELECT 1_000.5e_1; ^ +PREPARE p1 AS SELECT $0_1; +ERROR: trailing junk after parameter at or near "$0_" +LINE 1: PREPARE p1 AS SELECT $0_1; + ^ -- -- 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 1941c58e681..3f0ec34ecfa 100644 --- a/src/test/regress/sql/numerology.sql +++ b/src/test/regress/sql/numerology.sql @@ -88,6 +88,7 @@ SELECT 1_000._5; SELECT 1_000.5_; SELECT 1_000.5e_1; +PREPARE p1 AS SELECT $0_1; -- -- Test implicit type conversions