Skip to content

Use explicit write transactions during sync - #90

Open
antweb wants to merge 6 commits into
masterfrom
transaction-workaround
Open

Use explicit write transactions during sync#90
antweb wants to merge 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.

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.

2 participants