]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When reading from an index, the shared-cache lock must be on the corresponding
authordrh <drh@noemail.net>
Fri, 21 Oct 2016 18:01:40 +0000 (18:01 +0000)
committerdrh <drh@noemail.net>
Fri, 21 Oct 2016 18:01:40 +0000 (18:01 +0000)
table.

FossilOrigin-Name: 04fe12b590ab67e40cd079b5e614b787f5f525ad

manifest
manifest.uuid
src/pragma.c

index d5c0128e22d75b4ba0931f3b94665d835240faac..624111029c900b144cb4c96df6428fc1f4b74aec 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\supdates\sfrom\strunk,\sand\sespecially\sthe\s".mode\squote"\senhancement\sto\s\nthe\sshell.
-D 2016-10-21T17:45:06.470
+C When\sreading\sfrom\san\sindex,\sthe\sshared-cache\slock\smust\sbe\son\sthe\scorresponding\ntable.
+D 2016-10-21T18:01:40.991
 F Makefile.in 6fd48ffcf7c2deea7499062d1f3747f986c19678
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 5151cc64c4c05f3455f4f692ad11410a810d937f
@@ -380,7 +380,7 @@ F src/parse.y 07f68096c97093793ed04d69db8bb75e55c3e00e
 F src/pcache.c 5ff2a08f76a9c1b22f43eb063b7068fb085465ac
 F src/pcache.h 2cedcd8407eb23017d92790b112186886e179490
 F src/pcache1.c e3967219b2a92b9edcb9324a4ba75009090d3953
-F src/pragma.c 3ef6e3168ed02ebc8247b3fc0d612b6fc6b0db24
+F src/pragma.c 7e3bbf3c8d28a91d76f5cb91a7733fde43f13fe0
 F src/pragma.h 74d46e32bdc7abb2d01710162ff96cfb483699b6
 F src/prepare.c b1140c3d0cf59bc85ace00ce363153041b424b7a
 F src/printf.c a5f0ca08ddede803c241266abb46356ec748ded1
@@ -1527,7 +1527,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 affc2ef5ee3d8885e74051fd508a3d6f8c313857 c4f5fa78cd8207ce1e46e32e632b8f6ee86047e1
-R 591580a5c8896f3fc0bc04d961931d49
+P 0c8a5b8844df3389881aecd8e853eb3c78edd954
+R d660078687b657495181c871ccc08c5d
 U drh
-Z a6ce5577f64ea1653d10487deaf2ff9d
+Z 6dae85bfa44e07a1b59d3382cd897280
index e9613093843c80e43ef0e6f66f307e0f57e4f5f0..231aa71907296cb4ac84c737cbef132628e08b73 100644 (file)
@@ -1 +1 @@
-0c8a5b8844df3389881aecd8e853eb3c78edd954
\ No newline at end of file
+04fe12b590ab67e40cd079b5e614b787f5f525ad
\ No newline at end of file
index c512d3ba8d8a203b2cf929a3b38710e152bd0093..c641f448cbd3f597152c0307dacc60cf01ff5ca7 100644 (file)
@@ -1441,6 +1441,7 @@ void sqlite3Pragma(
     Index *pIdx;
     Table *pTab = 0;
     Pgno iRoot = 0;
+    Pgno iLock = 0;
     int nCol = 0;
     const char *zName = 0;
     int iLimit = 10;
@@ -1453,16 +1454,17 @@ void sqlite3Pragma(
     double r;
     if( (pIdx = sqlite3FindIndex(db, zRight, zDb))!=0 ){
       iRoot = pIdx->tnum;
+      iLock = pIdx->pTable->tnum;
       zName = pIdx->zName;
       nCol = pIdx->nColumn;
     }else if( (pTab = sqlite3FindTable(db, zRight, zDb))!=0 ){
       zName = pTab->zName;
       if( HasRowid(pTab) ){
-        iRoot = pTab->tnum;
+        iLock = iRoot = pTab->tnum;
         nCol = pTab->nCol;
       }else{
         pIdx = sqlite3PrimaryKeyIndex(pTab);
-        iRoot = pIdx->tnum;
+        iLock = iRoot = pIdx->tnum;
         nCol = pIdx->nColumn;
       }
     }else{
@@ -1486,7 +1488,7 @@ void sqlite3Pragma(
       iLimit = sqlite3Atoi(pValues->a[2].zName);
     }
     pParse->nTab++;
-    sqlite3TableLock(pParse, iDb, iRoot, 0, zName);
+    sqlite3TableLock(pParse, iDb, iLock, 0, zName);
     sqlite3CodeVerifySchema(pParse, iDb);
     sqlite3VdbeAddOp4Int(v, OP_OpenRead, 0, iRoot, iDb, nCol);
     if( pIdx ) sqlite3VdbeSetP4KeyInfo(pParse, pIdx);