问题背景
当用户在 mikudb-cli 中输入 SQL 语句(例如 SELECT 1)时,
由于 MikuDB 本身不支持 SQL,而是使用 MQL(Miku Query Language),
服务端会在解析阶段直接关闭连接。
CLI 侧只能感知到连接被关闭,因此输出了误导性的错误信息:Failed to read response header: early eof 这会让用户误以为是网络或服务异常,而不是语法问题。
根因分析
- MikuDB 不支持 SQL 语法
- SQL 输入在服务端被判定为语法错误并关闭连接
- CLI 未能正确展示服务端返回的语法错误,只显示 early eof
修复方案
在 mikudb-cli 侧增加输入预检查逻辑:
- 当用户输入以
SELECT开头的 SQL 语句时 - 在客户端本地直接拒绝执行
- 给出清晰的错误提示,并展示 MQL 的正确用法示例
- 不再向服务端发送请求,从而避免 early eof
验证情况
已在 openEuler 测试服务器验证:
- 修复前: mikudb-cli -e "SELECT 1" -> early eof
diff 复制代码
- 修复后: mikudb-cli -e "SELECT 1" -> 明确提示“不支持 SQL”,并给出 MQL 示例
yaml 复制代码
- 合法的 MQL 命令(如
SHOW DATABASES)不受影响,功能正常 - mikudb-server 的 systemd 日志无异常
影响范围
- 仅修改 CLI 行为
- 不涉及协议或服务端逻辑
- 向后兼容,不影响已有功能
附上代码修改部分图和测试用例图