Commit Graph
233 Commits
Author SHA1 Message Date
t8y2 f456ddd979 perf: full-stack performance and security hardening
Frontend performance:
- Debounce DataGrid search (150ms) and replace O(n) row wrapping with index array
- Replace QueryStore deep watcher with targeted field-level persistence snapshot
- Extract shared nodeConfig computed in TreeItem (eliminates 15x redundant getConfig calls)
- Clear tab result data on close to free memory
- Add LRU eviction for completion caches (50 entry cap)
- Replace savedSql version string join with numeric counter

Memory leak fixes:
- Store Tauri event unlisten handles and clean up on unmount
- Clean up DataGrid search timer on unmount

Backend security & resource management:
- Add 50MB request body size limit
- Reject file uploads >100MB and SQL files >200MB
- Clean up SSE channels after transfer/import completes
- Recover from poisoned mutex instead of panicking
- Delete temporary upload files after preview
- Validate SQL file paths to prevent directory traversal
2026-05-11 00:18:09 +08:00
t8y2 741783445d feat: add XLSX export to table context menu
Add XLSX export option to the sidebar table name right-click menu,
unifying export capabilities with the data grid context menu. Also
add toast notifications for all sidebar data export operations.
2026-05-10 23:38:53 +08:00
t8y2 bafb424b23 perf: full-stack performance optimization
Frontend:
- Debounce queryStore tab persistence (remove flush:sync deep watcher)
- Eliminate unnecessary object spreading in connectionStore error handling
- Use in-place delete for completion cache invalidation
- Deduplicate schema cache prefix API calls
- Split echarts, reka-ui, marked, @codemirror/commands into separate chunks
- Lazy-load xlsxExport and markdownTable in DataGrid
- Lazy-load marked parser in UpdateDialog

Backend:
- Replace tokio::sync::Mutex with RwLock for AppState connections/configs
  (60+ concurrent reads no longer block each other)
- Parallelize PostgreSQL DDL metadata queries with tokio::try_join!
2026-05-10 23:23:22 +08:00
t8y2 c43ab681cd test: add backend API contract coverage 2026-05-10 22:34:37 +08:00
t8y2 c6b6ba5769 feat(connections): import DBeaver connections 2026-05-10 22:10:30 +08:00
t8y2 9661c60812 feat(connections): import Navicat NCX files 2026-05-10 21:51:48 +08:00
t8y2 6d513afc16 feat(objects): show routines in object browser 2026-05-10 21:14:16 +08:00
t8y2 0e0195f734 feat(objects): add virtual object browser 2026-05-10 18:32:24 +08:00
t8y2 1cd358f3c1 fix(sidebar): allow collapsing search results 2026-05-10 14:43:49 +08:00
t8y2 f5b36a0f60 feat(history): track database activity 2026-05-10 14:18:20 +08:00
t8y2 10bfede1c7 feat(jdbc): add optional JDBC plugin support 2026-05-10 12:57:38 +08:00
t8y2 3a6078e10c fix(sidebar): remove tinted row rounding 2026-05-10 10:32:58 +08:00
t8y2 939f36bda6 fix(redis): align key table columns 2026-05-10 10:26:14 +08:00
t8y2 8664cc5b48 feat(grid): add clipboard shortcuts 2026-05-10 10:22:17 +08:00
t8y2 5a15d7a424 fix(ui): refine layout polish 2026-05-10 10:17:18 +08:00
t8y2 ebc905a478 feat(ui): add layout preference 2026-05-10 10:11:55 +08:00
t8y2 28f8c88ea9 feat(ui): refine panel and tab chrome 2026-05-10 09:54:21 +08:00
t8y2 cb7428b5a3 feat(ui): refine app chrome layout 2026-05-10 09:37:02 +08:00
t8y2 0b376c234f feat(ui): add connection color tinting 2026-05-10 09:19:14 +08:00
t8y2 3066266697 fix(ui): resolve connection dialog errors
- Escape `@` in i18n connection URL placeholder to prevent vue-i18n
  linked message compilation error
- Add hidden DialogDescription to DialogContent to suppress reka-ui
  aria-describedby warning
