]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add missing VdbeCoverage() macros to new code in window.c.
authordan <dan@noemail.net>
Tue, 19 Mar 2019 16:49:15 +0000 (16:49 +0000)
committerdan <dan@noemail.net>
Tue, 19 Mar 2019 16:49:15 +0000 (16:49 +0000)
FossilOrigin-Name: 4f9b93e6cfa0b3b6ab8a126299c2b2a242f840453dc450e84d3df87576cf6cf8

manifest
manifest.uuid
src/window.c

index 0378eaa627c8925588947b7cb0579b2f0eafb6a7..7b1070d5223df778dc9b91861fc47f15f60dc5f1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Revert\sthe\sOP_MustBeInt\sopcode\simplementation\son\sthis\sbranch\sso\sthat\sit\sagain\smatches\strunk.\sThe\sextra\sfunctionality\sis\sno\slonger\srequired.
-D 2019-03-19T11:56:39.776
+C Add\smissing\sVdbeCoverage()\smacros\sto\snew\scode\sin\swindow.c.
+D 2019-03-19T16:49:15.124
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -605,7 +605,7 @@ F src/where.c 8a207cb2ca6b99e1edb1e4bbff9b0504385a759cbf66180d1deb34d80ca4b799
 F src/whereInt.h 5f14db426ca46a83eabab1ae9aa6d4b8f27504ad35b64c290916289b1ddb2e88
 F src/wherecode.c 6fa4056c5ce019e4a8af33795906340176813cb3c1236f4b7b08df76a1b6287b
 F src/whereexpr.c 90859652920f153d2c03f075488744be2926625ebd36911bcbcb17d0d29c891c
-F src/window.c bd0a1267dff9ef95057600acadebf5dea3fa8a89bd7702728e517efaa0e3e8cf
+F src/window.c 9a860432916ffa4d5266f1e60d4d88bac11fb7ee5ee20c2ae9c7d4e5dd68fd58
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1813,7 +1813,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 98cc26598718e5557ee00aa77336024c91e483ec6de650e172ad1b44a6f0a77b
-R 4fb3235f0967d01b60e8218486bbe7a4
+P c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc
+R 18e02000cd72a7d7f88e0273a7e185eb
 U dan
-Z 2cdef3e3468ea49f5395a7b5da371b9c
+Z 942f44c2db480ad33c8951876cbdc05e
index 7e6faf937f4a9d0c5b7c1d326485d263d0bc3f25..22f5279c55f79f85969e3a3ec4ed9e5fd49831de 100644 (file)
@@ -1 +1 @@
-c02f77b1b4d025d4243f883d6f3a2b3abcaf4944e0209f641b62c576415343dc
\ No newline at end of file
+4f9b93e6cfa0b3b6ab8a126299c2b2a242f840453dc450e84d3df87576cf6cf8
\ No newline at end of file
index 62bfdafb0c859eb8963601e3113019baae7b079f..868a70e1a5e0d8770fabee6681d12632eaeeaa50 100644 (file)
@@ -1313,10 +1313,14 @@ static void windowCheckValue(Parse *pParse, int reg, int eCond){
   VdbeCoverageIf(v, eCond==0);
   VdbeCoverageIf(v, eCond==1);
   VdbeCoverageIf(v, eCond==2);
+  VdbeCoverageIf(v, eCond==3);
+  VdbeCoverageIf(v, eCond==4);
   sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg);
   VdbeCoverageNeverNullIf(v, eCond==0);
   VdbeCoverageNeverNullIf(v, eCond==1);
   VdbeCoverageNeverNullIf(v, eCond==2);
+  VdbeCoverageNeverNullIf(v, eCond==3);
+  VdbeCoverageNeverNullIf(v, eCond==4);
   sqlite3MayAbort(pParse);
   sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort);
   sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC);
@@ -1558,9 +1562,11 @@ static void windowFullScan(WindowCodeArg *p){
   }
 
   sqlite3VdbeAddOp3(v, OP_SeekGE, csr, lblBrk, pMWin->regStartRowid);
+  VdbeCoverage(v);
   addrNext = sqlite3VdbeCurrentAddr(v);
   sqlite3VdbeAddOp2(v, OP_Rowid, csr, regRowid);
   sqlite3VdbeAddOp3(v, OP_Gt, pMWin->regEndRowid, lblBrk, regRowid);
