]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Changes the formatting of ".scanstats on" in the shell so that the stats for
authordrh <drh@noemail.net>
Thu, 6 Nov 2014 12:08:21 +0000 (12:08 +0000)
committerdrh <drh@noemail.net>
Thu, 6 Nov 2014 12:08:21 +0000 (12:08 +0000)
subqueries are grouped together and occur after the main query.

FossilOrigin-Name: eacbbd8849db9b023eff15ef1cb42ec941299433

manifest
manifest.uuid
src/shell.c

index 25d04501fe56fad853a92dcd4467802005536d45..af1ed3e99c6d5425b35e4ebeddcfc2507d5ef789 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sthe\sSQLITE_SCANSTAT_SELECTID\smetric.\s\sUse\sit\sto\simprove\sthe\n".stmtscan\son"\soutput\sin\sthe\sshell.
-D 2014-11-06T04:42:20.310
+C Changes\sthe\sformatting\sof\s".scanstats\son"\sin\sthe\sshell\sso\sthat\sthe\sstats\sfor\nsubqueries\sare\sgrouped\stogether\sand\soccur\safter\sthe\smain\squery.
+D 2014-11-06T12:08:21.237
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -228,7 +228,7 @@ F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c 4965007d6497b6a4d7a6d98751cc39712885f952
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
 F src/select.c 428165951748151e87a15295b7357221433e311b
-F src/shell.c 74768f90bd0f8880937d52e2eb756655dba0015a
+F src/shell.c 22c7c693f322091b26e9333a8fa50c56e4aba667
 F src/sqlite.h.in 087d30a4c7ec7ae19bcaa03a9db9d6ee7a73b0b3
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
 F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
@@ -1211,7 +1211,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 f9684000665ae7ef6f89c3773612b8286b8f545a
-R 34f47ade33b56f41a439ae08635a112b
+P 64ad5761a841f71530d41565b9fbe9d19c2d6aff
+R 301cd68395834791ac0b2ebb68f39e69
 U drh
-Z 216d325be8d3eddf6fd433a7ff464585
+Z c6dcae9ced19f9079c51a47717359be1
index 13ff805ffa8eff15d80479a2fbbb183852f57729..6061834c996ef6cbb117fec44e5754b33e4a0ca9 100644 (file)
@@ -1 +1 @@
-64ad5761a841f71530d41565b9fbe9d19c2d6aff
\ No newline at end of file
+eacbbd8849db9b023eff15ef1cb42ec941299433
\ No newline at end of file
index b6ae6e15a66f992d37ad905845c8878c57d7a784..3505e59d4b7d7338c7c7d29e118780e78466371a 100644 (file)
@@ -1194,39 +1194,33 @@ static void display_scanstats(
   ShellState *pArg                /* Pointer to ShellState */
 ){
 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
-  int i;
-  double *arEstLoop = 0;
-  int nEstLoop = 0;
+  int i, k, n = 1;
   fprintf(pArg->out, "-------- scanstats --------\n");
-  for(i=0; 1; i++){
-    sqlite3_stmt *p = pArg->pStmt;
-    sqlite3_int64 nLoop, nVisit;
-    double rEst, rLoop;
-    int iSid;
-    const char *zExplain;
-    if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){
-      break;
-    }
-    sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit);
-    sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst);
-    sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain);
-    sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid);
-    if( iSid>=nEstLoop ){
-      arEstLoop = sqlite3_realloc(arEstLoop, sizeof(arEstLoop[0])*(iSid+1) );
-      while( nEstLoop<=iSid ) arEstLoop[nEstLoop++] = 1.0; 
-    }
-    if( iSid>=0 ){
-      arEstLoop[iSid] *= rEst;
-      rLoop = arEstLoop[iSid];
-    }else{
-      rLoop = rEst;
+  for(k=0; n>0; k++){
+    double rEstLoop = 1.0;
+    for(i=n=0; 1; i++){
+      sqlite3_stmt *p = pArg->pStmt;
+      sqlite3_int64 nLoop, nVisit;
+      double rEst;
+      int iSid;
+      const char *zExplain;
+      if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){
+        break;
+      }
+      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid);
+      if( iSid!=k ) continue;
+      if( n==0 && k>0 ) fprintf(pArg->out, "-------- subquery %d --------\n", k);
+      n++;
+      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit);
+      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst);
+      sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain);
+      fprintf(pArg->out, "Loop %2d: %s\n", n, zExplain);
+      rEstLoop *= rEst;
+      fprintf(pArg->out, "         nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n",
+          nLoop, nVisit, (sqlite3_int64)rEstLoop, rEst
+      );
     }
-    fprintf(pArg->out, "Loop %2d: \"%s\"\n", i, zExplain);
-    fprintf(pArg->out, "        nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n",
-        nLoop, nVisit, (sqlite3_int64)rLoop, rEst
-    );
   }
-  sqlite3_free(arEstLoop);
 #else
   fprintf(pArg->out, "-------- scanstats --------\n");
   fprintf(pArg->out,