Feature:支持 SQL Server 执行计划#3382
Conversation
t8y2
left a comment
There was a problem hiding this comment.
request changes: SQL Server 执行计划链路还有几个可靠性问题,且当前分支存在 merge conflict。
-
apps/desktop/src/lib/diagram/explainPlan.ts:386在 XML 缺失、截断或不是有效 ShowPlan XML 时返回空 nodes,调用方随后会把它当成成功结果,用户只能看到空白计划。请让解析失败成为明确错误,并覆盖 malformed、truncated、非 ShowPlan XML 和零RelOp的测试。 -
crates/dbx-core/src/db/sqlserver.rs:1722在启用SHOWPLAN_XML后仍走普通查询路径,其中会调用sys.dm_exec_describe_first_result_set。该探测 SQL 同样受当前 session 的 SHOWPLAN 状态影响。建议为 explain 增加显式执行模式,直接走 simple query,绕过结果类型探测和 SQL 重写。
这条链路依赖同一物理连接、TDS XML 类型以及 SHOWPLAN 的 session 清理,当前 mock 测试不足以证明可用。请至少补一次真实 SQL Server 集成验证,包括权限失败、无效对象、取消和 OFF 清理后的普通查询。
10a7fd2 to
526b967
Compare
|
已按评审意见更新:
本地 新一轮 PR CI 已全部通过。 |
526b967 to
53af2dd
Compare
53af2dd to
d955ae5
Compare
|
Thanks for the contribution! Merged in e4c56e6, will be released in the next version. |
改动说明
SHOWPLAN_XML获取估算计划,不实际执行源 SQL。ON -> 生成计划 -> finally OFF顺序执行;ON失败时不会发送源 SQL,异常或取消后会关闭会话。GO多批次拦截。评审意见处理
RelOp时改为明确错误,不再显示空白计划。executionMode: simple,SQL Server explain 的ON、源 SQL 和OFF都直接走 TDSsimple_query。sys.dm_exec_describe_first_result_set结果类型探测和 SQL 重写。main并解决原 merge conflict。真实环境验证
已在 SQL Server 2022 Developer Edition 16.0.4225.2(Linux)真实实例验证:
RelOp,执行OFF后同一物理连接继续执行普通查询成功。OFF,随后普通查询成功。OFF和普通查询均成功。GO批次时会拒绝,字符串中的GO不受影响。测试
pnpm checkcargo test -p dbx-core --no-default-features sqlserver --lib:141 项通过cargo check -p dbx --no-default-featurescargo fmt --all -- --check