]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do an early close of virtual table cursors to avoid unnecessary cursor
authordrh <drh@noemail.net>
Mon, 23 Dec 2019 19:28:34 +0000 (19:28 +0000)
committerdrh <drh@noemail.net>
Mon, 23 Dec 2019 19:28:34 +0000 (19:28 +0000)
contention in UPDATE for some virtual table implementations.
Ticket [56a74875be799b85]

FossilOrigin-Name: eb95dac7f6482c36853a23234c5ce7af37c7beed8e3675d6a49c4d3a8307e076

manifest
manifest.uuid
src/where.c

index 11932bc710abccdaa04d94d5ec5484a539804141..dd88d21d78fb3ab4e3ebae420dd6d1b96b41f847 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Early\sdetection\sof\sdatabase\scorruption\sin\sbalance_deeper().
-D 2019-12-23T18:02:15.079
+C Do\san\searly\sclose\sof\svirtual\stable\scursors\sto\savoid\sunnecessary\scursor\ncontention\sin\sUPDATE\sfor\ssome\svirtual\stable\simplementations.\nTicket\s[56a74875be799b85]
+D 2019-12-23T19:28:34.435
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -613,7 +613,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1
 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
 F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d
-F src/where.c 25653002490b093b9b752f30ad92b307464b099ad081c4d2fb524719427403f2
+F src/where.c c82db883f6988742c416998b29228ea03788b97cc3d39dd5a6c8da553e278cd0
 F src/whereInt.h 4a296fd4fa79fdcbc2b5e8c1b898901617655811223e1082b899c23ecb092217
 F src/wherecode.c bb58d5e6e7f583db5b74e0fd35f1d65fdee67d20553b55cd6098fc3f8148053a
 F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
@@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 2f17974912ec5e99089dc0da803e7ff1bf033377a49762d2689a812c005f2641
-R 8b7584d5dce9cabfa7788fda2b2b4c7c
+P 61c2233654158e65a3d3baeea947903a919a569fcc4a5b342b2e9a68cec1b6f3
+R d87e55f8560ad2234e5e7557c4b3d18d
 U drh
-Z 20f6b4d0a1e07f848f9073291aeee414
+Z 20bdde97f18017c70a3591a93bad8703
index f3b00eb01569febad816ac3311f76341a2a40cbc..7ae48137cd4f4207692117dcfa4a2df1f946b760 100644 (file)
@@ -1 +1 @@
-61c2233654158e65a3d3baeea947903a919a569fcc4a5b342b2e9a68cec1b6f3
\ No newline at end of file
+eb95dac7f6482c36853a23234c5ce7af37c7beed8e3675d6a49c4d3a8307e076
\ No newline at end of file
index 7d34787696ca85251221ea9d89ad9dbf8a3f4070..c08931aefcda7fca7f1c83768076d1367cd950bd 100644 (file)
@@ -5340,13 +5340,16 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
       continue;
     }
 
+    if( IsVirtual(pTab) ){
+      sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
+    }
 #ifdef SQLITE_ENABLE_EARLY_CURSOR_CLOSE
     /* Close all of the cursors that were opened by sqlite3WhereBegin.
     ** Except, do not close cursors that will be reused by the OR optimization
     ** (WHERE_OR_SUBCLAUSE).  And do not close the OP_OpenWrite cursors
     ** created for the ONEPASS optimization.
     */
-    if( (pTab->tabFlags & TF_Ephemeral)==0
+    else if( (pTab->tabFlags & TF_Ephemeral)==0
      && pTab->pSelect==0
      && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)==0
     ){