Commit Graph

1866 Commits

Author SHA1 Message Date
t8y2 01975cf1ba fix(ci): replace gh CLI with native fetch for GraphQL calls to avoid auth loss 2026-06-11 00:23:55 +08:00
t8y2 9504947702 fix(ci): use separate PROJECT_TOKEN for project operations, GITHUB_TOKEN for repo queries 2026-06-10 23:58:19 +08:00
t8y2 1adfa5d9f8 feat(ci): add Project Triage automation workflow and script 2026-06-10 23:54:43 +08:00
miracle 871fc57c52
[Enhance] add comments in SQL Server DDL output (#1017)
Thanks!
2026-06-10 22:49:42 +08:00
Scars 215b0cf7d4
fix(desktop): show horizontal data grid scrollbar (#1018) 2026-06-10 22:35:38 +08:00
t8y2 9793dc94b7 feat(driver): centralize database capabilities 2026-06-10 22:12:44 +08:00
t8y2 8f92eeb638 fix(core): guard BIT literal formatting behind MySQL-compatible db_type 2026-06-10 21:54:10 +08:00
echocde 4389de386d
fix(core): properly format MySQL BIT type values as binary literals in export/transfer
Thanks for the fix!
2026-06-10 21:53:02 +08:00
t8y2 3f58526df8 fix(mcp): add back use std::env, use compile-time #[cfg] for locate_mcp_bin 2026-06-10 21:31:52 +08:00
Doracoin 7234d9ebd3
fix(desktop): Improve shell Node detection for MCP startup
Thanks for the detailed investigation and fix!
2026-06-10 21:30:44 +08:00
t8y2 9f0dae1754 fix(grid): preserve table filter builder state 2026-06-10 20:08:18 +08:00
t8y2 20622bc762 fix: resolve clippy warnings and missing redis_key_separator field 2026-06-10 20:05:20 +08:00
t8y2 a5e1a64247 refactor(sql): split dialect helpers 2026-06-10 19:53:36 +08:00
t8y2 166f238191 refactor(table-structure): split SQL builders 2026-06-10 19:42:55 +08:00
t8y2 e3b4aac84c fix(desktop): tighten frontend transitions 2026-06-10 19:20:30 +08:00
t8y2 33ab7aeae6 refactor(schema): split metadata providers 2026-06-10 19:10:53 +08:00
t8y2 27aef6059d feat(docs): add contributors wall to landing page 2026-06-10 19:03:04 +08:00
t8y2 b6d92f8c38 feat: make duckdb optional behind duckdb-bundled feature 2026-06-10 18:30:14 +08:00
t8y2 7a0f89d3ad fix(jdbc): use schema tree for inferred db2 2026-06-10 18:19:53 +08:00
t8y2 d353d4673f feat(redis): add configurable key namespace separator 2026-06-10 17:46:48 +08:00
Scars 14d11a9933
fix(desktop): prevent app layout from shifting on editor focus 2026-06-10 17:01:31 +08:00
t8y2 16e404854a fix: add influxdb to connection type description 2026-06-10 17:01:07 +08:00
t8y2 c4839b6d13 fix(sql-library): use string compare instead of extname for import folder 2026-06-10 16:49:47 +08:00
t8y2 ca1d420d91 feat(grid): add enum column select editor for MySQL 2026-06-10 16:39:24 +08:00
t8y2 f10d152c53 feat: add table structure editing support for 6 missing SQL databases 2026-06-10 16:17:59 +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
Scars cb6c09e346
fix(desktop): add scrollable query result tabs (#986)
Thanks for the contribution!
2026-06-10 15:13:17 +08:00
t8y2 8a458f1432 fix: add InfluxDB to agent catalog and bridge types 2026-06-10 14:46:08 +08:00
John Jin 0bd07ccf46
feat: add InfluxDB support (#980) 2026-06-10 14:37:53 +08:00
t8y2 c13efc65f8 fix(connect): support informix-sqli JDBC URL parsing 2026-06-10 14:26:50 +08:00
github-actions[bot] 6152b01ea8 chore(packages): release 0.4.8 [skip node-packages-release] 2026-06-10 05:57:23 +00:00
t8y2 59d2dd7c87 feat: add Homebrew formula for dbx-cli 2026-06-10 13:55:33 +08:00
github-actions[bot] 700e06d57e chore(jdbc): bump plugin version [skip ci] 2026-06-10 05:02:32 +00:00
t8y2 22928c51cc chore(release): bump version to 0.5.31 2026-06-10 13:01:57 +08:00
t8y2 1545224d34 fix: add missing read_only field and resolve clippy warnings 2026-06-10 12:55:39 +08:00
t8y2 e0269a07cc chore(docs): gitignore tsbuildinfo 2026-06-10 12:52:04 +08:00
t8y2 5778f73fac feat(docs): add SoftwareApplication schema, llms.txt, and AI crawler rules 2026-06-10 12:50:43 +08:00
t8y2 500d7c614b fix: resolve vue-tsc type errors in SqlPreviewPanel and DataGrid 2026-06-10 12:41:24 +08:00
t8y2 42a7ecdbed fix(grid): prevent scrollbar flicker during sidebar resize 2026-06-10 12:35:13 +08:00
t8y2 973e9f487a fix(sidebar): match table comments in search 2026-06-10 12:27:26 +08:00
t8y2 8df9484447 feat(ai): support auth methods 2026-06-10 12:14:36 +08:00
t8y2 8599ab8200 feat(data-grid): add SQL preview panel for pending data changes 2026-06-10 12:06:36 +08:00
t8y2 bfec556e9b feat(readonly): add read-only mode for all database connections
- Add read_only field to ConnectionConfig with backward-compatible serde defaults
- SQL classifier with first-keyword + embedded keyword defense layers
- PRAGMA white-listing for safe read-only operations
- Guard all write entry points: SQL, Mongo, Redis, etcd, MCP Bridge
- 16 unit tests covering edge cases (CTE, case insensitivity, string masking)
- 7-language i18n support
- Fast-fail at command/route level before pool creation

Closes #889
2026-06-10 11:58:18 +08:00
t8y2 2f5469ce6d fix(oracle): add listener driver hint 2026-06-10 11:37:45 +08:00
t8y2 b66cd1a0c0 chore: remove issue moderation workflow 2026-06-10 11:17:43 +08:00
t8y2 1032772241 fix(redis): escape asterisk in fuzzy key search pattern 2026-06-10 11:16:29 +08:00
t8y2 410e3bbfcb feat(completion): suggest database qualifiers 2026-06-10 11:08:13 +08:00
runstone a440415e86 feat(readonly): add read-only mode for all database connections
## Background
Add a read-only toggle for database connections that blocks all write
operations (INSERT, UPDATE, DELETE, DROP, etc.) when enabled, allowing
only read queries (SELECT, SHOW, EXPLAIN, etc.). Closes #889.

## Changes

### Data Model
- Added `read_only: bool` field to ConnectionConfig (Rust struct, TS
  interfaces, and ConnectionConfigData deserialization layer)
- Used `#[serde(default, skip_serializing_if = "is_false")]` for
  backward/forward compatibility with existing configs

### Frontend UI
- Added "Read Only" checkbox in connection dialog
- 7-language i18n support (en/es/it/pt-BR/zh-CN/zh-TW)

### SQL Classification (query_execution_sql.rs)
- Added `is_write_sql()` with two-layer defense:
  - Layer 1: First-keyword check (must start with known read keyword)
  - Layer 2: Embedded dangerous keyword detection (catches CTE-wrapped
    writes like `WITH ... AS (DELETE FROM ...)`)
  - `FROM` keyword supported as DuckDB SELECT-less syntax indicator
- Added `check_read_only()` returning descriptive error with connection name
- Added 16 unit tests covering: pure reads/writes, CTE, case insensitivity,
  string literal masking, comment stripping, stored procedure calls, edge cases

### SQL Execution Guards (query.rs / transfer.rs)
- Added `check_read_only_for_connection()` and `_multi()` helper functions
  with lazy name clone (only allocates when read_only is true)
- 6 interception points: `do_execute`, MySQL batch, SQL Server batch,
  DuckDB batch, transaction execution, transfer execution

### Non-SQL Write Guards — Tauri Commands
- Added `ensure_connection_writable()` helper (connection.rs)
- Mongo: 6 write entry points (insert/update/delete, single + batch)
- Redis: 15 write entry points (SET, DEL, HSET, HDEL, LPUSH, LSET, LREM,
  SADD, SREM, ZADD, ZREM, EXPIRE, FLUSHDB, delete_keys, execute_command)
  - execute_command uses RedisCommandSafety classification to allow
    safe read commands through raw command interface
- etcd: 2 write entry points (put, delete)
- sql_file: SQL file execution guarded
- MCP Bridge: 4 write entry points (Insert/Update/Delete/SQL query)

### Non-SQL Write Guards — Web API
- Local `ensure_writable()` helper in each route module
- Redis: 12 write endpoints including classified execute_command
- Mongo: 6 write endpoints
- etcd: 2 write endpoints
- sql_file, table_import, transfer: early rejection

### Test Updates
- Updated ConnectionConfig construction in 7 test files with
  `read_only: false` initialization

## Defense-in-Depth
- Layer 1: Command/Route-level early rejection (saves resources)
- Layer 2: Core SQL classifier (`is_write_sql` — first keyword + embedded scan)
- Layer 3: Core execution-time interception (do_execute/transfer/transaction)
2026-06-10 10:58:52 +08:00
t8y2 3a52d961fc fix(completion): avoid table fallback for aliases 2026-06-10 10:51:41 +08:00
t8y2 dadcc348cb fix(ssh): handle invalid key comment encoding 2026-06-10 10:45:14 +08:00