]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Show tree diagrams of data structures in the debugging output when the 0x100
authordrh <drh@noemail.net>
Tue, 30 Sep 2014 13:46:49 +0000 (13:46 +0000)
committerdrh <drh@noemail.net>
Tue, 30 Sep 2014 13:46:49 +0000 (13:46 +0000)
bit is set on sqlite3WhereTrace or sqlite3SelectTrace.

FossilOrigin-Name: 92e0b4bd4d75e8b000586e51a07b3e181d9af20b

manifest
manifest.uuid
src/select.c
src/where.c

index 642f78d5ff50e1b2b4b0271e787ee419d3cf41d9..4ef89a6d0acf1ef43e7b7d958a7becda1283a65f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\sthe\sSQLITE_ENABLE_TREE_EXPLAIN\scompile-time\soption.\s\sAdd\salternative\ndebugging\sdisplay\sroutines:\ssqlite3TreeViewExpr(),\ssqlite3TreeViewExprList(),\nand\ssqlite3TreeViewSelect().
-D 2014-09-30T12:33:33.546
+C Show\stree\sdiagrams\sof\sdata\sstructures\sin\sthe\sdebugging\soutput\swhen\sthe\s0x100\nbit\sis\sset\son\ssqlite3WhereTrace\sor\ssqlite3SelectTrace.
+D 2014-09-30T13:46:49.195
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -227,7 +227,7 @@ F src/printf.c 0db94d24f97b4e562e9da9d2ce85e8a69531daf6
 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
 F src/resolve.c a3466128b52a86c466e47ac1a19e2174f7b5cf89
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
-F src/select.c 373da54c2bd7e38993bc926a284bc05a53b01b8b
+F src/select.c b5304314d9456850e755a106d64b378d60c62644
 F src/shell.c 38f627b0885191357f55902a3ac199de90d79715
 F src/sqlite.h.in 159f2cb9eef74b6c99aeeb4c071e7745835f04f6
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
@@ -302,7 +302,7 @@ F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f
 F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
-F src/where.c 5a2c700f6f29da91ac633015d1378b91dcf237b6
+F src/where.c 5924c54986ec694e0b9e90eca506a930cfc71f6f
 F src/whereInt.h 124d970450955a6982e174b07c320ae6d62a595c
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -1200,7 +1200,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 7fb1626866c2f8dad84c7e6184824be3efd71ca2
-R f57511c6ad57aee6db1d51feabde515b
+P 4ff51325d6b41d0c59e303b573700ec80c51d216
+R 1c3af6544b324d9bf4b577de17e6b173
 U drh
-Z d2ed6dec33496c4977b9e22861714f01
+Z e2f1f26ff32680c40b90d9645bff7468
index 246f7552d4dc124cf5875000e3915a07cc9f43bb..1357a3ed6cc8c3e91c3f283ec6bb89062951e18f 100644 (file)
@@ -1 +1 @@
-4ff51325d6b41d0c59e303b573700ec80c51d216
\ No newline at end of file
+92e0b4bd4d75e8b000586e51a07b3e181d9af20b
\ No newline at end of file
index 595926fa1afc514a1e5bb87546e605eda5dbaaa9..4fb3860fb3ef13653646b049f53016c3afcf1cde 100644 (file)
@@ -3642,6 +3642,13 @@ static int flattenSubquery(
   */
   sqlite3SelectDelete(db, pSub1);
 
+#if SELECTTRACE_ENABLED
+  if( sqlite3SelectTrace & 0x100 ){
+    sqlite3DebugPrintf("After flattening:\n");
+    sqlite3TreeViewSelect(0, p, 0);
+  }
+#endif
+
   return 1;
 }
 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
@@ -4649,7 +4656,10 @@ int sqlite3Select(
   memset(&sAggInfo, 0, sizeof(sAggInfo));
 #if SELECTTRACE_ENABLED
   pParse->nSelectIndent++;
-  SELECTTRACE(1,pParse,p, ("begin processing\n"));
+  SELECTTRACE(1,pParse,p, ("begin processing:\n"));
+  if( sqlite3SelectTrace & 0x100 ){
+    sqlite3TreeViewSelect(0, p, 0);
+  }
 #endif
 
   assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo );
index 9ece59f939d4e930ad369043f802f0b35e5e7eaf..e2020ca06e31b4223380b036d16d0222d9861fbc 100644 (file)
@@ -3756,6 +3756,23 @@ static Bitmask codeOneLoopStart(
   return pLevel->notReady;
 }
 
+#ifdef WHERETRACE_ENABLED
+/*
+** Print the content of a WhereTerm object
+*/
+static void whereTermPrint(WhereTerm *pTerm, int iTerm){
+  char zType[4];
+  memcpy(zType, "...", 4);
+  if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V';
+  if( pTerm->eOperator & WO_EQUIV  ) zType[1] = 'E';
+  if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L';
+  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
+
 #ifdef WHERETRACE_ENABLED
 /*
 ** Print a WhereLoop object for debugging purposes
@@ -3798,6 +3815,14 @@ static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){
     sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
   }
   sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
+  if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
+    int i;
+    for(i=0; i<p->nLTerm; i++){
+      WhereTerm *pTerm = p->aLTerm[i];
+      if( pTerm==0 ) continue;
+      whereTermPrint(pTerm, i);
+    }
+  }
 }
 #endif
 
@@ -6130,6 +6155,16 @@ WhereInfo *sqlite3WhereBegin(
 
   /* Construct the WhereLoop objects */
   WHERETRACE(0xffff,("*** Optimizer Start ***\n"));
+#if defined(WHERETRACE_ENABLED)
+  /* Display all terms of the WHERE clause */
+  if( sqlite3WhereTrace & 0x100 ){
+    int i;
+    for(i=0; i<sWLB.pWC->nTerm; i++){
+      whereTermPrint(&sWLB.pWC->a[i], i);
+    }
+  }
+#endif
+
   if( nTabList!=1 || whereShortCut(&sWLB)==0 ){
     rc = whereLoopAddAll(&sWLB);
     if( rc ) goto whereBeginError;