Add tests for DELETE on contentless, contentless-delete and contentless-unindexed fts5 tables.

FossilOrigin-Name: 74832fffb61d5e09ff256622cc9aa1fd2c40d30324c410bd6a8c688f0506a536
This commit is contained in:
dan
2024-09-28 15:09:43 +00:00
parent 58b4a8f6e7
commit 54e35b543d
4 changed files with 69 additions and 15 deletions
+52
View File
@@ -113,5 +113,57 @@ do_execsql_test 3.4 {
INSERT INTO tx(tx) VALUES('integrity-check');
}
#-------------------------------------------------------------------------
reset_db
do_execsql_test 4.0 {
CREATE VIRTUAL TABLE ft1 USING fts5(a, b UNINDEXED,
content='', contentless_unindexed=1
);
CREATE VIRTUAL TABLE ft2 USING fts5(a, b UNINDEXED,
content='', contentless_unindexed=1, contentless_delete=1
);
INSERT INTO ft1(rowid, a, b) VALUES(1, 'one', 'i');
INSERT INTO ft1(rowid, a, b) VALUES(2, 'two', 'ii');
INSERT INTO ft1(rowid, a, b) VALUES(3, 'three', 'iii');
INSERT INTO ft2(rowid, a, b) VALUES(1, 'one', 'i');
INSERT INTO ft2(rowid, a, b) VALUES(2, 'two', 'ii');
INSERT INTO ft2(rowid, a, b) VALUES(3, 'three', 'iii');
}
do_catchsql_test 4.1 {
DELETE FROM ft1 WHERE rowid=2
} {1 {cannot DELETE from contentless fts5 table: ft1}}
do_catchsql_test 4.2 {
DELETE FROM ft2 WHERE rowid=2
} {0 {}}
do_catchsql_test 4.3 {
INSERT INTO ft1(ft1, rowid, a) VALUES('delete', 2, 'two');
} {0 {}}
do_catchsql_test 4.2 {
INSERT INTO ft2(ft2, rowid, a) VALUES('delete', 2, 'two');
} {1 {'delete' may not be used with a contentless_delete=1 table}}
do_execsql_test 4.3 {
SELECT rowid, * FROM ft1;
} {
1 {} i
3 {} iii
}
do_execsql_test 4.4 {
SELECT rowid, * FROM ft2;
} {
1 {} i
3 {} iii
}
do_execsql_test 4.5 {
SELECT * FROM ft1_content
} {1 i 3 iii}
do_execsql_test 4.6 {
SELECT * FROM ft1_content
} {1 i 3 iii}
finish_test
+9 -7
View File
@@ -26,6 +26,7 @@ ifcapable !fts5 {
# Test that the various types of UPDATE statement are handled correctly
# by different table types.
#
foreach_detail_mode $testprefix {
foreach {tn cu} {
1 0
2 1
@@ -34,11 +35,13 @@ foreach {tn cu} {
do_execsql_test 1.$tn.1 "
CREATE VIRTUAL TABLE ft1 USING fts5(a, b UNINDEXED, c UNINDEXED, d,
content='',
contentless_unindexed=$cu
contentless_unindexed=$cu,
detail=%DETAIL%
);
CREATE VIRTUAL TABLE ft2 USING fts5(a, b UNINDEXED, c UNINDEXED, d,
content='',
contentless_unindexed=$cu, contentless_delete=1
contentless_unindexed=$cu, contentless_delete=1,
detail=%DETAIL%
);
"
@@ -121,7 +124,7 @@ foreach {tn cu} {
# It should be possible to update the rowid if contentless_delete=1 is
# set and all indexed columns are updated.
do_execsql_test 1.$tn.15 {
UPDATE ft2 SET a='a_one', d='d_one', rowid=11 WHERE rowid=1
UPDATE ft2 SET a='aXone', d='dXone', rowid=11 WHERE rowid=1
}
set res(0) {
@@ -148,7 +151,7 @@ foreach {tn cu} {
} {1 {cannot UPDATE contentless fts5 table: ft1}}
do_execsql_test 1.$tn.19 {
UPDATE ft2 SET a='a_two', d='d_two', c='newval', rowid=12 WHERE rowid=2
UPDATE ft2 SET a='aXtwo', d='dXtwo', c='newval', rowid=12 WHERE rowid=2
} {}
set res(0) {
@@ -166,10 +169,9 @@ foreach {tn cu} {
} $res($cu)
do_execsql_test 1.$tn.21 {
SELECT rowid, * FROM ft2('a_two AND d_two')
SELECT rowid, * FROM ft2('aXtwo AND dXtwo')
} [lrange $res($cu) 10 end]
}
}} ;# end of [foreach_detail_mode] loop
finish_test