mirror of
https://github.com/sqlite/sqlite.git
synced 2026-10-23 21:49:02 +03:00
253 lines
6.3 KiB
Plaintext
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
|
|
|