]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix the sqlite_dbpage virtual table so that it starts a write transaction
authordrh <>
Wed, 9 Mar 2022 14:29:33 +0000 (14:29 +0000)
committerdrh <>
Wed, 9 Mar 2022 14:29:33 +0000 (14:29 +0000)
on all attached schemas.

FossilOrigin-Name: e92c4fdb99eb09507e6b970067c1a6f2043838f67017125851469d66c1bb5b20

manifest
manifest.uuid
src/dbpage.c
src/sqliteInt.h
src/where.c

index fed6f3e1bd6d938451a6f1fb5455e8940a488543..1aa0f12d3a4316acd2f4bf4db85e15484085b7e9 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\spotentially\suninitialized\slocal\svariable\sin\sthe\s".import"\ncommand\sof\sthe\sCLI\s-\sintroduced\sby\s[741651fd4b1b776b].\s\sThis\ssame\schange\nis\spart\sof\sthe\snearby\s[/info/5e30c6ea707f9d38|"Fix\scompiler\swarnings"]\ncheck-in.
-D 2022-03-08T16:12:53.276
+C Fix\sthe\ssqlite_dbpage\svirtual\stable\sso\sthat\sit\sstarts\sa\swrite\stransaction\non\sall\sattached\sschemas.
+D 2022-03-09T14:29:33.828
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -500,7 +500,7 @@ F src/callback.c 4c19af69835787bfe790ac560f3071a824eb629f34e41f97b52ce5235c77de1
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c 2cce39df1a13e05b7633e6d21b651f21492471f991dd7b323a4ee4e7b7f0b7f1
 F src/date.c 15082566229d4b1e5f24fdb490bf9bcc68824b911d70e3573ef075a1b9e2d26f
-F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a
+F src/dbpage.c 30ff075a9a9156bd2cccb5c1ea579f2afbaa64989648e8c9d72cb4a3417f5136
 F src/dbstat.c 861e08690fcb0f2ee1165eff0060ea8d4f3e2ea10f80dab7d32ad70443a6ff2d
 F src/delete.c b5f1716b4d723db48254ee0f896e362cd029e865e05414139ea7f539f3884e1d
 F src/expr.c b90a029105a93a93a0ed5e5f8c5eaed8f19043a3b62e4c4d235a4611d9ada178
@@ -557,7 +557,7 @@ F src/shell.c.in 69d1e59da4881f096ab47fbd3e6d99794f3e4a43f41fd9e4d2e845c9b8d20fd
 F src/sqlite.h.in e82ac380b307659d0892f502b742f825504e78729f4edaadce946003b9c00816
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h a95cb9ed106e3d39e2118e4dcc15a14faec3fa50d0093425083d340d9dfd96e6
-F src/sqliteInt.h f8814239fb1f95056555e2d7fa475750e64681cac4221fb03610d1fde0b79d53
+F src/sqliteInt.h e7b93bb693cb14259f6c3faadc6d7c824ff509aac673622a76c161a96c5872d0
 F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
 F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
@@ -639,7 +639,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c b9df133a705093da8977da5eb202eaadb844839f1c7297c08d33471f5491843d
 F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
 F src/walker.c f890a3298418d7cba3b69b8803594fdc484ea241206a8dfa99db6dd36f8cbb3b
-F src/where.c 1471be86b34b8ce328c6c68d7e2ee667c7f801ddf83ff179bc5936700cf43aa7
+F src/where.c 5c5a380bfb13a6964a7ab4d3780f9b4fd2b40457f4bfd2b85224d326f4a3bae1
 F src/whereInt.h 15d2975c3b4c193c78c26674400a840da8647fe1777ae3b026e2d15937b38a03
 F src/wherecode.c 84be340684393248b9f3ecbce9b87c8a6f818149b52302702ea0b8d2a9d51faf
 F src/whereexpr.c 2a71f5491798460c9590317329234d332d9eb1717cba4f3403122189a75c465e
@@ -1944,8 +1944,9 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P ab744a5da80ddcd5c7cce60626d82c0e368f675b8a11bfb93b4739ea30bb07c0
-R a3a1f81f5ee81baa9f34242a6c335b2e
+P ce9e3d903c2e5993a3fdadaf809ce2026efd1b5b933930b50dd794c9a7329cdd
+Q +642a0b4752743216271e4f855a465515ef7f6a985f280251e18d67e3d5fb694b
+R 011b43d5b75b42fd099ba29065742c94
 U drh
-Z d441488a9b712e18c47317a933ef0a68
+Z ce7755c4e14defd51dd85e0e89e5b557
 # Remove this line to create a well-formed Fossil manifest.
index f6715531a30e7e422c9e2a88808a173f7728926a..49db8641af3cfc4e3e04deff81afaceb7c0c516d 100644 (file)
@@ -1 +1 @@
-ce9e3d903c2e5993a3fdadaf809ce2026efd1b5b933930b50dd794c9a7329cdd
\ No newline at end of file
+e92c4fdb99eb09507e6b970067c1a6f2043838f67017125851469d66c1bb5b20
\ No newline at end of file
index c4f0b539ef3723fed940367fe658d8e8a8cb3469..575ee677154cf20fcd0a59446eabe08885019aaa 100644 (file)
@@ -156,6 +156,7 @@ static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
   ){
     pIdxInfo->orderByConsumed = 1;
   }
+  sqlite3VtabWriteAll(pIdxInfo);
   return SQLITE_OK;
 }
 
index c8dbec2f156dd621df814a120084e8c1bbf6813b..3f11f15715460c2457fff28c191b35ccb85e4a8e 100644 (file)
@@ -5101,7 +5101,12 @@ int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
 int sqlite3VtabCallConnect(Parse*, Table*);
 int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
 int sqlite3VtabBegin(sqlite3 *, VTable *);
+
 FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
+#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \
+    && !defined(SQLITE_OMIT_VIRTUALTABLE)
+  void sqlite3VtabWriteAll(sqlite3_index_info*);
+#endif
 sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context*);
 int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
 int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
index ddec44723fd8d930ea9d6722cc0ecb93151332ca..9ce65c42b217265b9ad08375f152e8c4939e8a67 100644 (file)
@@ -3764,7 +3764,6 @@ int sqlite3_vtab_rhs_value(
   return rc;
 }
 
-
 /*
 ** Return true if ORDER BY clause may be handled as DISTINCT.
 */
@@ -3776,6 +3775,22 @@ int sqlite3_vtab_distinct(sqlite3_index_info *pIdxInfo){
   return pHidden->eDistinct;
 }
 
+#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \
+    && !defined(SQLITE_OMIT_VIRTUALTABLE)
+/*
+** Cause the prepared statement that is associated with a call to
+** xBestIndex to open write transactions on all attached schemas.
+** This is used by the (built-in) sqlite_dbpage virtual table.
+*/
+void sqlite3VtabWriteAll(sqlite3_index_info *pIdxInfo){
+  HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1];
+  Parse *pParse = pHidden->pParse;
+  Parse *pTopLevel = sqlite3ParseToplevel(pParse);
+  pTopLevel->cookieMask =
+    pTopLevel->writeMask = (((u64)1) << pParse->db->nDb) - 1;
+}
+#endif
+
 /*
 ** Add all WhereLoop objects for a table of the join identified by
 ** pBuilder->pNew->iTab.  That table is guaranteed to be a virtual table.