123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- # 2023 April 14
- #
- # 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]] fts5_common.tcl]
- return_if_no_fts5
- set ::testprefix fts5secure4
- #-------------------------------------------------------------------------
- # Test using the 'delete' command to attempt to delete a token that
- # is not present in the index in secure-delete mode.
- #
- do_execsql_test 1.0 {
- CREATE VIRTUAL TABLE t1 USING fts5(a, b, content=x1);
- CREATE TABLE x1(rowid INTEGER PRIMARY KEY, a, b);
- INSERT INTO x1 VALUES
- (1, 'hello world', 'today xyz'),
- (2, 'not the day', 'crunch crumble and chomp'),
- (3, 'one', 'two');
- INSERT INTO t1(t1) VALUES('rebuild');
- }
- do_execsql_test 1.1 {
- INSERT INTO t1(t1, rank) VALUES('secure-delete', 1);
- }
- do_execsql_test 1.2 {
- INSERT INTO t1(t1, rowid, a, b) VALUES('delete', 4, 'nosuchtoken', '');
- }
- do_execsql_test 1.3 {
- INSERT INTO t1(t1) VALUES('integrity-check');
- }
- do_execsql_test 1.4 {
- INSERT INTO t1(t1, rowid, a, b) VALUES('delete', 1, 'crunch', '');
- }
- do_execsql_test 1.5 {
- INSERT INTO t1(t1, rowid, a, b) VALUES('delete', 3, 'crunch', '');
- }
- do_execsql_test 1.6 {
- INSERT INTO t1(t1) VALUES('integrity-check');
- }
- do_execsql_test 1.7 {
- CREATE VIRTUAL TABLE y1 USING fts5(xx, prefix='1,2');
- INSERT INTO y1(y1, rank) VALUES('pgsz', 64);
- INSERT INTO y1(y1, rank) VALUES('secure-delete', 1);
- }
- do_execsql_test 1.8 {
- BEGIN;
- INSERT INTO y1(rowid, xx) VALUES(1, 'abc def');
- INSERT INTO y1(rowid, xx) VALUES(2, 'reallyreallylongtoken');
- COMMIT;
- }
- do_execsql_test 1.9 {
- DELETE FROM y1 WHERE rowid=1;
- INSERT INTO y1(y1) VALUES('integrity-check');
- }
- do_execsql_test 1.10 {
- CREATE VIRTUAL TABLE w1 USING fts5(ww, content="");
- INSERT INTO w1(rowid, ww) VALUES(123, '');
- }
- do_catchsql_test 1.11 {
- INSERT INTO w1(w1, rowid, ww) VALUES('delete', 123, 'xyz');
- } {1 {database disk image is malformed}}
- do_catchsql_test 1.12 {
- DROP TABLE w1;
- CREATE VIRTUAL TABLE w1 USING fts5(ww, content="");
- INSERT INTO w1(rowid, ww) VALUES(123, '');
- DELETE FROM w1_data WHERE id>10;
- INSERT INTO w1(w1, rowid, ww) VALUES('delete', 123, 'xyz');
- } {1 {database disk image is malformed}}
- #-------------------------------------------------------------------------
- # Test using secure-delete with detail=none or detail=col.
- #
- foreach {tn d} {1 full 2 none 3 column} {
- reset_db
- do_execsql_test 2.$tn.1 "
- CREATE VIRTUAL TABLE x1 USING fts5(xx, yy, zz, detail=$d, prefix='10,20');
- INSERT INTO x1(x1, rank) VALUES('pgsz', 64);
- INSERT INTO x1(x1, rank) VALUES('secure-delete', 1);
- "
- do_execsql_test 2.$tn.2 {
- BEGIN;
- INSERT INTO x1(xx, yy, zz) VALUES('a b c', 'd e f', 'a b c');
- INSERT INTO x1(xx, yy, zz) VALUES('a b c', 'd e f', 'a b c');
- INSERT INTO x1(xx, yy, zz) VALUES('a b c', 'd e f', 'a b c');
- INSERT INTO x1(xx, yy, zz) VALUES('a b c', 'd e f', 'a b c');
- INSERT INTO x1(xx, yy, zz) VALUES('a b c', 'd e f', 'a b c');
- COMMIT;
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- do_execsql_test 2.$tn.3 {
- DELETE FROM x1 WHERE rowid IN (2, 4, 6);
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- do_execsql_test 2.$tn.4 {
- DELETE FROM x1 WHERE rowid IN (1, 3, 5);
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- do_execsql_test 2.$tn.5 {
- WITH s(i) AS (
- SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<100
- )
- INSERT INTO x1
- SELECT 'seems to be', 'used brew to', 'everything is working' FROM s
- UNION ALL
- SELECT 'used brew to', 'everything is working', 'seems to be' FROM s
- UNION ALL
- SELECT 'everything is working', 'seems to be', 'used brew to' FROM s
- UNION ALL
- SELECT 'abc', 'zzz', 'a b c d'
- UNION ALL
- SELECT 'z', 'z', 'z' FROM s
- }
- do_test 2.$tn.6 {
- for {set i 300} {$i > 200} {incr i -1} {
- execsql {
- DELETE FROM x1 WHERE rowid=$i;
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- }
- } {}
- do_test 2.$tn.7 {
- for {set i 1} {$i < 100} {incr i} {
- execsql {
- DELETE FROM x1 WHERE rowid=$i;
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- }
- } {}
- do_test 2.$tn.8 {
- foreach i [db eval {SELECT rowid FROM x1}] {
- execsql {
- DELETE FROM x1 WHERE rowid=$i;
- INSERT INTO x1(x1) VALUES('integrity-check');
- }
- }
- } {}
- do_execsql_test 2.$tn.9 {
- SELECT * FROM x1
- } {}
- }
- finish_test
|