Commit Graph
291 Commits
Author SHA1 Message Date
t8y2 7ce2cf2163 feat: add 12 new agent-driven databases, migrate GaussDB to agent
Add H2, Snowflake, Trino, Hive, DB2, Informix, Neo4j, Cassandra,
BigQuery, Apache Kylin, SunDB as new agent-driven database types.
Migrate GaussDB from native rust-gaussdb to JDBC agent.

Remove rust-gaussdb dependency. Total agent-driven databases: 17.
2026-05-13 09:47:22 +08:00
t8y2 c50323cd6c feat(agent): migrate Oracle to JDBC agent, add install progress bar and toast
- Migrate Oracle from rust-oracle to JDBC agent (ojdbc11)
- Delete oracle_driver.rs (567 lines) and rust-oracle dependency
- Add streaming download progress bar for driver/JRE installation
- Add toast notifications for install/uninstall success/failure
- Add "update available" badge in driver manager
2026-05-13 09:20:06 +08:00
t8y2 b012ae32f9 feat(connection): show agent driver install hint for domestic databases 2026-05-13 08:52:10 +08:00
t8y2 4c328bd12b style(driver-manager): align UI with JDBC section style 2026-05-13 08:43:59 +08:00
t8y2 2d15e3acb9 refactor: merge JDBC and agent driver tabs into single '驱动' tab 2026-05-13 05:39:52 +08:00
t8y2 70db1eb9a9 chore: remove obsolete DM8 ODBC driver hint from connection dialog 2026-05-13 05:28:58 +08:00
t8y2 bc687cee7f feat(agent): add reinstall JRE button in Driver Manager 2026-05-13 05:05:00 +08:00
t8y2 e85f9df1fe feat(agent): pluggable database drivers via JDBC agent subprocess
Migrate domestic database support (DaMeng, KingBase, Vastbase, GoldenDB) from
built-in ODBC/protocol drivers to standalone Java agent processes communicating
via stdin/stdout JSON-RPC 2.0. Agents are distributed as fat JARs with embedded
JDBC drivers, downloaded on-demand from GitHub Releases with proxy fallback.

- Add AgentDriverClient for subprocess lifecycle + JSON-RPC communication
- Add AgentManager for JRE/JAR install state management
- Add Tauri commands for driver install/uninstall/list
- Add DriverManager UI panel in settings dialog
- Extend DatabaseType with Kingbase, Vastbase, Goldendb variants
- Migrate Dameng from ODBC (dm_driver.rs) to JDBC agent
- Delete dm_driver.rs (343 lines)
- Add GitHub proxy fallback for downloads (update.hwdns.net, gh-proxy.org)

Agent code lives at https://github.com/t8y2/dbx-agents
2026-05-13 04:44:52 +08:00
t8y2 9ba2976d11 feat: export entire database as SQL file
Add a new "Export Database" feature accessible from the sidebar
right-click menu on database/schema nodes. Generates a .sql file
containing CREATE TABLE DDL, batched INSERT statements, and
view/procedure/function source code.

Backend (database_export.rs):
- Stream-writes SQL to file with configurable batch size
- Supports all SQL database types via existing DDL/INSERT generators
- Progress events with cancellation support
- Graceful error handling (continues on per-table failures)

Frontend (DatabaseExportDialog.vue):
- Connection/database/schema selector
- Checkboxes: structure, data, objects
- Real-time progress with current table and row count
- Cancel button

Wired up through Tauri commands, Web SSE routes, and API layer.
2026-05-13 01:08:16 +08:00
t8y2 965f529b77 feat(diff): selective sync, swap button, and execution progress
Schema Compare:
- Add checkbox per diff item for selective sync (with select-all)
- SQL preview now reactively updates based on checked items
- Add swap button to exchange source↔target
- Execute sync now runs statement-by-statement with progress indicator
- Show detailed error report for failed statements

Data Compare:
- Add swap button to exchange source↔target
- Execute sync now runs statement-by-statement with progress indicator
- Show error summary and per-statement failures
2026-05-13 00:15:48 +08:00
t8y2 004b5645c5 feat(grid): support multi-row Copy as INSERT
When multiple rows are selected, copyRowAsInsert now generates an
INSERT statement for each selected row instead of only the
right-clicked row.

Closes #166
2026-05-12 23:39:26 +08:00
t8y2 e1a07aae4a fix(grid): sync WHERE filter input to tab store on every keystroke
The previous fix (8032c63) only persisted whereInput when the user
triggered reload/paginate/sort. Typing a condition and switching tabs
without executing still lost it because the local ref was destroyed
on component unmount.

Emit update:whereInput on every change so ContentArea writes the
value to activeTab.whereInput immediately.

