Performance and correctness release, with one small breaking change to selectBytes.
Breaking
Database.selectBytesnow returns aBytesResult({Uint8List bytes, int rowCount}) instead of a bareUint8List. Read.bytesat call sites.
Fixed
- Windows: local databases now open.
resqlite.dllexported no FFI symbols (MSVC default), so every call failed with runtime error 127. The build hook now emits/export:directives for the full FFI surface; the export set is scanned from the@Nativebindings and shared with the Linux version script, which also closes a parallel gap where theresqlite_reader_*helpers (used on every read) were hidden on Linux (#216).
New
selectBytesreportsrowCount— counted in C during the same serialization pass (free forhas_more-style paging).
Performance — selectBytes JSON serialization
Per-experiment order-flipped A/B deltas; output byte-identical.
- Integer-valued REAL fast path — −72% to −81% integral-REAL lanes (#200)
- Integer column formatting (two-digit itoa + direct-to-buffer + row-level reserve) — −8% to −26% (#198, #206, #208)
- Column-name token pre-encoding — −4% to −11% wide cols (#196, #201)
- Per-cell
sqlite3_column_valuereuse — −1% to −6% (#213, #215) - Large single-row text bind encoder — −15% to −39% at 16 KB–1 MB (#190, #193)
Companions
resqlite_vectorandresqlite_js→ 0.1.3 (compatibility release forresqlite: ^0.7.0; no functional changes).
Also explored (rejected — no runtime code shipped)
exp 189 (savepoint name compression), 193 (Row.values list-view), 196 (inter-row framing), 197 (true group commit moonshot), 200 (stable-type selectBytes moonshot), 201 (base64 quote reservation), 202 (TEXT string reservation), 204 (UTF-8 over-reserve bind sizing).