Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
0f74142
perf(sidebar): cut connect and filter stalls on large catalogs (#3842)
datlechin Oct 26, 2026
5316147
perf(connection-window): keep the restored tab out of the connected p…
datlechin Oct 26, 2026
fcc7073
fix(tabs): keep a table tab's rows until you reload it (#3848)
datlechin Oct 26, 2026
c0ab409
perf(sidebar): put the first catalog's outline up a committed frame l…
datlechin Oct 26, 2026
e6b5e61
fix(chrome): place toolbar sections and view switchers where the HIG …
datlechin Oct 26, 2026
1ccc331
fix(ios): set ITSAppUsesNonExemptEncryption to NO while France is not…
datlechin Oct 26, 2026
165c22b
feat(formatter): read each engine's grammar, add layout options and V…
datlechin Oct 27, 2026
55472d8
feat(export): set Structure, Drop or Data for a whole database or gro…
datlechin Oct 27, 2026
b793bc1
feat(kingbasees): add a registry driver (#3855)
J2TeamNNL Oct 27, 2026
a8e83a6
feat(debugger): step through PL/pgSQL and Oracle PL/SQL routines with…
datlechin Oct 27, 2026
86651d7
fix(copy): defer foreign key checks to the commit for a whole copy (#…
MrWeb Oct 27, 2026
6f91c0e
feat(linux-workspace): open several connections in one window (#3856)
sedax90 Oct 28, 2026
75d47d5
ci: fix the nightly Build Linux and Release Build runs (#3865)
datlechin Oct 28, 2026
dcbce8a
feat(linux-grid): copy rows as a text table, JSON Lines, one row or I…
sedax90 Oct 28, 2026
6d19330
perf(linux): sort large grids by keys and open a 50,000-table schema …
datlechin Oct 29, 2026
7b9b282
fix(linux-grid): open an empty table's columns at their types' width …
sedax90 Oct 29, 2026
aa5aded
feat(linux-grid): select every row from the row number header's menu …
sedax90 Oct 29, 2026
ba6dbc4
feat(structure): edit MySQL table charset, collation and AUTO_INCREME…
datlechin Oct 29, 2026
442ec33
perf(diagnostics): record the large-catalog baseline again (#3870)
datlechin Oct 29, 2026
4ce97de
docs(readme): show the sponsors' logos and link the sponsors page (#3…
datlechin Oct 29, 2026
0981ce3
docs(readme): show the sponsors in the Vietnamese and Chinese READMEs…
datlechin Oct 29, 2026
4241143
fix(autocomplete): read a qualifier after FROM as a schema, not a tab…
datlechin Oct 29, 2026
83d61b2
feat(structure): rebuild the Structure tab as one Definition page wit…
datlechin Oct 29, 2026
25001cc
fix(structure): keep a saved definition selected and auto-show the in…
datlechin Oct 29, 2026
cb44927
perf(sidebar): stop redrawing the editor on every sidebar filter keys…
datlechin Oct 29, 2026
79a7206
ci(deps): bump the actions group across 1 directory with 3 updates (#…
dependabot[bot] Oct 29, 2026
627c06a
ci(deps): bump zip from 8.6.0 to 9.0.5 in /linux (#3884)
dependabot[bot] Oct 29, 2026
c43fab2
fix(analytics): record the first successful editor query again (#3886)
datlechin Oct 29, 2026
1c2b523
build(linux): bump rust_xlsxwriter to 0.102 so zip 8.6.0 leaves the b…
datlechin Oct 29, 2026
83edbf0
docs: add a trademark policy for the TablePro name and icon (#3887)
datlechin Oct 29, 2026
7cdfa2d
perf(quick-switcher): cut the main-thread stalls of opening Open Quic…
datlechin Oct 29, 2026
1a80a0b
perf(sidebar): group the schema listing once per listing and draw Ret…
datlechin Oct 29, 2026
20b3466
feat(linux-grid): set a time or a timestamp's time from a clock in Ro…
sedax90 Oct 30, 2026
42a9721
feat(linux-grid): sum, average and count the selected rows' focused c…
sedax90 Oct 30, 2026
6d21850
feat(whats-new): announce an update on Linux and stay quiet after a d…
sedax90 Oct 30, 2026
b97715e
feat(linux-grid): pick an enum or set cell's labels from a menu (#3880)
sedax90 Oct 30, 2026
ddc50ed
fix(linux-grid): keep a timestamp's time when Row Details picks its d…
datlechin Oct 30, 2026
fe1c22c
fix(data-grid): mount accessibility cells for rows a read prepared be…
datlechin Oct 30, 2026
296b19b
feat(linux): switch to a recently shown tab with Ctrl+E (#3883)
sedax90 Oct 30, 2026
e33aed5
feat(linux-grid): show a binary value's bytes as a hex dump and an im…
sedax90 Oct 30, 2026
20644df
fix(linux): read SQL as each engine does and preview connection impor…
datlechin Oct 30, 2026
c40c356
fix(sidebar): show the loaded table list when its spinner started in …
datlechin Oct 30, 2026
5efd8ec
docs(linux): record how a query tab reaches another database (#3901)
sedax90 Oct 30, 2026
bd9181a
fix(filters): escape a backslash in Snowflake filter values (#3906)
datlechin Oct 30, 2026
7103b8f
chore(release): bring release/0.84 up to main for 0.84.0-beta.2
datlechin Oct 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .claude/rules/data-grid.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Three layers, knowledge pointing one way: an owner's adapter, then `DataGridMode
- **Row height, row count, reloads, inserts and removes reach both panes in one call**, so their document heights never differ.
- **Vertical scroll stays in step through bounds-change notifications**: each pane's clip moves the other with `clipView.scroll(to:)` and `reflectScrolledClipView`, only when its y differs. Anywhere else scroll with `NSView.scroll(_:)`: moving a clip's x that way leaves the header behind.
- **The frozen pane forwards every wheel event to the main scroll view**, so one momentum engine moves both.
- **A `fitsRows` grid is as tall as its rows and scrolls only sideways.** It publishes `model.fittingHeight` for its host to size it, hands a vertical gesture to the enclosing scroll view (the axis is decided once per gesture), and reveals a row by scrolling that page. The Structure tab's sections use it.
- **Frozen columns take at most two thirds of the grid** (`DataGridMetrics.maximumFrozenShare`). Columns past that scroll, and Freeze Up to This Column is refused in the menu.
- **`DataGridTableView.scrollToVisible(_:)` widens the rect leftward by the frozen width**, so a revealed column never parks under the frozen pane.
- **A column moves only within its side of the freeze line.** A freeze or unfreeze rebuilds both panes' column lists from the set, writing width and position explicitly: remove-then-add alone strands a column at the end and resets its width.
Expand Down Expand Up @@ -65,4 +66,4 @@ Three layers, knowledge pointing one way: an owner's adapter, then `DataGridMode
- **AppKit builds the AXCell tree from cell views only**, so while `DataGridAccessibility.isActive` the main table mounts a `DataGridAccessibilityCellView` (identifier `data-grid-cell`) for each on-screen cell. It draws nothing and takes no clicks. Keep that path working whenever row drawing changes.
- **A label reads "Row N, column M: value"**: N is the row number on screen, page offset included, and M the display position. UI tests find cells by it (`.claude/rules/ui-tests.md`, The grid).
- **The frozen pane is hidden from accessibility.** A frozen column's stand-in in the main table reports the frame the frozen pane shows it at.
- **Only the viewport mounts.** Mounting for every row starved the main thread behind a 1,000-row page (#2392); rows scrolled into view remount.
- **Only the viewport mounts.** Mounting for every row starved the main thread behind a 1,000-row page (#2392). A client's read prepares the rows it walks, off-screen ones without a stand-in, and AppKit never asks for a prepared row again. So each on-screen row still without one remounts after a scroll, a layout of the grid and a read of the table: a fitted grid grows to its rows, and a page moves a grid, with no scroll.
3 changes: 3 additions & 0 deletions .claude/rules/data-sync-storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ This path holds user data. A silent wrong answer here looks exactly like an empt
| Sidebar database and schema filters, recent tables | UserDefaults, device-local | `DatabaseTreeFilterStorage`, `RecentTablesStore` |
| History drawer state | UserDefaults, device-local | `HistoryPanelPreferencesStorage` |
| Server Dashboard tiles, per connection | UserDefaults, device-local | `ServerDashboardTileStorage` |
| Module on/off (Settings > Extensions) | UserDefaults, device-local, never synced | `AppModuleSettings` |
| Routine debugger start options, per connection and field | UserDefaults, device-local | `RoutineDebugOptionStore` |
| Whether the toolbar arrangement already carries the debug items | UserDefaults, device-local | `MainWindowToolbar` |
| Trusted external links (loopback only) | UserDefaults | `ExternalConnectionTrustStore` |
| Table load timings (no identifying data, never uploaded) | JSON lines | `TableLoadHistoryStore` |
| Reopen Last Session list (`LastSession.json`, plus `LastOpenConnections.json` holding only the ids that reconnect, which older builds read) | JSON | `LastOpenConnectionsStorage` |
4 changes: 2 additions & 2 deletions .claude/rules/plugin-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ TableProPluginKit is built with Library Evolution, so an already-built plugin ke
- Add a requirement only with a default implementation, then bridge it in `PluginDriverAdapter`.
- Additive: a new requirement with a default, a new field on a non-`@frozen` struct, a new case on a non-`@frozen` enum, a reordering.
- Breaking: a changed, removed or renamed requirement or signature, a requirement without a default, a new case on a `@frozen` enum, a change to a frozen type's layout.
- Every ABI change sets `TABLEPRO_PLUGINKIT_VERSION` in `apple/Configs/PluginKit.xcconfig` to one past the kit of the newest `v*` tag reachable from HEAD; later changes before the next tag reuse it. A `release/*` line never bumps it.
- Every ABI change sets `TABLEPRO_PLUGINKIT_VERSION` in `apple/Configs/PluginKit.xcconfig` to one past the highest kit a `v*` tag shipped, including a tag on a `release/*` branch HEAD cannot reach; later changes before the next tag reuse it. A `release/*` line never bumps it.
- The build stamps that value into `TableProPluginKitVersion` of the app and of every plugin. A plugin's `Info.plist` holds `<integer>TABLEPRO_PLUGINKIT_VERSION</integer>` and is preprocessed, because every shipped app reads the key with `as? Int`; the source file therefore fails `plutil -lint`.
- After an additive change, built plugins keep loading, and the bump makes an older app refuse a plugin rebuilt against the new API instead of failing its load.
- A breaking change also raises `TABLEPRO_PLUGINKIT_MINIMUM_VERSION`. Every tag ships every registry plugin built against its own kit, so the release that carries the change carries plugins in its range.
- `apple/scripts/check-pluginkit-abi.sh [--frozen] [base]` (`verify.sh abi [base]`) builds PluginKit at the base, by default the newest `v*` tag reachable from HEAD, and at HEAD with Xcode's ABI checker (`RUN_SWIFT_ABI_CHECKER_TOOL`). CI runs it in `.github/workflows/macos-tests.yml` when the `plugins` suite is true, `--frozen` on a PR into `release/*`.
- `apple/scripts/check-pluginkit-abi.sh [--frozen] [base]` (`verify.sh abi [base]`) builds PluginKit at the base, by default the `v*` tag that shipped the highest kit (with `--frozen`, the newest one reachable from HEAD), and at HEAD with Xcode's ABI checker (`RUN_SWIFT_ABI_CHECKER_TOOL`). CI runs it in `.github/workflows/macos-tests.yml` when the `plugins` suite is true, `--frozen` on a PR into `release/*`.
- A checker error is a breaking change: the kit and the minimum must both be one past the base's kit, so the host refuses every plugin built before it. A baseline that changed with no error needs the kit one past the base's and the base's minimum; an identical one needs the base's kit and minimum. `--frozen` fails on any ABI change.
- The checker reports breakage only; an additive change shows as a changed baseline. Its errors are in the log `verify.sh abi` prints.
- Mark a public enum `@frozen` only when its case set is closed. `PluginCapability` and the transfer structs stay non-frozen so they can grow.
Expand Down
17 changes: 17 additions & 0 deletions .github/assets/sponsors/coderabbit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions .github/assets/sponsors/dwarves-foundation.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading