-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
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
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
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);
&& 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);