diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 5eaadf53b2..b499975e9c 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 c9df0594fd..c6d02439ab 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 bcfbd0978b..d117cafce6 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 f662a5050a..c8196d2c85 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 1941c58e68..3f0ec34ecf 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