From: drh Date: Wed, 25 Sep 2019 02:07:50 +0000 (+0000) Subject: Simplifications to the window-function code. X-Git-Tag: version-3.30.0~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5b35ae567e0f68d20bb102f781d23c42251d042;p=thirdparty%2Fsqlite.git Simplifications to the window-function code. FossilOrigin-Name: 489a1eb3aa2f1225b97b50a5f8688cf1a4ab0371973da1badc29616d70386c03 --- diff --git a/manifest b/manifest index 88b5581386..71dffcf2b9 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index acbb0d2b1c..373391ba94 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -040e196a8be3ca41b9365310ab88c2a3cc84b918a6511c77a6d95d4b4e0da3ed \ No newline at end of file +489a1eb3aa2f1225b97b50a5f8688cf1a4ab0371973da1badc29616d70386c03 \ No newline at end of file diff --git a/src/window.c b/src/window.c index f6fa7f6841..161b5e3f34 100644 --- a/src/window.c +++ b/src/window.c @@ -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; izName!=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 */ - 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 values previously checked */ windowReadPeerValues(p, csr, regPeer); sqlite3VdbeAddOp2(v, OP_IsNull, regPeer, lbl); sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);