1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00
Files
sqlite/ext/vec1/test/vec1meta.test
dan e32fbe0c23 Import vec1 sources into directory ext/vec1/ of this project.
FossilOrigin-Name: 3a0876d973868be7b6f4156a434cd09098c7ab1abdc7f0ef4f3d12a03de68b24
2026-09-30 14:49:16 +00:00

253 lines
6.3 KiB
Plaintext

# 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 vec1meta
vec1_load db
do_execsql_test 1.0 {
CREATE VIRTUAL TABLE v1 USING vec1(v, a, b);
}
do_execsql_test 1.1 {
SELECT v, a, b FROM v1
}
do_execsql_test 1.2 {
PRAGMA table_info = v1_base;
} {
0 id INTEGER 0 {} 1
1 vector BLOB 0 {} 0
2 c0 {} 0 {} 0
3 c1 {} 0 {} 0
}
do_execsql_test 1.3 {
PRAGMA table_xinfo = v1;
} {
0 cmd {} 0 {} 0 1
1 arg {} 0 {} 0 1
2 distance {} 0 {} 0 1
3 v BLOB 0 {} 0 0
4 a {} 0 {} 0 0
5 b {} 0 {} 0 0
}
do_execsql_test 1.4 {
INSERT INTO v1 VALUES(random_vector(32), 'A', 'B');
}
do_execsql_test 1.5 {
SELECT length(v), a, b FROM v1
} {128 A B}
#-------------------------------------------------------------------------
reset_db
vec1_load db
# There should be a limit of 256 meta-value columns. Check that this is
# enforced.
do_test 2.0 {
set lInt [list]
set res ""
for {set ii 0} {$ii < 5000} {incr ii} {
lappend lInt "c$ii"
set ct "CREATE VIRTUAL TABLE v$ii USING vec1 (v, [join $lInt ,])"
if {[catch {execsql $ct} res]} {
break
}
}
list $ii $res
} {256 {too many meta-data columns (max is 256)}}
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 3.0 {
CREATE VIRTUAL TABLE v1 USING vec1(v, meta, m2);
INSERT INTO v1(cmd, v) VALUES('rebuild', '{index:"flat"}');
INSERT INTO v1 VALUES(random_vector(32), 1234, 0);
INSERT INTO v1 VALUES(random_vector(32), 4321, 1);
}
do_execsql_test 3.1 {
PRAGMA integrity_check;
} {ok}
do_execsql_test 3.2 {
INSERT INTO v1(cmd, v) VALUES('rebuild', '{index:"flat"}');
}
do_execsql_test 3.3 {
PRAGMA integrity_check;
} {ok}
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 4.1 {
CREATE VIRTUAL TABLE v1 USING vec1(v, m1, m2);
INSERT INTO v1(cmd, arg) VALUES('rebuild', '{index:"flat"}');
WITH s(i) AS (
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<5000
)
INSERT INTO v1 SELECT random_vector(64), i, i+1 FROM s;
PRAGMA integrity_check;
} {ok}
set T [db one {SELECT vec1_train(v, '{nbucket:32, codesize:16}') FROM v1}]
do_execsql_test 4.2 {
INSERT INTO v1(cmd, arg) VALUES('rebuild', $T);
PRAGMA integrity_check;
} {ok}
execsql { SELECT vec1_config('nthread', 2) }
do_execsql_test 4.3 {
PRAGMA integrity_check;
} {ok}
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 5.1 {
CREATE VIRTUAL TABLE v1 USING vec1(v, m1, m2);
INSERT INTO v1(cmd, arg) VALUES('rebuild', '{index:"flat"}');
BEGIN;
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 1, 10);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 2, 20);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 3, 10);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 1, 20);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 2, 10);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 3, 20);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 1, 10);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 2, 20);
INSERT INTO v1(v, m1, m2) VALUES(random_vector(16), 3, 10);
COMMIT;
PRAGMA integrity_check;
} {ok}
do_execsql_test 5.2.1 {
SELECT rowid FROM v1(random_vector(16), 3) WHERE m1=3 ORDER BY 1
} {3 6 9}
do_execsql_test 5.2.2 {
SELECT rowid FROM v1(random_vector(16), 4) WHERE m2=20 ORDER BY 1
} {2 4 6 8}
do_execsql_test 5.2.3 {
SELECT rowid FROM v1(random_vector(16), 3) WHERE m1=3.0 ORDER BY 1
} {3 6 9}
do_execsql_test 5.2.4 {
SELECT rowid FROM v1(random_vector(16), 4) WHERE m2=20.0 ORDER BY 1
} {2 4 6 8}
do_execsql_test 5.3 {
INSERT INTO v1(cmd, arg) VALUES('rebuild', '{index:"none"}');
}
do_execsql_test 5.4.1 {
SELECT rowid FROM v1(random_vector(16), 3) WHERE m1=3 ORDER BY 1
} {3 6 9}
do_execsql_test 5.4.2 {
SELECT rowid FROM v1(random_vector(16), 4) WHERE m2=20 ORDER BY 1
} {2 4 6 8}
do_execsql_test 5.4.3 {
SELECT rowid FROM v1(random_vector(16), 3) WHERE m1=3.0 ORDER BY 1
} {3 6 9}
do_execsql_test 5.4.4 {
SELECT rowid FROM v1(random_vector(16), 4) WHERE m2=20.0 ORDER BY 1
} {2 4 6 8}
do_execsql_test 5.5 {
SELECT rowid FROM v1(random_vector(16), 4) WHERE m2=x'1234' ORDER BY 1
}
#-------------------------------------------------------------------------
reset_db
vec1_load db
set nRow [expr 200]
do_execsql_test 6.0 {
CREATE VIRTUAL TABLE x1 USING vec1(v, x);
WITH s(i) AS (
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<$nRow
)
INSERT INTO x1 SELECT random_vector(8), i FROM s;
INSERT INTO x1(cmd, arg) VALUES('rebuild', '{index:"flat"}');
}
do_test 6.1 {
for {set ii 1} {$ii<=$nRow} {incr ii} {
set val [db one {
SELECT rowid FROM x1(random_vector(8), 1) WHERE x=$ii
}]
if {$val!=$ii} { error "failed for row $ii ($val)" }
}
} {}
do_execsql_test 6.2 {
PRAGMA integrity_check
} {ok}
#-------------------------------------------------------------------------
reset_db
vec1_load db
set nRow [expr 200]
do_execsql_test 7.0 {
CREATE VIRTUAL TABLE x1 USING vec1(v, x);
WITH s(i) AS (
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<$nRow
)
INSERT INTO x1 SELECT random_vector(8), (i%7) FROM s;
UPDATE x1 SET x=NULL WHERE x=6;
INSERT INTO x1(cmd, arg) VALUES('rebuild', '{index:"flat"}');
}
do_execsql_test 7.1 {
PRAGMA integrity_check
} {ok}
set nExpect [expr {$nRow/7}]
do_execsql_test 7.2 {
SELECT count(*) FROM x1(random_vector(8), $nExpect) WHERE x IS NULL
} $nExpect
for {set ii 0} {$ii<6} {incr ii} {
do_execsql_test 7.3.$ii {
SELECT count(*) FROM x1(random_vector(8), $nExpect) WHERE x = $ii
} $nExpect
}
set nExpect [expr $nExpect+1]
do_execsql_test 7.4 {
SELECT rowid FROM x1(random_vector(8), $nExpect)
WHERE x IS NULL ORDER BY 1
} [db eval { SELECT rowid FROM x1 WHERE (rowid%7)==6 }]
for {set ii 0} {$ii<6} {incr ii} {
do_execsql_test 7.5.$ii {
SELECT rowid FROM x1(random_vector(8), $nExpect)
WHERE x = $ii ORDER BY 1
} [db eval { SELECT rowid FROM x1 WHERE (rowid%7)==$ii }]
}
finish_test