mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
Further enhancements to the "wheretrace" debugging output.
FossilOrigin-Name: 670993eb8113f386cb2cb8b1507917f6da3b4d98
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Enhanced\sdebug\soutput\sfor\sOR-logic\sin\sthe\squery\sloop\soptimizer.
|
C Further\senhancements\sto\sthe\s"wheretrace"\sdebugging\soutput.
|
||||||
D 2014-09-30T14:14:19.732
|
D 2014-09-30T17:03:35.868
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
|
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -302,7 +302,7 @@ F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
|
|||||||
F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
|
F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
|
||||||
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
|
||||||
F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
|
F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
|
||||||
F src/where.c 1d22623f4cc01ad34f4660daae77826550033c58
|
F src/where.c a459332dc671138a6997904850ead36d83bfb8e0
|
||||||
F src/whereInt.h 124d970450955a6982e174b07c320ae6d62a595c
|
F src/whereInt.h 124d970450955a6982e174b07c320ae6d62a595c
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
@@ -1200,7 +1200,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P 92e0b4bd4d75e8b000586e51a07b3e181d9af20b
|
P 2e375eae473e4a9f2e7870d59e22ba39051ecbce
|
||||||
R ad11511f8b3c0903ec6511fb5cd0e86b
|
R c96a5d9652d91d70c0e54df21653ce3e
|
||||||
U drh
|
U drh
|
||||||
Z 55bafa322513796a5af056ecffd49293
|
Z 7116ce524f0c5c15e04b43bf011b61b4
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2e375eae473e4a9f2e7870d59e22ba39051ecbce
|
670993eb8113f386cb2cb8b1507917f6da3b4d98
|
||||||
38
src/where.c
38
src/where.c
@@ -3537,6 +3537,7 @@ static Bitmask codeOneLoopStart(
|
|||||||
pOrExpr = pAndExpr;
|
pOrExpr = pAndExpr;
|
||||||
}
|
}
|
||||||
/* Loop through table entries that match term pOrTerm. */
|
/* Loop through table entries that match term pOrTerm. */
|
||||||
|
WHERETRACE(0xffff, ("Subplan for OR-clause:\n"));
|
||||||
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
|
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
|
||||||
wctrlFlags, iCovCur);
|
wctrlFlags, iCovCur);
|
||||||
assert( pSubWInfo || pParse->nErr || db->mallocFailed );
|
assert( pSubWInfo || pParse->nErr || db->mallocFailed );
|
||||||
@@ -3761,15 +3762,19 @@ static Bitmask codeOneLoopStart(
|
|||||||
** Print the content of a WhereTerm object
|
** Print the content of a WhereTerm object
|
||||||
*/
|
*/
|
||||||
static void whereTermPrint(WhereTerm *pTerm, int iTerm){
|
static void whereTermPrint(WhereTerm *pTerm, int iTerm){
|
||||||
char zType[4];
|
if( pTerm==0 ){
|
||||||
memcpy(zType, "...", 4);
|
sqlite3DebugPrintf("TERM-%-3d NULL\n", iTerm);
|
||||||
if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V';
|
}else{
|
||||||
if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E';
|
char zType[4];
|
||||||
if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L';
|
memcpy(zType, "...", 4);
|
||||||
sqlite3DebugPrintf("TERM-%-3d %p %s cursor=%-3d prob=%-3d op=0x%03x\n", iTerm,
|
if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V';
|
||||||
pTerm, zType, pTerm->leftCursor, pTerm->truthProb,
|
if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E';
|
||||||
pTerm->eOperator);
|
if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L';
|
||||||
sqlite3TreeViewExpr(0, pTerm->pExpr, 0);
|
sqlite3DebugPrintf("TERM-%-3d %p %s cursor=%-3d prob=%-3d op=0x%03x\n",
|
||||||
|
iTerm, pTerm, zType, pTerm->leftCursor, pTerm->truthProb,
|
||||||
|
pTerm->eOperator);
|
||||||
|
sqlite3TreeViewExpr(0, pTerm->pExpr, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3818,9 +3823,7 @@ static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){
|
|||||||
if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
|
if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<p->nLTerm; i++){
|
for(i=0; i<p->nLTerm; i++){
|
||||||
WhereTerm *pTerm = p->aLTerm[i];
|
whereTermPrint(p->aLTerm[i], i);
|
||||||
if( pTerm==0 ) continue;
|
|
||||||
whereTermPrint(pTerm, i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5023,6 +5026,7 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
|
|||||||
sSubBuild.pOrderBy = 0;
|
sSubBuild.pOrderBy = 0;
|
||||||
sSubBuild.pOrSet = &sCur;
|
sSubBuild.pOrSet = &sCur;
|
||||||
|
|
||||||
|
WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm));
|
||||||
for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
|
for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
|
||||||
if( (pOrTerm->eOperator & WO_AND)!=0 ){
|
if( (pOrTerm->eOperator & WO_AND)!=0 ){
|
||||||
sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc;
|
sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc;
|
||||||
@@ -5038,9 +5042,12 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
|
|||||||
}
|
}
|
||||||
sCur.n = 0;
|
sCur.n = 0;
|
||||||
#ifdef WHERETRACE_ENABLED
|
#ifdef WHERETRACE_ENABLED
|
||||||
if( sqlite3WhereTrace & 0x200 ){
|
WHERETRACE(0x200, ("OR-term %d of %p has %d subterms:\n",
|
||||||
sqlite3DebugPrintf("OR-term %d:\n",(int)(pOrTerm-pOrWC->a));
|
(int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm));
|
||||||
sqlite3TreeViewExpr(0, pOrTerm->pExpr, 0);
|
if( sqlite3WhereTrace & 0x400 ){
|
||||||
|
for(i=0; i<sSubBuild.pWC->nTerm; i++){
|
||||||
|
whereTermPrint(&sSubBuild.pWC->a[i], i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
@@ -5095,6 +5102,7 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
|
|||||||
pNew->prereq = sSum.a[i].prereq;
|
pNew->prereq = sSum.a[i].prereq;
|
||||||
rc = whereLoopInsert(pBuilder, pNew);
|
rc = whereLoopInsert(pBuilder, pNew);
|
||||||
}
|
}
|
||||||
|
WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
|||||||
Reference in New Issue
Block a user