Repository navigation
turbovec-sqlite sqlite-v0.3.0
·
9 commits
to main
since this release
0.3.0 — 2026-10-11
- Commit inserts and deletes without loading the compressed index. A new
<name>_idsshadow table answers rowid conflict checks, rowid lookups, full
rowid scans, andcount(*); a new<name>_inforow holds the row count and
delta counts a commit needs. Connecting reads that one row. The index loads on
the first search, or when a commit compacts. On a 1,000,000-row,
1,536-dimensional index (745 MiB base), a one-row delete-and-insert commit
from a fresh process fell from 468 ms and 830 MiB peak RSS to 0.8 ms and
24.5 MiB, with a warm page cache. The first search costs what it did. - Upgrade 0.2.0 storage in place on its first write: the commit creates
_info
and_idsfrom the index it already loaded and empties<name>_meta. This
took 1.1 s on the index above. Reads alone do not upgrade. The upgrade is
one-way: 0.2.0 then refuses the index with "Query returned no rows", including
a connection opened before the upgrade, so it cannot write without
maintaining_ids. Chunk and delta formats are unchanged. - Record a storage format number in
_infoand refuse an unknown one by
number. - Fix a savepoint rollback that lost a replaced row. On a base under 1 MiB, an
insert after anINSERT OR REPLACEdropped its vector, so a later delete took
its destructive checkpoint after the replacement, and rolling back past the
checkpoint undid the replacement by removing the row. Inserts now keep their
vectors after any delete or replacement. 0.2.0 has this bug. The test script now
runs the transaction model check for 300 seeds of 30 steps, which reproduces
it; the previous 20 seeds of 20 did not. - Pin the extension on Windows so it stays loaded after its last connection
closes. SQLite unloads it then, but every search starts TurboVec's rayon
worker threads, which keep running code from the library and fault once
Windows unmaps it. Linux and macOS already keep it loaded. 0.2.0 has this
too; a test now checks that the library outlives its connections. PRAGMA integrity_checkcompares_idsand the_infocounts with the
index. A load checks the index's row count against_info.- Each insert and delete writes one
_idsrow, whichtotal_changes()counts.
A 100,000-row bulk insert in one transaction took 11% longer (1.29 s to
1.43 s).