]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improvements to the new syntax-tree output routines: Omit the "END SELECT"
authordrh <drh@noemail.net>
Tue, 30 Sep 2014 19:04:41 +0000 (19:04 +0000)
committerdrh <drh@noemail.net>
Tue, 30 Sep 2014 19:04:41 +0000 (19:04 +0000)
mark and instead terminate the graph at the last item.  Increase the maximum
tree depth to 100.

FossilOrigin-Name: 5ce05757aac80b99c3b2141cd301809f8e28e661

manifest
manifest.uuid
src/printf.c
src/select.c
src/sqliteInt.h

index 84f200ceb8d69c1110d67d0ece5aae88f06605f7..4f1b85c92d750a7c7eeec7746d4f79c4d81caf21 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Enable\sthe\squery\splanner\sto\sdeal\swith\sWHERE\sclauses\sthat\shave\sOR\sterms\nnested\swithin\sAND\sterms\sthat\sare\snested\swithin\sOR\sterms.\s\sAlso\sremove\san\nunused\sfunction\sdeclaration.
-D 2014-09-30T17:31:23.408
+C Improvements\sto\sthe\snew\ssyntax-tree\soutput\sroutines:\s\sOmit\sthe\s"END\sSELECT"\nmark\sand\sinstead\sterminate\sthe\sgraph\sat\sthe\slast\sitem.\s\sIncrease\sthe\smaximum\ntree\sdepth\sto\s100.
+D 2014-09-30T19:04:41.396
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -223,16 +223,16 @@ F src/pcache.h 9b559127b83f84ff76d735c8262f04853be0c59a
 F src/pcache1.c dab8ab930d4a73b99768d881185994f34b80ecaa
 F src/pragma.c 3f3e959390a10c0131676f0e307acce372777e0f
 F src/prepare.c 6ef0cf2f9274982988ed6b7cab1be23147e94196
-F src/printf.c 0db94d24f97b4e562e9da9d2ce85e8a69531daf6
+F src/printf.c 6b79bbd063dcbadca4cf617a4cde255bcc13ea64
 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
 F src/resolve.c a3466128b52a86c466e47ac1a19e2174f7b5cf89
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
-F src/select.c b5304314d9456850e755a106d64b378d60c62644
+F src/select.c f11533162b57ed5ed37f549add34cbcdf51f6712
 F src/shell.c 38f627b0885191357f55902a3ac199de90d79715
 F src/sqlite.h.in 159f2cb9eef74b6c99aeeb4c071e7745835f04f6
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
 F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
-F src/sqliteInt.h 254797e62264c53184172d98a491aa2b8cd4ad88
+F src/sqliteInt.h 5a430c5443717d7c5e2c224f9dcc2534348dc3f6
 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
 F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
 F src/table.c 2e99ef7ef16187e17033d9398dc962ce22dab5cb
@@ -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 670993eb8113f386cb2cb8b1507917f6da3b4d98
-R 1a06ccbab92129ac2bab7054741ffba8
+P b6b289182f6590288ebc7b9efbcb29b6b4480538
+R cfd4c6e5c7836f29218c39baf2122e42
 U drh
-Z 36668dfa98188ac65878a88086fca9b9
+Z 3bfcd52f8fd5ecba827fd0c1ccf2615c
index 9e6ff3561c0286a6b7d97b57e54b703436f9ae7e..f78de65f58082a597456d83d241a2e2de460b14e 100644 (file)
@@ -1 +1 @@
-b6b289182f6590288ebc7b9efbcb29b6b4480538
\ No newline at end of file
+5ce05757aac80b99c3b2141cd301809f8e28e661
\ No newline at end of file
index 92e8e100de8e2f6a163a54d852dbafc3de2d278f..c0b3c70f6bc2442bbb09c39f50d0f9a1ecae6079 100644 (file)
@@ -1080,8 +1080,7 @@ TreeView *sqlite3TreeViewPush(TreeView *p, u8 moreToFollow){
     p->iLevel++;
   }
   assert( moreToFollow==0 || moreToFollow==1 );
-  p->mLine &= ~(1<<p->iLevel);
-  p->mLine |= moreToFollow << p->iLevel;
+  if( p->iLevel<sizeof(p->bLine) ) p->bLine[p->iLevel] = moreToFollow;
   return p;
 }
 /* Finished with one layer of the tree */
