Skip to content

feat: explain 阶段树改为图形化连线盒子树#8

Merged
rrbe merged 1 commit into
masterfrom
feat/explain-visual-tree
Jun 14, 2026
Merged

feat: explain 阶段树改为图形化连线盒子树#8
rrbe merged 1 commit into
masterfrom
feat/explain-visual-tree

Conversation

@rrbe

@rrbe rrbe commented Jun 14, 2026

Copy link
Copy Markdown
Owner

背景

ExplainView 原本把执行阶段渲染成缩进的文本行,且解析逻辑内联在组件里、无测试。本 PR 把它升级为 NoSQLBooster 风的图形化连线盒子树(输出阶段在顶 → 扫描在叶)。

改动

  • 解析下沉:lib/explain.ts 纯函数,把 explain 文档解析成嵌套 StageTreeNode(沿 inputStage/inputStages/shards 递归,无名包裹节点的子级冒泡),配 7 个单测(IXSCAN 链 / COLLSCAN / 分支 / EJSON 包裹数字 / 垃圾输入)。
  • 图形化渲染:ExplainView 递归渲染连线盒子树。每个阶段一个卡片:阶段名(COLLSCAN 红框+红底、IXSCAN/IDHACK 绿框、其余中性)+ 指标(n / docs / keys / time)+ 命中索引/keyPattern。
  • 连线:pure-CSS org-chart 伪元素技术,线性链与分支(OR/MERGE_SORT/sharded)两种形态均正确——已用独立 HTML 预览截图验证。
  • 摘要条(nReturned/docsExamined/keysExamined/耗时/索引)与原始 JSON 折叠保留;新增 explain.metricTime 三语键。

验证

  • pnpm typecheck 干净;pnpm test:unit 300 通过(+7 explain 解析,i18n 三语键齐全)
  • 连线 CSS 用独立预览截图验证(线性 LIMIT→FETCH→IXSCAN + 分支 SUBPLAN→OR→2×IXSCAN / COLLSCAN)

截图

线性链:垂直连线连接 LIMIT→FETCH→IXSCAN(绿);分支:横向总线 + 下垂连线,COLLSCAN 红框红底。宽超出时 .explain-stages 横向滚动。

🤖 Generated with Claude Code

- 解析逻辑抽到 lib/explain.ts(纯函数,产出嵌套 StageTreeNode 树)+ 7 个单测,
  替代原先内联在组件、无测试的扁平 depth 列表
- ExplainView 递归渲染连线盒子树(输出在顶、扫描在叶),
  COLLSCAN 红框+红底、IXSCAN/IDHACK 绿框、其余中性;每阶段补 time 展示
- 连线用 pure-CSS org-chart 伪元素技术,已用独立预览截图验证线性链+分支两形态
- 摘要条 / 原始 JSON 折叠保留;新增 explain.metricTime 三语键

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rrbe rrbe merged commit 0b5976b into master Jun 14, 2026
2 checks passed
@rrbe rrbe deleted the feat/explain-visual-tree branch June 14, 2026 08:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant