Release 2.2.1: new providers, faster connects, SQL write fix - #93
Merged
Merged
Conversation
Stop in the SQL editor only dropped the Rust future on Postgres, so the statement kept running until the 60s timeout and held its connection. The editor path now arms pg_cancel_backend and a per-row cancel check, and a stopped run always reports "Query cancelled". The editor shows that as its own quiet "Query stopped" view with Run again instead of the red error pane, the Stop button matches Run's footprint, and the error header drops the uppercase label.
Every client row now has a labelled Copy config, plus a Claude Code row that copies the claude mcp add command. Rows use soft filled buttons instead of the outline field style, the server URL, state and Start/Stop share one row, and read-only is a real switch.
Inter for the UI, Source Serif 4 for dialog titles, JetBrains Mono kept for data and SQL. Installs still on the old all-mono default move once, and the migrated value is written back immediately so a later save can't restore mono.
A windowed browse passes a sparse array as long as the whole table, and sampling it by index hit holes and threw on row.map. The chart now uses the rows that exist and labels partial data as "N of M loaded".
upsertConnection inserted whatever it was handed, and the shell re-saves the open connection on every connect, reconnect and database switch, so deleting the connection in use brought it back. Deleted ids are now recorded and never re-added unless explicitly revived (the Sample Database button), and deleting the active connection disconnects it. Saved connections are also mirrored to connections.json in the app data folder (fsynced, 0600 on unix) and loaded before the app reads them, so a localStorage write lost at exit (WebView2) can't undo a delete. Both delete buttons now ask first, since a delete also clears the connection's history, saved queries, charts and chats.
All secrets were one JSON blob in a single keychain credential, and Windows caps a credential at 1280 characters. After an OAuth sign-in the write failed, the tokens went to the fallback file, and the next launch read the older credential first and looked signed out. The vault is now split across credentials under the limit and verified by read-back; a failing keychain makes the file the store and removes the keychain copy, and the file wins on load, which also recovers installs already in that state. Every vault change goes through one locked read-modify-write, token refresh is single-flight (Prisma, Supabase and Cloudflare rotate refresh tokens), a provider API 401 refreshes once and retries, only invalid_grant ends a session, and an expired session offers Sign in again.
A run whose last statement returned rows was rolled back, so writes before it (UPDATE ...; SELECT ...), data-modifying CTEs and SELECT on functions that write were shown and then thrown away. They commit now. The binary-output retry only re-runs single-statement input, since re-running just the last statement of a multi-statement run reported success over a lost write. The read-only row counts end with COMMIT too: Nile's proxy rejects that ROLLBACK, which left the connection marked in-transaction, so sqlx closed it and every count paid a fresh handshake.
- Keep a connect attempt once the TCP probe has proven the host reachable, instead of restarting it at 800ms. Far hosts (a Sydney pooler) paid TCP, TLS and auth twice. - Reuse one Redis connection per database instead of opening one per command, PING it after 30s idle, and bound connects at 10s. - Parse connection URLs whose password has a raw %, #, ?, / or @, and encode the database name in the URL handed to sqlx.
The watcher crawled src-tauri/target and website/, holding ~3 GB and reacting to every cargo rebuild. It watches the frontend only now.
- TiDB Cloud (device code sign-in, code shown in the app), Turso and Nile through their CLIs' browser sign-in, Upstash with an email and API key. Railway is written but disabled until its OAuth app exists. - Open the provider picker on the last list and refresh it underneath; fetch every org's databases at once; skip an org the token can't read instead of failing the list. - Reconnect a saved provider database from the saved entry, matched by the provider's own id. The old name match could pick the wrong database. - PlanetScale asks for the scopes listing orgs and creating passwords need, and is enabled again. - Sign out with a confirm, a branded sign-in page, a callback that ignores stray requests, failed picks reported as toasts, and provider logos with an engine chip in the connection list.
Geist is the default font again; installs still on an earlier default move once. The boot page paints the theme's real background, recorded on the previous run, instead of a fixed near-black that switched when the stylesheet loaded.
On multi-million-row tables a wheel notch travelled dozens of rows. Alt+wheel steps four rows per notch, snapped to row edges, without adding a wheel listener to the plain scroll path.
Columns are an editable table in the structure editor's style. An empty sidebar tab shows one empty state instead of two.
It listed four providers and ran to 444 lines. It now covers every engine and provider, the install paths and the build in under 100.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four new providers, faster connecting, and a fix for SQL runs that lost their writes.
Fixes
%,#,?or@import from a connection URL whole.New
Faster
163 Rust and 684 frontend tests pass. The new provider sign-ins are not yet tested against the live services.