Do not use an index fullscan for an UPDATE or DELETE or if disabled by

sqlite3_test_control() or sqlite3_config().

FossilOrigin-Name: fabb21854e662b1d8e5631e79f828d5322ceb595
This commit is contained in:
drh
2013-06-03 19:17:40 +00:00
parent 74990dce64
commit e3b7c9216c
3 changed files with 13 additions and 8 deletions
+6 -6
View File
@@ -1,5 +1,5 @@
C Resolve\sambiguities\sin\stest\scases\sin\scollate2.test.
D 2013-06-03T19:01:26.660
C Do\snot\suse\san\sindex\sfullscan\sfor\san\sUPDATE\sor\sDELETE\sor\sif\sdisabled\sby\nsqlite3_test_control()\sor\ssqlite3_config().
D 2013-06-03T19:17:40.684
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -289,7 +289,7 @@ F src/vtab.c b05e5f1f4902461ba9f5fc49bb7eb7c3a0741a83
F src/wal.c 436bfceb141b9423c45119e68e444358ee0ed35d
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
F src/walker.c 4fa43583d0a84b48f93b1e88f11adf2065be4e73
F src/where.c a60b27296226bc073ae87988f7cec222d9523d7d
F src/where.c 6226d9912f494a92b51b06c58b5c0eed9b7eb84e
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
@@ -1093,7 +1093,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
P aa66b864204b4b8717d845499132b987eb8ef924
R 62f1f59de9bf7b607ff3cad8a2a9dba4
P dcbbcb2e6c85780276cb3a392549f70e21e94408
R 5e83ed1a81fa16225d238fe289659759
U drh
Z 7508c3c33af72ab568a1feb83056a8cb
Z 8c74536a41fa8c42d526bd323c460f6c
+1 -1
View File
@@ -1 +1 @@
dcbbcb2e6c85780276cb3a392549f70e21e94408
fabb21854e662b1d8e5631e79f828d5322ceb595
+6 -1
View File
@@ -4224,7 +4224,12 @@ static int whereLoopAddBtree(
pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED;
/* Full scan via index */
if( (m==0 || b) && pProbe->bUnordered==0 ){
if( (m==0 || b)
&& pProbe->bUnordered==0
&& (pBuilder->pWC->wctrlFlags & WHERE_ONEPASS_DESIRED)==0
&& sqlite3GlobalConfig.bUseCis
&& OptimizationEnabled(pBuilder->pParse->db, SQLITE_CoverIdxScan)
){
pNew->iSortIdx = b ? iSortIdx : 0;
pNew->nOut = rSize;
pNew->rRun = (m==0) ? (rSize + rLogSize)*(1+b) : (rSize*rLogSize);