Tags: metabase/metabase
Tags
🤖 backported "Cut per-request permission work: consolidate caches, pr… …ime table checks, drop the visible-collection set" (#79235) Cut per-request permission work: consolidate caches, prime table checks, drop the visible-collection set (#79197) Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
🤖 backported "Cut per-request permission work: consolidate caches, pr… …ime table checks, drop the visible-collection set" (#79235) Cut per-request permission work: consolidate caches, prime table checks, drop the visible-collection set (#79197) Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
🤖 backported "Cut per-request permission work: consolidate caches, pr… …ime table checks, drop the visible-collection set" (#79235) Cut per-request permission work: consolidate caches, prime table checks, drop the visible-collection set (#79197) Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
🤖 backported "Cut per-request permission work: consolidate caches, pr… …ime table checks, drop the visible-collection set" (#79235) Cut per-request permission work: consolidate caches, prime table checks, drop the visible-collection set (#79197) Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
🤖 backported "Cut per-request permission work: consolidate caches, pr… …ime table checks, drop the visible-collection set" (#79235) Cut per-request permission work: consolidate caches, prime table checks, drop the visible-collection set (#79197) Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
🤖 backported "Fix QB perf" (#79138) Fix QB perf (#79132) * Fix QB perf * Forbid loading every field via GET /api/database/:id/metadata Make skip_fields a required `true` on the FE request type so no caller can ask for field-level metadata, which grows with every column in the database. The two callers that needed fields now scope their fetch to a single table: - Data Reference field pages fetch the table's own query metadata (which also pulls FK target tables and their fields) - useAuditTable resolves the table from the plain database response, then loads /api/dataset/query_metadata for that table * Withhold the audit table until its fields load ConversationStatsPage renders charts straight from useAuditTable's table without checking isLoading, so handing back a table built from the field-less database metadata made it paint once and re-render when the ad-hoc query metadata arrived, detaching the chart nodes mid-assertion. Also make the segment field list spec's database mock honour skip_fields, so unit tests can catch a caller that stops asking for fields. * fix be --------- Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Tagging SDK version embedding-sdk-0.64.0-alpha.2
🤖 backported "Skip fields when browsing tables of a schema-less datab… …ase" (#79106) Skip fields when browsing tables of a schema-less database (#79101) TableBrowser only needs the table list, but GET /api/database/:id/metadata returns every field of every table. Pass skip_fields=true so the response stays proportional to the number of tables. Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
🤖 backported "Fix quadratic :is_personal hydration that made GET /api… …/collection ta…" (#79084) Fix quadratic :is_personal hydration that made GET /api/collection ta… (#79073) Fix quadratic :is_personal hydration that made GET /api/collection take ~23s On an instance with 28k collections — 6k of them personal — `GET /api/collection` took 23.5s while making only 13 DB calls. Nearly all of it was the `:is_personal` batched hydration: for every collection it scanned the full set of personal collection IDs, building a prefix string with `format` on each step, so a request did ~20k x 6k = 125M `String/format` calls. Personal Collections only ever live in the Root Collection, so a collection is inside one exactly when the *first* ID of its location path is a personal collection. Test that single ID against the set instead of scanning. Measured on a seeded app DB matching the reported shape (28.6k collections, 6,011 personal roots, 13.6k live non-personal, 7.8k archived, depth to 13): GET /api/collection 11.2s -> 1.9s :is_personal hydrate 9.2s -> 75ms The remaining hot spot is `:can_write` (~1.1-1.5s), which linearly scans the user's permission set per collection — left for a separate change since it touches the shared permission check. Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
PreviousNext