Commit Graph
114 Commits
Author SHA1 Message Date
t8y2 ea19a24ec6 fix(mysql): retry without ssl on TLS close 2026-05-20 10:42:20 +08:00
t8y2 f84335e986 fix(elasticsearch): parse aggregation query results into table format (#344)
Previously, aggregation queries (date_histogram, terms, etc.) with
`size: 0` returned empty results because the empty hits array was
matched but contained no documents, ignoring the aggregations data.
2026-05-20 10:12:20 +08:00
yavon007 b9bcb90ac7 fix(mysql): avoid metadata collation conflicts (#341)
Split MySQL column and primary key metadata lookups so MariaDB and OceanBase do not join information_schema tables with incompatible collations.
2026-05-20 01:22:46 +08:00
t8y2 e8cbe6bbf0 fix(mysql): add COLLATE to get_columns JOIN for OceanBase compatibility
OceanBase MySQL mode uses different collations for information_schema
tables, causing "Illegal mix of collations" when joining COLUMNS with
KEY_COLUMN_USAGE. Explicit COLLATE utf8mb4_general_ci resolves this.

Closes #337
2026-05-19 18:36:47 +08:00
t8y2 2ebd72ab6d refactor(agent): retain handshake capabilities 2026-05-19 16:07:25 +08:00
t8y2 fa2e710a7b test(agent): validate protocol contract 2026-05-19 16:05:25 +08:00
t8y2 077aaa5c06 refactor(agent): wrap remaining protocol calls 2026-05-19 15:54:57 +08:00
t8y2 a8f717b3f6 refactor(agent): wrap mongo legacy calls 2026-05-19 15:49:22 +08:00
t8y2 6896b2f879 refactor(agent): wrap schema and query calls 2026-05-19 15:44:23 +08:00
t8y2 5ce6a08f05 refactor(agent): route core calls through protocol methods 2026-05-19 15:38:03 +08:00
t8y2 7c1a0c8076 refactor(agent): define protocol capabilities 2026-05-19 15:31:40 +08:00
t8y2 5df7fbf062 feat(agent): add compatible driver handshake 2026-05-19 15:17:21 +08:00
t8y2 69ee7f2d8b fix(structure): initialize dialogs and edit clickhouse columns 2026-05-19 13:31:42 +08:00
t8y2 bae487867b feat(connection): support in-memory sqlite and duckdb 2026-05-19 11:33:17 +08:00
t8y2 261d43c1b7 fix(grid): respect page size row limits 2026-05-19 11:31:38 +08:00
t8y2 95d70eede6 fix(agent): ignore ambient proxy settings 2026-05-19 11:03:35 +08:00
t8y2 8a81a01fac feat(redis): stream value search results 2026-05-18 21:55:16 +08:00
t8y2 ea5e15612f feat(redis): search keys by value 2026-05-18 21:27:47 +08:00
t8y2 c137553d07 fix(mysql): run management show commands via text protocol 2026-05-18 20:48:46 +08:00
t8y2 90017d3dd1 fix(docs): keep deploy config scoped 2026-05-18 20:23:17 +08:00
t8y2 2c1b0e2b83 fix(docs): remove unsupported pages assets config 2026-05-18 20:22:36 +08:00
t8y2 a30c87bb6e fix(sqlserver): stream query results before truncating 2026-05-18 17:14:50 +08:00
t8y2 d7c4d3ef19 fix(oracle): disable agent Java NIO networking 2026-05-18 16:13:41 +08:00
t8y2 57dea3cb6d feat(drivers): add JDBC quirks and RedisJSON previews 2026-05-18 14:07:14 +08:00
t8y2 489d7ae919 fix(sqlserver): load table structure metadata 2026-05-17 20:10:21 +08:00
t8y2 dec3b7c116 fix(schema): list routines in object browser 2026-05-17 10:36:55 +08:00
t8y2 f4566221b1 feat(query): add paged result fetching 2026-05-17 00:10:18 +08:00
t8y2 38eba3956c fix(mysql): return rows for with queries 2026-05-15 18:33:32 +08:00
t8y2 901976bdac fix(mysql): auto fallback to ssl-mode=disabled on TLS handshake failure
MySQL 5.7 servers with older TLS versions (1.0/1.1) cause HandshakeFailure
when ssl-mode=preferred because the underlying TLS library requires 1.2+.
Now automatically retries with ssl-mode=disabled when handshake fails.

Closes #273
2026-05-15 00:23:19 +08:00
t8y2 6f1161e8a8 fix: add oracle.net.disableOob=true to agent JVM args for Oracle 19c compatibility
Oracle JDBC driver's Out-of-Band Break mechanism hangs on JDK 17+
due to stricter TCP Urgent Data handling. Disabling OOB resolves
connection timeouts with Oracle 19c.
2026-05-15 00:19:38 +08:00
t8y2 b6c88d7b65 feat: add persistent selected node highlight in sidebar tree
- Track selectedTreeNodeId in connection store
- Highlight any clicked tree node with focused (blue) / unfocused (gray) styles
- Use CSS :focus-within for automatic focus state switching
2026-05-14 21:52:06 +08:00
t8y2 bb766228e6 fix: use SELECT 1 for ClickHouse connection test and check response status 2026-05-14 20:58:08 +08:00
Abeautifulsnow 919c3d58c1 feat(redis): add key statistics tracking for database browser (#269)
## 背景说明
为 Redis 数据库浏览器增加键统计功能,显示已加载 key 数/总 key 数,
并在动态加载、删除、清空时实时更新。

## 修改内容
- 新增 \RedisDatabaseInfo\ 结构体(db + keys),替代原来的 \Vec<u32>\
- \list_databases\ 返回每个 db 的 key 数量(解析 INFO keyspace)
- \scan_keys_page\ 增加 DBSIZE 调用获取 total_keys
- 前端 TreeNode 增加 loadedKeyCount/totalKeyCount 字段
- 树节点标签动态显示 \db0 (loaded/total)\ 格式
- 新增 \updateRedisDbKeyStats\ 在加载/删除/清空时更新统计

## 测试
- 建议补充 list_keyspace_databases 解析异常输入的单测
- 建议补充 redisDbLabel 边界值测试
2026-05-14 16:24:46 +08:00
t8y2 1e8ce6673f fix(postgres): use pg_catalog instead of information_schema for table/schema listing
information_schema views apply permission filtering that causes empty
results on openGauss/GaussDB for non-owner users. Switching to pg_catalog
(pg_class + pg_namespace) matches the behavior of Navicat and DataGrip.
2026-05-14 15:14:07 +08:00
t8y2 88ad579a27 feat(mongo): add filter/sort support and fix table view editing
- Add filter and sort parameters to MongoDB find_documents across the
  full stack (driver, ops, tauri cmd, web routes, frontend API)
- Add find/sort input bar to MongoDocBrowser table view via DataGrid
  search-bar slot, matching WHERE/ORDER BY positioning
- Fix table view editing: allow cell editing when customSave is provided
  (bypasses primary key requirement for MongoDB)
- Fix replace_one WriteError 66 by removing _id from replacement doc
- Align action buttons (refresh, add row, commit) to the right in grid
2026-05-14 14:43:26 +08:00
t8y2 12fec968fe fix(grid): remove WHERE and ORDER BY input placeholders 2026-05-14 14:05:22 +08:00
t8y2 3c0d0fbad9 fix(postgres): sync client timezone on connect
Set PostgreSQL session timezone to the client's local timezone via
after_connect, matching Navicat's behavior. (closes #262)
2026-05-14 11:34:27 +08:00
yavon007 eefa054778 perf(redis): speed up key browser scans (#256) 2026-05-14 02:21:53 +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 f3093ab91f fix(agent): tolerate non-utf8 driver output 2026-05-13 19:39:31 +08:00
t8y2 9dd184a26b fix(sqlserver): decode tinyint and datetime values 2026-05-13 17:33:30 +08:00
t8y2 adb320192a perf: add JVM flags for faster agent cold start
Use -XX:TieredStopAtLevel=1 and -XX:+UseSerialGC to skip C2
compilation and reduce GC init overhead on agent process startup.
2026-05-13 16:33:39 +08:00
t8y2 321ebc2636 fix: support HTTPS and self-signed certs for Elasticsearch connections
ES 8.x enables HTTPS with self-signed certs by default. When SSL is
toggled on, use https:// scheme and accept invalid certificates.

Closes #234
2026-05-13 14:07:01 +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 047e8fc2f1 fix: filter SQL completion tables 2026-05-13 11:01:59 +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 26245514bb refactor: remove ODBC dependency entirely
DaMeng now uses JDBC agent instead of ODBC. Remove odbc-api crate,
ODBC_ENV static, unixodbc system dependency from CI, and ODBC library
bundling from macOS release builds. macOS no longer needs any brew
dependencies for development.
2026-05-13 05:27:56 +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 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