miracle
|
30b9460442
|
fix(dbx-core): improve duckdb query cancellation
|
2026-07-04 02:31:32 +08:00 |
|
t8y2
|
69f880fdf1
|
fix(transfer): preserve target table name case
|
2026-07-04 00:12:42 +08:00 |
|
t8y2
|
a435c76250
|
fix(transfer): skip create DDL for existing targets
|
2026-07-02 00:49:32 +08:00 |
|
onenewcode
|
e09ec3cd7a
|
fix(mongo): preserve BSON types in MongoDB-to-MongoDB transfer
|
2026-07-01 16:31:39 +08:00 |
|
onenewcode
|
7941f30484
|
fix(postgres): preserve owned sequences during transfer
|
2026-06-30 17:49:18 +08:00 |
|
zipg
|
4c9a265bdb
|
fix: skip sqlserver rowversion columns during transfer (#2146)
|
2026-06-29 21:00:54 +08:00 |
|
zipg
|
3c7c1924ba
|
Fix:修复 SQL Server datetime 查询和导出精度
|
2026-06-29 11:28:33 +08:00 |
|
Guoyu Su
|
7a5984a1fd
|
fix(mongodb): support shell projection and db.version
|
2026-06-29 00:27:27 +08:00 |
|
t8y2
|
796b0ce5b7
|
fix(dameng): restore exports with identity columns
|
2026-06-26 21:25:39 +08:00 |
|
dalew
|
d815a16b86
|
feat(redis): move scan page size to connections
|
2026-06-26 11:13:34 +08:00 |
|
t8y2
|
54e0393ab3
|
fix(transfer): preserve PostgreSQL bytea migration
|
2026-06-26 02:05:49 +08:00 |
|
t8y2
|
2f8672cdef
|
fix(transfer): split postgres table ddl
|
2026-06-25 21:32:12 +08:00 |
|
t8y2
|
0c0e90ab1a
|
feat(export): add table read cursor sessions
|
2026-06-25 18:37:04 +08:00 |
|
大峰
|
40c93b9dad
|
feat(connection): add visible schema filtering
|
2026-06-25 01:36:06 +08:00 |
|
t8y2
|
b5bbdfa5e9
|
fix(dameng): use fetch pagination for transfer
|
2026-06-25 01:09:48 +08:00 |
|
t8y2
|
a87e4be029
|
fix(transfer): format SQL Server bit booleans
|
2026-06-24 19:54:19 +08:00 |
|
t8y2
|
222584280e
|
fix(schema): support materialized view object source retrieval
|
2026-06-24 11:25:11 +08:00 |
|
t8y2
|
10019e4cc1
|
fix(clickhouse): create transfer tables in target database
|
2026-06-22 18:22:20 +08:00 |
|
t8y2
|
f52064bd0e
|
fix(agent): extend metadata RPC timeout
|
2026-06-22 18:17:11 +08:00 |
|
t8y2
|
4d55dd0795
|
fix(transfer): preserve postgres backslash literals
|
2026-06-20 00:25:53 +08:00 |
|
t8y2
|
ef25653aca
|
feat(transfer): add target table name case option
|
2026-06-19 12:16:38 +08:00 |
|
t8y2
|
24f67f0498
|
fix(sqlserver): preserve unicode import literals
|
2026-06-18 22:56:29 +08:00 |
|
t8y2
|
17f186db26
|
fix(sqlserver): rebuild pool after driver panic
|
2026-06-18 13:43:03 +08:00 |
|
t8y2
|
fc8ae4b69f
|
chore(transfer): remove dead query_mysql_create_table_ddl
|
2026-06-18 13:14:01 +08:00 |
|
ptma
|
7ef6c1022e
|
pref(transfer): prefer native table DDL from source for same-family transfers
|
2026-06-18 12:40:33 +08:00 |
|
t8y2
|
8de8a85d66
|
fix(transfer): ClickHouse ORDER BY must cover PRIMARY KEY columns
|
2026-06-18 10:50:53 +08:00 |
|
t8y2
|
c4c427fb67
|
fix: sort tables by FK dependency in transfer and export
|
2026-06-18 00:00:37 +08:00 |
|
t8y2
|
71db24813e
|
fix(informix): add informix_server field to test helpers
|
2026-06-17 22:59:22 +08:00 |
|
t8y2
|
22b8ba17bb
|
fix(schema): handle view DDL object types
|
2026-06-17 19:29:24 +08:00 |
|
John Jin
|
6aca7c052f
|
fix(transfer): solve automatic table creation statement
* fix(transfer): solve automatic table creation statement
* fix(transfer): fix the case issue of tests
|
2026-06-16 18:03:37 +08:00 |
|
t8y2
|
000c236619
|
feat(connection): add keepalive interval
|
2026-06-16 10:23:49 +08:00 |
|
t8y2
|
c57e18bf3e
|
fix: resolve clippy warnings and missing struct fields in tests
|
2026-06-16 00:55:32 +08:00 |
|
John Jin
|
1afc271c18
|
feat: add QuestDB support
Thanks @ptma!
|
2026-06-14 22:58:05 +08:00 |
|
t8y2
|
cbc7f9b0db
|
fix(gbase): support 8a and 8s profiles
|
2026-06-14 10:16:24 +08:00 |
|
t8y2
|
30afcb8e69
|
fix(sidebar): page large table groups
|
2026-06-13 13:40:36 +08:00 |
|
t8y2
|
ef5b6eb654
|
fix(transfer): preserve MySQL AUTO_INCREMENT and column defaults in cross-instance copy
|
2026-06-13 08:24:47 +08:00 |
|
t8y2
|
a858a6bd18
|
feat(mysql): edit foreign keys and triggers
|
2026-06-12 12:29:46 +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
|
a5e1a64247
|
refactor(sql): split dialect helpers
|
2026-06-10 19:53:36 +08:00 |
|
t8y2
|
33ab7aeae6
|
refactor(schema): split metadata providers
|
2026-06-10 19:10:53 +08:00 |
|
t8y2
|
b6d92f8c38
|
feat: make duckdb optional behind duckdb-bundled feature
|
2026-06-10 18:30:14 +08:00 |
|
t8y2
|
d353d4673f
|
feat(redis): add configurable key namespace separator
|
2026-06-10 17:46:48 +08:00 |
|
John Jin
|
0bd07ccf46
|
feat: add InfluxDB support (#980)
|
2026-06-10 14:37:53 +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 |
|
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 |
|
John Jin
|
354d21d086
|
feat(grid): 列是否可排序 (#935)
|
2026-06-09 16:43:53 +08:00 |
|
t8y2
|
2a7b26baad
|
fix: add missing idle_timeout_secs in ConnectionConfig constructors and fix clippy warnings
|
2026-06-09 11:56:39 +08:00 |
|
t8y2
|
befee2fd4c
|
feat(postgres): support sequence objects
|
2026-06-08 22:54:14 +08:00 |
|
t8y2
|
e6062b2b07
|
feat(etcd): add agent-backed etcd support
|
2026-06-08 00:58:42 +08:00 |
|