From: drh Date: Fri, 21 Oct 2016 18:01:40 +0000 (+0000) Subject: When reading from an index, the shared-cache lock must be on the corresponding X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=052153994b30d0f61fece2ee29b75244206d2f36;p=thirdparty%2Fsqlite.git When reading from an index, the shared-cache lock must be on the corresponding table. FossilOrigin-Name: 04fe12b590ab67e40cd079b5e614b787f5f525ad --- diff --git a/manifest b/manifest index d5c0128e22..624111029c 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index e961309384..231aa71907 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0c8a5b8844df3389881aecd8e853eb3c78edd954 \ No newline at end of file +04fe12b590ab67e40cd079b5e614b787f5f525ad \ No newline at end of file diff --git a/src/pragma.c b/src/pragma.c index c512d3ba8d..c641f448cb 100644 --- a/src/pragma.c +++ b/src/pragma.c @@ -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);