Fixes #232
2026-05-12 23:05:29 +08:00
t8y2 ee0b2312da fix(sidebar): sort search results by match score
Exact and prefix matches now rank above substring and fuzzy matches
so searching for e.g. "core_flow" puts the exact table at the top
instead of burying it behind partial hits.
2026-05-12 18:02:47 +08:00
t8y2 908f2cfaa5 feat(sidebar): show tooltip on truncated names and enable horizontal scroll (closes #231)
Add a shadcn-vue Tooltip to tree nodes that only activates when the
label text is truncated. Enable horizontal scrolling on the sidebar
tree container for deeply nested long names.
2026-05-12 17:57:44 +08:00
t8y2 1380cfe04e feat(toolbar): add Compare Databases and Compare Data buttons
Expose Schema Diff and Data Compare dialogs from the top toolbar
so they can be opened without pre-selecting a connection in the
sidebar. Connections are chosen inside the dialog.
2026-05-12 17:38:13 +08:00
t8y2 bf58045a28 Revert "feat(cli): add dbx-cli runtime and agent integration (#229)"
This reverts commit 58c47adef5, reversing
changes made to 3bcec8ef7f.
2026-05-12 17:31:54 +08:00
skyler 58c47adef5 feat(cli): add dbx-cli runtime and agent integration (#229)
Feature/dbx cli runtime
2026-05-12 17:22:36 +08:00
t8y2 3bcec8ef7f feat(grid): highlight active row and add first/last page buttons
- Highlight the row containing the selected cell with a subtle
  primary-color tint so the active row is easy to spot.
- Add first-page (« ) and last-page (») pagination buttons.
  Last-page runs a COUNT(*) query to calculate the final page offset.
2026-05-12 17:16:37 +08:00
t8y2 4f48ddc823 feat(grid): add first-page and last-page pagination buttons
Add « and » buttons to the pagination bar. First-page jumps to page 1.
Last-page runs a COUNT(*) query to calculate total pages, then jumps
to the final page.
2026-05-12 17:09:20 +08:00
Illuminated2020 ef83cedfb4 fix: adapt cli runtime branch after rebase 2026-05-12 17:04:18 +08:00
Illuminated2020 780311a542 feat(agent-runtime): 接入 handoff 审阅状态
- 支持 handoff queued/shown 状态加载、mark shown 和 reject 持久化

- 为 Tauri/API/Pinia store 接入 handoff 审阅状态流转

- 新增 AgentHandoffDialog 审阅 UI,拒绝操作不执行 SQL
2026-05-12 16:52:34 +08:00
Illuminated2020 c144330d79 feat(runtime): 同步前端状态到 agent runtime
- 新增 snapshot 构造 helper 和 agent runtime store

- 同步 active tab、连接、库、schema、SQL、选中 SQL、表格选择和结果采样

- 补充 snapshot payload 组装测试
2026-05-12 16:51:34 +08:00
t8y2 99439c143b feat(grid): add Clone Row to row context menu (closes #227)
Copy the selected row as a new row with primary key columns set to
null so auto-increment values are generated on save.
2026-05-12 16:36:05 +08:00
t8y2 01c4b744ef fix(updater): show real app version and release notes 2026-05-12 15:15:46 +08:00
t8y2 45e67fae6e feat(jdbc): support SSH tunnel and proxy for JDBC connections
Parse host:port from JDBC URLs and rewrite them when an SSH or proxy
tunnel is active, so the Java plugin connects through the local
forwarded port. Enable the SSH/Proxy tabs in the connection dialog
for JDBC.
2026-05-12 14:53:45 +08:00
t8y2 53a45330a6 feat(sidebar): group objects by type and add Object Browser context menus (#222)
Sidebar tree now groups database objects into Tables, Views, Procedures,
and Functions folders instead of a flat list. Empty groups are hidden
and each group shows its item count.

Object Browser rows now have right-click context menus with actions
like View Data, New Query, View Source, and Drop.
2026-05-12 14:33:52 +08:00
t8y2 03cc4ba80a fix(grid): refine data grid toolbar layout 2026-05-12 14:05:03 +08:00
t8y2 9463ff07a7 fix(grid): preserve page size when reloading data after save
The reload event did not carry limit/offset, so buildTableSelectSql
always fell back to its default LIMIT 100, resetting 1000-row pages
back to 100 after every commit.
2026-05-12 13:55:15 +08:00
t8y2 78184544cf perf(grid): optimize virtual scroll to reduce white flash during fast scrolling
Add buffer, skip-hover, will-change, and CSS contain properties to all
RecycleScroller instances (DataGrid, ConnectionTree, ObjectBrowser,
RedisKeyBrowser). Disable pointer-events during scroll in DataGrid to
reduce repaint overhead.
2026-05-12 13:50:03 +08:00
t8y2 368fa5a102 feat(redis): add bulk operations and command runner 2026-05-12 13:38:43 +08:00
t8y2 f2e8b49df7 feat(settings): improve settings dialog links 2026-05-12 13:02:36 +08:00
skyler 30f9b4ab8c Merge pull request #224 from Abeautifulsnow/fix/db-placement-copy
feat(connection): 为不同数据库类型展示各自对应的 connection URL placeholder
2026-05-12 10:58:26 +08:00
runstone 3652db8fa3 feat(connection): 为不同数据库类型展示各自对应的 connection URL placeholder
## 修改内容
- 新增 connectionUrlPlaceholder 纯函数于 connectionPresentation.ts,根据 db_type 返回对应 URL 格式
- ConnectionDialog.vue 中引用该函数替换原有统一的 i18n placeholder
- 新增 20 个单元测试覆盖所有数据库类型及边界场景
2026-05-12 10:21:19 +08:00
rarnu 4f0a13f24f add: 为AI设置增加了thinking的开关 2026-05-12 01:16:40 +08:00
rarnu c18593d003 add: 修改布局方案中选中项的样式为浅蓝色(与AI内API选项的样式一致) 2026-05-11 23:33:27 +08:00
rarnu e8ab15140a add: 将AI大模型的设置移至设置页 2026-05-11 23:25:27 +08:00
Abeautifulsnow dddb813fc6 refactor(grid): 提取 cellValue 格式化到共享模块并增加测试 (#218)
将 CellValue 类型和 displayCellValue(原 formatCell)提取到
src/lib/cellValue.ts,DataGrid.vue 和 useDataGridExport.ts 统一引用,
移除 composable 中冗余的 formatCell 参数传递。
2026-05-11 18:56:08 +08:00
t8y2 e4c1d6639b fix(sidebar): 保持表列表滚动显示 2026-05-11 17:15:36 +08:00
t8y2 cab0e79dad fix(oracle): 修复表数据加载与编辑 2026-05-11 16:35:59 +08:00
t8y2 79277c660f feat(proxy): 增加数据库和 AI 代理支持 2026-05-11 15:05:25 +08:00
Alexandr 1d5a2b2220 Fixed single quotes causing build failures (#214)
* i18n for redis key browser;

* Fixed single quotes causing build failures
2026-05-11 13:49:10 +08:00
Alexandr 6de801557a i18n for redis key browser; (#213) 2026-05-11 13:26:28 +08:00
t8y2 39f33e15d4 fix(sidebar): allow search to find tables hidden behind object browser
When a database has more than 15 tables, only the first 15 are shown
in the tree with an "object browser" entry for the rest. The sidebar
search could not find tables beyond the first 15.

Store hidden table nodes on the object-browser TreeNode and search
through them in filterTree when a query is active.
2026-05-11 13:21:19 +08:00
t8y2 7c38af6cbb fix(oracle): speed up schema diff and add comment sync (closes #198)
- Replace ALL_OBJECTS with ALL_TABLES UNION ALL_VIEWS in list_databases
  query to avoid slow full scan on large Oracle instances
- Add loading indicator in SchemaDiffDialog during database/schema loading
- Generate COMMENT ON TABLE/COLUMN statements in schema diff sync SQL
- Compare column and table comments in diff detection
2026-05-11 12:59:07 +08:00
t8y2 1934205c86 feat(grid): add LIKE, NOT LIKE, <, > context menu filters
Add four new filter options to the right-click context menu in table
data view: contains (LIKE), does not contain (NOT LIKE), less than (<),
and greater than (>). Includes en/zh-CN/es translations.
2026-05-11 12:39:31 +08:00
t8y2 1b0c17315b feat(i18n): replace locale toggle with dropdown menu and country flags
Replace the single-click locale cycle button with a dropdown menu
showing all available languages with their country flag emoji.
Locale switching logic moved from App.vue into AppToolbar.vue.
2026-05-11 12:30:04 +08:00
t8y2 8032c63727 fix(grid): persist WHERE filter input across tab switches (closes #210)
whereFilterInput was a component-local ref that got lost when switching
tabs because DataGrid is destroyed and recreated via :key binding.

Store whereInput in the QueryTab state and pass it as initialWhereInput
prop so it survives tab switches.
2026-05-11 12:24:08 +08:00
t8y2 cb70625bd8 fix(objects): save SQL Server object source definitions 2026-05-11 12:17:18 +08:00
t8y2 03bea705e7 feat(objects): edit database object source 2026-05-11 11:48:46 +08:00
t8y2 f588e03a6b fix(sidebar): require double click to open object browser 2026-05-11 11:03:18 +08:00