mirror of
https://github.com/asg017/sqlite-vec.git
synced 2026-04-25 08:46:49 +02:00
Add FTS5-style command column and runtime oversample for rescore
Replace the old INSERT INTO t(rowid) VALUES('command') hack with a
proper hidden command column named after the table (FTS5 pattern):
INSERT INTO t(t) VALUES ('oversample=16')
The command column is the first hidden column (before distance and k)
to reserve ability for future table-valued function argument use.
Schema: CREATE TABLE x(rowid, <cols>, "<table>" hidden, distance hidden, k hidden)
For backwards compat, pre-v0.1.10 tables (detected via _info shadow
table version) skip the command column to avoid name conflicts with
user columns that may share the table's name. Verified with legacy
fixture DB generated by sqlite-vec v0.1.6.
Changes:
- Add hidden command column to sqlite3_declare_vtab for new tables
- Version-gate via _info shadow table for existing tables
- Validate at CREATE time that no column name matches table name
- Add rescore_handle_command() with oversample=N support
- rescore_knn() prefers runtime oversample_search over CREATE default
- Remove old rowid-based command dispatch
- Migrate all DiskANN/IVF/fuzz tests and benchmarks to new syntax
- Add legacy DB fixture (v0.1.6) and 9 backwards-compat tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b7fc459be4
commit
6e2c4c6bab
21 changed files with 512 additions and 105 deletions
|
|
@ -122,7 +122,7 @@ def test_ivf_int8_insert_and_query(db):
|
|||
"INSERT INTO t(rowid, v) VALUES (?, ?)", [i, _f32([i, 0, 0, 0])]
|
||||
)
|
||||
|
||||
db.execute("INSERT INTO t(rowid) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t(t) VALUES ('compute-centroids')")
|
||||
|
||||
# Should be able to query
|
||||
rows = db.execute(
|
||||
|
|
@ -151,7 +151,7 @@ def test_ivf_binary_insert_and_query(db):
|
|||
"INSERT INTO t(rowid, v) VALUES (?, ?)", [i, _f32(v)]
|
||||
)
|
||||
|
||||
db.execute("INSERT INTO t(rowid) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t(t) VALUES ('compute-centroids')")
|
||||
|
||||
rows = db.execute(
|
||||
"SELECT rowid FROM t WHERE v MATCH ? AND k = 5",
|
||||
|
|
@ -221,10 +221,10 @@ def test_ivf_int8_oversample_improves_recall(db):
|
|||
db.execute("INSERT INTO t1(rowid, v) VALUES (?, ?)", [i, v])
|
||||
db.execute("INSERT INTO t2(rowid, v) VALUES (?, ?)", [i, v])
|
||||
|
||||
db.execute("INSERT INTO t1(rowid) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t2(rowid) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t1(rowid) VALUES ('nprobe=4')")
|
||||
db.execute("INSERT INTO t2(rowid) VALUES ('nprobe=4')")
|
||||
db.execute("INSERT INTO t1(t1) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t2(t2) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t1(t1) VALUES ('nprobe=4')")
|
||||
db.execute("INSERT INTO t2(t2) VALUES ('nprobe=4')")
|
||||
|
||||
query = _f32([5.0, 1.5, 2.5, 0.5])
|
||||
r1 = db.execute("SELECT rowid FROM t1 WHERE v MATCH ? AND k=10", [query]).fetchall()
|
||||
|
|
@ -247,7 +247,7 @@ def test_ivf_quantized_delete(db):
|
|||
"INSERT INTO t(rowid, v) VALUES (?, ?)", [i, _f32([i, 0, 0, 0])]
|
||||
)
|
||||
|
||||
db.execute("INSERT INTO t(rowid) VALUES ('compute-centroids')")
|
||||
db.execute("INSERT INTO t(t) VALUES ('compute-centroids')")
|
||||
assert db.execute("SELECT count(*) FROM t_ivf_vectors00").fetchone()[0] == 10
|
||||
|
||||
db.execute("DELETE FROM t WHERE rowid = 5")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue