Skip to content

fix(zero-client): ignore rows from unknown tables#5714

Merged
grgbkr merged 1 commit intomainfrom
grgbkr/bumped-cvr-logging
Mar 29, 2026
Merged

fix(zero-client): ignore rows from unknown tables#5714
grgbkr merged 1 commit intomainfrom
grgbkr/bumped-cvr-logging

Conversation

@grgbkr
Copy link
Copy Markdown
Contributor

@grgbkr grgbkr commented Mar 29, 2026

Fixes https://bugs.rocicorp.dev/p/zero/issue/246645

Reproduced locally in zbugs, verified fix manually. The api server can now query tables unknown by the zero client's schema, without causing errors on the zero client. The client simply discards patch operations for tables that are not in its schema.

@grgbkr grgbkr requested a review from darkgnotic March 29, 2026 21:16
@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
replicache-docs Ready Ready Preview, Comment Mar 29, 2026 9:19pm
zbugs Ready Ready Preview Mar 29, 2026 9:19pm

Request Review

@github-actions
Copy link
Copy Markdown

🐰 Bencher Report

Branchgrgbkr/bumped-cvr-logging
TestbedLinux
Click to view all benchmark results
BenchmarkFile SizeBenchmark Result
kilobytes (KB)
(Result Δ%)
Upper Boundary
kilobytes (KB)
(Limit %)
zero-package.tgz📈 view plot
🚷 view threshold
1,940.33 KB
(+0.04%)Baseline: 1,939.57 KB
1,978.36 KB
(98.08%)
zero.js📈 view plot
🚷 view threshold
279.58 KB
(+0.03%)Baseline: 279.51 KB
285.10 KB
(98.07%)
zero.js.br📈 view plot
🚷 view threshold
74.13 KB
(+0.07%)Baseline: 74.08 KB
75.56 KB
(98.11%)
🐰 View full continuous benchmarking report in Bencher

@grgbkr grgbkr enabled auto-merge March 29, 2026 21:23
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 29, 2026

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 29, 2026

🐰 Bencher Report

Branchgrgbkr/bumped-cvr-logging
Testbedself-hosted-metal
Click to view all benchmark results
BenchmarkThroughputBenchmark Result
operations / second (ops/s)
(Result Δ%)
Lower Boundary
operations / second (ops/s)
(Limit %)
src/client/custom.bench.ts > big schema📈 view plot
🚷 view threshold
112,102.11 ops/s
(+2.17%)Baseline: 109,724.44 ops/s
100,809.58 ops/s
(89.93%)
src/client/zero.bench.ts > basics > All 1000 rows x 10 columns (numbers)📈 view plot
🚷 view threshold
1,257.02 ops/s
(-10.97%)Baseline: 1,411.95 ops/s
669.15 ops/s
(53.23%)
src/client/zero.bench.ts > pk compare > pk = N📈 view plot
🚷 view threshold
35,583.61 ops/s
(-8.37%)Baseline: 38,835.95 ops/s
24,598.84 ops/s
(69.13%)
src/client/zero.bench.ts > with filter > Lower rows 500 x 10 columns (numbers)📈 view plot
🚷 view threshold
2,179.36 ops/s
(-2.32%)Baseline: 2,231.16 ops/s
1,183.69 ops/s
(54.31%)
🐰 View full continuous benchmarking report in Bencher

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Mar 29, 2026

🐰 Bencher Report

Branchgrgbkr/bumped-cvr-logging
Testbedself-hosted-metal
Click to view all benchmark results
BenchmarkThroughputoperations / second (ops/s)
src/chinook-hydration.bench.ts > all playlists > zpg: all playlists📈 view plot
🚷 view threshold
4.68 ops/s
src/chinook-hydration.bench.ts > all playlists > zql: all playlists📈 view plot
🚷 view threshold
5.74 ops/s
src/chinook-hydration.bench.ts > all playlists > zqlite: all playlists📈 view plot
🚷 view threshold
1.27 ops/s
src/chinook-manual-cases.bench.ts > tracks with artist name > flipped📈 view plot
🚷 view threshold
4,239.92 ops/s
src/chinook-manual-cases.bench.ts > tracks with artist name > not flipped📈 view plot
🚷 view threshold
30.11 ops/s
src/chinook-push.bench.ts > edit for limited query, inside the bound > zql: edit for limited query, inside the bound📈 view plot
🚷 view threshold
139,370.86 ops/s
src/chinook-push.bench.ts > edit for limited query, inside the bound > zqlite: edit for limited query, inside the bound📈 view plot
🚷 view threshold
49,738.71 ops/s
src/chinook-push.bench.ts > edit for limited query, outside the bound > zql: edit for limited query, outside the bound📈 view plot
🚷 view threshold
148,224.57 ops/s
src/chinook-push.bench.ts > edit for limited query, outside the bound > zqlite: edit for limited query, outside the bound📈 view plot
🚷 view threshold
50,526.80 ops/s
src/chinook-push.bench.ts > push into limited query, inside the bound > zql: push into limited query, inside the bound📈 view plot
🚷 view threshold
79,257.01 ops/s
src/chinook-push.bench.ts > push into limited query, inside the bound > zqlite: push into limited query, inside the bound📈 view plot
🚷 view threshold
2,999.01 ops/s
src/chinook-push.bench.ts > push into limited query, outside the bound > zql: push into limited query, outside the bound📈 view plot
🚷 view threshold
272,989.69 ops/s
src/chinook-push.bench.ts > push into limited query, outside the bound > zqlite: push into limited query, outside the bound📈 view plot
🚷 view threshold
56,542.37 ops/s
src/chinook-push.bench.ts > push into unlimited query > zql: push into unlimited query📈 view plot
🚷 view threshold
231,335.24 ops/s
src/chinook-push.bench.ts > push into unlimited query > zqlite: push into unlimited query📈 view plot
🚷 view threshold
82,757.66 ops/s
src/planner-cost.bench.ts > planner cost > 1 exists: track.exists(album)📈 view plot
🚷 view threshold
8,553.79 ops/s
src/planner-cost.bench.ts > planner cost > 10 exists (AND)📈 view plot
🚷 view threshold
99,501.48 ops/s
src/planner-cost.bench.ts > planner cost > 10 exists (OR)📈 view plot
🚷 view threshold
2,684.80 ops/s
src/planner-cost.bench.ts > planner cost > 12 exists (AND)📈 view plot
🚷 view threshold
91,623.42 ops/s
src/planner-cost.bench.ts > planner cost > 12 exists (OR)📈 view plot
🚷 view threshold
2,297.55 ops/s
src/planner-cost.bench.ts > planner cost > 12 level nesting📈 view plot
🚷 view threshold
2,099.59 ops/s
src/planner-cost.bench.ts > planner cost > 2 exists (AND): track.exists(album).exists(genre)📈 view plot
🚷 view threshold
3,637.45 ops/s
src/planner-cost.bench.ts > planner cost > 3 exists (AND)📈 view plot
🚷 view threshold
1,420.61 ops/s
src/planner-cost.bench.ts > planner cost > 3 exists (OR)📈 view plot
🚷 view threshold
729.66 ops/s
src/planner-cost.bench.ts > planner cost > 5 exists (AND)📈 view plot
🚷 view threshold
222.98 ops/s
src/planner-cost.bench.ts > planner cost > 5 exists (OR)📈 view plot
🚷 view threshold
117.14 ops/s
src/planner-cost.bench.ts > planner cost > Nested 2 levels: track > album > artist📈 view plot
🚷 view threshold
3,148.50 ops/s
src/planner-cost.bench.ts > planner cost > Nested 4 levels: playlist > tracks > album > artist📈 view plot
🚷 view threshold
515.35 ops/s
src/planner-cost.bench.ts > planner cost > Nested with filters: track > album > artist (filtered)📈 view plot
🚷 view threshold
2,589.86 ops/s
src/planner-hydration.bench.ts > playlist.exists(tracks) > planned: playlist.exists(tracks)📈 view plot
🚷 view threshold
441.86 ops/s
src/planner-hydration.bench.ts > playlist.exists(tracks) > unplanned: playlist.exists(tracks)📈 view plot
🚷 view threshold
436.70 ops/s
src/planner-hydration.bench.ts > track.exists(album) OR exists(genre) > planned: track.exists(album) OR exists(genre)📈 view plot
🚷 view threshold
116.17 ops/s
src/planner-hydration.bench.ts > track.exists(album) OR exists(genre) > unplanned: track.exists(album) OR exists(genre)📈 view plot
🚷 view threshold
31.58 ops/s
src/planner-hydration.bench.ts > track.exists(album) where title="Big Ones" > planned: track.exists(album) where title="Big Ones"📈 view plot
🚷 view threshold
5,835.88 ops/s
src/planner-hydration.bench.ts > track.exists(album) where title="Big Ones" > unplanned: track.exists(album) where title="Big Ones"📈 view plot
🚷 view threshold
35.77 ops/s
src/planner-hydration.bench.ts > track.exists(album).exists(genre) > planned: track.exists(album).exists(genre)📈 view plot
🚷 view threshold
27.93 ops/s
src/planner-hydration.bench.ts > track.exists(album).exists(genre) > unplanned: track.exists(album).exists(genre)📈 view plot
🚷 view threshold
27.55 ops/s
src/planner-hydration.bench.ts > track.exists(album).exists(genre) with filters > planned: track.exists(album).exists(genre) with filters📈 view plot
🚷 view threshold
4,227.56 ops/s
src/planner-hydration.bench.ts > track.exists(album).exists(genre) with filters > unplanned: track.exists(album).exists(genre) with filters📈 view plot
🚷 view threshold
37.86 ops/s
src/planner-hydration.bench.ts > track.exists(playlists) > planned: track.exists(playlists)📈 view plot
🚷 view threshold
2.82 ops/s
src/planner-hydration.bench.ts > track.exists(playlists) > unplanned: track.exists(playlists)📈 view plot
🚷 view threshold
2.81 ops/s
🐰 View full continuous benchmarking report in Bencher

