Missing space before UNION when building CREATE VIEW
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 68/100
調査の方向性
CreateStatement::build() から開始し、PhpMyAdmin\SqlParser\Parser を通じて SQL の例で問題を再現します。CREATE VIEW の再構築によって末尾の UNION 本体の前の空白が保持され、3union all ではなく有効な SQL が生成されることを確認します。
索引モデルが issue の本文から書いたものです。
説明
Summary
When CreateStatement::build() reconstructs a CREATE VIEW ... AS SELECT ... UNION ...
statement, the output misses the whitespace between the built SELECT and the
trailing body tokens. Result: invalid SQL such as ... WHERE 3 = 3union all (...).
This was previously reported downstream in phpMyAdmin:
- phpmyadmin/phpmyadmin#19692
- phpmyadmin/phpmyadmin#18515 (same bug, older)
Reproduction
use PhpMyAdmin\SqlParser\Parser;
$sql = "CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER "
. "VIEW `v1` AS select 1 AS `a` where 3 = 3 union all (select 2 AS `a`)";
echo (new Parser($sql))->statements[0]->build();
Actual output:
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS SELECT 1 AS `a` WHERE 3 = 3union all (select 2 AS `a`)
(note: 3 = 3union all — no space).
Expected: a space before union all, producing valid SQL.
Environment
- Library version: current
master(headf440917e) - PHP: 8.4
- 主要言語
- PHP
- スター
- 485
- フォーク
- 119
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
phpmyadmin/sql-parser のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
phpmyadmin/sql-parser#666 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 65/100
phpmyadmin/sql-parser#662 · リアクション 2 件 ·
-
kind/support
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
phpmyadmin/sql-parser#653 · リアクション 1 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 70/100
phpmyadmin/sql-parser#649 ·
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
phpmyadmin/sql-parser#643 · コメント 1 件 ·
phpmyadmin/sql-parser の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
-
a11y admissions.uiowa.edu needs grooming SiteImprove best practice
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
Save States Menu オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
pluginsGLPI/datainjection#673 ·