]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an fts5 problem caused by a 'rebuild' followed by a DELETE in secure-delete mode.
authordan <Dan Kennedy>
Fri, 13 Oct 2023 15:59:11 +0000 (15:59 +0000)
committerdan <Dan Kennedy>
Fri, 13 Oct 2023 15:59:11 +0000 (15:59 +0000)
FossilOrigin-Name: 18be505c628d9b13431ca6cfe822d4aeae119c53ae08aef26a67f310a8bd7bd3

ext/fts5/fts5_main.c
ext/fts5/test/fts5secure6.test
manifest
manifest.uuid

index 3f143000430ea208c84d77f5981b66d5d744ac89..1c21367df1241f8e76dfeb68e60f26ec36f09fb6 100644 (file)
@@ -1533,6 +1533,7 @@ static int fts5SpecialInsert(
   Fts5Config *pConfig = pTab->p.pConfig;
   int rc = SQLITE_OK;
   int bError = 0;
+  int bLoadConfig = 0;
 
   if( 0==sqlite3_stricmp("delete-all", zCmd) ){
     if( pConfig->eContent==FTS5_CONTENT_NORMAL ){
@@ -1544,6 +1545,7 @@ static int fts5SpecialInsert(
     }else{
       rc = sqlite3Fts5StorageDeleteAll(pTab->pStorage);
     }
+    bLoadConfig = 1;
   }else if( 0==sqlite3_stricmp("rebuild", zCmd) ){
     if( pConfig->eContent==FTS5_CONTENT_NONE ){
       fts5SetVtabError(pTab, 
@@ -1553,6 +1555,7 @@ static int fts5SpecialInsert(
     }else{
       rc = sqlite3Fts5StorageRebuild(pTab->pStorage);
     }
+    bLoadConfig = 1;
   }else if( 0==sqlite3_stricmp("optimize", zCmd) ){
     rc = sqlite3Fts5StorageOptimize(pTab->pStorage);
   }else if( 0==sqlite3_stricmp("merge", zCmd) ){
@@ -1578,6 +1581,12 @@ static int fts5SpecialInsert(
       }
     }
   }
+
+  if( rc==SQLITE_OK && bLoadConfig ){
+    pTab->p.pConfig->iCookie--;
+    rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex);
+  }
+
   return rc;
 }
 
index 43d4f075e87d347d6ced6b5fba6055d796335ad5..e2f4ceabc8d5bf0778745d7b1015f56e8a98dc3e 100644 (file)
@@ -109,5 +109,33 @@ do_execsql_test 4.3 {
   INSERT INTO t1(t1) VALUES('integrity-check');
 }
 
+#-------------------------------------------------------------------------
+reset_db
+
+do_execsql_test 5.0 {
+  CREATE VIRTUAL TABLE t1 USING fts5(content);
+
+  INSERT INTO t1(t1,rank) VALUES('secure-delete',1);
+  INSERT INTO t1 VALUES('active'),('boomer'),('atom'),('atomic'),
+         ('alpha channel backup abandon test aback boomer atom alpha active');
+  DELETE FROM t1 WHERE t1 MATCH 'abandon';
+} 
+
+do_execsql_test 5.1 {
+  INSERT INTO t1(t1) VALUES('rebuild');
+}
+
+do_execsql_test 5.2 {
+  DELETE FROM t1 WHERE rowid NOTNULL<5;
+}
+
+db close
+sqlite3 db test.db
+
+do_execsql_test 5.3 {
+  PRAGMA integrity_check;
+} {ok}
+
+
 finish_test
 
index ac9ec8cf34340d19a58b6493618f9f898afce449..c9d01ed2aabeac399ba69169b2230763b9729146 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Immediately\sfail\sa\sCREATE\sTABLE\sstatement\sthat\sattempts\sto\screate\sa\ntable\sthat\shas\sa\sgenerated\scolumn\sloop.\s\sLegacy\sallows\sthe\stable\sto\sbe\ncreated\sbut\sthe\stable\swould\snot\sbe\susable\sfor\sanything.
-D 2023-10-13T13:49:46.914
+C Fix\san\sfts5\sproblem\scaused\sby\sa\s'rebuild'\sfollowed\sby\sa\sDELETE\sin\ssecure-delete\smode.
+D 2023-10-13T15:59:11.452
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -95,7 +95,7 @@ F ext/fts5/fts5_config.c 054359543566cbff1ba65a188330660a5457299513ac71c53b3a07d
 F ext/fts5/fts5_expr.c bd3b81ce669c4104e34ffe66570af1999a317b142c15fccb112de9fb0caa57a6
 F ext/fts5/fts5_hash.c 65e7707bc8774706574346d18c20218facf87de3599b995963c3e6d6809f203d
 F ext/fts5/fts5_index.c a0f8e58e1c101d0b7959264f76b8c0c3c44914a999b29ec4264a6f55f1bccfe1
-F ext/fts5/fts5_main.c 1ea6636a1f528e9042cc6992d57b5a97c4a4e401ab1d2836c0cc805a1d27a982
+F ext/fts5/fts5_main.c 95b479e4cc1ae5d22084caa9d85295ed759044d24a0c1679115aea4910792a1f
 F ext/fts5/fts5_storage.c 3c9b41fce41b6410f2e8f82eb035c6a29b2560483f773e6dc98cf3cb2e4ddbb5
 F ext/fts5/fts5_tcl.c b1445cbe69908c411df8084a10b2485500ac70a9c747cdc8cda175a3da59d8ae
 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee
@@ -204,7 +204,7 @@ F ext/fts5/test/fts5secure2.test 2e961d7eef939f294c56b5d895cac7f1c3a60b934ee2cfd
 F ext/fts5/test/fts5secure3.test c7e1080a6912f2a3ac68f2e05b88b72a99de38543509b2bbf427cac5c9c1c610
 F ext/fts5/test/fts5secure4.test 0d10a80590c07891478700af7793b232962042677432b9846cf7fc8337b67c97
 F ext/fts5/test/fts5secure5.test c07a68ced5951567ac116c22f2d2aafae497e47fe9fcb6a335c22f9c7a4f2c3a
-F ext/fts5/test/fts5secure6.test 6f7fbb1f96910ccbdbfd2097f761f4c77c150c03734503331e2d428f77fa2a6e
+F ext/fts5/test/fts5secure6.test 74bf04733cc523bccca519bb03d3b4e2ed6f6e3db7c59bf6be82c88a0ac857fd
 F ext/fts5/test/fts5secure7.test fd03d0868d64340a1db8615b02e5508fea409de13910114e4f19eaefc120777a
 F ext/fts5/test/fts5securefault.test dbca2b6a1c16700017f5051138991b705410889933f2a37c57ae8a23b296b10b
 F ext/fts5/test/fts5simple.test a298670508c1458b88ce6030440f26a30673931884eb5f4094ac1773b3ba217b
@@ -2128,8 +2128,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 2b574d9e7e922d0961ea27bfc0148d3098157ff8d4feefba469489c81d43f3e0
-R 2fc76f86f477974c5358ee799986121c
-U drh
-Z 113df2c1f11316814ff8cfbf0e8ca298
+P 3237bf964117c1ef71143042837ef21872bb3d04bfd682075672e768953ec802
+R 8c9ca99981e8bfe505c808816a46e21d
+U dan
+Z 7d08aebab325ced76a3693b193b8d8cb
 # Remove this line to create a well-formed Fossil manifest.
index 7f1ac31d9d6717bcc9426b12833539b93cd3a92a..305ace854d6511a6c863556e62c66bbfcca024cc 100644 (file)
@@ -1 +1 @@
-3237bf964117c1ef71143042837ef21872bb3d04bfd682075672e768953ec802
\ No newline at end of file
+18be505c628d9b13431ca6cfe822d4aeae119c53ae08aef26a67f310a8bd7bd3
\ No newline at end of file