Repository navigation
Fix every bug listed in BUGS.md - #5
Merged
Merged
Conversation
Fixes all 32 open entries: connection lifecycle leaks (registry merge, double connect, server-side single-flight), forgetting a saved password, the read-only name heuristic, the AI read-only gate, connection-link bounds, SQLite dialect issues (soft delete, IS, Navigator regex filter, typed placeholders, comment-leading queries, statement timeout, DBML), NULL-aware keyset paging, date-only rendering, @me_principal binding, grid/inspector/run races, export safety (CSV CR, atomic .db, web .db), Postgres type names, RPC subscription ids per window, the job-finished race, copy_table's target connection, atomic + locked project/history writes, and the changelog script's missing --- rule. Adds test/bug_fixes_test.dart plus cases in dml, pager and server tests. Files one new bug (on-device reads pushing the file back) and two TODOs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqzDdVtx5LMyjjW8CxL4NE
4 tasks done
connectProfile now closes and reopens the connection when the incoming profile differs in target, user, SSL mode, plugin config or password, instead of silently keeping the old connection. Closes the matching TODO.md item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqzDdVtx5LMyjjW8CxL4NE
New Postgres profiles get a suggested read-only setting (on for a prod/live/main name or a remote host, off for localhost) that follows the name and host until the user flips the switch, and the switch says why it is on or off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqzDdVtx5LMyjjW8CxL4NE
PostgresExecutor looks up oids missing from the built-in table in pg_type once per connection and caches them (misses included). Closes the matching TODO.md item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EqzDdVtx5LMyjjW8CxL4NE
4 tasks done
4 tasks done
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Requested by Robert · project thread
What & why
Fixes all 32 open entries in
BUGS.md. Where an entry said it needed a decision, the choice made is noted below.Connections and profiles
forgetPasswordintent that deletes the keychain entry. An empty field still means "keep"._mergeProfilesnow closes the executors of profiles deleted in another window._connectreuses an already-open connection instead of dialing a second one. Decision: reuse, not close-and-replace.ConnectionServicesingle-flights opens per profile, and an open that finishes after a close is discarded.prod|production|live|mainonly as whole words.FormatException.SQL safety and SQLite
enforceReadOnlynow refusesINSERT/UPDATE/DELETE/MERGE/CREATE/EXECUTE,REPLACE INTOandSELECT … INTOanywhere outside literals and comments. A newbareWordslexer helper insql_parse.dartdoes the scanning.CURRENT_TIMESTAMP. The optimistic guard usesIS, which works before SQLite 3.39.dbscope_iregexp()function.CAST(? AS affinity)or are dropped.select, so results are never thrown away.sqlite3_progress_handlerdeadline, behind the newStatementTimeoutCapableinterface.@me_principal: a missing identity now refuses the action. On Postgres it falls back topg:<login>, and claimed emails are lowercased.UI
TableTabView._readOnly()reads the real flag and reloads when it flips.Export, files, RPC, jobs
\r..dbexport writes to a temp file and renames it over the target. Duplicate column names get suffixes. The button is hidden on web.lib/util/file_lock_io.dart), and an unparseable project file is moved aside as.corrupt-<time>.Serverscopes subscriptions by caller window.job.getonce after subscribing.copy_tableopens a dedicated target connection that keeps the profile's read-only setting.add_changelog_line.shadds the missing---rule itself. The two changelog lines the bug entry said were missing are added.Records: closed all 32
BUGS.mdentries. Added one new bug: on-device SQLite pushes the file back after every SELECT that returns rows. Added twoTODO.mditems: type names for custom Postgres types, and offering a reconnect after re-importing a link. Added 31 changelog lines.How it was tested
test/bug_fixes_test.dartcovers: the read-only gate, the placeholder translator, the SQLite executor against real sqlite3 (comment-leading SQL, RETURNING, typed params, regex function, statement timeout), the date renderer, oid names, the heuristic, link bounds and unique column names.dml_test,pager_testandserver_test.Checklist
fvm flutter analyzeis clean (and the sqflite plugin package)fvm flutter testpasses (285 passed, 7 skipped live-PG)CLAUDE.mdstill hold (quoted identifiers, parameterised values).dbscopeconnfiles in the diffGenerated by Claude Code