Users can now create, edit, and delete SQL snippet templates from the settings dialog (new "Snippets" tab). Each template has a label, trigger prefix, and SQL body. Built-in defaults are modifiable and can be restored. Templates persist across sessions via the existing settings storage.
CSS variable changes alone don't trigger CodeMirror's measure cycle, so
gutter element heights would diverge from content line heights. The fix
reconfigures the font theme compartment (throttled to once per rAF) to
force a proper state transition → measure → syncGutters path.
Also adds missing fontFamily on .cm-gutters and i18n for "Follow app theme".
- Separate data type input into type dropdown (SearchableSelect with allowCustom)
and length input, Navicat-style
- Add comprehensive DATA_TYPE_OPTIONS for all 6 database engines, validated
against official docs
- Add Shiki SQL syntax highlighting to the SQL preview panel
- Add i18n keys for new UI elements (typePlaceholder, length, noMatchingType)
Replace the dialog-based TableStructureEditorDialog with a tab-based
TableStructureEditor, making it consistent with query editors, data
viewers, and object browsers. Users can now switch between editing
table structure and running queries freely.
Add PK checkbox column in Vue dialog, alter_primary_key capability flag,
build_primary_key_sql() for PostgreSQL/MySQL ALTER TABLE PK changes,
and i18n labels in zh-CN/en/es.
Includes flicker fix (silent reload after apply) and move ready badge
to SQL preview header.
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.
Table/data tabs were missing schema in createTab, so the toolbar
"new query" button couldn't inherit schema from the active tab.
Also add schema to NewQueryTarget so resolveNewQueryTarget
propagates it from both sidebar and active tab contexts.
- 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
Extended is_connection_error to recognize Oracle-specific JDBC error
patterns (idle time exceeded, end-of-file on communication channel,
not connected) so the auto-reconnect mechanism triggers for stale agent
connections after long idle periods.
DuckDB was not recognized as a schema-aware database, so only the
default "main" schema was shown in the object tree and schema selector.
Added DuckDB to schema-aware type lists, implemented schema listing via
information_schema.schemata, and replaced hardcoded table_schema = 'main'
with parameterized queries.
Treat blank-line-separated statements as part of the previous statement when the cursor sits on the semicolon boundary.\nKeep same-line cursor navigation moving to the next statement.\nAdd regression coverage for the cursor boundary cases described in issue #427.
Add mysql_async with client_ed25519 support for MySQL and MariaDB connections.\nSwitch MySQL transaction control and schema metadata reads away from sqlx MySQL APIs.\nPreserve connection compatibility by stripping unsupported URL params and handling nullable metadata safely.
The recent fix to respect explicit JDBC URLs in the Oracle agents exposed a
default mismatch: the Rust side generated SID-format URLs when the config
field was missing, but the old Java fallback always used service_name format.
Switch the default and retry logic so existing connections without an explicit
oracle_connection_type keep working.
- Split single check job into frontend / rust / jdbc parallel jobs
- Add concurrency group to cancel redundant CI runs
- Add pnpm cache via setup-node
- Add cargo clippy and cargo test to CI
- Unify Node version to 22 across all workflows
- Upgrade pnpm/action-setup to v6
- Fix clippy never_loop errors (while let → if let)
When right-clicking a PostgreSQL schema node and selecting "New Query",
the schema dropdown in the editor toolbar was not pre-selected. Pass
node.schema to createTab so the editor initializes with the correct schema.