Skip to content

fix(linux): seek paging, lazy tab restore, grid speed, narrow bottom bar - #3468

Merged
datlechin merged 16 commits into
linuxfrom
fix/linux-grid-browse
Oct 17, 2026
Merged

datlechin merged 16 commits into
linuxfrom
fix/linux-grid-browse

Conversation

@datlechin

Copy link
Copy Markdown
Member
  • Paging: new core read_page pages past the edge row's key (AfterKey/BeforeKey) and reads Last backward from the end. A PostgreSQL table with no key walks heap block windows that double when short, so no read sorts the whole table. OFFSET stays under a user sort, a restored deep offset and a partitioned keyless table.
  • An unsorted export of a keyless table drops ORDER BY ctid.
  • Docker tests page a 60k-row keyless table (with deleted rows) and a 25.5k-row keyed table both ways, check every row once in order, and assert a Tid Range Scan or Index Scan Backward plan with no Seq Scan or Sort.
  • Session restore: saved tabs open unselected and read their table the first time they are shown, instead of all at once on the 4-connection pool.
  • Grid: Select All plus refresh restores the selection in one pass; column widths measure only added rows and cache the digit width; cell text capped at 1,000 characters; cell tint stops scanning edits and copying the pending value; text sort keys use the first 4,096 characters.
  • Discard asks first on the browse and structure tabs, like F5.
  • The Rows dropdown lists a page size set in Preferences.
  • The browse tab is an AdwBreakpointBin: below 680sp, Export, Filter, Count Rows and Rows per Page move into a More menu, and the bar fits the 360 px floor.
  • A filter error stays on the stale banner or error page instead of a toast; Count Rows shows it on Try Again.
  • Pager says "No rows" or "No rows match the filter"; the structure tab says "unsaved change" like the browse tab.
  • Tests changed on purpose: last_page_waits_for_an_exact_total, discard_restores_without_phantom_ops, and two that asserted filter-error toasts.

A table with no key walks PostgreSQL heap block windows, so no page sorts the whole table. OFFSET stays under a user sort. An unsorted export of such a table no longer orders by ctid.
A new page measures from scratch, a draft measures nothing, and the digits' width is laid out once per width, font and text scale.
The cell shapes all the text it is given though one line shows, and the tooltip quotes 300 characters.
Every bind of every cell scanned all pending edits for its row's state and copied its pending value, only to pick a class.
Discard also clears the undo history, so nothing brought the changes back. The browse and structure tabs now confirm it, as F5 already does.
The Rows dropdown offered only its five sizes, so a tab reading 2,500 rows showed 1,000, and picking 1,000 did nothing. It now lists the tab's own size too.
The tab is a breakpoint bin of its own: below 680sp Export, Filter, Count Rows and the page size move into a More menu, the pager label ellipsizes, and the filter strip's buttons wrap. The floor test now measures an open table tab.
A restore opened and selected every saved tab, so each started its reads at once on a 4-connection pool, and those waiting past 5 s failed. Saved tabs now open unselected and read once they stay on screen.
A filter the server cannot take now stays on the stale banner over the rows, or on the error page, until a read lands. Count Rows under it shows the reason on its Try Again button.
The pager said "No rows on this page" for an empty table too.
Signed-off-by: Dat Ngo Quoc <datlechin@gmail.com>
@datlechin
datlechin merged commit 59ce1b0 into linux Oct 17, 2026
6 checks passed
@datlechin
datlechin deleted the fix/linux-grid-browse branch October 17, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant