Repository navigation
Commit 93ff4e6
committed
fix(storage): require createMany on CustomAdapter; drizzle issues chunked bulk INSERT
Drizzle adapter had no native createMany — the factory's fallback looped
through per-row inserts. For a Cloudflare-scale OpenAPI spec (~2700 ops)
addSpec devolved to ~10 000 sequential INSERTs through Hyperdrive inside
a single transaction, blowing both the Worker CPU / memory budget and
any reasonable wall-clock.
Changes:
- storage-core/adapter.ts: CustomAdapter.createMany is now required
(no ?). Backends must implement a real bulk insert; there is no
silent per-row fallback to mask prod regressions.
- storage-core/factory.ts: drop the loop fallback entirely. createMany
delegates to inner.createMany, applying per-row input/output
transforms so JSON / dates / booleans serialize the same as single
create().
- storage-core/testing/memory.ts: native createMany that just pushes
rows into the in-memory table.
- storage-drizzle/adapter.ts: real db.insert(table).values(rows).returning()
in chunks of 500. One statement per chunk (so ~6 round-trips for 2700
ops, not 2700). Chunking also keeps any single statement under ~2MB
— a single giant INSERT would choke Hyperdrive ingress and the WASM
PGlite used in tests. Fails loudly on mysql (no RETURNING).1 parent bee25da commit 93ff4e6
4 files changed
Lines changed: 72 additions & 7 deletions
File tree
- packages/core
- storage-core/src
- testing
- storage-drizzle/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
207 | 207 | | |
208 | 208 | | |
209 | 209 | | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
210 | 222 | | |
211 | 223 | | |
212 | 224 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
637 | 637 | | |
638 | 638 | | |
639 | 639 | | |
640 | | - | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
641 | 647 | | |
642 | | - | |
643 | | - | |
644 | | - | |
645 | | - | |
646 | | - | |
647 | | - | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
648 | 670 | | |
649 | 671 | | |
650 | 672 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
168 | 168 | | |
169 | 169 | | |
170 | 170 | | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
171 | 178 | | |
172 | 179 | | |
173 | 180 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
312 | 312 | | |
313 | 313 | | |
314 | 314 | | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
315 | 339 | | |
316 | 340 | | |
317 | 341 | | |
| |||
0 commit comments