# 2026-01-17 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # source [file join [file dirname [info script]] vec1_common.tcl] set testprefix vec1aa vec1_load db do_execsql_test 1.0 { CREATE VIRTUAL TABLE v1 USING vec1; } do_execsql_test 1.0.1 { SELECT vec1_config('nthread'); } {1} do_execsql_test 1.0.2 { SELECT vec1_config('nprobe'); } {0.05} do_execsql_test 1.1 { INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); INSERT INTO v1(rowid, vector) VALUES( 1, vec1_from_json('[1,2,3,4,5,6,7,8]') ); } do_execsql_test 1.2 { PRAGMA integrity_check } {ok} do_execsql_test 1.3 { DELETE FROM v1_base; PRAGMA integrity_check; } {{v1: %_idx row 1 missing from %_base}} do_execsql_test 1.4 { DROP TABLE v1; } do_execsql_test 1.5 { CREATE VIRTUAL TABLE v1 USING vec1; INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); INSERT INTO v1(rowid, vector) VALUES(1, vec1_from_json('[1,2,3,4]')); BEGIN; SAVEPOINT aaa; INSERT INTO v1(rowid, vector) VALUES(2, vec1_from_json('[1,2,3,4]')); ROLLBACK TO aaa; COMMIT; PRAGMA integrity_check; } {ok} do_execsql_test 1.6 { BEGIN; INSERT INTO v1(rowid, vector) VALUES(3, vec1_from_json('[1,2,3,4]')); ROLLBACK; INSERT INTO v1(rowid, vector) VALUES(4, vec1_from_json('[1,2,3,4]')); PRAGMA integrity_check; } {ok} #------------------------------------------------------------------------- #reset_db #vec1_load db #do_execsql_test 2.0 { # CREATE VIRTUAL TABLE v1 USING vec1; # INSERT INTO v1(cmd, vector) VALUES('rebuild', 'flat'); # INSERT INTO v1(rowid, vector) VALUES(1, vec1_from_json('[1,2,3,4]')); # INSERT INTO v1(rowid, vector) VALUES(2, vec1_from_json('[4,3,2,1]')); # SELECT count(*) fROM v1_idx; #} {1} #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 3.0 { CREATE VIRTUAL TABLE v1 USING vec1; INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); BEGIN; INSERT INTO v1(rowid, vector) VALUES(1, random_vector(8)); INSERT INTO v1(rowid, vector) VALUES(2, random_vector(8)); INSERT INTO v1(rowid, vector) VALUES(3, random_vector(8)); COMMIT; PRAGMA integrity_check; } {ok} do_execsql_test 3.1 { DELETE FROM v1 WHERE rowid=2; PRAGMA integrity_check; } {ok} do_execsql_test 3.2 { SELECT rowid FROM v1 } {1 3} do_execsql_test 3.3 { SELECT rowid FROM v1( random_vector(8), 5 ) ORDER BY 1; } {1 3} do_execsql_test 3.4 { WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) INSERT INTO v1 SELECT random_vector(8); WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) INSERT INTO v1 SELECT random_vector(8); WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100 ) INSERT INTO v1 SELECT random_vector(8); } do_execsql_test 3.5 { DELETE FROM v1 WHERE rowid IN (5, 105, 205, 77, 98, 222); PRAGMA integrity_check; } {ok} #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 4.0 { CREATE VIRTUAL TABLE v1 USING vec1; INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); } do_execsql_test 4.1 { BEGIN; INSERT INTO v1 (rowid, vector) VALUES( 0x1_0000_0001, random_vector(8) ); INSERT INTO v1 (rowid, vector) VALUES( 0x1_0000_0002, random_vector(8) ); INSERT INTO v1 (rowid, vector) VALUES( 0x1_0000_0003, random_vector(8) ); INSERT INTO v1 (rowid, vector) VALUES( 0x1_0000_0004, random_vector(8) ); COMMIT; } do_execsql_test 4.2 { PRAGMA integrity_check; } {ok} do_execsql_test 4.3 { DELETE FROM v1 WHERE rowid = 0x1_0000_0003; } {} do_execsql_test 4.4 { PRAGMA integrity_check; } {ok} #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 4.0 { CREATE VIRTUAL TABLE v1 USING vec1; INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); } do_execsql_test 4.1 { INSERT INTO v1 VALUES( random_vector( 16 ) ); } do_execsql_test 4.2 { INSERT INTO v1 VALUES( random_vector( 16 ) ); SELECT count(*) FROM v1_idx; } {1} do_execsql_test 4.3 { PRAGMA integrity_check } {ok} #------------------------------------------------------------------------- # reset_db vec1_load db do_execsql_test 5.0 { CREATE VIRTUAL TABLE v1 USING vec1; INSERT INTO v1(cmd, vector) VALUES('rebuild', '{index:"flat"}'); } do_execsql_test 5.1 { INSERT INTO v1 VALUES( random_vector( 16 ) ); INSERT INTO v1 VALUES( random_vector( 16 ) ); INSERT INTO v1 VALUES( random_vector( 16 ) ); } do_execsql_test 5.2 { BEGIN; INSERT INTO v1(rowid, vector) VALUES(11, random_vector( 16 ) ); INSERT INTO v1(rowid, vector) VALUES(12, random_vector( 16 ) ); DELETE FROM v1 WHERE rowid=11; COMMIT; } {} do_execsql_test 5.3 { PRAGMA integrity_check } {ok} #------------------------------------------------------------------------- # reset_db vec1_load db do_execsql_test 6.0 { CREATE VIRTUAL TABLE v1 USING vec1(x); INSERT INTO v1 VALUES( random_vector(22) ); } do_catchsql_test 6.1 { INSERT INTO v1 VALUES( random_vector(23) ); } {1 {vec1: unexpected vector blob size 92 bytes, expected 88}} #------------------------------------------------------------------------- # reset_db vec1_load db do_execsql_test 6.0 { CREATE VIRTUAL TABLE v1 USING vec1(x); } do_catchsql_test 6.1 { INSERT INTO v1(cmd, arg) VALUES('rebuild', '{distance:"l2"}'); } {1 {vec1: required parameter missing: index}} do_execsql_test 6.2 { INSERT INTO v1 VALUES(random_vector(16)); INSERT INTO v1 VALUES(random_vector(16)); INSERT INTO v1 VALUES(random_vector(16)); INSERT INTO v1 VALUES(random_vector(16)); INSERT INTO v1 VALUES(random_vector(16)); UPDATE v1_base SET vector = random_vector(15) WHERE id=4; } do_catchsql_test 6.1 { INSERT INTO v1(cmd, arg) VALUES('rebuild', '{index:"flat",distance:"l2"}'); } {1 {vec1: unexpected vector size in v1_base: 60}} #------------------------------------------------------------------------- # reset_db vec1_load db do_execsql_test 7.0 { CREATE VIRTUAL TABLE v1 USING vec1(x); } do_catchsql_test 7.1 { INSERT INTO v1(x) VALUES('sometextvalu'); } {1 {vec1: unexpected vector type TEXT, expected BLOB}} do_execsql_test 7.2 { INSERT INTO v1(x) VALUES( random_vector(4) ); } {} do_catchsql_test 7.3 { INSERT INTO v1(x) VALUES('sometextvaluABCD'); } {1 {vec1: unexpected vector type TEXT, expected BLOB}} do_catchsql_test 7.4 { UPDATE v1 SET x='sometextvaluABCD'; } {1 {vec1: unexpected vector type TEXT, expected BLOB}} finish_test