You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 18, 2026. It is now read-only.
feat(diskann_vtab): implement Phase 1 virtual table with MATCH search
Rewrites diskann_vtab.c with proper xCreate/xConnect split, MATCH-based
ANN search with k and LIMIT support, ROWID lookup for DELETE, shadow
table protection (iVersion=3 + xShadowName), and xDestroy for DROP.
Key fixes: two-pass xBestIndex to handle SQLite's non-deterministic
constraint ordering, SAVEPOINT tolerance for vtab context (SQLITE_BUSY),
and %w quoting for table names in ROWID lookup SQL.
145 tests (126 C API + 19 vtab), ASan + Valgrind clean.
-**HIDDEN columns and SELECT \*.** HIDDEN cols don't appear in `SELECT *` but can be referenced by name. Metadata cols (NOT hidden) appear in `SELECT *`.
66
66
-**Filtered-DiskANN paper + Microsoft Rust:** Non-matching nodes MUST still be visited (graph bridges). Filter only gates top-K insertion. `search_ctx_mark_visited()` sets `visited=1` and adds to visited list BEFORE the filter check.
67
67
-**Beam width heuristic:**`max(search_list * 2, k * 4)` for filtered search. Tune from recall test results.
68
-
-**xBestIndex argv assignment must be conditional.**Assign argvIndex sequentially for each present constraint (MATCH, K, LIMIT, filters). xFilter unpacks based on idxNum bitmask, not fixed positions.
68
+
-**xBestIndex argv assignment must match xFilter consumption order.**SQLite presents constraints in arbitrary order. Use a two-pass approach: pass 1 records constraint positions, pass 2 assigns argvIndex in the fixed order xFilter expects (MATCH, K, LIMIT, ROWID, then filters). Assigning sequentially as encountered causes argv order mismatches that silently break xFilter.
0 commit comments