mirror of https://github.com/sqlite/sqlite
Minor size and performance improvements to the push-down optimization.
FossilOrigin-Name: 91dfb61a1a25763bb0b5c1e353a9d584bc6de3f6eb445f54202ffe7f6fee6e8d
This commit is contained in:
parent
6f654a40e8
commit
6ab3eb5d0e
17
manifest
17
manifest
|
@ -1,5 +1,5 @@
|
||||||
C Within\sa\sloop\sthat\suses\sa\snon-covering\sindex\stest,\stest\snon-indexed\sterms\sthat\ncan\sbe\stested\swithout\sseeking\sthe\smain\stable\scursor\sbefore\sthose\sthat\scannot.
|
C Minor\ssize\sand\sperformance\simprovements\sto\sthe\spush-down\soptimization.
|
||||||
D 2017-04-28T19:59:55.785
|
D 2017-04-29T14:56:55.202
|
||||||
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6
|
F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6
|
||||||
|
@ -485,7 +485,7 @@ F src/wal.h 06b2a0b599cc0f53ea97f497cf8c6b758c999f71
|
||||||
F src/walker.c b71a992b413b3a022572eccf29ef4b4890223791
|
F src/walker.c b71a992b413b3a022572eccf29ef4b4890223791
|
||||||
F src/where.c c6352f15be5031907c68bcbde96cad1a6da20e9f4051d10168a59235de9a8566
|
F src/where.c c6352f15be5031907c68bcbde96cad1a6da20e9f4051d10168a59235de9a8566
|
||||||
F src/whereInt.h 2a4b634d63ce488b46d4b0da8f2eaa8f9aeab202bc25ef76f007de5e3fba1f20
|
F src/whereInt.h 2a4b634d63ce488b46d4b0da8f2eaa8f9aeab202bc25ef76f007de5e3fba1f20
|
||||||
F src/wherecode.c 878a8c75af2bf6103ed4d1df639ee64ddb66f11b3a388f9caf7598c159a2c9af
|
F src/wherecode.c 8ad48867660519e262a401720845dc76934f86f558ec9606335fafcd7a2554f8
|
||||||
F src/whereexpr.c e913aaa7b73ffcce66abcea5f197e2c538d48b5df78d0b7bba8ff4d73cc2e745
|
F src/whereexpr.c e913aaa7b73ffcce66abcea5f197e2c538d48b5df78d0b7bba8ff4d73cc2e745
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
||||||
|
@ -1577,10 +1577,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 2d0b64316d66a362f5891ceb71a1fd8e4607732274b09b0a8472b97eef68ebc2
|
P afe68f0a8060dc5c92cb1fb32a9f22bd36140cd2c0bb5b6cea853e169c5ed444
|
||||||
R 8c650dff0f0f10ff63f37c52f3854c68
|
R d3fbd82e46a4092d676255e41f20df5b
|
||||||
T *branch * pushdown-optimization
|
U drh
|
||||||
T *sym-pushdown-optimization *
|
Z bf8e798698af6ed2b80cadbc03ebd2b9
|
||||||
T -sym-trunk *
|
|
||||||
U dan
|
|
||||||
Z 464ba506caa7cc6d49be35980d40d709
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
afe68f0a8060dc5c92cb1fb32a9f22bd36140cd2c0bb5b6cea853e169c5ed444
|
91dfb61a1a25763bb0b5c1e353a9d584bc6de3f6eb445f54202ffe7f6fee6e8d
|
|
@ -1130,6 +1130,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||||
int iRowidReg = 0; /* Rowid is stored in this register, if not zero */
|
int iRowidReg = 0; /* Rowid is stored in this register, if not zero */
|
||||||
int iReleaseReg = 0; /* Temp register to free before returning */
|
int iReleaseReg = 0; /* Temp register to free before returning */
|
||||||
Index *pIdx = 0; /* Index used by loop (if any) */
|
Index *pIdx = 0; /* Index used by loop (if any) */
|
||||||
|
int loopAgain; /* True if constraint generator loop should repeat */
|
||||||
|
|
||||||
pParse = pWInfo->pParse;
|
pParse = pWInfo->pParse;
|
||||||
v = pParse->pVdbe;
|
v = pParse->pVdbe;
|
||||||
|
@ -2027,8 +2028,10 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||||
** This loop may run either once (pIdx==0) or twice (pIdx!=0). If
|
** This loop may run either once (pIdx==0) or twice (pIdx!=0). If
|
||||||
** it is run twice, then the first iteration codes those sub-expressions
|
** it is run twice, then the first iteration codes those sub-expressions
|
||||||
** that can be computed using columns from pIdx only (without seeking
|
** that can be computed using columns from pIdx only (without seeking
|
||||||
** the main table cursor). */
|
** the main table cursor).
|
||||||
while( 1 ){
|
*/
|
||||||
|
do{
|
||||||
|
loopAgain = 0;
|
||||||
for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
|
for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
|
||||||
Expr *pE;
|
Expr *pE;
|
||||||
int skipLikeAddr = 0;
|
int skipLikeAddr = 0;
|
||||||
|
@ -2043,10 +2046,11 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||||
}
|
}
|
||||||
pE = pTerm->pExpr;
|
pE = pTerm->pExpr;
|
||||||
assert( pE!=0 );
|
assert( pE!=0 );
|
||||||
if( pIdx && !sqlite3ExprCoveredByIndex(pE, pLevel->iTabCur, pIdx) ){
|
if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
|
if( pIdx && !sqlite3ExprCoveredByIndex(pE, pLevel->iTabCur, pIdx) ){
|
||||||
|
loopAgain = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if( pTerm->wtFlags & TERM_LIKECOND ){
|
if( pTerm->wtFlags & TERM_LIKECOND ){
|
||||||
|
@ -2068,9 +2072,8 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||||
if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr);
|
if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr);
|
||||||
pTerm->wtFlags |= TERM_CODED;
|
pTerm->wtFlags |= TERM_CODED;
|
||||||
}
|
}
|
||||||
if( pIdx==0 ) break;
|
|
||||||
pIdx = 0;
|
pIdx = 0;
|
||||||
}
|
}while( loopAgain );
|
||||||
|
|
||||||
/* Insert code to test for implied constraints based on transitivity
|
/* Insert code to test for implied constraints based on transitivity
|
||||||
** of the "==" operator.
|
** of the "==" operator.
|
||||||
|
|
Loading…
Reference in New Issue