|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
source [file join [file dirname [info script]] fts5_common.tcl] |
|
|
set testprefix fts5contentless3 |
|
|
|
|
|
|
|
|
ifcapable !fts5 { |
|
|
finish_test |
|
|
return |
|
|
} |
|
|
|
|
|
do_execsql_test 1.0 { |
|
|
CREATE VIRTUAL TABLE ft USING fts5(x, content=, contentless_delete=1); |
|
|
BEGIN; |
|
|
INSERT INTO ft VALUES('one one one'); |
|
|
INSERT INTO ft VALUES('two two two'); |
|
|
INSERT INTO ft VALUES('three three three'); |
|
|
INSERT INTO ft VALUES('four four four'); |
|
|
INSERT INTO ft VALUES('five five five'); |
|
|
INSERT INTO ft VALUES('six six six'); |
|
|
INSERT INTO ft VALUES('seven seven seven'); |
|
|
INSERT INTO ft VALUES('eight eight eight'); |
|
|
INSERT INTO ft VALUES('nine nine nine'); |
|
|
COMMIT; |
|
|
|
|
|
DELETE FROM ft WHERE rowid=3; |
|
|
} |
|
|
|
|
|
proc myhex {hex} { binary decode hex $hex } |
|
|
db func myhex myhex |
|
|
|
|
|
do_execsql_test 1.1 { |
|
|
UPDATE ft_data SET block = |
|
|
myhex('04000000 00000001' || |
|
|
'01020304 01020304 01020304 01020304' || |
|
|
'01020304 01020304 01020304 01020304' |
|
|
) |
|
|
WHERE id = (SELECT max(id) FROM ft_data); |
|
|
} |
|
|
|
|
|
do_execsql_test 1.2 { |
|
|
DELETE FROM ft WHERE rowid=1 |
|
|
} |
|
|
|
|
|
do_execsql_test 1.3 { |
|
|
SELECT rowid FROM ft('two'); |
|
|
} {2} |
|
|
|
|
|
do_execsql_test 1.3 { |
|
|
UPDATE ft_data SET block = |
|
|
myhex('08000000 00000001' || |
|
|
'0000000001020304 0000000001020304 0000000001020304 0000000001020304' || |
|
|
'0000000001020304 0000000001020304 0000000001020304 0000000001020304' |
|
|
) |
|
|
WHERE id = (SELECT max(id) FROM ft_data); |
|
|
} |
|
|
|
|
|
do_execsql_test 1.4 { |
|
|
SELECT rowid FROM ft('two'); |
|
|
} {2} |
|
|
|
|
|
do_execsql_test 1.5 { |
|
|
DELETE FROM ft WHERE rowid=4 |
|
|
} |
|
|
|
|
|
do_execsql_test 1.6 { |
|
|
UPDATE ft_data SET block = myhex('04000000 00000000') |
|
|
WHERE id = (SELECT max(id) FROM ft_data); |
|
|
} |
|
|
do_execsql_test 1.7 { |
|
|
SELECT rowid FROM ft('two'); |
|
|
} {2} |
|
|
|
|
|
do_execsql_test 1.8 { |
|
|
UPDATE ft_data SET block = myhex('04000000 00000000') |
|
|
WHERE id = (SELECT max(id) FROM ft_data); |
|
|
} |
|
|
do_execsql_test 1.9 { |
|
|
DELETE FROM ft WHERE rowid=8 |
|
|
} {} |
|
|
|
|
|
|
|
|
reset_db |
|
|
do_execsql_test 2.0 { |
|
|
CREATE VIRTUAL TABLE ft USING fts5(x, content=, contentless_delete=1); |
|
|
INSERT INTO ft VALUES('one one one'); |
|
|
INSERT INTO ft VALUES('two two two'); |
|
|
INSERT INTO ft VALUES('three three three'); |
|
|
INSERT INTO ft VALUES('four four four'); |
|
|
INSERT INTO ft VALUES('five five five'); |
|
|
INSERT INTO ft VALUES('six six six'); |
|
|
INSERT INTO ft VALUES('seven seven seven'); |
|
|
INSERT INTO ft VALUES('eight eight eight'); |
|
|
INSERT INTO ft VALUES('nine nine nine'); |
|
|
} |
|
|
|
|
|
do_execsql_test 2.1 { |
|
|
INSERT INTO ft(ft) VALUES('optimize'); |
|
|
} |
|
|
do_execsql_test 2.2 { |
|
|
SELECT count(*) FROM ft_data |
|
|
} {3} |
|
|
do_execsql_test 2.3 { |
|
|
DELETE FROM ft WHERE rowid=5 |
|
|
} |
|
|
do_execsql_test 2.4 { |
|
|
SELECT count(*) FROM ft_data |
|
|
} {4} |
|
|
|
|
|
|
|
|
|
|
|
do_execsql_test 2.5 { |
|
|
INSERT INTO ft(ft) VALUES('optimize'); |
|
|
} |
|
|
do_execsql_test 2.6 { |
|
|
SELECT count(*) FROM ft_data |
|
|
} {3} |
|
|
|
|
|
|
|
|
|
|
|
do_execsql_test 2.7 { |
|
|
INSERT INTO ft(ft) VALUES('optimize'); |
|
|
SELECT rowid FROM ft_data; |
|
|
} [db eval {SELECT rowid FROM ft_data}] |
|
|
|
|
|
|
|
|
reset_db |
|
|
do_execsql_test 3.0 { |
|
|
CREATE VIRTUAL TABLE ft USING fts5(x, content=, contentless_delete=1); |
|
|
INSERT INTO ft(ft, rank) VALUES('pgsz', 64); |
|
|
WITH s(i) AS ( |
|
|
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000 |
|
|
) |
|
|
INSERT INTO ft(rowid, x) SELECT i, i||' '||i||' '||i||' '||i FROM s; |
|
|
INSERT INTO ft(ft) VALUES('optimize'); |
|
|
} |
|
|
|
|
|
do_execsql_test 3.1 { |
|
|
SELECT count(*) FROM ft_data |
|
|
} {200} |
|
|
|
|
|
do_execsql_test 3.2 { |
|
|
DELETE FROM ft WHERE (rowid % 50)==0; |
|
|
SELECT count(*) FROM ft_data; |
|
|
} {203} |
|
|
|
|
|
do_execsql_test 3.3 { |
|
|
INSERT INTO ft(ft, rank) VALUES('merge', 500); |
|
|
SELECT rowid FROM ft_data; |
|
|
} [db eval {SELECT rowid FROM ft_data}] |
|
|
|
|
|
do_execsql_test 3.4 { |
|
|
INSERT INTO ft(ft, rank) VALUES('merge', -1000); |
|
|
SELECT count(*) FROM ft_data; |
|
|
} {197} |
|
|
|
|
|
do_execsql_test 3.5 { |
|
|
DELETE FROM ft WHERE (rowid % 50)==1; |
|
|
SELECT count(*) FROM ft_data; |
|
|
} {200} |
|
|
|
|
|
do_execsql_test 3.6 { |
|
|
SELECT level, segment, npgtombstone FROM fts5_structure( |
|
|
(SELECT block FROM ft_data WHERE id=10) |
|
|
) |
|
|
} {1 0 3} |
|
|
|
|
|
do_test 3.6 { |
|
|
while 1 { |
|
|
set nChange [db total_changes] |
|
|
execsql { INSERT INTO ft(ft, rank) VALUES('merge', -5) } |
|
|
if {([db total_changes] - $nChange)<2} break |
|
|
} |
|
|
} {} |
|
|
|
|
|
do_execsql_test 3.7 { |
|
|
SELECT level, segment, npgtombstone FROM fts5_structure( |
|
|
(SELECT block FROM ft_data WHERE id=10) |
|
|
) |
|
|
} {2 0 0} |
|
|
|
|
|
|
|
|
finish_test |
|
|
|