Commit Graph
397 Commits
Author SHA1 Message Date
t8y2 8d5c096895 fix(grid): keep row position after commit and preserve dirty cell color
- Don't reload data after committing edits, merge dirty data in place
- Preserve dirty cell yellow highlight when row/cell is selected
- Use original row data for search filtering to prevent row shifting
2026-05-13 22:02:14 +08:00
t8y2 e92f1ccdf5 feat(grid): replace toolbar search with Ctrl+F floating overlay
- Remove always-visible search box from toolbar
- Add floating search overlay triggered by Ctrl+F/Cmd+F
- Highlight matching cells in yellow, current match with ring
- Navigate matches with Enter/Shift+Enter
- Show match count (e.g. 1/5) in overlay
- Escape closes overlay and clears search
- Color WHERE label blue and ORDER BY label orange
2026-05-13 21:41:26 +08:00
t8y2 1eb5b89c17 fix: recognize DM/Dameng connections on Navicat import
Closes #254
2026-05-13 21:04:26 +08:00
t8y2 3803a20d9e fix(h2): add H2 to TREE_SCHEMA_TYPES for correct sidebar structure
H2 uses schemas (PUBLIC) so the sidebar needs the schema layer to
generate correct qualified table names in SQL queries.
2026-05-13 20:56:01 +08:00
t8y2 7f19a0376a fix(trino): support schema-aware table browsing and inserts 2026-05-13 20:46:27 +08:00
t8y2 2ba97869a1 fix(hive): gate row edits by transactional support 2026-05-13 20:17:15 +08:00
t8y2 ea6b2bb36c fix(hive): allow non-transactional grid edits 2026-05-13 20:04:42 +08:00
t8y2 3eb00b7fe2 fix(hive): quote table queries with backticks 2026-05-13 19:55:48 +08:00
t8y2 0172ee50be fix(neo4j): support table querying and editing 2026-05-13 19:30:00 +08:00
t8y2 2f4c50dc1e fix(mongo): refresh JSON viewer after document edit
The right-side JSON viewer was not updating after saving edits because
editJson was stale — only load() was called, which updates the document
list but not the displayed JSON preview.
2026-05-13 19:08:22 +08:00
skyler a4ad5cd08b Merge pull request #252 from Abeautifulsnow/feat/grid-export-selected-rows
feat(grid): add export selected rows and batch restore
2026-05-13 18:35:17 +08:00
t8y2 cb00b27963 fix(sidebar): refresh grouped object nodes 2026-05-13 18:12:55 +08:00
runstone 2b29780c76 feat(grid): add export selected rows and batch restore
## 背景说明
恢复导出选中行的功能,并新增批量恢复行功能。用户现在可以在多行选中时,
通过右键菜单或工具栏导出选中的行,同时支持批量恢复已删除的行。

## 修改内容
- exportCsv/exportJson/exportMarkdown/exportXlsx 支持可选 rowIds 参数
- 新增 rowsToExport 辅助函数,根据 rowIds 筛选要导出的行
- 右键菜单和工具栏新增"导出选中行"选项(CSV/XLSX/JSON/Markdown)
- 新增 restoreRows 函数支持批量恢复已删除行
- 更新上下文菜单中恢复行的文案,支持单数/复数切换
- 补充 en/es/zh-CN 三语言国际化文案

