From b184c91076dd1131678482398eb6725172c4ddad Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 11 Jul 2023 20:57:19 +0000 Subject: [PATCH] Have contentless_delete=1 tables support REPLACE statements. FossilOrigin-Name: 2f553a660e00564e51bc4209c92bd3628fb1266f4a52832792fbf91e4234a0ba --- ext/fts5/fts5_main.c | 2 +- ext/fts5/fts5_storage.c | 5 +---- ext/fts5/test/fts5contentless.test | 17 ++++++++++++++++- manifest | 16 ++++++++-------- manifest.uuid | 2 +- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/ext/fts5/fts5_main.c b/ext/fts5/fts5_main.c index 7b1f4a6d08..844b5c57ef 100644 --- a/ext/fts5/fts5_main.c +++ b/ext/fts5/fts5_main.c @@ -1670,7 +1670,7 @@ static int fts5UpdateMethod( ** Cases 3 and 4 may violate the rowid constraint. */ int eConflict = SQLITE_ABORT; - if( pConfig->eContent==FTS5_CONTENT_NORMAL ){ + if( pConfig->eContent==FTS5_CONTENT_NORMAL || pConfig->bContentlessDelete ){ eConflict = sqlite3_vtab_on_conflict(pConfig->db); } diff --git a/ext/fts5/fts5_storage.c b/ext/fts5/fts5_storage.c index adc8e750ed..35c30d06e6 100644 --- a/ext/fts5/fts5_storage.c +++ b/ext/fts5/fts5_storage.c @@ -481,12 +481,9 @@ static int fts5StorageContentlessDelete(Fts5Storage *p, i64 iDel){ iLoc = sqlite3_column_int64(pLookup, 1); } rc = sqlite3_reset(pLookup); - if( rc==SQLITE_OK && iLoc==0 ){ - rc = FTS5_CORRUPT; - } } - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && iLoc!=0 ){ rc = sqlite3Fts5IndexContentlessDelete(p->pIndex, iLoc, iDel); } diff --git a/ext/fts5/test/fts5contentless.test b/ext/fts5/test/fts5contentless.test index a55aa84021..3179b52e92 100644 --- a/ext/fts5/test/fts5contentless.test +++ b/ext/fts5/test/fts5contentless.test @@ -173,6 +173,8 @@ do_execsql_test 5.0 { INSERT INTO ft(rowid, x) VALUES(1, 'one two three'); INSERT INTO ft(rowid, x) VALUES(2, 'one two four'); INSERT INTO ft(rowid, x) VALUES(3, 'one two five'); + INSERT INTO ft(rowid, x) VALUES(4, 'one two seven'); + INSERT INTO ft(rowid, x) VALUES(5, 'one two eight'); } do_execsql_test 5.1 { @@ -181,12 +183,25 @@ do_execsql_test 5.1 { do_execsql_test 5.2 { SELECT rowid FROM ft -} {1 3} +} {1 3 4 5} do_catchsql_test 5.3 { UPDATE ft SET x='four six' WHERE rowid=3 } {1 {cannot UPDATE contentless fts5 table: ft}} +do_execsql_test 5.4 { + SELECT rowid FROM ft('one'); +} {1 3 4 5} + +do_execsql_test 5.5 { + REPLACE INTO ft(rowid, x) VALUES(3, 'four six'); + SELECT rowid FROM ft('one'); +} {1 4 5} + +do_execsql_test 5.6 { + REPLACE INTO ft(rowid, x) VALUES(6, 'one two eleven'); + SELECT rowid FROM ft('one'); +} {1 4 5 6} finish_test diff --git a/manifest b/manifest index 963270545a..9f5b8a7cfa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Have\scontentless_delete=1\stables\ssupport\sregular\sDELETE\sstatements,\sinstead\sof\sjust\sthe\sspecial\sINSERT\ssyntax. -D 2023-07-11T20:19:46.857 +C Have\scontentless_delete=1\stables\ssupport\sREPLACE\sstatements. +D 2023-07-11T20:57:19.305 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -93,8 +93,8 @@ F ext/fts5/fts5_config.c 010fabcc0aaa0dfa76b19146e8bddf7de368933eeac01e294af6607 F ext/fts5/fts5_expr.c 58fb8ceddfb1cefcd54510f9f2f33c220ef9d1b3fa77462111f5ae2a825ab7b1 F ext/fts5/fts5_hash.c d4fb70940359f2120ccd1de7ffe64cc3efe65de9e8995b822cd536ff64c96982 F ext/fts5/fts5_index.c 60c815859589d279ea237a4fdb88386cd5e154288c1c7963e2834ff1edf24915 -F ext/fts5/fts5_main.c 843a6223397afb07c515aaf074c4bd9079cd7390b3b6d3de585f600afe294d5c -F ext/fts5/fts5_storage.c beff4be2a53c530676d59355b408733ab28202ae351a0840fa211df17b103c4a +F ext/fts5/fts5_main.c c036530bbd39935b4b91fddb9d1b9d456e95c3685509aa975c87fc35445a9722 +F ext/fts5/fts5_storage.c 9a84d28154cb570773b26eb9645f8670089dee45c95afebf7a041e414266b3c3 F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee F ext/fts5/fts5_test_tok.c a2bed8edb25f6432e8cdb62aad5916935c19dba8dac2b8324950cfff397e25ff @@ -132,7 +132,7 @@ F ext/fts5/test/fts5config.test 60094712debc59286c59aef0e6cf511c37d866802776a825 F ext/fts5/test/fts5conflict.test 655925678e630d3cdf145d18725a558971806416f453ac8410ca8c04d934238d F ext/fts5/test/fts5connect.test 08030168fc96fc278fa81f28654fb7e90566f33aff269c073e19b3ae9126b2f4 F ext/fts5/test/fts5content.test 213506436fb2c87567b8e31f6d43ab30aab99354cec74ed679f22aad0cdbf283 -F ext/fts5/test/fts5contentless.test 5ffce3185e40c8025e1fc0a2a484f331f76f9a8e8b8441d169bbe1276b76ae2c +F ext/fts5/test/fts5contentless.test feb27b077be771141c298b68798b93efd0e2d6fd3cb759201628b69576d69228 F ext/fts5/test/fts5corrupt.test 77ae6f41a7eba10620efb921cf7dbe218b0ef232b04519deb43581cb17a57ebe F ext/fts5/test/fts5corrupt2.test 7453752ba12ce91690c469a6449d412561cc604b1dec994e16ab132952e7805f F ext/fts5/test/fts5corrupt3.test 7da9895dafa404efd20728f66ff4b94399788bdc042c36fe2689801bba2ccd78 @@ -2044,8 +2044,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 948267b066d0dbe667881b3d26a007fa24576da6e57c112676fadeb846c13f0b -R 3eb31b5966f6d22024a48d705ddecf8e +P fffb8616905501669a94231d5d9f53446bf09553353f2cdab7c43ca54bbb7fa6 +R cbe733514e57856ac29410eaba1125b8 U dan -Z ecb4a545638f553899d716cc379fd8e4 +Z 9ded30fbafe538528320232b2760b444 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 06acf1e66a..40b428d76e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fffb8616905501669a94231d5d9f53446bf09553353f2cdab7c43ca54bbb7fa6 \ No newline at end of file +2f553a660e00564e51bc4209c92bd3628fb1266f4a52832792fbf91e4234a0ba \ No newline at end of file