+  VdbeCoverageNeverNull(v);
 
   if( pMWin->eExclude==TK_CURRENT ){
     sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, lblNext, regRowid);
@@ -1586,6 +1592,7 @@ static void windowFullScan(WindowCodeArg *p){
 
   sqlite3VdbeResolveLabel(v, lblNext);
   sqlite3VdbeAddOp2(v, OP_Next, csr, addrNext);
+  VdbeCoverage(v);
   sqlite3VdbeJumpHere(v, addrNext-1);
   sqlite3VdbeJumpHere(v, addrNext+1);
   sqlite3ReleaseTempReg(pParse, regRowid);
@@ -1814,10 +1821,12 @@ static void windowCodeRangeTest(
   ** OP_Add or OP_Subtract operation and proceed directly to the comparison. */
   sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);
   addrGe = sqlite3VdbeAddOp3(v, OP_Ge, regString, 0, reg1);
+  VdbeCoverage(v);
   sqlite3VdbeAddOp3(v, arith, regVal, reg1, reg1);
   sqlite3VdbeJumpHere(v, addrGe);
   sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1);
   sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
+  VdbeCoverage(v);
 
   sqlite3ReleaseTempReg(pParse, reg1);
   sqlite3ReleaseTempReg(pParse, reg2);
@@ -1876,6 +1885,7 @@ static int windowCodeOp(
       }
     }else{
       addrIf = sqlite3VdbeAddOp3(v, OP_IfPos, regCountdown, 0, 1);
+      VdbeCoverage(v);
     }
   }
 
@@ -1921,9 +1931,11 @@ static int windowCodeOp(
 
   if( jumpOnEof ){
     sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+2);
+    VdbeCoverage(v);
     ret = sqlite3VdbeAddOp0(v, OP_Goto);
   }else{
     sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+1+bPeer);
+    VdbeCoverage(v);
     if( bPeer ){
       addrGoto = sqlite3VdbeAddOp0(v, OP_Goto);
     }
@@ -2476,6 +2488,7 @@ void sqlite3WindowCodeStep(
   sqlite3VdbeAddOp2(v, OP_NewRowid, csrWrite, regRowid);
   sqlite3VdbeAddOp3(v, OP_Insert, csrWrite, regRecord, regRowid);
   addrNe = sqlite3VdbeAddOp3(v, OP_Ne, pMWin->regOne, 0, regRowid);
+  VdbeCoverage(v);
 
   /* This block is run for the first row of each partition */
   s.regArg = windowInitAccum(pParse, pMWin);
@@ -2492,8 +2505,10 @@ void sqlite3WindowCodeStep(
   if( pMWin->eStart==pMWin->eEnd && regStart ){
     int op = ((pMWin->eStart==TK_FOLLOWING) ? OP_Ge : OP_Le);
     int addrGe = sqlite3VdbeAddOp3(v, op, regStart, 0, regEnd);
+    VdbeCoverage(v);
     windowAggFinal(&s, 0);
     sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
+    VdbeCoverageNeverTaken(v);
     windowReturnOneRow(&s);
     sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr);
     sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
@@ -2506,9 +2521,12 @@ void sqlite3WindowCodeStep(
 
   if( pMWin->eStart!=TK_UNBOUNDED ){
     sqlite3VdbeAddOp2(v, OP_Rewind, s.start.csr, 1);
+    VdbeCoverageNeverTaken(v);
   }
   sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
+  VdbeCoverageNeverTaken(v);
   sqlite3VdbeAddOp2(v, OP_Rewind, s.end.csr, 1);
+  VdbeCoverageNeverTaken(v);
   if( regPeer && pOrderBy ){
     sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, pOrderBy->nExpr-1);
     sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.start.reg, pOrderBy->nExpr-1);
@@ -2561,7 +2579,10 @@ void sqlite3WindowCodeStep(
           sqlite3VdbeResolveLabel(v, lbl);
         }
       }else{
-        if( regEnd ) addr = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0, 1);
+        if( regEnd ){
+          addr = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0, 1);
+          VdbeCoverage(v);
+        }
         windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
         windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
         if( regEnd ) sqlite3VdbeJumpHere(v, addr);
@@ -2580,6 +2601,7 @@ void sqlite3WindowCodeStep(
   }
 
   addrEmpty = sqlite3VdbeAddOp1(v, OP_Rewind, csrWrite);
+  VdbeCoverage(v);
   if( pMWin->eEnd==TK_PRECEDING ){
     windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
     windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);