# 2026-08-04 # # 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 vec1rollback vec1_load db do_execsql_test 1.0 { CREATE VIRTUAL TABLE v1 USING vec1(v); } do_catchsql_test 1.1 { INSERT INTO v1(rowid, v) VALUES (1, random_vector(8)), (2, random_vector(8)), (3, random_vector(7)); } {1 {vec1: unexpected vector blob size 28 bytes, expected 32}} do_execsql_test 1.2 { INSERT INTO v1(rowid, v) VALUES(4, random_vector(8)); } sqlite3 db2 test.db vec1_load db2 do_test 1.3 { catchsql { INSERT INTO v1(rowid, v) VALUES(5, random_vector(4)); } db2 } {1 {vec1: unexpected vector blob size 16 bytes, expected 32}} db2 close #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 2.0 { CREATE VIRTUAL TABLE v1 USING vec1(v); } do_catchsql_test 2.1 { BEGIN; INSERT INTO v1(rowid, v) VALUES (1, random_vector(8)), (2, random_vector(8)), (3, random_vector(7)); } {1 {vec1: unexpected vector blob size 28 bytes, expected 32}} do_execsql_test 2.2 { INSERT INTO v1(rowid, v) VALUES(4, random_vector(8)); COMMIT; } sqlite3 db2 test.db vec1_load db2 do_test 2.3 { catchsql { INSERT INTO v1(rowid, v) VALUES(5, random_vector(4)); } db2 } {1 {vec1: unexpected vector blob size 16 bytes, expected 32}} db2 close #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 2.0 { CREATE VIRTUAL TABLE v1 USING vec1(v); WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 ) INSERT INTO v1 SELECT random_vector(24) FROM s; } do_execsql_test 2.1 { BEGIN; INSERT INTO v1(cmd, arg) VALUES('rebuild', ( SELECT vec1_train(v, '{codesize:8}') FROM v1 )); ROLLBACK; } sqlite3 db2 test.db vec1_load db2 do_execsql_test -db db2 2.2 { INSERT INTO v1(cmd, arg) VALUES('rebuild', ( SELECT vec1_train(v, '{codesize:4}') FROM v1 )); } do_execsql_test 2.3 { INSERT INTO v1(v) VALUES( random_vector(24) ); } do_execsql_test 2.4 { PRAGMA integrity_check; } {ok} do_execsql_test 2.5 { BEGIN; SAVEPOINT one; INSERT INTO v1(cmd, arg) VALUES('rebuild', ( SELECT vec1_train(v, '{codesize:8}') FROM v1 )); ROLLBACK TO one; COMMIT; } do_execsql_test -db db2 2.6 { INSERT INTO v1(cmd, arg) VALUES('rebuild', ( SELECT vec1_train(v, '{codesize:4}') FROM v1 )); } do_execsql_test 2.7 { INSERT INTO v1(v) VALUES( random_vector(24) ); } do_execsql_test 2.8 { PRAGMA integrity_check; } {ok} db2 close #------------------------------------------------------------------------- reset_db vec1_load db do_execsql_test 3.0 { BEGIN; CREATE VIRTUAL TABLE staging USING vec1(a, b, c); ROLLBACK; } do_execsql_test 3.1 { SAVEPOINT nightly; CREATE VIRTUAL TABLE staging USING vec1(a, b, c); ROLLBACK TO nightly; } finish_test