Skip to content

Use explicit write transactions during sync - #90

Merged
pc-coholic merged 6 commits into
masterfrom
transaction-workaround
Aug 24, 2026
Merged

Use explicit write transactions during sync#90
pc-coholic merged 6 commits into
masterfrom
transaction-workaround

Conversation

@antweb

@antweb antweb commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

SQLDelight starts all transactions in the default DEFERRED mode. As a result, transactions that start with a read-only query but perform a write further down the line start off as a read-only transaction and are then upgraded to read-write on the fly.

If someone else holds a write lock at the moment of this upgrade, the transaction will instantly fail with an SQLITE_BUSY error - unlike explicit read-write transactions which would wait for a busy timeout first (if configured).

The easiest way to avoid this would be to start the transaction with BEGIN IMMEDIATE, but the SQLDelight APIs do not seem to provide this option. Until we find a better solution, issue a no-op write statement before the original transaction contents as a workaround. This will force an upgrade to a read-write transaction right away.

@pc-coholic
pc-coholic merged commit 68e83e3 into master Aug 24, 2026
1 check passed
@pc-coholic
pc-coholic deleted the transaction-workaround branch August 24, 2026 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants