phpmyadmin / phpmyadmin/sql-parser
Missing space before UNION when building CREATE VIEW
未关闭
适合新手
还没有人认领这个 Issue。
- 主要语言
- PHP
- 星标
- 485
- 派生
- 119
- PR 合并指标
- 30 天内没有已合并 PR
描述
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
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 CreateStatement::build() 开始,通过 PhpMyAdmin\SqlParser\Parser 使用 SQL 示例重现该问题。验证重新构建 CREATE VIEW 时会保留末尾 UNION 主体之前的空白,并生成有效的 SQL,而不是 3union all。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- mysql, php
- 领域
- databases
- Issue 类型
- 缺陷
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 活跃度
- 冷清
- 描述清晰度
- 描述清楚
- 新手友好度
- 68/100