@github-actions
Copy link
Copy Markdown

🐰 Bencher Report

Branchgrgbkr/bumped-cvr-logging
Testbedself-hosted-metal
Click to view all benchmark results
BenchmarkThroughputoperations / second (ops/s)
src/size-of-value.bench.ts > getSizeOfValue performance > arrays > large array (100 items)📈 view plot
🚷 view threshold
1,537,765.89 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > arrays > small array (10 items)📈 view plot
🚷 view threshold
12,755,982.63 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > datasets > large dataset (100x512B)📈 view plot
🚷 view threshold
38,634.10 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > datasets > small dataset (10x256B)📈 view plot
🚷 view threshold
387,899.06 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > objects > nested object📈 view plot
🚷 view threshold
3,433,001.39 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > objects > structured object (1KB)📈 view plot
🚷 view threshold
3,939,989.77 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > objects > structured object (256B)📈 view plot
🚷 view threshold
3,891,758.37 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > primitives > boolean📈 view plot
🚷 view threshold
73,215,131.84 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > primitives > integer📈 view plot
🚷 view threshold
64,000,692.22 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > primitives > null📈 view plot
🚷 view threshold
72,357,409.60 ops/s
src/size-of-value.bench.ts > getSizeOfValue performance > primitives > string (100 chars)📈 view plot
🚷 view threshold
782,574.16 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > add📈 view plot
🚷 view threshold
2.39 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > addCentroid📈 view plot
🚷 view threshold
1.88 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > addCentroidList📈 view plot
🚷 view threshold
1.92 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > merge > addCentroid📈 view plot
🚷 view threshold
30,858.83 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > merge > merge📈 view plot
🚷 view threshold
31,481.35 ops/s
src/tdigest.bench.ts > TDigest Benchmarks > quantile📈 view plot
🚷 view threshold
2.32 ops/s
🐰 View full continuous benchmarking report in Bencher

@grgbkr grgbkr added this pull request to the merge queue Mar 29, 2026
Merged via the queue into main with commit c142c88 Mar 29, 2026
35 of 42 checks passed
@grgbkr grgbkr deleted the grgbkr/bumped-cvr-logging branch March 29, 2026 21:42
Copy link
Copy Markdown
Contributor

@darkgnotic darkgnotic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice

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.

2 participants