Commit Graph
234 Commits
Author SHA1 Message Date
t8y2 f8215f7347 fix: open changelog links in external browser instead of in-app
Clicking links in the update dialog release notes was navigating within
the Tauri webview with no way to go back, requiring a restart. Now link
clicks are intercepted and opened externally via @tauri-apps/plugin-shell
or window.open.

Closes #525
2026-05-29 16:39:31 +08:00
t8y2 8a3bd067a2 fix: independent column width resizing in transpose view
Replace shared transposeRecordWidth with per-record width array so dragging a resize handle only affects that column. New columns auto-calculate optimal initial width based on content.
2026-05-29 16:35:29 +08:00
t8y2 6c0db6f517 feat: add "Copy as SQL ALTER" to DataGrid column header context menu
Right-click a column header in the data grid to copy the ALTER TABLE
statement for that column, making it easy to replicate column definitions
across databases. Supports all major dialects (MySQL, Postgres, SQL Server,
Oracle, ClickHouse, SQLite, DuckDB, H2).

Closes #516
2026-05-29 15:09:10 +08:00
3991ce2a90 Fix/issue 515 UI scale settings dialog (#520)
* feat(structure): auto-switch column length default based on data type

When changing a column's data type in the table structure editor, the
length parameter now updates to a sensible default for the new type
(e.g. int→11, tinyint→4) instead of preserving the old value.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(editor): preserve scroll position after SQL execution

After DDL/DML execution via the danger confirmation dialog, the editor
scrolls to the top, making it hard to locate the executed statement.
Fix by scrolling the cursor back into view after execution completes,
using nextTick + requestAnimationFrame to wait for Splitpanes layout
stabilization.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(settings): 修复大比例 UI 缩放下设置弹窗无法操作的问题

设置弹窗主体区域设置了固定最小高度 sm:min-h-[520px]。当全局 UI 缩放
调到很大(如 200%)时,webview 的 CSS 视口大幅缩小,外层 DialogContent
高度被 calc(100vh-80px) 限制到比 520px 更小,主体区域被强行撑到 520px,
溢出部分被 overflow-hidden 裁掉,导致底部页脚(应用/保存按钮)被裁出可视
区且没有滚动条,用户无法把缩放改回来。

移除该固定最小高度,让主体区域随视口收缩,内部 overflow-y-auto 接管滚动,
带 shrink-0 的页脚在任意缩放比例下始终可见。大屏无回归:DialogContent
仍保持 min(660px, ...) 的固定高度。

Fixes #515

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: t8y2 <1156263951@qq.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 12:31:05 +08:00
Abeautifulsnow 310cc22b37 Fix/disable table comment for unsupported db (#518)
* fix(structure-editor): disable table comment input for databases that don't support comments (e.g. SQLite)

## 背景说明
SQLite 不支持表注释(COMMENT),但表注释输入框始终可编辑。用户修改注释后,SQL 预览显示暂无变更且应用变更按钮不可用,造成困惑的 UX。

## 修改内容
- 新增 isTableCommentDisabled 计算属性,基于 structureCapabilities.comment 控制禁用状态
- 表注释 Input 添加 :disabled 绑定,禁用时输入框变灰不可编辑
- 禁用时在输入框右侧显示 Info 图标,hover 显示 Tooltip 说明
- 三语言(zh-CN / en / es)新增 tableCommentUnsupported 翻译

## 影响范围
- SQLite、DuckDB 及未知数据库类型:输入框被禁用 + Tooltip 提示
- MySQL、PostgreSQL、ClickHouse 等支持注释的数据库:完全不受影响
- 后端 generate_comment_ddl 已有对等过滤(仅 Postgres/Oracle/ClickHouse 生成 COMMENT SQL)

## 测试
- 建议补充:dbType 为 sqlite 时 isTableCommentDisabled 为 true 的单元测试

* test(structure-editor): add tests for table comment disabled state and unsupported DB capabilities
2026-05-29 12:29:50 +08:00
t8y2 660ba07264 feat(sidebar): add compact object display mode 2026-05-29 01:17:46 +08:00
t8y2 c7b7bed140 feat(editor): add extended column properties support for MySQL, PostgreSQL, and SQL Server
MySQL: AUTO_INCREMENT, ON UPDATE CURRENT_TIMESTAMP
PostgreSQL: GENERATED AS IDENTITY (BY DEFAULT / ALWAYS)
SQL Server: IDENTITY(seed, increment)
2026-05-29 00:41:51 +08:00
t8y2 ab12ab5c11 feat(editor): add keyboard navigation to type selector and column resize to structure editor
- SearchableSelect: support ArrowUp/Down to navigate filtered options, Enter to select, Escape to dismiss
- TableStructureEditor: add drag-to-resize column widths and horizontal scrolling for the columns table
2026-05-29 00:22:08 +08:00
t8y2 1d2fec4aee perf(editor): optimize SQL autocomplete responsiveness
- Add 150ms debounce on async completion path to reduce redundant Tauri IPC calls during rapid typing
- Parallelize schema table fetching with max concurrency of 5
- Separate schema list cache from table completion cache for longer-lived reuse
- Return keyword completions synchronously when no backend data is needed
- Lower snippet base boost for label-only matches so keywords rank above snippets when user types past snippet prefix
2026-05-28 23:31:31 +08:00
t8y2 539faef23d feat(query): display total row count in result status bar
Execute COUNT query asynchronously after main query to show total
matching rows. Strip user-supplied LIMIT/OFFSET from count SQL so
the total reflects all rows, not just the limited page.
2026-05-28 22:44:13 +08:00
skyler 18e5ee35bb Merge pull request #505 from Michaelxwb/feature_mongo
feat(mongodb): 支持聚合查询、批量写入和 MCP 集成
2026-05-28 21:42:47 +08:00
t8y2 025b465bf1 fix(editor): preserve scroll position after SQL execution
After DDL/DML execution via the danger confirmation dialog, the editor
scrolls to the top, making it hard to locate the executed statement.
Fix by scrolling the cursor back into view after execution completes,
using nextTick + requestAnimationFrame to wait for Splitpanes layout
stabilization.
2026-05-28 21:36:29 +08:00
t8y2 9aae48d089 feat(structure): auto-switch column length default based on data type
When changing a column's data type in the table structure editor, the
length parameter now updates to a sensible default for the new type
(e.g. int→11, tinyint→4) instead of preserving the old value.
2026-05-28 21:36:28 +08:00
徐文彬andClaude Opus 4.7 c56bcb8e2d feat(mongodb): 支持聚合查询、批量写入和 MCP 集成
- 桌面端:解析 db.<集合>.aggregate([...]) shell 语法,新增 mongoAggregateDocuments
  接口(Tauri + HTTP);mongo 入口统一补 ensureConnected;ObjectId(...) 自动
  转换为 {"\$oid":"..."} 扩展 JSON 表示。
- dbx-core:新增 aggregate_documents、insert/update/delete_documents bulk
  操作;扩展 JSON 解析识别 \$oid;schema list_tables_core 补 MongoDB/Elasticsearch
  分支返回 COLLECTION/INDEX。
- dbx-web / Tauri 命令 / MCP bridge:注册 4 个新 mongo 路由
  (aggregate/insert/update/delete documents);MCP bridge 新增 mongo HTTP 入口
  和 lazy 连接复用。
- node-core (MCP 后端):mongodb 走专属 executeQuery / listTables /
  describeTable;read-only 默认 + DBX_MCP_ALLOW_WRITES /
  DBX_MCP_ALLOW_DANGEROUS_SQL 两级开关;aggregate 含 \$out/\$merge 走同样开关;
  describeTable 抽样 20 条文档推断字段类型,_id 自动标记主键。
- mcp-server:mongodb 跳过 SQL safety evaluator(mongo shell 与 SQL 语法
  不兼容),改由 backend 做命令级 gating;附注释。
- AiAssistant 同时 emit replaceSql + executeSql 让编辑器和结果保持一致;
  App.vue ensureQueryTab 在无上下文时回退到连接默认库;aiMessageRender
  识别 mongodb / mongo 代码块。
- Review 修复:合并两份重复的 evaluateMongo*Safety 实现(同时修复 web-backend
  用字符串比较导致空 filter 检查可被空格绕过的 bug);ObjectId 正则兼容
  单/双引号;mongo_ops 错误文案 "MCP" 改为 "bulk";补 aggregate 解析测试用例。

测试:pnpm test 911 通过;vue-tsc 通过;cargo check -p dbx-core 通过。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 21:25:43 +08:00
t8y2 d57660eba9 fix(grid): freeze row number column on horizontal scroll 2026-05-28 20:47:47 +08:00
t8y2 f45ee8f272 feat(settings): keep dialog open after apply 2026-05-28 20:36:56 +08:00
t8y2 f41601e4dc fix(grid): improve column selection and transpose highlights 2026-05-28 20:09:35 +08:00
t8y2 3f64e830f8 fix(grid): show cell highlight for row multi-select 2026-05-28 19:03:21 +08:00
t8y2 a036ea1e8d fix(grid): sync value editor with selected cell 2026-05-28 18:31:57 +08:00
t8y2 486d9bb3a6 fix(connection): move query timeout into per-connection settings 2026-05-28 18:18:45 +08:00
skyler 9f72c38253 Merge pull request #502 from adntian/feat/connect-timeout
feat: add per-connection configurable connect timeout
2026-05-28 17:59:00 +08:00
t8y2 4de788ada2 fix(ci): align desktop tests with zoom changes 2026-05-28 17:51:36 +08:00
t8y2 f7f5758c85 feat(desktop): add global UI zoom settings and shortcuts 2026-05-28 17:43:06 +08:00
t8y2 d35aeaa08c fix: continue transfer after table failure 2026-05-28 16:11:29 +08:00
t8y2 1c03917609 fix: history context menu view details unresponsive and delete missing confirmation
- Fix "View Details" action: selectedEntry = entry → selectedEntry.value = entry
- Replace window.confirm() with Dialog-based confirmation for delete and clear
- Add history.clear i18n key to zh-CN and en locales
2026-05-28 14:33:50 +08:00
t8y2 967a12cc42 fix: remove fixed width from ask/agent mode dropdown to allow adaptive sizing 2026-05-28 14:33:24 +08:00
田振洲 c03b57c179 feat: add per-connection configurable connect timeout
Add a `connect_timeout_secs` field to ConnectionConfig that allows users
to configure the database connection timeout per connection (1-300s,
default 5s). Previously all connections used a hardcoded 5-second timeout.

- Add connect_timeout_secs field with serde default and clamp logic
- Add parse_connect_timeout_with_fallback to honor URL params over config
- Pass user-configured timeout to all drivers (MySQL, Postgres, Redis,
  MongoDB, ClickHouse, SQL Server, Elasticsearch) and TCP probe
- Add UI input in connection dialog SSH tab
- Add i18n keys for en/zh-CN/es
2026-05-28 14:24:54 +08:00
t8y2 56c937f844 refactor: migrate all context menus to CustomContextMenu
Replace reka-ui ContextMenu usage in QueryHistory, DataGrid,
AppTabBar, ObjectBrowser, and TreeItem with the lightweight
CustomContextMenu component. This removes the last reka-ui
context menu dependencies and eliminates the performance
overhead of multiple cached ContextMenu instances.
2026-05-28 13:24:03 +08:00
t8y2 6491442192 feat: add submenu support to CustomContextMenu
Add children support for nested menu items with hover-triggered
submenus, auto-flip positioning near viewport edges, and smart
close timing to prevent flicker.
2026-05-28 13:23:54 +08:00
t8y2 cdadbc19f1 fix: replace reka-ui context menu with lightweight custom component to fix editor lag
The reka-ui ContextMenu component caused significant performance
degradation when multiple editor tabs were cached via KeepAlive,
due to its heavy state machine, provide/inject chain, and document-level
event listeners accumulating across cached instances.

Replaced with a minimal CustomContextMenu that renders via Teleport
without any DOM wrapping or reka-ui dependency, eliminating the lag
while preserving the same visual appearance and functionality.
2026-05-28 12:50:57 +08:00
t8y2 ed10edb5f7 fix: prevent connection dialog from closing on outside click 2026-05-28 11:08:26 +08:00
t8y2 b3ddf9716f feat(grid): add search bar to table info panel for filtering columns, indexes, foreign keys, triggers, and DDL
Closes #493.
2026-05-28 11:02:59 +08:00
t8y2 c952c65483 feat: upgrade data compare sync planning 2026-05-28 01:05:15 +08:00
t8y2 bd78436ab1 feat: add query editor context menu 2026-05-28 00:29:02 +08:00
t8y2 753e40d403 Fix CI TypeScript check and rust disk pressure 2026-05-28 00:15:19 +08:00
t8y2 797c0d8d21 Add Redis cluster support and improve key loading 2026-05-28 00:08:59 +08:00
t8y2 66ce9a368e feat(grid): always show sort button in column header regardless of compact mode
Previously when compactColumnHeaderActions was enabled, the sort button was
hidden inside a dropdown menu, requiring two clicks to sort. Now the sort
button is always visible, while formatter and local filter remain in the
dropdown when compact mode is on.
2026-05-28 00:00:03 +08:00
t8y2 ac4313afee fix(sqlserver): avoid false unknown column diagnostics 2026-05-27 23:07:47 +08:00
t8y2 9b702b86bf fix(object-browser): respect sidebarActivation double-click mode using event.detail 2026-05-27 22:45:21 +08:00
t8y2 634e8bf5ac feat(sqlserver): enable table structure editing for existing columns and comments
- Enable renameColumn, alterExistingColumn, alterType, alterNullability,
  alterDefault, comment, and indexComment capabilities for SQL Server
- Implement build_sqlserver_existing_column_sql() with sp_rename for column
  rename, ALTER TABLE ALTER COLUMN for type/nullability changes, and dynamic
  SQL for default constraint management
- Add sp_addextendedproperty/sp_dropextendedproperty DDL generation for table,
  column, and index comments
- Fetch table and column comments from sys.extended_properties via OUTER APPLY
  in list_tables, list_objects, and get_columns SQL queries
- Fix table comment placeholder text (was showing column comment placeholder)
2026-05-27 22:28:31 +08:00
t8y2 c9e390e0ce fix(ui): show red dot indicator on driver management tabs with pending updates
Add a small red dot badge on the "内置驱动" and "JDBC 驱动" tabs when
they have available updates, so users can immediately see which tab
needs attention without opening the dialog first.
2026-05-27 18:54:15 +08:00
t8y2 98b1fbb204 fix(transfer): add schema selectors for schema-aware databases like PostgreSQL
Previously the transfer dialog auto-detected schema (always picking "public"
or the first one), which prevented users from selecting tables in other
schemas. Now schema-aware databases show a schema dropdown for both source
and target.

Closes #485
2026-05-27 18:44:43 +08:00
t8y2 76409d3313 fix(editor): preserve snippet settings edits and polish completion UI 2026-05-27 17:46:17 +08:00
t8y2 915728ebec fix(editor): refresh SQL snippet completion after settings changes 2026-05-27 17:46:16 +08:00
t8y2 f0be94096c fix: exclude disconnected connections from sidebar search results 2026-05-27 16:34:49 +08:00
t8y2 49dc85267a feat: add setting to hide table comments in sidebar tree 2026-05-27 16:23:58 +08:00
t8y2 68c8a5cc7b fix: fix value editor scrolling and add selection highlight
- Fix value editor not scrollable when content exceeds container
  (overflow-hidden -> overflow-auto)
- Extract vscodeSelectionLayer from QueryEditor into shared module
  and apply to value editor for consistent selection highlighting
2026-05-27 16:05:30 +08:00
t8y2 84e2093b82 fix(hana): allow empty database context 2026-05-27 15:53:05 +08:00
t8y2 dafed47b07 fix: improve database error message extraction for queries
- frontend: use e.message instead of String(e) in toErrorResult to avoid
  "Error: " prefix for HTTP-mode errors, matching connectionErrorMessage
- frontend: apply same fix to MongoDocBrowser error display
- backend(postgres): use pg_error_to_string across all query execution
  paths (execute, execute_batch, copy_out, copy_in) to extract DbError
  details instead of generic transport-layer errors

Other databases (MySQL, SQL Server, SQLite, DuckDB) already include
server-level error details in their native Error::to_string().
2026-05-27 15:40:28 +08:00
t8y2 5c47885a88 fix(editor): fix Cmd+Enter not executing SQL and Enter adding unwanted indent
- Move executeSql and saveSql keybindings to Prec.high to override
  defaultKeymap's Mod-Enter (insertBlankLine) and ensure Cmd+Enter
  executes the current query on macOS
- Override Enter key with insertNewlineKeepIndent instead of
  insertNewlineAndIndent to prevent unwanted continuedIndent from
  SQL language mode when breaking lines
2026-05-27 14:59:07 +08:00