make D1 splitter.ts use sqlite's parser logic - #15712
Conversation
🦋 Changeset detectedLatest commit: ffbcdb8 The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
@cloudflare/autoconfig
@cloudflare/build-output-utils
@cloudflare/codemods
@cloudflare/config
@cloudflare/containers-shared
create-cloudflare
@cloudflare/deploy-helpers
@cloudflare/kv-asset-handler
miniflare
@cloudflare/pages-functions
@cloudflare/pages-shared
@cloudflare/unenv-preset
@cloudflare/vite-plugin
@cloudflare/vitest-plugin
@cloudflare/workers-auth
@cloudflare/workers-editor-shared
@cloudflare/workers-utils
wrangler
commit: |
Bracketed identifier: Quoted value or identifier: |
|
I'm Bonk, and I've done a quick review of your PR. PR #15712 replaces D1 SQL splitting with SQLite's statement-completion state machine.
|
fe3fc29 to
ffbcdb8
Compare
|
Codeowners approval required for this PR:
Show detailed file reviewers |
cjol
left a comment
There was a problem hiding this comment.
You’re right, this seems a much better fix than the piecemeal PRs we’ve received. I’ll hold off on the others in favour of this?
workers-devprod
left a comment
There was a problem hiding this comment.
Codeowners reviews satisfied
## pnpm-workspace.yaml (default) ## Dependency Updates | Package | From | To | Type | | --- | --- | --- | --- | | `wrangler` | 4.136.2 | 4.138.0 | minor | ## Release Notes <details> <summary><b>wrangler</b> (4.136.2 → 4.138.0) — 3 releases</summary> <details> <summary><b>4.138.0</b></summary> ### Minor Changes - [#15776](cloudflare/workers-sdk#15776) [`b03f960`](cloudflare/workers-sdk@b03f960) Thanks [@<!---->edevil](https://github.com/edevil)! - Add event-code support to temporary Worker deployments Use `wrangler deploy --temporary --event-code <code>` to provision an account for an event. Wrangler requires explicit server acknowledgement before caching the account and keeps the event code out of its cache and telemetry. - [#15817](cloudflare/workers-sdk#15817) [`6e77c53`](cloudflare/workers-sdk@6e77c53) Thanks [@<!---->jamesopstad](https://github.com/jamesopstad)! - Allow framework commands to produce Preview Build Output with the experimental config When `cf previews deploy` invokes a framework build command, Preview intent is now preserved. Function-based `cloudflare.config.ts` files receive `isPreview: true`, and generated Build Output is marked as a Preview build. ### Patch Changes - [#15806](cloudflare/workers-sdk#15806) [`8fade73`](cloudflare/workers-sdk@8fade73) Thanks [@<!---->NuroDev](https://github.com/NuroDev)! - Standardize Zod validation error output Format validation errors with Zod's built-in `prettifyError()` helper so Miniflare, Wrangler, the Vite plugin, and the Vitest plugin show consistent messages and property paths. - Updated dependencies [[`a71237a`](cloudflare/workers-sdk@a71237a), [`8fade73`](cloudflare/workers-sdk@8fade73)]: - miniflare@5.20260921.1-alpha </details> <details> <summary><b>4.137.0</b></summary> ### Minor Changes - [#15778](cloudflare/workers-sdk#15778) [`cd7508c`](cloudflare/workers-sdk@cd7508c) Thanks [@<!---->jamesopstad](https://github.com/jamesopstad)! - Generate types during development and supported builds with Vite's `experimental.newConfig` option or Wrangler's `--experimental-new-config` flag (and `--experimental-cf-build-output` for builds) When Wrangler's `--experimental-new-config` flag or Vite's `experimental.newConfig` option is enabled, inferred configuration and runtime declarations are now kept in `.cloudflare/types/index.d.ts`. Vite refreshes them during development and production builds. Wrangler refreshes them during development and when building with both `--experimental-new-config` and `--experimental-cf-build-output`. In the experimental `wrangler.config.ts` format, the `types` option is now top-level because it applies to both commands. ### Patch Changes - [#15765](cloudflare/workers-sdk#15765) [`1bdb96d`](cloudflare/workers-sdk@1bdb96d) Thanks [@<!---->th0m](https://github.com/th0m)! - Prepare the required egress sidecar for local Containers without configured images Wrangler dev and Vite dev/preview now pull the required sidecar for Durable Object-managed Containers that select their application image at start time. Previously, these Containers failed to start unless the sidecar image was already cached in Docker. - [#15712](cloudflare/workers-sdk#15712) [`f5605f5`](cloudflare/workers-sdk@f5605f5) Thanks [@<!---->alsuren](https://github.com/alsuren)! - Match D1 SQL statement splitting to the local SQLite runtime Wrangler now uses SQLite's statement-completion state machine when splitting D1 SQL files. This keeps trigger, quoted identifier, comment, and keyword handling consistent with local exe …[full notes](https://github.com/cloudflare/workers-sdk/releases/tag/wrangler%404.137.0) </details> <p><i>…and 1 more release(s) not shown</i></p> </details> --- *This PR was auto-generated by [catalog-update-action](https://github.com/brandhaug/catalog-update-action).* Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Fixes #15228 and a bunch of others
There are a bunch of MRs (#15234 #15226 and #15163) that are trying to fix minor bugs in our sqlite parser in splitter.ts.
The fundamental problem with that parser is that it's derived from a generic sql parser that is primarily a PostgreSQL parser rather than a sqlite parser.
I wrote on one of them what the solution is: #15163 (comment)
The existing code also some funkiness around removing comments, but I know that it is due to this bug: #7739 . We don't need to remove all comments to work around that workerd bug: we can just remove fragments that only contain whitespace and comments.
I asked my agent to include the regression tests from #15234 #15226 and #15163 in our test suite, to make sure their edge-cases are covered.
A picture of a cute animal (not mandatory, but encouraged)