Commit Graph
104 Commits
Author SHA1 Message Date
haipengno1 cee8cbb95a feat(sidebar): add copy name to database, schema and connection-group context menu 2026-06-11 22:16:13 +08:00
t8y2 a9882d5312 feat(sidebar): show table comments on hover 2026-06-11 15:09:56 +08:00
t8y2 26d714909e feat(elasticsearch): model indices as first-class nodes 2026-06-11 12:52:47 +08:00
SuLea-IT 806d7c758b feat: add SQL library history query entry points 2026-06-11 10:53:54 +08:00
Abeautifulsnow 1ca3081c2f feat(ui): add readonly mode visual badge to sidebar and tab bar
Add visual indicators so users can distinguish readonly connections from
read-write connections at a glance:

- Sidebar: show a lock icon badge on readonly connection nodes
- Tab bar: show a lock icon with tooltip on tabs with readonly connections
- Add isConnectionReadonly() helper in tabPresentation.ts
- Add readOnlyBadge i18n key for all 6 locales (en, zh-CN, zh-TW, es, it, pt-BR)
2026-06-10 15:56:37 +08:00
John Jin 0bd07ccf46 feat: add InfluxDB support (#980) 2026-06-10 14:37:53 +08:00
t8y2 edba8214b5 feat: show username/password fields for Access database connections 2026-06-10 08:37:18 +08:00
t8y2 9ffa4c41d9 feat: add SQL library panel with folder/file management, rename, and sync support 2026-06-10 02:46:10 +08:00
二丫讲梵 41758e6bb1 ✨ feat(connection): 增加可见数据库选择功能 (#944)
感谢 @eryajf 的贡献!此功能允许用户在创建或编辑连接时选择可见的数据库,支持多种数据库类型。
2026-06-09 20:56:39 +08:00
t8y2 a5d9addbf3 feat(ui): show instant tooltips for truncated labels 2026-06-09 17:51:07 +08:00
t8y2 befee2fd4c feat(postgres): support sequence objects 2026-06-08 22:54:14 +08:00
t8y2 f1a94262b5 feat(user-admin): add database user privilege management 2026-06-08 13:47:56 +08:00
14fa15531f fix(sidebar): multi-select drag, blank-click deselect, empty-group-name (#681) (#823)
Three independent connection-list bugs:

1. Multi-select drag only moved one row. The drag system tracks a single
   draggedId and ignored selectedTreeNodeIds. The drop callback now expands
   to the full selection when the grabbed row is part of it, and the store
   gains reorderSidebarEntries() to move them together.

2. Clicking the blank tree area didn't clear the selection (notably in
   double-click activation mode). Row clicks now stopPropagation and the
   tree containers clear the selection on click, so only blank clicks reset.

3. Creating a group then submitting an empty name dissolved ALL groups.
   Enter (@keydown.enter) and the following @blur both fired finishRenameGroup;
   the first call rebuilt the tree and recycled props.node onto another group,
   so the second deleted the wrong one, cascading. Guard against double
   invocation and treat an empty name as a cancel (never delete here — deleting
   a group stays in the context menu).

Verified end-to-end on the web build: multi-select drag nests both
connections under the group; blank-click clears selection; empty-name Enter
keeps all groups intact. pnpm check is green.

Co-authored-by: vrustx <vrustx@vrustxdeMac-mini.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 02:09:26 +08:00
094dfb1f06 fix(sidebar): locate-in-sidebar reaches the table after a stale tree cache (#715) (#822)
After an app update (typically >15min since last use), the on-disk schema
tree cache is past its TTL and counts as stale. When "locate in sidebar"
loads the connection's databases, the stale cache is served synchronously
and an async `refreshStaleTreeNode` fires in the background; that refresh
replaces the database node with a fresh one whose tables haven't loaded
yet, evicting the node that locate just populated. By the time
`findNodePathForActiveTab` runs, the target table isn't in the tree, so
locate only reaches the database. After a restart the cache is fresh, no
refresh races, and locate works — matching the report.

Make `ensureTreeLoadedForTab` accept `{ force }` (loads everything via
awaited calls, bypassing the stale-cache fire-and-forget path) and, in
`locateActiveTabInSidebar`, retry once with force when the first
`findNodePath` misses. Fresh-cache locates still succeed on the first
pass and never force (no regression); `refreshStaleTreeNode` is untouched.

Co-authored-by: vrustx <vrustx@vrustxdeMac-mini.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 01:08:23 +08:00
t8y2 e6062b2b07 feat(etcd): add agent-backed etcd support 2026-06-08 00:58:42 +08:00
t8y2 7bd8d29a79 feat(sidebar): lazily load database object groups 2026-06-07 23:44:40 +08:00
Caisinandcaisin 13363b9094 Enable safe multi-connection cleanup from the sidebar (#816)
The sidebar already supports multi-select, so deletion now resolves the context-clicked selected connection set before confirming. Connection removal gained a batched path to persist once while pruning sidebar layout, pins, active state, connection errors, and stale selection for every removed connection.

Constraint: No new dependencies and existing single-connection delete behavior must remain available.\nRejected: Delete every selected tree item regardless of type | mixed tree selections could unexpectedly remove connections while table/object deletion has separate SQL confirmation behavior.\nConfidence: high\nScope-risk: narrow\nTested: pnpm fmt; pnpm test; pnpm typecheck; pnpm lint; pnpm build\nNot-tested: Manual desktop UI interaction against a running Tauri window

Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-06-07 16:58:49 +08:00
t8y2 74e19ec6a3 feat(databend): support agent driver 2026-06-07 16:39:22 +08:00
Caisinandcaisin 8c0fe3a6e7 Expose forwarded database port for local testing (#803)
Database connection context menus now show a copy action when the connection has enabled transport layers. The action starts or reuses the ordered transport chain, copies the final local forwarding port, and keeps runtime config cached so later disconnect cleanup can stop the created tunnel.

Constraint: Local testing sometimes needs external tools to connect through DBX's generated proxy/tunnel endpoint

Rejected: Copy full host:port endpoint | user specifically asked for the port and existing tunnel host is always localhost

Rejected: Require an active pool before copying | local test workflows may need the tunnel before opening the DBX connection

Confidence: high

Scope-risk: moderate

Tested: pnpm test -- packages/app-tests/connectionTransport.test.ts (ran full app-tests: 862 passed)

Tested: pnpm typecheck

Tested: pnpm exec oxlint --vue-plugin apps/desktop/src/components/sidebar/TreeItem.vue apps/desktop/src/lib/connectionTransport.ts apps/desktop/src/lib/api.ts apps/desktop/src/lib/tauri.ts apps/desktop/src/lib/http.ts

Tested: cargo check -p dbx-core -p dbx-web

Tested: cargo check -p dbx

Tested: cargo fmt --check --all

Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-06-07 01:00:34 +08:00
t8y2 b226b445d6 fix(export): preserve MySQL bit literals in SQL export 2026-06-06 19:03:21 +08:00
t8y2 44d6f167ea fix: show full tab title immediately when opening table from sidebar
Set tableMeta early so tabDisplayTitle can render the @database suffix
right away instead of waiting for loadTableMeta to complete.
2026-06-06 00:05:13 +08:00
t8y2 ee94157055 fix(desktop): add color fallbacks for legacy webviews 2026-06-05 18:07:11 +08:00
t8y2 a2c9503a3d perf(sidebar): reduce tree selection overhead 2026-06-05 14:30:25 +08:00
t8y2 120566b1fd fix: improve JDBC dialect handling 2026-06-04 19:40:52 +08:00
t8y2 13e2cdde6f feat: add "reuse data tab" setting to avoid opening too many tabs when clicking table names
Add a configurable option in Settings > Navigation to reuse an existing data
tab instead of creating a new one each time a table is clicked in the sidebar.
2026-06-04 13:44:52 +08:00
skyler ff2210e5a4 Merge pull request #702 from DengQingNian/optimize/export-pagination-orderby-batchsize
perf(ui): 优化数据导出的ui体验和性能
2026-06-03 21:42:38 +08:00
t8y2 2183c370dc fix(export): handle table export edge cases 2026-06-03 21:41:16 +08:00
t8y2 4d50af05fd fix(sidebar): keep connection search results visible 2026-06-03 20:52:57 +08:00
dqn 4a12a575ed perf(ui): 优化数据导出的ui体验和性能 2026-06-03 20:19:25 +08:00
dqn 57c936bf8e fix(desktop): swap import/export icons for data/database context menu items
Import now uses Download icon and Export uses Upload icon (they were
reversed), consistent with the connection import/export icon fix.
2026-06-03 15:35:37 +08:00
t8y2 e67894bea7 chore: upgrade frontend tooling and speed up checks 2026-06-03 12:20:27 +08:00
bea3b45fd8 perf(export): 优化导出ui体验和性能
* docs(getting-started): set brew upgrade to use official homebrew cask

* fix(mysql): make admin show handling dialect aware

* fix(data-compare): create missing target tables during sync

* feat(sql): suggest join conditions from foreign keys

* fix(sidebar): use filtered order for range selection

* fix(tabs): close connection tabs on disconnect

* fix(sqlserver): execute cte queries without wrapping

* fix(opengauss): open table structure editor

* perf(export): 优化导出ui体验和性能

* perf(export): 优化导出ui体验和性能

* fix(export): normalize status casing and fix web route issues

- Add missing table export web routes (POST /export/table, SSE progress, cancel)
- Fix tauri table export Promise to wait for terminal events
- Change cancel to return Ok(()) so it doesn't get overwritten as Error
- Unify ExportStatus to PascalCase across all frontend components
- Fix http.ts table export POST body wrapping
- Fix duplicate pub mod in dbx-web routes

* fix(export): return export file for browser download in web mode

Write table export output to temp dir, register a download endpoint,
and trigger browser download from the frontend when export completes.

* fix(export): avoid table export progress races

---------

Co-authored-by: Francesco Lucarelli <francesco06lucarelli@gmail.com>
Co-authored-by: t8y2 <1156263951@qq.com>
Co-authored-by: dqn <someonegdeng@qq.com>
2026-06-03 10:39:11 +08:00
t8y2 30cd447e4f perf(export): stream table CSV from Rust 2026-06-02 23:00:58 +08:00
t8y2 ccaa50e36b fix(query): honor connection timeout during exports 2026-06-02 19:38:21 +08:00
t8y2 2bdbcec65b fix(grid): keep column comments when opening filtered tables 2026-06-02 19:28:17 +08:00
t8y2 2ff4a3fd97 fix(tabs): close connection tabs on disconnect 2026-06-02 18:19:28 +08:00
t8y2 53239d91fb fix(sidebar): use filtered order for range selection 2026-06-02 18:13:13 +08:00
t8y2 2d4c489a31 fix(sidebar): show close database action for empty databases 2026-06-02 10:45:08 +08:00
t8y2 90c618dac6 feat(desktop): add create actions to tree groups 2026-06-02 02:10:49 +08:00
t8y2 0d89ee3fe9 feat(desktop): paste copied tree table as clone 2026-06-02 02:06:36 +08:00
t8y2 e6b8cf8a5b feat(desktop): add tree menu shortcuts 2026-06-02 01:51:25 +08:00
t8y2 ec5aa7a92b feat(desktop): copy table structure as documents 2026-06-02 01:45:20 +08:00
t8y2 36923fa581 fix(desktop): keep saving structure export sql 2026-06-02 01:24:19 +08:00
t8y2 6dee9705d9 feat(desktop): support tree multi-select actions 2026-06-02 01:19:14 +08:00
t8y2 ac7a5b7576 feat(desktop): drop tree schema objects 2026-06-02 00:33:58 +08:00
t8y2 088eaccecc fix(desktop): copy parent name for tree group nodes 2026-06-02 00:00:07 +08:00
t8y2 b4c469a69f fix(desktop): close database tabs with connection 2026-06-01 20:21:42 +08:00
t8y2 7eca75b325 feat: support Oracle package sources 2026-06-01 18:43:20 +08:00
t8y2 ce411f27e9 fix(sidebar): reorder connection toolbar actions 2026-06-01 13:55:55 +08:00
t8y2 7ab7b8e0f3 feat(objects): add procedure execution dialog 2026-06-01 13:37:57 +08:00