@@ -1100,10 +1099,10 @@ void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
   sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
   acc.useMalloc = 0;
   if( p ){
-    for(i=0; i<p->iLevel; i++){
-      sqlite3StrAccumAppend(&acc, (p->mLine & (1<<i))!=0 ? "|   " : "    ", 4);
+    for(i=0; i<p->iLevel && i<sizeof(p->bLine)-1; i++){
+      sqlite3StrAccumAppend(&acc, p->bLine[i] ? "|   " : "    ", 4);
     }
-    sqlite3StrAccumAppend(&acc, (p->mLine & (1<<i))!=0 ? "|-- " : "'-- ", 4);
+    sqlite3StrAccumAppend(&acc, p->bLine[i] ? "|-- " : "'-- ", 4);
   }
   va_start(ap, zFormat);
   sqlite3VXPrintf(&acc, 0, zFormat, ap);
index 4fb3860fb3ef13653646b049f53016c3afcf1cde..411bca0df44ae359d15f1b5c0382db145257ff50 100644 (file)
@@ -5432,15 +5432,24 @@ select_end:
 ** Generate a human-readable description of a the Select object.
 */
 void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){
+  int n = 0;
   pView = sqlite3TreeViewPush(pView, moreToFollow);
   sqlite3TreeViewLine(pView, "SELECT%s%s",
     ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""),
     ((p->selFlags & SF_Aggregate) ? " agg_flag" : "")
   );
-  sqlite3TreeViewExprList(pView, p->pEList, 1, "result-set");
+  if( p->pSrc && p->pSrc->nSrc ) n++;
+  if( p->pWhere ) n++;
+  if( p->pGroupBy ) n++;
+  if( p->pHaving ) n++;
+  if( p->pOrderBy ) n++;
+  if( p->pLimit ) n++;
+  if( p->pOffset ) n++;
+  if( p->pPrior ) n++;
+  sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set");
   if( p->pSrc && p->pSrc->nSrc ){
     int i;
-    pView = sqlite3TreeViewPush(pView, 1);
+    pView = sqlite3TreeViewPush(pView, (n--)>0);
     sqlite3TreeViewLine(pView, "FROM");
     for(i=0; i<p->pSrc->nSrc; i++){
       struct SrcList_item *pItem = &p->pSrc->a[i];
@@ -5472,28 +5481,28 @@ void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){
     sqlite3TreeViewPop(pView);
   }
   if( p->pWhere ){
-    sqlite3TreeViewItem(pView, "WHERE", 1);
+    sqlite3TreeViewItem(pView, "WHERE", (n--)>0);
     sqlite3TreeViewExpr(pView, p->pWhere, 0);
     sqlite3TreeViewPop(pView);
   }
   if( p->pGroupBy ){
-    sqlite3TreeViewExprList(pView, p->pGroupBy, 1, "GROUPBY");
+    sqlite3TreeViewExprList(pView, p->pGroupBy, (n--)>0, "GROUPBY");
   }
   if( p->pHaving ){
-    sqlite3TreeViewItem(pView, "HAVING", 1);
+    sqlite3TreeViewItem(pView, "HAVING", (n--)>0);
     sqlite3TreeViewExpr(pView, p->pHaving, 0);
     sqlite3TreeViewPop(pView);
   }
   if( p->pOrderBy ){
-    sqlite3TreeViewExprList(pView, p->pOrderBy, 1, "ORDERBY");
+    sqlite3TreeViewExprList(pView, p->pOrderBy, (n--)>0, "ORDERBY");
   }
   if( p->pLimit ){
-    sqlite3TreeViewItem(pView, "LIMIT", 1);
+    sqlite3TreeViewItem(pView, "LIMIT", (n--)>0);
     sqlite3TreeViewExpr(pView, p->pLimit, 0);
     sqlite3TreeViewPop(pView);
   }
   if( p->pOffset ){
-    sqlite3TreeViewItem(pView, "OFFSET", 1);
+    sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
     sqlite3TreeViewExpr(pView, p->pOffset, 0);
     sqlite3TreeViewPop(pView);
   }
@@ -5504,12 +5513,10 @@ void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){
       case TK_INTERSECT:   zOp = "INTERSECT";  break;
       case TK_EXCEPT:      zOp = "EXCEPT";     break;
     }
-    sqlite3TreeViewItem(pView, zOp, 1);
-    sqlite3TreeViewSelect(pView, p->pPrior, 1);
+    sqlite3TreeViewItem(pView, zOp, (n--)>0);
+    sqlite3TreeViewSelect(pView, p->pPrior, 0);
     sqlite3TreeViewPop(pView);
   }
-  sqlite3TreeViewItem(pView, "END-SELECT", 0);
-  sqlite3TreeViewPop(pView);
   sqlite3TreeViewPop(pView);
 }
 #endif /* SQLITE_DEBUG */
index 35cadcdbc08e80ee78bc232d87c0d6ac8746bfbf..695b63d7532e037206e8f3c29b214f6bf7e432f4 100644 (file)
@@ -2936,7 +2936,7 @@ struct With {
 */
 struct TreeView {
   int iLevel;             /* Which level of the tree we are on */
-  u64 mLine;              /* Mask of continuation lines to be drawn */
+  u8  bLine[100];         /* Draw vertical in column i if bLine[i] is true */
 };
 #endif /* SQLITE_DEBUG */