Repository navigation
Increase SQLITE_LIMIT_VDBE_OP to 250000 from 25000 - #7790
joshthoward wants to merge 1 commit into
Conversation
|
💬 Approved with comments — A small, targeted change that raises SQLITE_LIMIT_VDBE_OP tenfold and adds a regression test. The only finding is a SUGGESTION: confirm the test fails at the old limit, and record why 250000 was chosen. Findings: 1 suggestion The decision is advisory: this comment never approves, blocks or requests changes on the pull request. 🔧 Fix with your agentPaste the following into your coding agent to investigate and fix these issues. 📋 Code Quality: 💬 1 commentThe limit change is correct. The test may not fail at the old limit, and the PR doesn't say why 250000 was chosen. Recommendation: 💬 Optional Nits
View full review
The new test comment describes the code as it is now, as the repository's comment guidelines ask. The test uses KJ types throughout. ✅ All other checks passed📝 Documentation: ✅ LGTMNo documentation issues. The new test comment explains the current behavior clearly. Reviewed commit: |
|
Since last review: 0 resolved, 1 still open, 0 new. The revised patch only reformats the SQLite Not re-run: docs, design-simplicity (no author changes in their files since the last review) Reviewed commit: 9426fffe · github run |
| // PRAGMA quick_check compiles checks for every table and index into a single statement, so its | ||
| // VDBE program grows with the schema. SQLITE_LIMIT_VDBE_OP must leave room for realistic schemas | ||
| // like this one; exceeding it fails the prepare with a misleading SQLITE_NOMEM. | ||
| for (auto i: kj::zeroTo(100)) { |
There was a problem hiding this comment.
[WARNING] This never exercises the previous 25,000-op ceiling: running the same 100-table schema with .limit vdbe_op 25000 returned ok in SQLite 3.45.1, so reverting the production limit would still pass this test. Grow the fixture to a size demonstrated to fail at the old cap (500 table/index pairs fails there and passes at 250,000 in that version).
| for (auto i: kj::zeroTo(100)) { | |
| for (auto i: kj::zeroTo(500)) { |
|
Reviewing head f083b58: I checked the corresponding generic D1 fixture on unchanged official workerd 1.20261012.1 and 1.20261016.1 (Miniflare5.20261012.1-beta, Node24.15.0). Both released runtimes produce:
Each table uses exactly id INTEGER PRIMARY KEY, a TEXT NOT NULL, b INTEGER, c BLOB, plus its index on a. Every trial creates a fresh transient instance. Negative NULL inserts are refused, all counts remain zero, telemetry is disabled and outbound calls are forbidden. A separate constrained-column negative control from #7439 still fails at the known boundary with CHECK enforcement intact. The complete portable probe ran eight controlled trials. On these released D1 versions, increasing the corresponding fixture to500 still does not demonstrate the old-limit failure. Could the C++ regression be verified to fail with25,000 and pass with250,000, using a fixture such as the1,000-table case or the constrained-column family? These D1 observations do not themselves execute or validate the C++ unit test or this unmerged candidate. Separate native SQLite3.51.3 completes all checks; its1,000-table EXPLAIN has32,100 instructions. That is not a count measured from failed D1 preparation, original-file verification or a hosted engine measurement. The bounded engine change is a promising candidate. Once accepted, could the fixed official release and supported hosted-D1 availability/qualification procedure be identified? We retain unchanged whole-database integrity/capture checks and have not executed an unmerged/custom engine, altered constraints, changed a deployed migration or performed a new hosted operation. No private schema, application data, database/account identifiers or credentials are included. |
f083b58 to
9426fff
Compare
No description provided.