aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2025-06-16 16:07:14 +0000
committerdrh <>2025-06-16 16:07:14 +0000
commitd3a13f7d255fdc3f5a5b4a41fc3bbb6552d0cd1a (patch)
treee23be9ba84efc12c236391b453e1ff338854237e /src
parent6ed5aa4b9be0893560ddc3351b62bfeecce6bdda (diff)
downloadsqlite-d3a13f7d255fdc3f5a5b4a41fc3bbb6552d0cd1a.tar.gz
sqlite-d3a13f7d255fdc3f5a5b4a41fc3bbb6552d0cd1a.zip
Improved debugging output for the transitive constraint optimization.
FossilOrigin-Name: 94b53c20e9bc8687c44272419aa7a93076eebdeae9a4f50b95b96a49993f9c0d
Diffstat (limited to 'src')
-rw-r--r--src/where.c9
-rw-r--r--src/whereInt.h3
-rw-r--r--src/whereexpr.c3
3 files changed, 11 insertions, 4 deletions
diff --git a/src/where.c b/src/where.c
index 9561a75ea..11e24a8d3 100644
--- a/src/where.c
+++ b/src/where.c
@@ -426,11 +426,11 @@ static WhereTerm *whereScanNext(WhereScan *pScan){
pScan->pWC = pWC;
pScan->k = k+1;
#ifdef WHERETRACE_ENABLED
- if( sqlite3WhereTrace & 0x20000 ){
+ if( (sqlite3WhereTrace & 0x20000)!=0 && pScan->nEquiv>1 ){
int ii;
- sqlite3DebugPrintf("SCAN-TERM %p: nEquiv=%d",
- pTerm, pScan->nEquiv);
- for(ii=0; ii<pScan->nEquiv; ii++){
+ sqlite3DebugPrintf("EQUIVALENT TO {%d:%d} (due to TERM-%d):",
+ pScan->aiCur[0], pScan->aiColumn[0], pTerm->iTerm);
+ for(ii=1; ii<pScan->nEquiv; ii++){
sqlite3DebugPrintf(" {%d:%d}",
pScan->aiCur[ii], pScan->aiColumn[ii]);
}
@@ -2385,6 +2385,7 @@ void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm){
}else{
sqlite3_snprintf(sizeof(zLeft),zLeft,"left=%d", pTerm->leftCursor);
}
+ iTerm = pTerm->iTerm = MAX(iTerm,pTerm->iTerm);
sqlite3DebugPrintf(
"TERM-%-3d %p %s %-12s op=%03x wtFlags=%04x",
iTerm, pTerm, zType, zLeft, pTerm->eOperator, pTerm->wtFlags);
diff --git a/src/whereInt.h b/src/whereInt.h
index 40a720ab9..3a9353e07 100644
--- a/src/whereInt.h
+++ b/src/whereInt.h
@@ -280,6 +280,9 @@ struct WhereTerm {
u8 eMatchOp; /* Op for vtab MATCH/LIKE/GLOB/REGEXP terms */
int iParent; /* Disable pWC->a[iParent] when this term disabled */
int leftCursor; /* Cursor number of X in "X <op> <expr>" */
+#ifdef SQLITE_DEBUG
+ int iTerm; /* Which WhereTerm is this, for debug purposes */
+#endif
union {
struct {
int leftColumn; /* Column number of X in "X <op> <expr>" */
diff --git a/src/whereexpr.c b/src/whereexpr.c
index 4a24dadd2..ae1df73a7 100644
--- a/src/whereexpr.c
+++ b/src/whereexpr.c
@@ -1112,6 +1112,9 @@ static void exprAnalyze(
}
assert( pWC->nTerm > idxTerm );
pTerm = &pWC->a[idxTerm];
+#ifdef SQLITE_DEBUG
+ pTerm->iTerm = idxTerm;
+#endif
pMaskSet = &pWInfo->sMaskSet;
pExpr = pTerm->pExpr;
assert( pExpr!=0 ); /* Because malloc() has not failed */