|
sqlite
|
4b69f87a7b
fix(sqlite): stop treating step failures as end-of-rows — advance_row collapsed every non-ROW step status (SQLITE_BUSY, SQLITE_LOCKED, real errors) into the DONE cleanup path, so a contended read silently returned empty/partial results instead of failing; SQLITE_DONE is now the only clean end, anything else resets the statement and raises a fatal GLib error carrying the sqlite code, name and errmsg. Fatal follows the family's iteration-error convention (the Invercargill tracker channel cannot propagate GLib errors — AssertingLambdaTracker/assert_no_error abort); with the connection's WAL + busy_timeout(5000) mitigation kept as belt-and-braces, a surfaced BUSY means the timeout genuinely expired and a restart beats silently corrupt reads. No signature or ABI change. Regression test: two connections on a DELETE-journal file, BEGIN EXCLUSIVE on one, busy_timeout=1 on the other — the child used to print rows=0 and exit cleanly (the lie), now aborts with 'sqlite code 5 (SQLITE_BUSY)'; the parent asserts the signal death, the stderr marker, and that no row count was produced
|
1 місяць тому |