Add a `connect_timeout_secs` field to ConnectionConfig that allows users
to configure the database connection timeout per connection (1-300s,
default 5s). Previously all connections used a hardcoded 5-second timeout.
- Add connect_timeout_secs field with serde default and clamp logic
- Add parse_connect_timeout_with_fallback to honor URL params over config
- Pass user-configured timeout to all drivers (MySQL, Postgres, Redis,
MongoDB, ClickHouse, SQL Server, Elasticsearch) and TCP probe
- Add UI input in connection dialog SSH tab
- Add i18n keys for en/zh-CN/es
tokio_postgres's FromSql<String> only accepts built-in text-like OIDs and
rejects custom enum OIDs, causing all enum column values to display as
NULL. Add a PgAnyString adapter that accepts any type and reads raw bytes
as UTF-8, used as a last-resort fallback in pg_value_to_json and
pg_array_to_json_value.
Also bump shadcn-vue (2.6.2→2.7.3) and reka-ui (2.9.6→2.9.8).
Closes#485
- frontend: use e.message instead of String(e) in toErrorResult to avoid
"Error: " prefix for HTTP-mode errors, matching connectionErrorMessage
- frontend: apply same fix to MongoDocBrowser error display
- backend(postgres): use pg_error_to_string across all query execution
paths (execute, execute_batch, copy_out, copy_in) to extract DbError
details instead of generic transport-layer errors
Other databases (MySQL, SQL Server, SQLite, DuckDB) already include
server-level error details in their native Error::to_string().
Previously connect() always overwrote the timezone with the local machine's
timezone, even when the user had explicitly set one via connection parameters
(e.g. ?options=-c timezone=Asia/Shanghai). Now we check the URL for a
timezone setting and skip the automatic SET timezone if one is present.
SET search_path in PostgreSQL is not transactional — it survives rollback
and persists on the connection. Previously, connections returned to the pool
with a modified search_path, causing subsequent queries on the same
connection to run against the wrong schema. Now RESET search_path is always
called after schema-scoped queries and transactions.
- Use client.transaction() for safer transaction handling
- Add prepare_cached for all system queries to enable statement caching
- Use query_raw streaming to avoid buffering large result sets
- Add batch_execute support for bulk DDL scripts
- Add COPY protocol support (copy_in / copy_out) for fast data transfer
- Add pg_quote_ident to prevent SQL injection in SET search_path
- Increase connection pool max_size from 5 to 10
- Fix list_indexes bounds check for expression indexes
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.
Serialize JSON/JSONB as strings in Postgres and MySQL drivers to avoid
repeated JSON.stringify in the render loop. Truncate cell display to
256 chars so the browser doesn't lay out huge text nodes on scroll.
The ARM runner's Homebrew installs arm64 libraries, which can't link
when cross-compiling for x86_64. Use arch -x86_64 to install the
Intel version of unixodbc and set LIBRARY_PATH accordingly.
Add i16 to the type fallback chain in pg_value_to_json. The sqlx driver
requires INT2 to be decoded as i16 specifically; the existing i64/i32
attempts silently failed, causing smallint values to fall through to null.
Add schema selector to the editor toolbar for schema-aware databases
(PostgreSQL, SQL Server, Oracle). When a schema is selected, the backend
sets the appropriate search_path before executing queries so users no
longer need to write schema-qualified table names.
Use try_get_raw + as_bytes fallback for types that sqlx cannot decode
via standard type mappings (e.g. PostGIS geometry, citext, ltree).
UTF-8 decodable values display as text; binary values display as hex.
Closes#108
Refactor all database drivers, query execution, schema operations, and
business logic into a shared `dbx-core` crate. The Tauri desktop app
becomes a thin shell delegating to dbx-core, enabling future web and
CLI frontends to reuse the same core.