]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Comment changes only: Add several optimization marks in rowset.c. Add
authordrh <drh@noemail.net>
Thu, 28 Apr 2016 20:11:12 +0000 (20:11 +0000)
committerdrh <drh@noemail.net>
Thu, 28 Apr 2016 20:11:12 +0000 (20:11 +0000)
a header comment that explains what the various special comments mean.

FossilOrigin-Name: 8cdbe89ac6c22d632f677eb293111b3dbae7d6c1

manifest
manifest.uuid
src/rowset.c
src/sqliteInt.h

index c30368cd2468dd33c3b87cd4a6d5906a64be414a..4e21e75b8328016cb9676d2de163822b59dacf3e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\stypo\sin\scomment.\s\sNo\schanges\sto\scode.
-D 2016-04-28T19:23:10.406
+C Comment\schanges\sonly:\s\sAdd\sseveral\soptimization\smarks\sin\srowset.c.\s\sAdd\na\sheader\scomment\sthat\sexplains\swhat\sthe\svarious\sspecial\scomments\smean.
+D 2016-04-28T20:11:12.680
 F Makefile.in 9e816d0323e418fbc0f8b2c05fc14e0b3763d9e8
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 71b8b16cf9393f68e2e2035486ca104872558836
@@ -376,13 +376,13 @@ F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e
 F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
 F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c b8f7174e5f8c33c44ded3a25a973d0bb89228c20
-F src/rowset.c 156cb68c126b50222f16e7bab4d31ef03866c7e3
+F src/rowset.c fb413e336e765481e4d8368377c444904cecdf32
 F src/select.c fd4a7ce2937497181063cfedb92058ac89491a5d
 F src/shell.c 14ff7f660530a52b117d110ba3390b7b2eb719b6
 F src/sqlite.h.in 9984129d86243424b765fcb3f147c697bd20bb54
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h 98f72cbfe00169c39089115427d06ea05fe4b4a2
-F src/sqliteInt.h ec538389481a3d093f07fb344c5a9dc988042304
+F src/sqliteInt.h f4a53f3547dab80dc7db975fa1192d9bad1f38e8
 F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
 F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
@@ -1484,7 +1484,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 5748e64376c1c2be5154a632d1527cfebbb9ec74
-R 14e25db2c4fe1efcd0c8b2319d192798
-U mistachkin
-Z 0a6ff0ee2ee8b77d1f440385eb5ab0b6
+P 9f6f17b5c97c9576c340173d068485fdbfd53253
+R 868dfe1770715db047dd242154ff598b
+U drh
+Z b6de1d1adc478f4213336a399ac69fc9
index a3d1de6609aaf16ac4c53bbbc5c5055c4e9d4864..7cd7864f7b1b882e869e1817d44f23aa08dae7a0 100644 (file)
@@ -1 +1 @@
-9f6f17b5c97c9576c340173d068485fdbfd53253
\ No newline at end of file
+8cdbe89ac6c22d632f677eb293111b3dbae7d6c1
\ No newline at end of file
index bf4382ddd8153e1c9eb85fc53a9fad0a71717a3d..5420ab991c56a2de10c413fa1076f3017c2c8a3d 100644 (file)
@@ -179,7 +179,9 @@ void sqlite3RowSetClear(RowSet *p){
 */
 static struct RowSetEntry *rowSetEntryAlloc(RowSet *p){
   assert( p!=0 );
-  if( p->nFresh==0 ){
+  if( p->nFresh==0 ){  /*OPTIMIZATION-IF-FALSE*/
+    /* We could allocate a fresh RowSetEntry each time one is needed, but it
+    ** is more efficient to pull a preallocated entry from the pool */
     struct RowSetChunk *pNew;
     pNew = sqlite3DbMallocRawNN(p->db, sizeof(*pNew));
     if( pNew==0 ){
@@ -213,7 +215,9 @@ void sqlite3RowSetInsert(RowSet *p, i64 rowid){
   pEntry->pRight = 0;
   pLast = p->pLast;
   if( pLast ){
-    if( (p->rsFlags & ROWSET_SORTED)!=0 && rowid<=pLast->v ){
+    if( rowid<=pLast->v ){  /*OPTIMIZATION-IF-FALSE*/
+      /* Avoid unnecessary sorts by preserving the ROWSET_SORTED flags
+      ** where possible */
       p->rsFlags &= ~ROWSET_SORTED;
     }
     pLast->pRight = pEntry;
@@ -335,16 +339,19 @@ static struct RowSetEntry *rowSetNDeepTree(
 ){
   struct RowSetEntry *p;         /* Root of the new tree */
   struct RowSetEntry *pLeft;     /* Left subtree */
-  if( *ppList==0 ){
-    return 0;
+  if( *ppList==0 ){ /*OPTIMIZATION-IF-TRUE*/
+    /* Prevent unnecessary deep recursion when we run out of entries */
+    return 0; 
   }
   if( iDepth>1 ){   /*OPTIMIZATION-IF-TRUE*/
     /* This branch causes a *balanced* tree to be generated.  A valid tree
-    ** is still generated without this branch, but it is wildly unbalanced
-    ** and inefficient. */
+    ** is still generated without this branch, but the tree is wildly
+    ** unbalanced and inefficient. */
     pLeft = rowSetNDeepTree(ppList, iDepth-1);
     p = *ppList;
-    if( p==0 ){
+    if( p==0 ){     /*OPTIMIZATION-IF-FALSE*/
+      /* It is safe to always return here, but the resulting tree
+      ** would be unbalanced */
       return pLeft;
     }
     p->pLeft = pLeft;
index 7bb15d0bf5355c76e8803afa17953f0b11935bbc..76bf8096245f6f379b1f9b516365a6ab41f82e22 100644 (file)
 #ifndef _SQLITEINT_H_
 #define _SQLITEINT_H_
 
+/* Special Comments:
+**
+** Some comments have special meaning to the tools that measure test
+** coverage:
+**
+**    NO_TEST                     - The branches on this line are not
+**                                  measured by branch coverage.  This is
+**                                  used on lines of code that actually
+**                                  implement parts of coverage testing.
+**
+**    OPTIMIZATION-IF-TRUE        - This branch is allowed to alway be false
+**                                  and the correct answer is still obtained,
+**                                  though perhaps more slowly.
+**
+**    OPTIMIZATION-IF-FALSE       - This branch is allowed to alway be true
+**                                  and the correct answer is still obtained,
+**                                  though perhaps more slowly.
+**
+**    PREVENTS-HARMLESS-OVERREAD  - This branch prevents a buffer overread
+**                                  that would be harmless and undetectable
+**                                  if it did occur.  
+**
+** In all cases, the special comment must be enclosed in the usual
+** slash-asterisk...asterisk-slash comment marks, with no spaces between the 
+** asterisks and the comment text.
+*/
+
 /*
 ** Make sure that rand_s() is available on Windows systems with MSVC 2005
 ** or higher.