Commit Graph

1882 Commits

Author SHA1 Message Date
Syngnat
98d07e49cc feat(oracle): 支持 SID 连接模式 (#804)
- 在连接弹窗中切换 Service Name 与 SID,并完善 URI 和参数回显
- 使用 SID 查询参数生成 Oracle DSN,兼容 Navicat 导入及历史配置
- 补充多语言、弹窗滚动布局和前后端回归测试

Fixes #801
2026-07-31 23:06:11 +08:00
Syngnat
06a6fe8ad7 feat(sidebar): 新增数据库置顶与分区展示 (#803)
## 背景

Issue #788 希望侧边栏数据库具备与数据表一致的置顶能力,方便快速访问常用数据库。

## 变更内容

- 在 V2 数据库右键菜单中新增“置顶数据库 / 取消置顶数据库”操作
- 持久化数据库置顶状态,重启后仍可恢复
- 按“置顶 / 全部”分区展示数据库,并保留原始排序
- 取消置顶后恢复数据库原位置,同时保留已经加载的子树
- 数据库折叠后不再清空子树,重新展开无需再次连接
- 补充六种语言文案及侧边栏、加载器和 Store 回归测试

## 影响范围

仅调整 V2 侧边栏的数据库树展示与交互,不包含 wails dev 生成文件。

## 验证

- 
px vitest run src/components/Sidebar.locate-toolbar.test.tsx
src/components/sidebarV2Utils.command-search.test.ts
src/components/sidebar/useSidebarTreeLoaders.partitions.test.tsx
src/components/sidebar/useSidebarTreeLoaders.nacos-services.test.tsx
src/store.test.ts --testTimeout=60000(205 项通过)
- 
px tsc --noEmit --pretty false
- 
pm run build(7976 个模块构建成功)
- git diff --check origin/dev...HEAD

Closes #788
2026-07-31 23:06:01 +08:00
liuqiufeng
c259e2ebe2 feat(oracle): 支持 SID 连接模式
- 在连接弹窗中切换 Service Name 与 SID,并完善 URI 和参数回显
- 使用 SID 查询参数生成 Oracle DSN,兼容 Navicat 导入及历史配置
- 补充多语言、弹窗滚动布局和前后端回归测试
2026-07-31 22:02:11 +08:00
AutumnNazi
d36244019c feat(sidebar): 新增数据库置顶与分区展示
- 支持在 V2 数据库右键菜单中置顶和取消置顶
- 持久化数据库置顶状态并按置顶与全部分区展示
- 保留数据库原始顺序及已加载的展开子树
- 修复数据库折叠后再次展开触发重新连接的问题
- 补充多语言文案和侧边栏回归测试
2026-07-31 20:51:55 +08:00
Syngnat
e942f7dc5a 🐛 fix(ddl): 保留 Oracle 视图 DDL 原始排版
- Oracle 视图与物化视图跳过展示格式化
- 补充预览及对象编辑原始排版回归测试
2026-07-31 20:06:25 +08:00
Syngnat
e117ec2c8c 🐛 fix(datagrid): 恢复结果视图选中主题色
- 选中状态恢复主题强调色与对应前景色
- 补齐聚焦、悬停和按下状态的主题派生色
- 增加回归断言,避免样式退回中性背景
2026-07-31 17:49:32 +08:00
Syngnat
2e55242f80 feat(datagrid): 支持列宽随拖动实时调整 (#799)
## 背景

Issue #789 中,表数据与查询结果的列宽只在拖动结束后生效,拖动过程中表格内容不会随分隔线同步调整,操作反馈存在明显延迟。

## 变更点

- 在 requestAnimationFrame 内提交最新列宽,使表头与完整表体随拖动实时重排
- 合并高频鼠标移动事件并跳过重复像素宽度,降低无效状态更新
- 保留松手时的最终宽度提交,并增加拖动期间实时更新的交互回归测试

## 影响范围

- 影响共用 DataGrid 的表数据与查询结果列宽拖动交互
- 不涉及后端、数据库结构、连接配置或数据读写逻辑

## 验证

- npm run test -- src/components/DataGrid.layout.test.tsx
src/components/useDataGridColumnResize.interaction.test.tsx(38 passed)
- npx tsc --noEmit --pretty false
- npm run build
- 手工验证表数据与查询结果均可随拖动实时调整

Closes #789
2026-07-31 16:31:47 +08:00
Syngnat
eb0f075bce 🔧 fix(message):修复打开表数据时,提示 data_viewer.edit_hint.all_columns_locator … (#798)
问题:当表没有主键是提示为应为字符没有翻译成友好提示
<img width="1226" height="157" alt="image"
src="https://github.com/user-attachments/assets/5650fe6c-fc67-4281-a361-b967f89f21b6"
/>
增加i18n转换
修复后如下
<img width="1318" height="112" alt="image"
src="https://github.com/user-attachments/assets/213cf541-4ed8-4e89-b652-a01194673d8b"
/>
2026-07-31 16:30:43 +08:00
Syngnat
848b95ff9f 🐛 fix(ai-window): 注入独立窗口主题上下文
- 在独立窗口首帧同步 data-theme 和 data-ui-version

- 让 V2 与自定义主题 CSS 规则覆盖 AI 面板背景

- 同步独立窗口字号、缩放和 color-scheme

- 增加主题上下文注入回归测试
2026-07-31 16:27:24 +08:00
Syngnat
736c20640e 🐛 fix(ai-window): 同步独立 AI 窗口主题与显示设置
- 使用宿主解析后的主题状态渲染浮动 AI 窗口

- 在原生独立窗口注入自定义主题样式与 Ant Design 令牌

- 同步主题、字号、缩放和界面版本到子窗口

- 增加主题切换与独立窗口状态同步回归测试
2026-07-31 16:22:27 +08:00
Syngnat
cf891504f6 🎨 style(workbench): 统一 V2 工作台主题表面与结果筛选
- 统一 Redis、Nacos、对象区和查询结果区域的主题背景

- 让手动查询条件、筛选控件和数据表格铺满工作台表面

- 强化结果视图选中态并移除多余卡片边框

- 补充主题表面与布局回归测试
2026-07-31 16:22:08 +08:00
Syngnat
4402f4ae1b feat(sidebar/data-grid): 重构标题栏快捷操作并统一查询文案
- 标题栏增加新建查询、新建连接及分组快捷工具入口\n- 将批量处理、SQL 工具和数据工作流按菜单分组呈现\n- 优化 V2 对象区固定栏、连接操作与窗口拖拽区域\n- 更新六种语言的快捷操作和手动查询条件文案\n- 补充标题栏与侧栏交互回归测试
2026-07-31 16:21:36 +08:00
AutumnNazi
24f7813f58 feat(datagrid): 支持列宽随拖动实时调整
- 在动画帧内同步提交列宽,使表头与表体实时重排
- 合并高频鼠标事件并跳过重复像素宽度更新
- 增加拖动期间实时更新的交互回归测试
2026-07-31 14:26:03 +08:00
廖鹏
af80e07e4a 🔧 fix(message):修复打开表数据时,提示 data_viewer.edit_hint.all_columns_locator 消息,但是在其他语言模式下没有转换成友好提示词。 2026-07-31 11:02:14 +08:00
Syngnat
9abdd9b257 🐛 fix(tdengine): 合并表配置与字段编辑页
- 同页展示 TDengine 表类型、TAG 配置与字段定义,避免新增字段后不可见

- 为普通表和超级表提供独立字段区域与数量摘要,并保持区域滚动

- 子表继续隐藏字段编辑区,新增字段后在合并页自动聚焦新行
2026-07-31 10:52:50 +08:00
Syngnat
21d2b9cde1 🐛 fix(nacos): 优化远程配置更新提示布局
- V2 远端变更提示移入配置详情标题区,避免占据工作台整行
- 使用紧凑状态条并保留加载远端与图标式忽略操作
- 仅本地存在未保存草稿时展示覆盖风险提示,旧版 Alert 行为保持不变
- 更新配置选择与远端变更监听测试
2026-07-31 10:36:01 +08:00
Syngnat
6ed3597262 feat(tdengine): 支持普通表超级表与子表创建
- 表设计器新增普通表、超级表和子表类型配置\n- 生成并执行 CREATE TABLE、CREATE STABLE 与 USING ... TAGS 语句\n- 支持超级表 TAG 定义和子表 TAGS 值校验,补齐多语言文案\n- 创建成功后自动刷新对应数据库的侧边栏表树\n- 增加 SQL 生成、执行拆分和 TDengine 元数据回归测试
2026-07-31 09:23:31 +08:00
Syngnat
c222176647 🐛 fix(query-editor): 修复 Oracle 视图 DDL 截断与 ROWID 误注入
- 视图编辑改用完整 DDL 接口,避免 CLOB 预览截断
- Oracle 视图 DDL 统一格式化后写入编辑器
- 执行查询前刷新表元数据,避免旧缓存误注入 ROWID
- 增加视图 DDL 与缓存回归测试
2026-07-31 09:07:19 +08:00
Syngnat
120483e07a 🐛 fix(datagrid): 修复最小列宽下筛选与排序控件隐藏 (#793)
## 背景与问题

GoNavi 列支持拖拽调整宽度,但原有最小宽度不足以容纳字段标题、筛选器、排序器和列宽拖拽手柄。

对于 `limit_up_price` 等长字段名,Ant Design 标题容器会保留内容最小宽度,将筛选器和排序器推到表头边界外,并被
`overflow: hidden` 裁剪;部分较短字段的排序器也会与拖拽手柄重叠。

## 变更点

- 将普通数据列的统一最小宽度设为 120px。
- 让默认宽度、手动拖拽和自动适配共用同一最小宽度约束。
- 允许字段标题及 Ant Design 排序容器在长字段名下正确收缩。
- 固定筛选器和排序器的操作空间,并为列宽拖拽手柄预留右侧区域。
- 补充最小列宽和标题收缩行为的回归测试。

## 影响范围

- DataGrid V2 列头布局。
- 普通数据列的默认、手动调整和自动适配宽度。
- 不涉及后端接口、数据库数据或存储格式变更。

较窄密度下普通数据列的最小宽度会统一为 120px,可能增加横向滚动距离,但可以保证筛选和排序入口始终可用。

## 验证方式

- `npx vitest run src/utils/dataGridDisplay.test.ts
src/components/useDataGridColumnResize.interaction.test.tsx
src/components/DataGridColumnTitle.test.tsx`
  - 3 个测试文件通过。
  - 20 项测试通过。
- 在开发复现页将 `price`、`limit_up_price`、`at_limit` 拖至
120px,筛选器和排序器均保持可见,且不与拖拽手柄重叠。
- Windows AMD64 Wails 正式构建通过。

## 风险与回滚

- 风险主要是最小列宽增大带来的额外横向滚动。
- 如需回滚,可直接撤销本 PR 的单一提交,不涉及数据迁移。
2026-07-31 07:13:18 +08:00
home
4e96660eab 🐛 fix(datagrid): 修复最小列宽下筛选与排序控件隐藏 2026-07-30 23:44:13 +08:00
Syngnat
457a77d13a 🐛 fix(oracle): 修复视图 DDL 截断与 ROWID 注入问题
- 完整读取 Oracle DDL CLOB,避免元数据预览截断
- 统一对象设计器视图 DDL 获取和格式化
- 仅对物理表注入 ROWID,避免 ORA-01445
2026-07-30 23:20:03 +08:00
Syngnat
11350511e6 test(frontend): 同步基线测试契约 (#792)
## 背景

`upstream/dev` 的完整前端测试存在 5 个基线失败:ConnectionModal i18n 4 个、QueryEditor 1
个。本 PR 仅同步测试契约和 fixture,不修改生产逻辑。

## 根因

- ConnectionModal 测试仍使用 UI 重构前的完整导航和 URI 操作文案;当前界面已使用密排短标签
`Auth`、`Mode`、`Basic`、`Generate from fields`、`Parse & fill`。
- QueryEditor 多行单表测试没有提供结果列元数据,触发当前生产代码对空列元数据的只读保护,导致测试期望的 `all-columns`
定位器无法生成。

## 修复方案

- 更新 ConnectionModal i18n 测试中的过时可见文案和按钮定位。
- 为 QueryEditor 目标测试补充四个结果列的 `DBGetColumns` mock,保留可编辑 `all-columns`
行为断言。
- 保留生产代码的空元数据只读保护,不回退近期系统视图安全修复。

## 验证结果

| 验证项 | 命令 | 结果 |
| --- | --- | --- |
| 失败用例修复 | `npm --prefix frontend test --
src/components/ConnectionModal.i18n.test.tsx
src/components/QueryEditor.results-and-drop.test.tsx` | 通过,134 个测试 |
| 完整前端测试 | `npm --prefix frontend test` | 通过,424 个测试文件、3506 个测试 |
| 生产构建 | `npm --prefix frontend run build` | 通过 |
| 差异检查 | `git diff --check` | 通过 |

## 影响范围

仅测试文案和测试 fixture 变化,不改变生产行为、配置、依赖或数据格式。

## 回滚方式

回滚提交 `d42e2ad8e8d3056904d9eb3fb6dc94a96a179717` 即可恢复原测试文件。
2026-07-30 22:39:10 +08:00
Syngnat
1c6888d839 feat(data-grid): 支持隐藏表格行号列 (#790) (#791)
## 关联 Issue

Closes #790

## 问题根因

表格行号列原本只能通过应用外观设置控制,表格高频使用的“字段显示”入口没有提供隐藏“#”列的操作。

## 修复方案

在现有“字段显示”面板的列可见性列表中增加“显示数据表行号”复选框,复用已有的
`appearance.showDataTableRowNumber`
状态和持久化逻辑。关闭后移除行号表头及行号单元格,重新勾选即可恢复;默认行为保持为显示行号。

## 验证结果

| 验证项 | 命令或步骤 | 结果 |
| --- | --- | --- |
| 回归测试 | `npm --prefix frontend test --
src/components/DataGridColumnInfoPopoverContent.test.tsx
src/components/DataGrid.layout.test.tsx src/i18n/catalog.test.ts` |
通过,86 个测试 |
| 生产构建 | `npm --prefix frontend run build` | 通过 |
| 差异检查 | `git diff --check` | 通过 |
| 手动 GUI 验证 | `?devHarness=datagrid-perf&rows=20&uiVersion=v2`,在
1280×720 视口打开 Column display,取消并重新勾选 Show Data Table Row Numbers |
通过:默认表头存在,取消后表头消失,恢复后表头重新出现 |

完整前端测试 `npm --prefix frontend test` 在 upstream/dev 基线中已有 5
个失败用例(ConnectionModal.i18n 4 个、QueryEditor.results-and-drop 1 个),本 PR
未修改相关代码,已单独记录并另开分支处理。

## 风险与兼容性

- 不改变数据、配置格式、公共 API 或数据库行为。
- 复用现有外观设置字段,因此旧配置和默认显示行为保持兼容。
- 仅影响 DataGrid 行号列的可见性;表格数据列、分页和编辑逻辑不变。
- 已验证范围覆盖 V2 UI 的 1280×720 视口;未在真实数据库连接上执行数据操作验证。

## 回滚方式

回滚提交 `f4856e2580a34c9b6f07bed777a729f9f88d20b3`
即可恢复原有字段显示面板和行号开关入口,不涉及数据或配置迁移。
2026-07-30 22:38:23 +08:00
mango
d42e2ad8e8 test(frontend): 同步基线测试契约 2026-07-30 21:28:23 +08:00
mango
f4856e2580 feat(data-grid): 支持隐藏表格行号列 (#790) 2026-07-30 21:18:00 +08:00
Syngnat
c4e7142309 🐛 fix(mac-window): 固定使用 macOS 原生窗口控制
- macOS 窗口创建时启用原生标题栏与红黄绿控制
- 移除主题切换及持久化偏好,兼容旧前端禁用调用
- 保持 Windows/Linux 自定义无边框窗口并补充回归测试
2026-07-30 21:06:12 +08:00
Syngnat
aec34a031a 🐛 fix(dameng): 修复表设计字段注释加载失败
增加 SYSCOLUMNCOMMENTS 原生字典降级查询,按字段名合并注释;原生字典无权限时保留基础元数据,并补充回归测试。
2026-07-30 20:44:12 +08:00
Syngnat
3ea3223749 🐛 fix(query-editor/logging): 修复达梦SQL美化并完善诊断日志
- 为达梦和自定义 DM8 连接启用 SQL 格式化位置占位符
- 记录 SQL 美化方言、作用域、耗时及脱敏错误信息
- 将 Wails 前端日志接入 GoNavi 应用日志文件
- 启动时输出应用版本及实际驱动模块和代理版本
- 补充达梦占位符、日志落盘与启动诊断回归测试
2026-07-30 18:17:08 +08:00
Syngnat
ffd1be8ad6 🐛 fix(query-editor): 统一主题背景与结果区布局
让 Monaco、SQL 工具栏、数据网格和嵌入日志统一使用当前主题的工作台表面色,并兼容自定义主题覆盖。

统一结果 Tab 的高度、圆角与间距,移除嵌入日志重复标题,将清空日志和隐藏结果区操作并排放到 Tab 栏右侧。

补充主题、工具栏、结果 Tab 和日志面板回归测试。
2026-07-30 17:49:58 +08:00
Syngnat
84569e409c feat(database-icons): 完善数据源品牌图标资源
为连接弹窗导出品牌图标资源路径、容器背景和可用性判断。

补充 Java 与 Nacos SVG,替换 JVM 旧图标,并为 Doris、IoTDB、MongoDB、MQTT、Qdrant、Redis、Sphinx 资源增加品牌色。

更新数据库图标回归测试。
2026-07-30 17:46:54 +08:00
Syngnat
b293bf0da6 🐛 fix(sync/mysql): 修复批量导入占位符超限
- 识别 MySQL Prepared Statement 占位符超限错误
- 对被服务端拒绝的批量 INSERT 自动递归拆批重试
- 增加 24 列 1000 行数据同步回归测试
2026-07-30 17:41:01 +08:00
Syngnat
d23e82d77b 🐛 fix(connection-modal): 消除表单默认态滚动条
生产连接保护面板默认展开占用约247px高度,导致Step2表单
在常见场景下内容溢出触发滚动条:MySQL单机溢出23px,
MySQL主从溢出155px,MongoDB单机溢出260px。

- 生产连接保护面板默认改为折叠,切换数据库类型时同步重置
- 表单容器高度上限由720px小幅提升至780px
- 同步更新i18n测试中对默认展开状态的断言

实机验证(Playwright):MySQL单机/主从、MongoDB单机默认态
均消除滚动条;MongoDB副本集等多字段叠加的极端场景仍保留
滚动,属预期内边界情况。
2026-07-30 16:38:57 +08:00
Syngnat
1a39d45011 🐛 fix(driver-manager): 修复进度条越界与按钮对比度 (#773)
- 为驱动进度条增加稳定样式边界并允许控件收缩
- 优化设置中心嵌入布局的版本与进度网格轨道
- 将浅色主按钮调整为满足 AA 对比度的深绿底白字
- 增加嵌入布局和颜色对比度回归测试

Refs #773
2026-07-30 16:01:42 +08:00
Syngnat
bf3f221857 🐛 fix(vastbase): 修复含点表名误识别为模式 (#757)
- 对含点号或双引号的 PostgreSQL-like 标识符进行可逆引用
- 让 Vastbase 表列表复用统一的 PostgreSQL 元数据解析
- 增加含点表名保持标识符边界的回归测试

Refs #757
2026-07-30 15:59:28 +08:00
Syngnat
b64c7e92d1 ️ perf(kingbase): 消除 SQL 查询周期性探活延迟
- 成功 SQL 往返后刷新缓存连接健康时间
- 避免活跃连接跨过旧时间边界时同步重复 Ping
- 保留空闲连接探活、失效清理与重建机制
- 新增 Kingbase 查询健康时间回归测试
2026-07-30 14:32:52 +08:00
Syngnat
8a9b85518a 🐛 fix(redis): 修复刷新与切换 Key 时页面抖动 (#775)
- 保留值详情 DOM,避免加载态触发 V2 Grid 行高重算
- 使用跨详情区域的加载遮罩维持刷新和切换期间布局稳定
- 增加刷新与切换 Key pending 状态回归测试
2026-07-30 13:42:14 +08:00
Syngnat
c11adf7ebe 🐛 fix(data-import): 约束导入目标下拉框宽度 (#774)
- 限制连接、数据库和目标表选择器不超出目标卡片
- 保留长名称单行省略并适配单双列布局
- 新增目标选择器宽度约束回归测试
2026-07-30 13:33:00 +08:00
Syngnat
4c2bec0487 🐛 fix(proxy): 修复 HTTP CONNECT 超时竞态
- 将 context deadline 触发的 socket timeout 归一化为 DeadlineExceeded
- 统一 CONNECT 请求写入和响应读取的取消错误语义
- 新增 deadline timeout 回归测试并完成高频握手验证
2026-07-30 12:05:57 +08:00
Syngnat
09a1bceabf ️ perf(kingbase): 优化数据表首屏加载性能
- 连接池保留 Kingbase 空闲连接,减少重复建连开销
- 首屏数据查询完成后再加载编辑定位元数据
- 合并列、索引和外键元数据请求并保留强制刷新
- 新增连接复用、加载时序和请求缓存回归测试
2026-07-30 11:26:50 +08:00
Syngnat
c42a8679e9 feat(connection/redis): 补充哨兵拓扑并修复探活字段重叠
- 新建连接弹窗 Redis 拓扑补充 Sentinel 模式:哨兵地址列表、master 名称、
  哨兵账号/密码(密码复用现有掩码密文控件),与 MySQL replica、Mongo
  副本集等拓扑保持一致的密排布局
- 移除指向孤儿组件 ConnectionModalRedisSections.tsx 的死引用
- 修复自定义探活 SQL 文本框:AntD showCount 计数器绝对定位探出容器
  约一行高度,与下方 .gn-conn-field-hint 提示文字重叠;调整
  Form.Item marginBottom(0→22)为计数器预留空间
- 同步密排布局下的 i18n 文案(URI 区域、字段短标签等)与相关快照测试
- 清理已废弃的 UI mockup 草稿文件 ai_ui_mockups_wip.html
2026-07-30 07:16:54 +08:00
Syngnat
e6ff7d7e6f test(ai): 改用行为断言验证代码块依赖边界 (#785)
## 问题背景

`upstream/dev` 的前端全量测试被 `src/testPolicy.test.ts`
阻断。`AIMessageCodeBlock.dependencyBoundary.test.ts` 通过 `readFileSync` 读取
`.ts/.tsx` 源码并用正则断言实现文本,违反项目“禁止新增源码文本断言”的测试策略。

该文件没有进入债务基线,且不属于经认可的全仓库不变式扫描,因此不能通过增加豁免隐藏问题。

## 修复方案

只重写依赖边界测试,不修改生产代码、Vite 配置、测试策略或债务基线:

- 通过模块 mock 的实际求值行为,验证 AI 代码块加载轻量 `prism-light` 入口而不是完整语言注册表。
- 先渲染普通 SQL 代码块,再切换到 Mermaid 代码块,验证 Mermaid 仅在对应组件挂载后加载、初始化并渲染。
- 直接导入 Vite 配置对象,验证 Prism 入口、语言和主题依赖都包含在 `optimizeDeps.include` 中。

这使测试执行实际模块加载与 React effect,不再把源码当字符串锁定。

## 验证结果

| 验证项 | 命令 | 结果 |
| --- | --- | --- |
| 修复前基线 | `npm --prefix frontend test -- src/testPolicy.test.ts` |
按预期失败,唯一 offender 为本次修改文件 |
| 聚焦测试 | `npm --prefix frontend test --
src/components/ai/messageBubble/AIMessageCodeBlock.dependencyBoundary.test.ts
src/components/ai/messageBubble/AIMessageMarkdown.test.tsx
src/testPolicy.test.ts` | 通过,3 个文件、11/11 |
| 前端全量测试 | `npm --prefix frontend test` | 通过,421 个文件、3481/3481 |
| 类型与生产构建 | `npm --prefix frontend run build` | 通过,`tsc && vite build`
成功 |
| 差异检查 | `git diff --cached --check` | 通过 |

## 风险与兼容性

- 只修改测试文件,不改变运行时代码、公共 API、配置、数据格式或依赖。
- 模块 mock 能验证加载入口与加载时机,但不等同于完整的 Rollup 分块分析;最终生产构建已实际执行并通过。
- Vite 预打包依赖清单通过配置对象断言,新增或删除 AI 高亮语言时需要同步更新测试期望。

## 回滚方式

回滚提交 `caba7b8cbb9bed38c27e1fde4c668936957a3cd0`
即可恢复原测试。回滚不影响运行时数据或配置,但会重新触发当前的测试策略失败。
2026-07-29 22:26:35 +08:00
Syngnat
3c19656603 🐛 fix(data-grid): 支持单值粘贴填充选区 (#781) (#784)
## 关联 Issue

Closes #781

## 问题根因

表格拖选会在 `currentSelectionRef` 中保存完整目标选区,但剪贴板粘贴逻辑仅使用 `selectionStartRef`
作为锚点,并按剪贴板二维矩阵生成目标坐标。单个复制值解析为 `1 x 1` 矩阵,因此只更新了锚点单元格,没有使用其余已选单元格。

## 修复方案

- 当剪贴板内容为 `1 x 1` 且当前选区超过一个单元格时,将单值映射到选区中的每个目标坐标。
- 粘贴时根据当前显示行和列重新解析选区坐标,避免排序后使用过期位置。
- 继续复用现有只读列过滤、草稿合并、新增行、删除行和原值比较逻辑。
- 多行或多列剪贴板仍保持原有的锚点二维矩阵粘贴行为,不引入重复铺贴或跨页填充语义。

## 验证结果

| 验证项 | 命令或步骤 | 结果 |
| --- | --- | --- |
| 修复前回归 | `npm --prefix frontend test --
src/components/useDataGridBatchActions.test.tsx` | 新增用例按预期失败:实际仅更新
`row-1.id`,期望两行四格 |
| 回归测试 | `npm --prefix frontend test --
src/components/useDataGridBatchActions.test.tsx` | 通过,5/5 |
| 剪贴板相关测试 | `npm --prefix frontend test --
src/components/dataGridClipboardPaste.test.ts
src/components/dataGridSelectionCopy.test.ts
src/components/useDataGridBatchActions.test.tsx` | 通过,3 个文件、13/13 |
| 类型与生产构建 | `npm --prefix frontend run build` | 通过,`tsc && vite build`
成功 |
| 差异检查 | `git diff --cached --check` | 通过 |

前端全量测试 `npm --prefix frontend test` 执行结果为 420 个文件通过、1 个文件失败,3481 项测试通过、1
项失败。唯一失败是 `src/testPolicy.test.ts` 检测到 `upstream/dev` 已存在的
`AIMessageCodeBlock.dependencyBoundary.test.ts` 读取源码文本;本 PR
未修改相关文件。该上游既有错误将通过独立 PR 修复,避免混入本 Issue。

GUI 验证未完成:本地 Vite 服务已正常启动,但浏览器自动化宿主连续返回 `browser guest not attached
(webview not ready)`,没有创建可操作页面或截图证据。未将该项记为通过。

## 风险与兼容性

- 不涉及数据或配置格式变化、数据库迁移或公共 API 变化。
- 仅改变 `1 x 1` 剪贴板内容在多格选区中的行为;现有二维矩阵粘贴由相关回归测试覆盖并保持不变。
- 操作仍只影响当前已加载并选中的可写单元格;只读列、已删除行和未变化值会沿用现有规则跳过。
- 更新规模随当前选区大小线性增长;没有新增网络请求、并发路径或跨页扫描。
- 验证边界:自动化测试覆盖了前端草稿状态与消息计数,未在真实 Wails/MySQL 环境提交数据库变更。

## 回滚方式

回滚提交 `ec6b4e9e0182a85b862627177c8d373137d1a90b`
即可恢复原有单锚点粘贴逻辑。该提交不改变数据或配置格式,回滚本身不需要数据迁移。
2026-07-29 22:26:24 +08:00
Syngnat
5b90c8ae80 🐛 修复达梦系统视图查询失败 (#783)
背景:达梦查询 DBA_TAB_PRIVS、USER_COL_COMMENTS 等系统视图时,元数据查询可能成功但返回空字段列表,GoNavi
随后仍按可编辑结果处理并自动注入 ROWID,导致 SQL 执行失败(Issue #780)。

修改:
- 空字段元数据结果按只读结果处理,阻止 Oracle/Dameng 定位器注入 ROWID。
- 保留普通业务表主键、唯一键和 ROWID 编辑逻辑不变。
- 增加 USER_COL_COMMENTS 和 DBA_TAB_PRIVS 回归测试。

验证:
- QueryEditor 测试:285/285 通过
- npm run build 通过(仅保留仓库已有的 chunk size warning)

Fixes #780
2026-07-29 22:26:14 +08:00
Syngnat
fb686a3d94 🐛 fix(query-editor): 将执行耗时固定到编辑器底部
- 将计时状态移至 Monaco 底部并在执行完成后保留耗时
- 按一秒和五秒边界显示闪电、兔子或乌龟速度图标
- 保持工具栏停止按钮紧凑并补齐计时生命周期与布局回归
2026-07-29 20:36:27 +08:00
Syngnat
cb3a5f6b61 🐛 fix(rabbitmq): 修复连接类型回退与管理端口误用
- 以当前选中的数据源类型构造测试和保存配置,避免 RabbitMQ 被保存为 MySQL
- 拦截默认 AMQP/AMQPS 端口并提示 Management API 端口
- 保留显式 HTTP/HTTPS 管理地址的自定义端口能力
- 补充连接类型漂移和端口校验回归测试
2026-07-29 20:35:04 +08:00
mango
caba7b8cbb test(ai): 改用行为断言验证代码块依赖边界 2026-07-29 18:46:04 +08:00
mango
ec6b4e9e01 🐛 fix(data-grid): 支持单值粘贴填充选区 (#781) 2026-07-29 18:30:17 +08:00
Syngnat
b6af0a09cc feat(query-editor/sidebar): 支持执行计时与单库展开
- 在停止按钮中实时展示 SQL 执行耗时,并保持计时宽度稳定
- 新增默认关闭且可持久化的同连接单数据库展开设置
- 覆盖关系型数据库与 Redis 节点,并补充多语言和回归测试

Refs #754
Refs #755
2026-07-29 17:30:37 +08:00
AutumnNazi
5a4c1e4c4e 🐛 fix(dameng): 修复系统视图查询被注入 ROWID
- 达梦系统视图字段元数据为空时按只读结果处理\n- 避免 DBA_TAB_PRIVS 和 USER_COL_COMMENTS 查询追加 ROWID\n- 增加两个达梦系统视图查询回归测试
2026-07-29 17:22:36 +08:00
Syngnat
bd259e4e51 🐛 fix(mongodb/query-editor): 修复受限账号连接与不限行数
- MongoDB 指定数据库时保留连接校验并跳过全库枚举
- 允许查询最大行数为 0 并持久化不限设置
- 补充数据库枚举与不限行数持久化回归测试

Refs #741
Refs #752
2026-07-29 17:19:15 +08:00