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

248 lines
6.1 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 vec1cat
vec1_load db
do_execsql_test 1.0 {
PRAGMA table_info = vec1cat
} {
0 database {} 0 {} 0
1 name {} 0 {} 0
2 model {} 0 {} 0
3 qprofile {} 0 {} 0
}
do_execsql_test 1.1 {
CREATE VIRTUAL TABLE x1 USING vec1(x);
SELECT database, name FROM vec1cat;
} {
main x1
}
db close
sqlite3 db test.db
vec1_load db
do_execsql_test 1.2 {
SELECT database, name, model FROM vec1cat;
} {
main x1 {{"index": "none", "distance": "l2"}}
}
do_execsql_test 1.3 {
INSERT INTO x1(cmd, arg) VALUES( 'rebuild', '{index:"flat", distance:"cos"}');
}
do_execsql_test 1.4 {
SELECT database, name, model FROM vec1cat;
} {
main x1 {{"index": "flat", "distance": "cos"}}
}
db close
sqlite3 db test.db
vec1_load db
do_execsql_test 1.5 {
SELECT database, name, model FROM vec1cat;
} {
main x1 {{"index": "flat", "distance": "cos"}}
}
do_execsql_test 1.6 {
INSERT INTO x1(cmd, arg) VALUES('rebuild', (
WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000)
SELECT vec1_train(random_vector(16), '{nbucket:8, codesize:8}') FROM s
));
SELECT database, name, model FROM vec1cat;
} {
main x1
{{"index": "trained", "distance": "l2", "nbucket": 8, "quantizer": "pq", "codesize": 8, "residual": true, "wht": false}}
}
do_execsql_test 1.7 {
CREATE VIRTUAL TABLE temp.x2 USING vec1(x);
SELECT rowid, database, name, model FROM vec1cat;
} {
1 temp x2
{{"index": "none", "distance": "l2"}}
2 main x1
{{"index": "trained", "distance": "l2", "nbucket": 8, "quantizer": "pq", "codesize": 8, "residual": true, "wht": false}}
}
foreach {tn spec res} {
1 {nbucket:0, codesize:8} {
"index": "trained", "distance": "l2", "nbucket": 0,
"quantizer": "pq", "codesize": 8,
"residual": false, "wht": false
}
2 {nbucket:8, codesize:0} {
"index": "trained", "distance": "l2", "nbucket": 8,
"quantizer": "none", "codesize": 0,
"residual": false, "wht": false
}
3 {nbucket:0, codesize:8, opq:1} {
"index": "trained", "distance": "l2", "nbucket": 0,
"quantizer": "opq", "codesize": 8,
"residual": false, "wht": false
}
4 {codesize:2, quantizer: "bq", distance: "cos"} {
"index": "trained", "distance": "cos", "nbucket": 0,
"quantizer": "bq", "codesize": 2,
"residual": false, "wht": true
}
5 {codesize:1, nbucket: 16, quantizer: "bq", distance: "l2", wht: 0} {
"index": "trained", "distance": "l2", "nbucket": 16,
"quantizer": "bq", "codesize": 1,
"residual": true, "wht": false
}
6 {codesize:0, nbucket: 0} {
"index":"flat", "distance":"l2"
}
7 {} {
"index":"flat", "distance":"l2"
}
} {
set model [db one {
WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000)
SELECT vec1_train(random_vector(16), '{'||$spec||'}') FROM s
}]
set output [db one { SELECT json('{' || $res || '}') }]
do_execsql_test 1.8.$tn.1 {
INSERT INTO x1(cmd, arg) VALUES( 'rebuild', $model );
SELECT json(model) FROM vec1cat WHERE name='x1';
} [list $output]
if {[db one {SELECT json_extract($output, '$.index')=='trained'}]} {
set model [db one {
WITH s(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000)
SELECT vec1_train(random_vector(16), $output) FROM s
}]
} else {
set model $output
}
do_execsql_test 1.8.$tn.2 {
INSERT INTO x1(cmd, arg) VALUES( 'rebuild', $model );
SELECT json(model) FROM vec1cat WHERE name='x1';
} [list $output]
}
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 2.0 {
CREATE VIRTUAL TABLE x1 USING vec1(x);
CREATE VIRTUAL TABLE x2 USING vec1(y);
CREATE VIRTUAL TABLE x3 USING vec1(z);
}
do_execsql_test 2.1 {
SELECT rowid, name FROM vec1cat
} {
1 x3 2 x2 3 x1
}
do_test 2.2 {
list [catch {
db eval {
SELECT rowid, name FROM vec1cat
} {
if {$name=="x2"} {
db eval {
DROP TABLE x2;
DROP TABLE x1;
}
}
}
} msg] $msg
} {1 {database table is locked}}
do_execsql_test 2.3 {
SELECT qprofile FROM vec1cat WHERE name='x1';
} {{{
"total": {"cnt": 0, "cycle": 0},
"init": {"cnt": 0, "cycle": 0},
"coarse": {"cnt": 0, "cycle": 0},
"idxread": {"cnt": 0, "cycle": 0},
"metaread": {"cnt": 0, "cycle": 0},
"metascan": {"cnt": 0, "cycle": 0},
"lut": {"cnt": 0, "cycle": 0},
"pqscan": {"cnt": 0, "cycle": 0},
"finalsort": {"cnt": 0, "cycle": 0}
}}}
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 3.0 {
CREATE VIRTUAL TABLE x2 USING vec1(y);
INSERT INTO x2 VALUES( random_vector(13) );
INSERT INTO x2 VALUES( random_vector(13) );
INSERT INTO x2 VALUES( random_vector(13) );
INSERT INTO x2 VALUES( random_vector(13) );
INSERT INTO x2 VALUES( random_vector(13) );
INSERT INTO x2(cmd, arg) VALUES('rebuild', (
WITH s(i) AS ( VALUES (1) UNION ALL SELECT i+1 FROM s WHERE i<512 )
SELECT vec1_train( random_vector(13), '{nbucket:8}' ) FROM s
))
}
do_execsql_test 3.1 {
SELECT count(distance) FROM x2;
} 5
#-------------------------------------------------------------------------
reset_db
vec1_load db
do_execsql_test 4.0 {
CREATE VIRTUAL TABLE x1 USING vec1(y, a);
INSERT INTO x1(cmd, arg) VALUES('rebuild', (
WITH s(i) AS ( VALUES (1) UNION ALL SELECT i+1 FROM s WHERE i<512 )
SELECT vec1_train(
random_vector(32), '{nbucket:8, codesize:8, distance:"cos"}'
) FROM s
))
}
do_execsql_test 4.1 {
INSERT INTO x1 (rowid, y, a) VALUES(10, random_vector(32), 4556);
}
do_execsql_test 4.2 {
SELECT key FROM json_each( (SELECT distance FROM x1) )
} {bucket coarse_error reconstruction_error code}
do_execsql_test 4.3 {
SELECT typeof(distance) FROM x1(random_vector(32), '{nprobe:8, K:5}')
} {real}
finish_test