]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Allow virtual tables to prepare writes to shadow tables in defensive mode from with...
authordan <Dan Kennedy>
Fri, 5 May 2023 11:47:31 +0000 (11:47 +0000)
committerdan <Dan Kennedy>
Fri, 5 May 2023 11:47:31 +0000 (11:47 +0000)
FossilOrigin-Name: a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe

ext/fts5/test/fts5misc.test
manifest
manifest.uuid
src/vtab.c

index fb609e2c8643788660bbd2e6ac5eaf02e4f18fb3..da3f6526975cb6af89845c8ebe1edf742cb3776d 100644 (file)
@@ -329,7 +329,7 @@ do_execsql_test 12.3 {
 reset_db
 sqlite3_db_config db DEFENSIVE 1
 
-do_execsql_test 13.0 {
+do_execsql_test 13.1.0 {
   CREATE TABLE a (id INTEGER PRIMARY KEY, name TEXT);
   CREATE VIRTUAL TABLE b USING fts5(name);
   CREATE TRIGGER a_trigger AFTER INSERT ON a BEGIN 
@@ -337,18 +337,44 @@ do_execsql_test 13.0 {
   END;
 }
 
-do_test 13.1 {
+do_test 13.1.1 {
   set ::STMT [
     sqlite3_prepare db "INSERT INTO a VALUES (1, 'foo') RETURNING id;" -1 dummy
   ]
   sqlite3_step $::STMT
 } {SQLITE_ROW}
 
-do_test 13.2 {
+do_test 13.1.2 {
   sqlite3_finalize $::STMT
 } {SQLITE_OK}
 
-do_test 13.3 {
+do_test 13.1.3 {
+  sqlite3_errmsg db
+} {not an error}
+
+reset_db
+sqlite3_db_config db DEFENSIVE 1
+do_execsql_test 13.2.0 {
+  BEGIN;
+  CREATE TABLE a (id INTEGER PRIMARY KEY, name TEXT);
+  CREATE VIRTUAL TABLE b USING fts5(name);
+  CREATE TRIGGER a_trigger AFTER INSERT ON a BEGIN 
+    INSERT INTO b (name) VALUES ('foo');
+  END;
+}
+
+do_test 13.2.1 {
+  set ::STMT [
+    sqlite3_prepare db "INSERT INTO a VALUES (1, 'foo') RETURNING id;" -1 dummy
+  ]
+  sqlite3_step $::STMT
+} {SQLITE_ROW}
+
+do_test 13.2.2 {
+  sqlite3_finalize $::STMT
+} {SQLITE_OK}
+
+do_test 13.2.3 {
   sqlite3_errmsg db
 } {not an error}
 
index 064cec52c2cb29a30eee199657844ba2b9fe52a6..ba1fd1f6c956b583bee8b15387773c279be402d0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improved\sformatting\sof\scomments\son\sSQLITE_CONFIG_xxx\sdefines\sas\sthose\ncomments\sare\sused\sby\sdocumentation.
-D 2023-05-05T11:33:59.479
+C Allow\svirtual\stables\sto\sprepare\swrites\sto\sshadow\stables\sin\sdefensive\smode\sfrom\swith\sxRelease()\scallbacks\s-\seven\sif\sthe\sxRelease()\sis\sinvoked\sfrom\swithin\ssqlite3_finalize().
+D 2023-05-05T11:47:31.426
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -169,7 +169,7 @@ F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc27826807405
 F ext/fts5/test/fts5matchinfo.test 10c9a6f7fe61fb132299c4183c012770b10c4d5c2f2edb6df0b6607f683d737a
 F ext/fts5/test/fts5merge.test e92a8db28b45931e7a9c7b1bbd36101692759d00274df74d83fd29d25d53b3a6
 F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd73196801dea0425c8e2
-F ext/fts5/test/fts5misc.test c02f3e78aa7e62891b5f711c498a877f03252f10a6974e23bc722533233f2603
+F ext/fts5/test/fts5misc.test 416ec0ffbc79320a0760ec32d6684866e3ccd3fbce09f9bcd62d9aee4c666b43
 F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581
 F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45
 F ext/fts5/test/fts5near.test 211477940142d733ac04fad97cb24095513ab2507073a99c2765c3ddd2ef58bd
@@ -715,7 +715,7 @@ F src/vdbemem.c 1cac4028c0dabbf1f3259f107440e2780e05ac9fe419e9709e6eb4e166ba714b
 F src/vdbesort.c 43756031ca7430f7aec3ef904824a7883c4ede783e51f280d99b9b65c0796e35
 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823
 F src/vdbevtab.c aae4bd769410eb7e1d02c42613eec961d514459b1c3c1c63cfc84e92a137daac
-F src/vtab.c 4a1b231b5938de0282fbb605eb068ca673a1b6a383130f54d1bcbbac951988ad
+F src/vtab.c 4758a96d36c9a120848386ae603b1ab32a4876e0a1faf81bfcfb524455e583dc
 F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 7a65f64bfe4a783c5e2df73ffb0efc383dec934dee9e3ac706b2eeb3631d17ac
 F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
@@ -2068,8 +2068,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 6fcb5a941fba0449d017954590bde7da74e5a1f8fd9b3e1febdff9bed1f22051
-R 11c5acaba323814d1711daf662533952
-U drh
-Z 9311f3acd15641a9173eab56a31a958b
+P 2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3
+R 5394c576f036f13633460f80b7c0ca1c
+U dan
+Z 99381f418692096bd24e6bfa992d2414
 # Remove this line to create a well-formed Fossil manifest.
index f7abc408d425d9a2a4f787c99206096058b42ce6..0f64e8c27a9d2ebf59c86cdfcd9008027117eb60 100644 (file)
@@ -1 +1 @@
-2cb840bc9df81f76699f742e5db03835f4c272548cca0e6d24412503db3d76b3
\ No newline at end of file
+a17106494a8a67bc92cfe27ee8ef9bf160517d6930d796980ae12287b98c1cfe
\ No newline at end of file
index 3477d67ce307977e1c3ccade94b476adef0ebd18..ad629bb03142727b489215a24a1b522346ab291e 100644 (file)
@@ -1102,7 +1102,10 @@ int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){
             break;
         }
         if( xMethod && pVTab->iSavepoint>iSavepoint ){
+          u64 savedFlags = (db->flags & SQLITE_Defensive);
+          db->flags &= ~(u64)SQLITE_Defensive;
           rc = xMethod(pVTab->pVtab, iSavepoint);
+          db->flags |= savedFlags;
         }
         sqlite3VtabUnlock(pVTab);
       }