## 测试
- 建议补充:导出函数传入特定 rowIds 的筛选逻辑测试
- 建议补充:批量恢复已删除行的单元测试
- 建议补充:多选时状态栏显示边界测试
2026-05-13 18:12:01 +08:00
t8y2 e9158390c1 feat(shortcuts): add search focus shortcut 2026-05-13 17:51:20 +08:00
t8y2 42501cc8fb fix(grid): allow generated insert columns 2026-05-13 17:37:29 +08:00
t8y2 80f33b1460 fix(sql): add sql server completions 2026-05-13 17:11:33 +08:00
t8y2 02b257dd0f fix(history): classify and virtualize entries 2026-05-13 17:07:56 +08:00
t8y2 c28820ef48 fix: make result tabs scrollable when many queries executed (closes #245) 2026-05-13 16:45:06 +08:00
t8y2 f3c5314636 fix: preload schema options when selector becomes visible (closes #244)
Schema dropdown showed an empty horizontal line because data was loaded
lazily on dropdown open, leaving the Reka UI Select with zero items in
popper mode. Eagerly preload via watchEffect when the schema selector
becomes visible so data is ready before the user opens the dropdown.
2026-05-13 16:43:05 +08:00
t8y2 e513c260b5 feat: driver store UX improvements and multi-row range copy
- ESC key closes driver store before closing tabs
- Auto-scroll to driver store tab when opened
- Deactivate query tab highlight when driver store is open
- Support copying range-selected rows as JSON
- Add multiRowCount/isMultiRow computed properties for DataGrid
2026-05-13 16:34:56 +08:00
t8y2 5e30e97be4 fix: driver store scroll and replace installed text with check icon 2026-05-13 16:25:17 +08:00
t8y2 b82c7f9274 feat: multi-row selection with batch clone, delete, and copy support 2026-05-13 16:25:02 +08:00
t8y2 d50da7f1cd feat: Oracle version selector in connection form, JRE install button
- Add Oracle 11g+/10g version dropdown in connection config (driver_profile routing)
- Show JRE version tags on all drivers in driver management
- Add install button for uninstalled JREs
- Fix iconTypeMap for oracle-10g
2026-05-13 16:20:03 +08:00
t8y2 809448a161 feat: multi-JRE support, Oracle 10g driver profile, and JRE uninstall
- Support multiple JRE versions per agent driver (jre-8/, jre-17/)
- Auto-migrate legacy jre/ directory to jre-17/
- Detect macOS Adoptium JRE 8 Contents/Home/ layout
- Route Oracle 10g connections to oracle-10g agent via driver_profile
- Add Oracle 10g option in connection dialog
- Add JRE uninstall with dependency check
- Show per-JRE status and controls in driver management UI
2026-05-13 16:08:00 +08:00
t8y2 b4d1f4b04e perf: eliminate theme switch lag by suppressing CSS transitions
Disable all CSS transitions/animations during theme toggle so color
changes apply instantly instead of animating over 150ms. Also cache
Tauri window module import and set color-scheme for native UI elements.
2026-05-13 16:04:35 +08:00
t8y2 fa0dfc9383 perf: race GitHub proxies concurrently for driver downloads and registry fetch
Replace sequential proxy fallback (up to 30s worst-case) with concurrent
racing via futures::select_ok, returning the first successful response.
Add list_installed_agents_local command for instant UI rendering with
async registry update. Fix missing useToast import in RedisValueViewer.
2026-05-13 14:18:28 +08:00
t8y2 4dc3a1b3c0 feat(redis): add sheet UI components, list set API, and member detail utils
- Add shadcn Sheet UI components for member detail drawer
- Add redisListSet API for editing list items by index
- Add member detail presentation helpers (format, highlight, edit, resize)
- Add tests for redis value presentation
2026-05-13 13:54:59 +08:00
t8y2 90e8bbe757 perf(redis): paginate key scanning, relocate flush DB button
- Replace do-while loop that scanned ALL keys with single-page scan
- Add "Load More" button at bottom for incremental loading
- Move flush DB button from search bar to command line area to reduce
  accidental clicks

Closes #242
2026-05-13 13:50:48 +08:00
t8y2 48785162e3 feat: support schema-qualified table completion in SQL editor
When typing `schema.` in the SQL editor for schema-aware databases
(PostgreSQL, GaussDB, etc.), auto-complete now suggests tables from
that schema. Falls back to schema lookup when the qualifier doesn't
match any table name.

Closes #239
2026-05-13 13:09:22 +08:00
t8y2 24b39bd853 feat: add copy toast feedback for Redis, fix sheet overlay close lag
- Add "已复制" toast for all Redis copy operations (value, member, detail)
- Remove sheet overlay exit animation to fix slow overlay-click close
2026-05-13 12:54:04 +08:00
t8y2 0881d4d966 feat: add toast feedback for connection operations
Add toast notifications for delete, disconnect, duplicate, copy name,
and delete group operations in the sidebar context menu.
2026-05-13 12:35:50 +08:00
t8y2 e87876c923 feat(driver-store): badge-style version/size, refresh button, fix dameng icon
- Show version and size as rounded badges instead of plain text
- Display remote version with amber badge when update available
- Add refresh button to clear registry cache and reload
- Add invalidate_agent_registry_cache Tauri command
- Fix dameng icon mapping (dameng -> dm)
2026-05-13 12:26:56 +08:00
t8y2 02b14d15fc chore: remove unused DriverManager.vue 2026-05-13 11:42:14 +08:00
t8y2 fea3552774 feat: add Redis member detail viewer 2026-05-13 11:12:32 +08:00
t8y2 4d4c8f4224 feat: extract driver management into standalone tab page with registry cache
Move driver management (Agent + JDBC) out of the settings dialog into a
dedicated tab page accessible from the top toolbar. Agent drivers are shown
as a compact horizontal list; JDBC plugin/driver management is on a second
tab. Add 5-minute in-memory cache for the agent registry to avoid repeated
GitHub requests on install/uninstall/refresh operations.
2026-05-13 11:05:21 +08:00
t8y2 047e8fc2f1 fix: filter SQL completion tables 2026-05-13 11:01:59 +08:00
t8y2 b0a808bc14 feat: add system theme mode 2026-05-13 10:48:34 +08:00
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 74ad4369f4 perf(ai): parallelize schema metadata loading for AI context
buildAiContext previously loaded table metadata sequentially in a
for-loop (3 API calls per table × up to 50 tables = 150 serial
round-trips). Now uses Promise.all to fetch all tables' columns,
indexes, and foreign keys concurrently, reducing total wait time
from O(n × latency) to O(latency).
2026-05-13 01:15:59 +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