Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit98b4f53

Browse files
committed
Re-forbid underscore in positional parameters
Underscores were added to numeric literals infaff8f8. This changealso affected the positional parameters (e.g., $1) rule, which usesthe same production for its digits. But this did not actually work,because the digits for parameters are processed using atol(), whichdoes not handle underscores and ignores whatever it cannot parse.The underscores notation is probably not useful for positionalparameters, so for simplicity revert that rule to its old form thatonly accepts digits 0-9.Author: Erik Wienhold <ewie@ewie.name>Reviewed-by: Michael Paquier <michael@paquier.xyz>Discussion:https://www.postgresql.org/message-id/flat/5d216d1c-91f6-4cbe-95e2-b4cbd930520c%40ewie.name
1 parent96bc29e commit98b4f53

File tree

5 files changed

+14
-6
lines changed

5 files changed

+14
-6
lines changed

‎src/backend/parser/scan.l

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,9 @@ bininteger_junk{bininteger}{ident_start}
419419
numeric_junk{numeric}{ident_start}
420420
real_junk{real}{ident_start}
421421

422-
param\${decinteger}
423-
param_junk\${decinteger}{ident_start}
422+
/* Positional parameters don't accept underscores. */
423+
param\${decdigit}+
424+
param_junk\${decdigit}+{ident_start}
424425

425426
other.
426427

‎src/fe_utils/psqlscan.l

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,9 @@ bininteger_junk{bininteger}{ident_start}
355355
numeric_junk{numeric}{ident_start}
356356
real_junk{real}{ident_start}
357357

358-
param\${decinteger}
359-
param_junk\${decinteger}{ident_start}
358+
/* Positional parameters don't accept underscores. */
359+
param\${decdigit}+
360+
param_junk\${decdigit}+{ident_start}
360361

361362
/* psql-specific: characters allowed in variable names */
362363
variable_char[A-Za-z\200-\377_0-9]

‎src/interfaces/ecpg/preproc/pgc.l

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,9 @@ bininteger_junk{bininteger}{ident_start}
388388
numeric_junk{numeric}{ident_start}
389389
real_junk{real}{ident_start}
390390

391-
param\${decinteger}
392-
param_junk\${decinteger}{ident_start}
391+
/* Positional parameters don't accept underscores. */
392+
param\${decdigit}+
393+
param_junk\${decdigit}+{ident_start}
393394

394395
/* special characters for other dbms */
395396
/* we have to react differently in compat mode */

‎src/test/regress/expected/numerology.out

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,10 @@ SELECT 1_000.5e_1;
330330
ERROR: trailing junk after numeric literal at or near "1_000.5e"
331331
LINE 1: SELECT 1_000.5e_1;
332332
^
333+
PREPARE p1 AS SELECT $0_1;
334+
ERROR: trailing junk after parameter at or near "$0_"
335+
LINE 1: PREPARE p1 AS SELECT $0_1;
336+
^
333337
--
334338
-- Test implicit type conversions
335339
-- This fails for Postgres v6.1 (and earlier?)

‎src/test/regress/sql/numerology.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ SELECT 1_000._5;
8888
SELECT1_000.5_;
8989
SELECT1_000.5e_1;
9090

91+
PREPARE p1ASSELECT $0_1;
9192

9293
--
9394
-- Test implicit type conversions

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp