Commit Graph
1837 Commits
Author SHA1 Message Date
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] packages-v0.4.8 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 v0.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
t8y2 083327a551 fix(redis): preserve asterisk wildcard in fuzzy key search 2026-06-10 10:36:52 +08:00
t8y2 b4e8190b52 fix(sqlite): prevent file launch from overwriting existing connections 2026-06-10 10:32:04 +08:00
t8y2 51fe5de98b fix(shortcuts): allow clearing keyboard shortcuts in settings 2026-06-10 10:25:06 +08:00
t8y2 ed6d275ca2 fix: remove turso integration tests that hardcode unreachable server 2026-06-10 09:57:27 +08:00
t8y2 edba8214b5 feat: show username/password fields for Access database connections 2026-06-10 08:37:18 +08:00
t8y2 2e021d37d1 fix(ci): add etcd to MCP type description, skip turso tests when unreachable 2026-06-10 04:52:35 +08:00
t8y2 1be4c6afcc fix: resolve clippy, typecheck, and test failures in CI (#933) 2026-06-10 04:40:23 +08:00
t8y2 d0bf6c3b53 feat(redis): persist command history across sessions (#933) 2026-06-10 04:34:45 +08:00
t8y2 d08385e75f feat: add Turso/libSQL database support
Turso is a distributed SQLite database built on libSQL, offering HTTP-based
connectivity with auth token authentication. This change adds full support:

- New DatabaseType::Turso and PoolKind::Turso variants
- TursoClient driver using libSQL HTTP pipeline API (/v2/pipeline)
- Bearer token auth via password or url_params (auth_token=)
- Multi-statement batch pipeline for transactional integrity
- Standalone BEGIN/COMMIT/ROLLBACK treated as no-ops (pipeline is auto-commit)
- Full metadata support: tables, columns, indexes, foreign keys, triggers, DDL
- Frontend: connection form, SQL completion (SQLite syntax), capability sets
- Built-in databases (SQLite/Turso/DuckDB/RQLite/Access) placed first in selector
- Unit tests (15) + integration tests against live libsql-server (12)
- Single connection pool, skips TCP probe

Closes #948
2026-06-10 04:18:05 +08:00
t8y2 d5bc3d065a feat: collapse less-used toolbar buttons into More menu when width < 1000px 2026-06-10 03:04:17 +08:00
t8y2 2a424b6f75 fix: add parent folder for SQL sync directory, show toast when no sync dir set 2026-06-10 02:59:00 +08:00
t8y2 39cf4779cd fix: add active tab underline in classic mode without connection color, use amber folder icons in SQL library 2026-06-10 02:54:05 +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
t8y2 d7a8f5d285 fix: add etcd to driver manifest, fix SQL library rename focus and remove dblclick rename 2026-06-10 02:45:47 +08:00
t8y2 2796e5c824 fix: enable etcd driver visibility in driver store UI 2026-06-10 02:05:49 +08:00
t8y2 56e1895e91 fix(iotdb): use tree SQL for table cleanup 2026-06-09 22:26:50 +08:00
DengQingNian 35692bc53b feat(redis): add TTL, structured entries, Stream and JSON support to create key dialog (#947)
Thanks @DengQingNian! Great feature — TTL, structured entries, Stream, and JSON support for Redis key creation.
2026-06-09 22:08:08 +08:00
二丫讲梵 41758e6bb1 ✨ feat(connection): 增加可见数据库选择功能 (#944)
感谢 @eryajf 的贡献!此功能允许用户在创建或编辑连接时选择可见的数据库,支持多种数据库类型。
2026-06-09 20:56:39 +08:00
t8y2 ae483efb98 fix(editor): improve wrapped selection highlights 2026-06-09 20:53:47 +08:00
t8y2 699281c7a6 fix(ci): remove brittle source-text assertion tests
These tests checked for specific code patterns in source files via
include_str!, making them fail whenever unrelated code introduced
the same patterns elsewhere. They tested how code is written rather
than what it does.
2026-06-09 18:58:28 +08:00
t8y2 9278630fd2 fix(desktop): stabilize tab overflow scrolling 2026-06-09 18:58:06 +08:00
t8y2 426b7911bc fix(editor): preserve sql tab cursor state 2026-06-09 18:18:18 +08:00
t8y2 80531c8765 fix(editor): restore sql viewport across activation 2026-06-09 18:07:10 +08:00
t8y2 e153d88091 fix(editor): preserve sql tab scroll position 2026-06-09 18:04:03 +08:00
t8y2 2050bee75c feat(query): show elapsed time while executing 2026-06-09 17:57:25 +08:00
t8y2 348f39ff35 perf(tauri): move blocking command work off async runtime 2026-06-09 17:53:07 +08:00
t8y2 a5d9addbf3 feat(ui): show instant tooltips for truncated labels 2026-06-09 17:51:07 +08:00
t8y2 bc3c7c52ea fix(mysql): retry re-prepared statements with text protocol 2026-06-09 17:13:44 +08:00
cl1107 3995524e5d feat(import): 添加 DataGrip 连接导入支持 (#936)
- 新增 datagripImport 模块解析 XML 配置
- 支持从 macOS Keychain 自动填充密码
- 添加 Keychain 读取的 Tauri 命令
- 更新多语言翻译文件
- 集成到侧边栏导入流程中
2026-06-09 16:45:59 +08:00