]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Simplifications to the window-function code.
authordrh <drh@noemail.net>
Wed, 25 Sep 2019 02:07:50 +0000 (02:07 +0000)
committerdrh <drh@noemail.net>
Wed, 25 Sep 2019 02:07:50 +0000 (02:07 +0000)
FossilOrigin-Name: 489a1eb3aa2f1225b97b50a5f8688cf1a4ab0371973da1badc29616d70386c03

manifest
manifest.uuid
src/window.c

index 88b558138639c7341faae4d7778c52381329fc94..71dffcf2b9b4b145c1778ac585a5c9abd6641c01 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Bug\sfixes\sfor\swindow\sframes\sof\sthe\sform\s(...\sRANGE\sBETWEEN\sb\sPRECEDING\sAND\sa\sPRECEDING)\sor\s(...\sRANGE\sa\sFOLLOWING\sAND\sb\sFOLLOWING)\swhere\s(a\s>\sb).
-D 2019-09-24T20:20:05.843
+C Simplifications\sto\sthe\swindow-function\scode.
+D 2019-09-25T02:07:50.126
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -615,7 +615,7 @@ F src/where.c 9f3f23efc45934e7b7ea6c0c1042420b73053e7c3264feef6faf9ce6fbd5df61
 F src/whereInt.h 2c6bae136a7c0be6ff75dc36950d1968c67d005c8e51d7a9d77cb996bb4843d9
 F src/wherecode.c 535c8e228478fd971b9a5b6cb6773995b0fbf7020d5989508a5094ce5b8cd95b
 F src/whereexpr.c 05c283d26aa9c3f5d1bf13a5f6a573b43295b9db280eff18e26f97d7d7f119b4
-F src/window.c 1dcacaeee25487eb222f9c5e226eb6821265a22a71432f570b3c41d9754717ba
+F src/window.c 49e97e329954f9a4d45b800c9abda9d3f0fd4c9ed6818d8f2032ee282ca99ffb
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test da465d3d490ab24ef64f7715b5953343a4967762b9350b29eb1462879ff3fb9e
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1845,7 +1845,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 f907395ef5a2dc1d084b6a286af00de4c742cf12d4f347c21e1b757786508f57
-R 0b002338bf10d899e34ef318ab4f702e
-U dan
-Z a41a183eaebde05b792c6177f74029dd
+P 040e196a8be3ca41b9365310ab88c2a3cc84b918a6511c77a6d95d4b4e0da3ed
+R 02b8e74e10c2a3befb5f0a26449e5da2
+U drh
+Z 7b42b889d8658d1e92a0c5a1635cb7d8
index acbb0d2b1c72ce0b021bee7372a3924bbcf7acd6..373391ba94b2c45a270ff0bbd8c43511c75b2c81 100644 (file)
@@ -1 +1 @@
-040e196a8be3ca41b9365310ab88c2a3cc84b918a6511c77a6d95d4b4e0da3ed
\ No newline at end of file
+489a1eb3aa2f1225b97b50a5f8688cf1a4ab0371973da1badc29616d70386c03
\ No newline at end of file
index f6fa7f684134d289baa00215f45b312eeaad798a..161b5e3f343770f1c23364d26a4075e5b7f4d17b 100644 (file)
@@ -1549,6 +1549,10 @@ static void windowAggStep(
 
     assert( bInverse==0 || pWin->eStart!=TK_UNBOUNDED );
 
+    /* All OVER clauses in the same window function aggregate step must
+    ** be the same. */
+    assert( pWin==pMWin || sqlite3WindowCompare(pParse,pWin,pMWin,0)==0 );
+
     for(i=0; i<nArg; i++){
       if( i!=1 || pFunc->zName!=nth_valueName ){
         sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i);
@@ -1608,14 +1612,13 @@ static void windowAggStep(
        && pWin->eStart==pWin->eEnd 
        && pWin->eStart==TK_PRECEDING
       ){
-        int op = ((pMWin->eStart==TK_FOLLOWING) ? OP_Ge : OP_Le);
         int regPeer = sqlite3GetTempReg(pParse);
         int regString = sqlite3GetTempReg(pParse);
         int lbl = sqlite3VdbeMakeLabel(pParse);
         VdbeModuleComment((v, "windowAggStep \"peer is numeric?\" test"));
-        sqlite3VdbeAddOp3(v, op, p->regStart, lbl, p->regEnd);
-        VdbeCoverageNeverNullIf(v, op==OP_Ge); /* NeverNull because <expr> */
-        VdbeCoverageNeverNullIf(v, op==OP_Le); /*   values previously checked */
+        assert( pMWin->eStart==TK_PRECEDING ); /* because pWin same as pMWin */
+        sqlite3VdbeAddOp3(v, OP_Le, p->regStart, lbl, p->regEnd);
+        VdbeCoverageNeverNull(v); /* because <expr> values previously checked */
         windowReadPeerValues(p, csr, regPeer);
         sqlite3VdbeAddOp2(v, OP_IsNull, regPeer, lbl);
         sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);