fix: Syncing After Uploads when using Triggers #781
Merged
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.
Overview
When using triggers (e.g.,
database.triggers.createDiffTrigger()), theupdateLocalTarget()method could fail to read theps_crudsequence value, causing sync to be blocked after performing uploads.Root Cause
The trigger system creates temporary tables and triggers (
CREATE TEMP TABLEandCREATE TEMP TRIGGER) in thetempschema on the connection. When these temporary objects exist, SQLite's schema resolution mechanism prioritizes thetempschema when resolving unqualified table names. This means that queries tosqlite_sequencewithout an explicit schema qualifier could resolve totemp.sqlite_sequenceinstead ofmain.sqlite_sequence, returning no rows even though the sequence was actually advancing correctly.Solution
Explicitly qualify
sqlite_sequencequeries with themain.schema prefix inSqliteBucketStorage.updateLocalTarget():SELECT seq FROM sqlite_sequence→SELECT seq FROM main.sqlite_sequenceThis ensures we always query the main database's sequence table, regardless of temporary schema context.
closes #778