2026-05-10 01:13:00 +08:00
t8y2 b013a2ac29 feat(sql): persist SQL library in app database 2026-05-10 00:41:17 +08:00
t8y2 cac383e6bf feat(sql): add saved SQL library 2026-05-10 00:33:25 +08:00
t8y2 d3919a5c20 fix(grid): refine column filter popover 2026-05-10 00:16:32 +08:00
t8y2 95519903b6 feat(grid): add DataGrip-style column filters 2026-05-10 00:12:50 +08:00
t8y2 dc2164dd62 fix(web): align file picker behavior 2026-05-09 23:49:18 +08:00
t8y2 97b77ec46d feat(diff): add data compare and schema sync coverage 2026-05-09 23:44:49 +08:00
t8y2 a878ec203a feat(data): support connection URLs and XLSX export 2026-05-09 23:11:15 +08:00
t8y2 afb177db85 fix(connection): hide system database objects 2026-05-09 19:50:28 +08:00
t8y2 9c71442f43 feat(connection): add configurable SSH timeout 2026-05-09 19:34:30 +08:00
t8y2 8c1ba16a2c fix(grid): move transaction status near actions 2026-05-09 18:18:09 +08:00
t8y2 9b81fa5f38 fix(editor): improve SQL Server editing support 2026-05-09 18:17:56 +08:00
t8y2 9663a9b9cb fix(settings): remove footer background layer 2026-05-09 18:11:37 +08:00
t8y2 ae254bf470 fix(ai): make conversation history toggleable 2026-05-09 18:08:12 +08:00
t8y2 8d318a2146 fix(updater): fix restart after update 2026-05-09 18:08:06 +08:00
t8y2 4b0681f5af feat(settings): add about tab 2026-05-09 18:07:52 +08:00
t8y2 e984f698b2 fix(ui): 优化表格与 SQL 文件弹窗布局 2026-05-09 17:54:38 +08:00
t8y2 36b1ac8eda fix(grid): 翻页后重置表格滚动位置 2026-05-09 17:39:20 +08:00
t8y2 5c52560368 feat(schema): 增加数据库对象列表缓存 2026-05-09 17:36:20 +08:00
t8y2 1fd1cb10eb perf(sidebar): 优化侧边栏搜索匹配性能 2026-05-09 17:36:09 +08:00
t8y2 de6fecb18b fix: restore workspace build and refine grid menu 2026-05-09 17:07:52 +08:00
t8y2 40a3c13961 feat(grid): improve table context menu 2026-05-09 16:36:12 +08:00
t8y2 6a5dd3b51b feat(sidebar): create connections from group menu 2026-05-09 16:27:25 +08:00
t8y2 b41e548911 fix(sidebar): preserve expanded tree on refresh 2026-05-09 16:22:00 +08:00
skyler 9b4267ef7b Merge pull request #180 from rarnu/fix/toolbar-condition
Fix: 修复表数据编辑的工具栏,条件过滤和刷新丢状态的问题
2026-05-09 16:12:19 +08:00
t8y2 b8b4ef2e5a feat(editor): support tab indentation 2026-05-09 15:58:28 +08:00
t8y2 af029daf57 fix(db): normalize default database handling 2026-05-09 15:53:06 +08:00
rarnu c6aa0cf84f 1. 修复 ORDER BY watch 重复数组
2. WHERE / ORDER BY 输入框 @blur 处理
2026-05-09 15:51:13 +08:00
rarnu 9261cb71a2 1. src/components/grid/DataGrid.vue
- 左侧搜索框:移除了 WHERE 支持(isWhereSearch 永远返回 false),现在是纯客户端文本过滤。保留了列名代码提示功能(Tab 补全、箭头导航)。
       - WHERE 框:新增列名代码提示(独立的下拉建议面板),支持单双引号和小括号自动配对,Enter 直接应用过滤。
       - ORDER BY 框:新增列名代码提示(同样的建议面板),Enter 直接应用排序。
       - 刷新/回滚/提交:reload emit 现在传递 4 个参数 (sql, searchText, whereInput, orderBy),确保刷新后所有条件不丢失。
       - 分页/排序:统一使用新的 currentWhereInput() 函数,替代已废弃的 activeWhereInput。
       - 删除了 applyWhereSearch() 和 onSearchEnter()(左侧搜索不再需要执行 WHERE 查询)。

    2. src/composables/useDataGridActions.ts
       - onReloadData() 签名改为接受 4 个参数 (sql, searchText, whereInput, orderBy)。
       - table-data 模式刷新时,用 buildTableSql(tab, { whereInput, orderBy }) 重建 SQL,保留 WHERE 和 ORDER BY 条件。

    3. src/components/layout/ContentArea.vue
       - reload emit 签名同步更新为 4 个参数。
       - results 模式和 table-data 模式两个 DataGrid 的 @reload 处理器都转发全部 4 个参数。

    4. src/App.vue
       - ContentArea 的 @reload 处理器转发 4 个参数给 onReloadData()。
2026-05-09 15:04:06 +08:00
t8y2 9a9f67f9ae fix(window): prevent double-toggle on titlebar double-click (#179)
data-tauri-drag-region already handles double-click to maximize
natively; the @dblclick handler was calling toggleMaximize() again,
immediately restoring the window.
2026-05-09 14:51:47 +08:00
t8y2 5c911f39ff fix(ui): prevent tab scroll arrow overlapping with text
Widen the scroll button gradient area and use a solid-to-transparent
gradient (40% opaque) instead of a semi-transparent via stop, so tab
text is fully hidden behind the arrow overlay.
2026-05-09 14:26:31 +08:00