Repository navigation
Conversation
With `strict=true`, a column whose first value is NULL was typed by stepping ahead to a non-NULL row, then rewinding with sqlite3_reset + sqlite3_step. Rewinding re-runs the statement, so `INSERT ... RETURNING` inserted its rows twice and `UPDATE ... RETURNING` applied its update twice. Statements that write (sqlite3_stmt_readonly == 0) are no longer scanned; such a column gets its declared type, or `Any` when it has none. Strict `Any` columns (e.g. declared BLOB) also read every value as blob bytes, so an integer 1 came back as UInt8[0x31]. Values in an `Any` column are now read by their own storage class, as in non-strict queries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #370 +/- ##
==========================================
+ Coverage 96.75% 96.77% +0.02%
==========================================
Files 5 5
Lines 770 775 +5
==========================================
+ Hits 745 750 +5
Misses 25 25 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
With
strict=true, a column whose first value is NULL is typed by stepping ahead to a non-NULL row and then rewinding withsqlite3_reset+sqlite3_step. Rewinding re-runs the statement, so writes that return rows ran twice:UPDATE ... RETURNINGlikewise applied its update twice. #354 stopped the scan for statements that return no row; this covers writes that do return rows.sqlite3_stmt_readonly == 0) are no longer scanned. A column whose first value is NULL gets its declared type, orAnywhen it has none.Anycolumns (for example a column declaredBLOB) read every value as blob bytes, so an integer1came back asUInt8[0x31]and'txt'as its bytes. Values in anAnycolumn are now read by their own storage class, as non-strict queries already do.Verification: two new testsets in "strict mode" (6 assertions fail on master, all pass here); full
Pkg.test()passes locally on Julia 1.12 (SQLite 505/505 plus the lifetime, aggregate, BLOB and multi-statement sets).🤖 Generated with Claude Code