Fix stale block content after SQLite INSERT OR REPLACE - #68
Open
marcobambini wants to merge 1 commit into
Open
marcobambini wants to merge 1 commit into
marcobambini wants to merge 1 commit into
Conversation
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 SQLite’s default
recursive_triggers=OFF,INSERT OR REPLACEskips the old row’s delete trigger. Replacing block textAAA\nBBB\nCCCwithZZZcould therefore produceZZZ\nBBB\nCCCon replicas and after local materialization.This change snapshots the existing block names for the exact primary key and column, tombstones and removes those blocks, then writes the replacement. Block-write errors propagate so the enclosing replacement rolls back. Existing INSERT NULL handling is preserved.
Dependency
This PR is stacked on #46 and targets
fix/block-lww-upsert-tombstone. Its parity-preserving metadata upsert is required when replacement blocks reuse retired position IDs. Merge #46 first, then retarget this PR tomain.Validation
Implementation and regression details:
docs/block-replace-fix.md.