]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have contentless_delete=1 tables support REPLACE statements.
authordan <Dan Kennedy>
Tue, 11 Jul 2023 20:57:19 +0000 (20:57 +0000)
committerdan <Dan Kennedy>
Tue, 11 Jul 2023 20:57:19 +0000 (20:57 +0000)
FossilOrigin-Name: 2f553a660e00564e51bc4209c92bd3628fb1266f4a52832792fbf91e4234a0ba

ext/fts5/fts5_main.c
ext/fts5/fts5_storage.c
ext/fts5/test/fts5contentless.test
manifest
manifest.uuid

index 7b1f4a6d0824d854b1f409df297104175415df06..844b5c57efca65c72314eabfb9d9a6f11ddfc69e 100644 (file)
@@ -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);
     }
 
index adc8e750ed5f73a2c0277c479307a3936b26343c..35c30d06e68c276e0165897d11c93fbc4c42b6a3 100644 (file)
@@ -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);
   }
 
index a55aa84021278e51ebbcfa80ee1018808bd68196..3179b52e9294bd6075bc51cb95b6847d014852f3 100644 (file)
@@ -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
 
index 963270545adbd29d51e5b54c43b2b25fb7d89345..9f5b8a7cfacd44f80bffb22de497dfe1a7885bef 100644 (file)
--- 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.
index 06acf1e66a5191f38b68bc72fb7d2a63f961b0e6..40b428d76eddbb7f5d5c500ccc67471a2e24535d 100644 (file)
@@ -1 +1 @@
-fffb8616905501669a94231d5d9f53446bf09553353f2cdab7c43ca54bbb7fa6
\ No newline at end of file
+2f553a660e00564e51bc4209c92bd3628fb1266f4a52832792fbf91e4234a0ba
\ No newline at end of file