Skip to content

fix(cli): reject SQL input early and provide clear MQL hints

王俊泽 requested to merge fix/openeuler-nix-features into main

问题背景

当用户在 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 行为
  • 不涉及协议或服务端逻辑
  • 向后兼容,不影响已有功能

附上代码修改部分图和测试用例图

Edited by 王俊泽

Merge request reports