]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with EXCLUDE clauses on window frames with no ORDER BY.
authordan <dan@noemail.net>
Tue, 19 Mar 2019 19:19:53 +0000 (19:19 +0000)
committerdan <dan@noemail.net>
Tue, 19 Mar 2019 19:19:53 +0000 (19:19 +0000)
FossilOrigin-Name: e0255063799a2a8531f0eaa8790334509591a5ababc5b915035b46d2faa80363

manifest
manifest.uuid
src/window.c
test/window8.tcl
test/window8.test

index 0cad678fcab9070f81ab2694cfc7a21cf90f416d..fd20037a222d908860d3c57a39db525c964379c0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\stests\sto\sensure\sthat\sthe\swindow\sfunctions\simplementation\sis\snot\sgenerating\scode\sfor\sunnecessary\ssorts.
-D 2019-03-19T17:45:31.515
+C Fix\sa\sproblem\swith\sEXCLUDE\sclauses\son\swindow\sframes\swith\sno\sORDER\sBY.
+D 2019-03-19T19:19:53.610
 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 9a860432916ffa4d5266f1e60d4d88bac11fb7ee5ee20c2ae9c7d4e5dd68fd58
+F src/window.c bcf909b9aca293765bd5a3cd17dd72a63658d476a704b37ae0b766d2054fb864
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1688,8 +1688,8 @@ F test/window5.test d328dd18221217c49c144181975eea17339eaeaf0e9aa558cee3afb84652
 F test/window6.test 604890f2b0f976339e6a1774cd90d48840e57a54b4f21a8b4b3047aa2c9787d1
 F test/window7.tcl 6a1210f05d40ec89c22960213a22cd3f98d4e2f2eb20646c83c8c30d4d76108f
 F test/window7.test ce7f865241fdd1c5c4db869cd7bb2986c3be836bc2e73649a6846dd920f63e0f
-F test/window8.tcl f319644bfb17dd283f9359c3e46426064ed91677637adc5a00aaa2756e260eb5
-F test/window8.test ade3404ddd26e75bfb40b9b3399d504213fd484e37a49b06657947ea2e0125a8
+F test/window8.tcl 38eca1d36735d785251e26ab4e6a53ab32b9f892dab25f3adc730288ebdf405a
+F test/window8.test 8d191c46d0d05f4dfd0cbacf2a1ba7f44a14ca8d0c4e8758cdab50ad54cd1293
 F test/windowerr.tcl 727d77959ac512b473dd2d659937f58688ce5460482a442c2d569fc8656491e5
 F test/windowerr.test 7962cf9b39f27b11ea5c62105ab2322a61ceac098dce536e2b8569c3053f62e7
 F test/windowfault.test cb27a4d8c85982733b123af667921df3a96e23d3739b15d414de75054b334cbe
@@ -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 4f9b93e6cfa0b3b6ab8a126299c2b2a242f840453dc450e84d3df87576cf6cf8
-R b15ab65cb7618c5a9e1a72b6396029a6
+P e195948a6876efe01b5cf2ed67bc9015a781fda39dca668099cb7edc1d331818
+R 7302062dc5c56ecf785fcf50d86c1879
 U dan
-Z c24808e31372a4301dc8e3448490f36d
+Z 9d652fe80863fdaec099639a4ce1b008
index 976945a08057f5888e7bdf41c028134c6af882a8..518d3f0926e49b18d0115ae77640d17e72597119 100644 (file)
@@ -1 +1 @@
-e195948a6876efe01b5cf2ed67bc9015a781fda39dca668099cb7edc1d331818
\ No newline at end of file
+e0255063799a2a8531f0eaa8790334509591a5ababc5b915035b46d2faa80363
\ No newline at end of file
index 868a70e1a5e0d8770fabee6681d12632eaeeaa50..15145b55bd82238790d101361641c107b9a09001 100644 (file)
@@ -1573,18 +1573,24 @@ static void windowFullScan(WindowCodeArg *p){
   }else if( pMWin->eExclude!=TK_NO ){
     int addr;
     int addrEq = 0;
-    KeyInfo *pKeyInfo;
+    KeyInfo *pKeyInfo = 0;
 
-    pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pMWin->pOrderBy, 0, 0);
+    if( pMWin->pOrderBy ){
+      pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pMWin->pOrderBy, 0, 0);
+    }
     if( pMWin->eExclude==TK_TIES ){
-      addrEq = sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, lblNext, regRowid);
+      addrEq = sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, 0, regRowid);
+    }
+    if( pKeyInfo ){
+      windowReadPeerValues(p, csr, regPeer);
+      sqlite3VdbeAddOp3(v, OP_Compare, regPeer, regCPeer, nPeer);
+      sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
+      addr = sqlite3VdbeCurrentAddr(v)+1;
+      sqlite3VdbeAddOp3(v, OP_Jump, addr, lblNext, addr);
+      VdbeCoverageEqNe(v);
+    }else{
+      sqlite3VdbeAddOp2(v, OP_Goto, 0, lblNext);
     }
-    windowReadPeerValues(p, csr, regPeer);
-    sqlite3VdbeAddOp3(v, OP_Compare, regPeer, regCPeer, nPeer);
-    sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
-    addr = sqlite3VdbeCurrentAddr(v)+1;
-    sqlite3VdbeAddOp3(v, OP_Jump, addr, lblNext, addr);
-    VdbeCoverageEqNe(v);
     if( addrEq ) sqlite3VdbeJumpHere(v, addrEq);
   }
 
index fbce6d790e6d3fbf796628549885589e888d793e..e4eb523af532f4c3f2d11ef218444ac1091b001c 100644 (file)
@@ -221,6 +221,49 @@ execsql_test 4.4.2 {
     ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
+
+==========
+
+execsql_test 5.0 {
+  INSERT INTO t3 VALUES
+    (NULL, 'bb', 355), (NULL, 'cc', 158), (NULL, 'aa', 399), 
+    ('JJ', NULL, 839), ('FF', NULL, 618), ('BB', NULL, 393), 
+    (NULL, 'bb', 629), (NULL, NULL, 667), (NULL, NULL, 870);
+}
+
+foreach {tn ex} {
+  1  { EXCLUDE NO OTHERS }
+  2  { EXCLUDE CURRENT ROW }
+  3  { EXCLUDE GROUP }
+  4  { EXCLUDE TIES }
+} {
+  foreach {tn2 frame} {
+    1 { RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+    2 { ORDER BY a NULLS FIRST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+    3 { PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+    4 { ORDER BY a NULLS FIRST GROUPS 6 PRECEDING }
+    5 { ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING }
+  } {
+    execsql_test 5.$tn.$tn2.1 "
+      SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS ( $frame $ex )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST
+    "
+
+    execsql_test 5.$tn.$tn2.2 "
+      SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS ( $frame $ex )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST
+    "
+  }
+}
+
 finish_test
 
 
index 14d4f2d63d4f654de093dc30562c5ef446e6f789..0545bd77c63e66d85b0fcc9f41734eef28aaa656 100644 (file)
@@ -3549,4 +3549,793 @@ do_execsql_test 4.4.2 {
   ) FROM t1 ORDER BY 1 ;
 } {5   6   8   9   10}
 
+#==========================================================================
+
+do_execsql_test 5.0 {
+  INSERT INTO t3 VALUES
+    (NULL, 'bb', 355), (NULL, 'cc', 158), (NULL, 'aa', 399), 
+    ('JJ', NULL, 839), ('FF', NULL, 618), ('BB', NULL, 393), 
+    (NULL, 'bb', 629), (NULL, NULL, 667), (NULL, NULL, 870);
+} {}
+
+do_execsql_test 5.1.1.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102}
+
+do_execsql_test 5.1.1.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1}
+
+do_execsql_test 5.1.2.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113}
+
+do_execsql_test 5.1.2.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {2947 81   2947 81   2947 81   2947 81   2947 81   2947 81   2947 81
+  2947 81   2947 81   5287 74   5287 74   5287 74   5287 74   5287 74
+  5287 74   5287 74   8400 65   8400 65   8400 65   8400 65   8400 65
+  8400 65   8400 65   8400 65   8400 65   9664 57   9664 57   9664 57
+  9664 57   9664 57   9664 57   9664 57   9664 57   10626 46   10626 46
+  10626 46   10626 46   10626 46   10626 46   10626 46   10626 46   10626 46
+  10626 46   10626 46   12145 41   12145 41   12145 41   12145 41   12145 41
+  13949 34   13949 34   13949 34   13949 34   13949 34   13949 34   13949 34
+  15315 28   15315 28   15315 28   15315 28   15315 28   15315 28   18796 15
+  18796 15   18796 15   18796 15   18796 15   18796 15   18796 15   18796 15
+  18796 15   18796 15   18796 15   18796 15   18796 15   21105 7   21105 7
+  21105 7   21105 7   21105 7   21105 7   21105 7   21105 7   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1}
+
+do_execsql_test 5.1.3.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {777 113   777 113   777 113   777 113   777 113   805 250   805 250
+  805 250   805 250   805 250   805 250   805 250   822 158   822 158
+  822 158   822 158   822 158   822 158   840 247   840 247   840 247
+  840 247   840 247   840 247   840 247   840 247   840 247   840 247
+  840 247   840 247   840 247   870 158   870 158   870 158   870 158
+  870 158   870 158   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   899 113   899 113   934 223   934 223   934 223
+  934 223   934 223   934 223   934 223   934 223   938 102   938 102
+  938 102   938 102   938 102   938 102   938 102   938 102   938 102
+  938 102   938 102   938 148   938 148   938 148   938 148   938 148
+  938 148   938 148   938 148   959 224   959 224   959 224   959 224
+  959 224   959 224   959 224   979 133   979 133   979 133   979 133
+  979 133   979 133   979 133   979 133   979 133}
+
+do_execsql_test 5.1.3.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {962 1   962 1   962 1   962 1   962 1   962 1   962 1   962 1   962 1
+  962 1   962 1   1264 1   1264 1   1264 1   1264 1   1264 1   1264 1
+  1264 1   1264 1   1366 1   1366 1   1366 1   1366 1   1366 1   1366 1
+  1519 1   1519 1   1519 1   1519 1   1519 1   1804 1   1804 1   1804 1
+  1804 1   1804 1   1804 1   1804 1   2050 1   2050 1   2050 1   2050 1
+  2050 1   2050 1   2309 1   2309 1   2309 1   2309 1   2309 1   2309 1
+  2309 1   2309 1   2340 1   2340 1   2340 1   2340 1   2340 1   2340 1
+  2340 1   2947 1   2947 1   2947 1   2947 1   2947 1   2947 1   2947 1
+  2947 1   2947 1   3113 1   3113 1   3113 1   3113 1   3113 1   3113 1
+  3113 1   3113 1   3113 1   3481 1   3481 1   3481 1   3481 1   3481 1
+  3481 1   3481 1   3481 1   3481 1   3481 1   3481 1   3481 1   3481 1}
+
+do_execsql_test 5.1.4.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {870 158   870 158   870 158   870 158   870 158   870 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 113   959 113   959 113   959 113
+  959 113   959 158   959 158   959 158   959 158   959 158   959 158
+  959 158   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102}
+
+do_execsql_test 5.1.4.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {2050 1   2050 1   2050 1   2050 1   2050 1   2050 1   4359 7   4359 7
+  4359 7   4359 7   4359 7   4359 7   4359 7   4359 7   7840 15   7840 15
+  7840 15   7840 15   7840 15   7840 15   7840 15   7840 15   7840 15
+  7840 15   7840 15   7840 15   7840 15   9206 28   9206 28   9206 28
+  9206 28   9206 28   9206 28   11010 34   11010 34   11010 34   11010 34
+  11010 34   11010 34   11010 34   12368 74   12368 74   12368 74   12368 74
+  12368 74   12368 74   12368 74   12529 41   12529 41   12529 41   12529 41
+  12529 41   12705 57   12705 57   12705 57   12705 57   12705 57   12705 57
+  12705 57   12705 57   13491 46   13491 46   13491 46   13491 46   13491 46
+  13491 46   13491 46   13491 46   13491 46   13491 46   13491 46   13509 65
+  13509 65   13509 65   13509 65   13509 65   13509 65   13509 65   13509 65
+  13509 65   13949 81   13949 81   13949 81   13949 81   13949 81   13949 81
+  13949 81   13949 81   13949 81}
+
+do_execsql_test 5.1.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {102 102   113 113   113 113   133 133   148 148   160 158   160 158
+  160 158   208 208   224 223   224 223   239 234   239 234   239 234
+  252 247   257 247   257 247   257 250   257 252   295 295   309 309
+  336 330   336 330   336 330   346 346   355 354   355 354   355 354
+  399 393   399 393   399 393   399 393   399 393   412 412   421 421
+  430 430   443 443   480 480   480 480   574 572   574 572   607 607
+  618 618   618 618   634 627   634 627   634 627   634 627   634 629
+  652 652   667 660   671 667   671 667   671 667   671 667   683 683
+  711 705   716 705   716 711   730 726   730 726   762 759   768 759
+  768 762   768 762   777 777   792 786   794 786   794 786   794 790
+  805 805   822 822   845 839   845 839   845 839   845 839   845 839
+  870 870   870 870   870 870   899 899   911 911   934 929   938 929
+  938 934   938 934   963 959   963 959   979 979}
+
+do_execsql_test 5.1.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 , 2
+} {{} 1   {} 5   {} 6   {} 6   {} 8   {} 9   {} 25   {} 34   {} 36   {} 38
+  {} 38   {} 40   {} 41   {} 43   {} 43   {} 50   {} 60   {} 61   {} 64
+  {} 64   {} 67   {} 68   {} 69   {} 70   {} 72   {} 78   {} 78   {} 78
+  {} 85   {} 85   133 4   223 10   223 11   226 2   226 2   239 12   239 13
+  239 14   247 15   257 18   257 19   295 20   309 21   335 22   335 23
+  335 24   421 35   443 37   504 16   504 17   607 42   683 56   710 26
+  710 27   710 27   711 59   759 62   759 63   777 66   805 71   899 81
+  911 82   929 83   929 84   979 89   1334 51   1416 57   1416 58   1584 29
+  1584 29   1584 31   1584 32   1584 32   1891 49   1922 87   1922 88
+  2005 52   2005 52   2005 54   2005 55   2518 45   2518 46   2518 46
+  2518 48   2523 73   2523 73   2523 75   2523 76   2523 77}
+
+do_execsql_test 5.2.1.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {963 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 113}
+
+do_execsql_test 5.2.1.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {22176 1   22192 1   22196 1   22226 1   22244 1   22256 1   22310 1
+  22316 1   22316 1   22350 1   22378 1   22396 1   22444 1   22450 1
+  22472 1   22484 1   22488 1   22488 1   22522 1   22526 1   22526 1
+  22528 1   22548 1   22712 1   22734 1   22756 1   22756 1   22762 1
+  22762 1   22800 1   22800 1   22820 1   22846 1   22860 1   22898 1
+  22908 1   22916 1   22932 1   23022 1   23042 1   23042 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1   23155 1   23155 1
+  23155 1   23155 1   23155 1   23155 1   23155 1}
+
+do_execsql_test 5.2.2.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {839 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 234   963 113   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113}
+
+do_execsql_test 5.2.2.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {2048 81   2108 81   2108 81   2690 81   2834 81   2947 81   2947 81
+  2947 81   2947 81   4482 74   4616 74   4844 74   4866 74   5287 74
+  5287 74   5287 74   7421 65   7437 65   7717 65   8045 65   8267 65
+  8400 65   8400 65   8400 65   8400 65   8735 57   9329 57   9664 57
+  9664 57   9664 57   9664 57   9664 57   9664 57   9959 46   10331 46
+  10626 46   10626 46   10626 46   10626 46   10626 46   10626 46   10626 46
+  10626 46   10626 46   11368 41   11516 41   12032 41   12145 41   12145 41
+  12990 34   13104 34   13949 34   13949 34   13949 34   13949 34   13949 34
+  14556 28   14708 28   15315 28   15315 28   15315 28   15315 28   18085 15
+  18091 15   18163 15   18397 15   18403 15   18403 15   18549 15   18796 15
+  18796 15   18796 15   18796 15   18796 15   18796 15   20194 7   20478 7
+  20796 7   20866 7   20882 7   21105 7   21105 7   21105 7   22488 1
+  22526 1   22756 1   22800 1   23155 1   23155 1}
+
+do_execsql_test 5.2.3.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {667 158   671 250   759 158   768 113   777 113   777 113   777 113
+  777 252   792 247   805 250   805 250   805 250   805 250   805 250
+  805 398   822 158   822 158   822 158   822 158   822 346   839 113
+  840 247   840 247   840 247   840 247   840 247   840 247   840 247
+  840 247   840 247   840 247   840 247   840 393   845 224   870 102
+  870 158   870 158   870 158   870 158   870 355   899 113   899 113
+  899 113   899 113   899 113   899 113   899 113   899 234   911 223
+  929 148   934 223   934 223   934 223   934 223   934 223   934 223
+  934 239   938 102   938 102   938 102   938 102   938 102   938 102
+  938 102   938 102   938 102   938 148   938 148   938 148   938 148
+  938 148   938 148   938 160   938 208   959 224   959 224   959 224
+  959 224   959 224   959 238   963 133   979 133   979 133   979 133
+  979 133   979 133   979 133   979 133   979 330}
+
+do_execsql_test 5.2.3.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {295 1   335 1   607 1   667 1   742 1   759 1   845 1   890 1   929 1
+  959 1   962 1   962 1   962 1   962 1   962 1   962 1   962 1   962 1
+  962 1   1264 1   1264 1   1264 1   1264 1   1264 1   1264 1   1366 1
+  1366 1   1366 1   1366 1   1383 1   1398 1   1406 1   1421 1   1519 1
+  1519 1   1535 1   1651 1   1669 1   1682 1   1695 1   1804 1   1804 1
+  1804 1   1804 1   1804 1   1897 1   1919 1   2000 1   2048 1   2050 1
+  2050 1   2070 1   2086 1   2108 1   2108 1   2134 1   2150 1   2309 1
+  2309 1   2309 1   2340 1   2340 1   2340 1   2430 1   2690 1   2758 1
+  2770 1   2776 1   2834 1   2848 1   2947 1   2947 1   2947 1   2947 1
+  2980 1   3082 1   3088 1   3088 1   3113 1   3113 1   3113 1   3113 1
+  3234 1   3481 1   3481 1   3481 1   3481 1   3481 1   3481 1}
+
+do_execsql_test 5.2.4.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {667 158   870 158   870 158   870 158   870 158   870 355   911 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 113   959 113   959 113   959 113
+  959 113   959 158   959 158   959 158   959 158   959 158   959 158
+  959 158   963 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102}
+
+do_execsql_test 5.2.4.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {1383 1   1421 1   1651 1   1695 1   2050 1   2050 1   3448 7   3732 7
+  4050 7   4120 7   4136 7   4359 7   4359 7   4359 7   7129 15   7135 15
+  7207 15   7441 15   7447 15   7447 15   7593 15   7840 15   7840 15
+  7840 15   7840 15   7840 15   7840 15   8447 28   8599 28   9206 28
+  9206 28   9206 28   9206 28   10051 34   10165 34   11010 34   11010 34
+  11010 34   11010 34   11010 34   11563 74   11697 74   11752 41   11776 57
+  11900 41   11925 74   11947 74   12368 74   12368 74   12368 74   12370 57
+  12416 41   12529 41   12529 41   12530 65   12546 65   12705 57   12705 57
+  12705 57   12705 57   12705 57   12705 57   12824 46   12826 65   13050 81
+  13110 81   13110 81   13154 65   13196 46   13376 65   13491 46   13491 46
+  13491 46   13491 46   13491 46   13491 46   13491 46   13491 46   13491 46
+  13509 65   13509 65   13509 65   13509 65   13692 81   13836 81   13949 81
+  13949 81   13949 81   13949 81}
+
+do_execsql_test 5.2.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   113 113   113 113   158 158   160 158   160 158   223 223
+  224 224   238 234   239 234   239 238   252 250   256 252   257 247
+  257 247   257 250   335 330   336 330   336 335   355 354   355 354
+  355 355   399 393   399 393   399 393   399 393   399 393   480 480
+  480 480   572 572   574 574   618 618   618 618   633 629   634 627
+  634 627   634 627   634 629   667 667   670 667   671 667   671 667
+  671 667   711 711   711 711   716 705   726 726   730 730   762 762
+  768 759   768 762   768 762   792 790   792 790   794 786   794 786
+  844 839   845 839   845 839   845 839   845 839   870 870   870 870
+  870 870   934 934   938 929   938 934   938 934   959 959   963 963}
+
+do_execsql_test 5.2.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 , 2
+} {{} 1   {} 4   {} 5   {} 6   {} 6   {} 8   {} 9   {} 10   {} 14   {} 15
+  {} 19   {} 20   {} 21   {} 23   {} 25   {} 34   {} 35   {} 36   {} 37
+  {} 38   {} 38   {} 40   {} 41   {} 42   {} 43   {} 43   {} 50   {} 56
+  {} 60   {} 61   {} 62   {} 64   {} 64   {} 66   {} 67   {} 68   {} 69
+  {} 70   {} 71   {} 72   {} 78   {} 78   {} 78   {} 81   {} 82   {} 83
+  {} 85   {} 85   {} 89   113 2   113 2   223 11   239 12   239 13   257 18
+  335 22   335 24   355 27   355 27   504 16   504 17   705 58   710 26
+  711 57   711 59   759 63   929 84   959 88   963 87   1185 32   1185 32
+  1191 29   1191 29   1334 51   1334 55   1338 52   1338 52   1584 31
+  1678 77   1684 73   1684 73   1885 48   1889 46   1889 46   1891 45
+  1891 49   2005 54   2523 75   2523 76}
+
+do_execsql_test 5.3.1.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
+
+do_execsql_test 5.3.1.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1}
+
+do_execsql_test 5.3.2.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113}
+
+do_execsql_test 5.3.2.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} 81   {} 81   {} 81   {} 81   {} 81   {} 81   {} 81   {} 81   {} 81
+  2947 74   2947 74   2947 74   2947 74   2947 74   2947 74   2947 74
+  5287 65   5287 65   5287 65   5287 65   5287 65   5287 65   5287 65
+  5287 65   5287 65   8400 57   8400 57   8400 57   8400 57   8400 57
+  8400 57   8400 57   8400 57   9664 46   9664 46   9664 46   9664 46
+  9664 46   9664 46   9664 46   9664 46   9664 46   9664 46   9664 46
+  10626 41   10626 41   10626 41   10626 41   10626 41   12145 34   12145 34
+  12145 34   12145 34   12145 34   12145 34   12145 34   13949 28   13949 28
+  13949 28   13949 28   13949 28   13949 28   15315 15   15315 15   15315 15
+  15315 15   15315 15   15315 15   15315 15   15315 15   15315 15   15315 15
+  15315 15   15315 15   15315 15   18796 7   18796 7   18796 7   18796 7
+  18796 7   18796 7   18796 7   18796 7   21105 1   21105 1   21105 1
+  21105 1   21105 1   21105 1}
+
+do_execsql_test 5.3.3.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}}
+
+do_execsql_test 5.3.3.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1}
+
+do_execsql_test 5.3.4.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   870 158   870 158   870 158
+  870 158   870 158   870 158   870 158   870 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 113
+  959 113   959 113   959 113   959 113   959 113   959 113   959 113
+  959 113   959 113   959 113   959 158   959 158   959 158   959 158
+  959 158   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102}
+
+do_execsql_test 5.3.4.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   {} 1   {} 1   {} 1   {} 1   2050 7   2050 7   2050 7   2050 7
+  2050 7   2050 7   2050 7   2050 7   4359 15   4359 15   4359 15   4359 15
+  4359 15   4359 15   4359 15   4359 15   4359 15   4359 15   4359 15
+  4359 15   4359 15   7840 28   7840 28   7840 28   7840 28   7840 28
+  7840 28   9206 34   9206 34   9206 34   9206 34   9206 34   9206 34
+  9206 34   10028 74   10028 74   10028 74   10028 74   10028 74   10028 74
+  10028 74   10396 65   10396 65   10396 65   10396 65   10396 65   10396 65
+  10396 65   10396 65   10396 65   11002 81   11002 81   11002 81   11002 81
+  11002 81   11002 81   11002 81   11002 81   11002 81   11010 41   11010 41
+  11010 41   11010 41   11010 41   11441 57   11441 57   11441 57   11441 57
+  11441 57   11441 57   11441 57   11441 57   12529 46   12529 46   12529 46
+  12529 46   12529 46   12529 46   12529 46   12529 46   12529 46   12529 46
+  12529 46}
+
+do_execsql_test 5.3.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}   {} {}
+  {} {}   {} {}   158 158   160 160   160 160   223 223   224 224   238 234
+  239 234   239 238   252 250   256 252   257 247   257 247   257 250
+  335 330   336 330   336 335   354 354   354 354   355 355   398 393
+  398 393   399 393   399 398   399 398   572 572   574 574   633 629
+  634 627   634 627   634 627   634 629   667 667   670 667   671 667
+  671 670   671 670   711 711   711 711   716 705   726 726   730 730
+  762 762   762 762   762 762   768 759   792 790   792 790   794 786
+  794 786   844 839   845 839   845 839   845 840   845 840   934 934
+  934 934   934 934   938 929   959 959   963 963}
+
+do_execsql_test 5.3.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 , 2
+} {{} 1   {} 2   {} 2   {} 4   {} 5   {} 6   {} 6   {} 8   {} 9   {} 10
+  {} 14   {} 15   {} 19   {} 20   {} 21   {} 23   {} 25   {} 27   {} 27
+  {} 34   {} 35   {} 36   {} 37   {} 38   {} 38   {} 40   {} 41   {} 42
+  {} 43   {} 43   {} 50   {} 56   {} 60   {} 61   {} 62   {} 64   {} 64
+  {} 66   {} 67   {} 68   {} 69   {} 70   {} 71   {} 72   {} 78   {} 78
+  {} 78   {} 81   {} 82   {} 83   {} 85   {} 85   {} 89   223 11   239 12
+  239 13   257 18   335 22   335 24   504 16   504 17   671 52   671 52
+  705 58   710 26   711 57   711 59   759 63   786 32   786 32   798 29
+  798 29   845 73   845 73   929 84   959 88   963 87   1260 46   1260 46
+  1334 51   1334 55   1584 31   1678 77   1885 48   1891 45   1891 49
+  2005 54   2523 75   2523 76}
+
+do_execsql_test 5.4.1.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {102 102   113 113   113 113   133 133   148 148   158 158   158 158
+  160 160   208 208   223 223   224 224   234 234   238 238   239 239
+  247 247   250 250   252 252   256 256   257 257   295 295   309 309
+  330 330   335 335   336 336   346 346   354 354   355 355   355 355
+  393 393   393 393   398 398   399 399   399 399   412 412   421 421
+  430 430   443 443   480 480   480 480   572 572   574 574   607 607
+  618 618   618 618   627 627   629 629   629 629   633 633   634 634
+  652 652   660 660   667 667   667 667   670 670   671 671   683 683
+  705 705   711 711   716 716   726 726   730 730   759 759   762 762
+  768 768   768 768   777 777   786 786   790 790   792 792   794 794
+  805 805   822 822   839 839   839 839   840 840   844 844   845 845
+  870 870   870 870   870 870   899 899   911 911   929 929   934 934
+  938 938   938 938   959 959   963 963   979 979}
+
+do_execsql_test 5.4.1.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   113 1   113 1   133 1   223 1   239 1   247 1
+  257 1   295 1   309 1   335 1   355 1   355 1   393 1   393 1   399 1
+  399 1   421 1   443 1   607 1   627 1   629 1   629 1   633 1   667 1
+  667 1   671 1   683 1   705 1   711 1   759 1   777 1   805 1   839 1
+  839 1   845 1   899 1   911 1   929 1   959 1   963 1   979 1}
+
+do_execsql_test 5.4.2.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {113 113   234 234   257 257   336 336   354 354   768 768   839 839
+  839 839   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 113   899 113   899 113   899 113   899 113   899 113
+  899 113   899 899   963 113   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113   979 113   979 113
+  979 113   979 113   979 113   979 113   979 113}
+
+do_execsql_test 5.4.2.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {{} 81   {} 81   {} 81   {} 81   113 81   257 81   839 81   839 81   899 81
+  2947 74   2947 74   2947 74   3368 74   3390 74   3618 74   3752 74
+  5287 65   5287 65   5287 65   5287 65   5420 65   5642 65   5970 65
+  6250 65   6266 65   8400 57   8400 57   8400 57   8400 57   8400 57
+  8400 57   8735 57   9329 57   9664 46   9664 46   9664 46   9664 46
+  9664 46   9664 46   9664 46   9664 46   9664 46   9959 46   10331 46
+  10626 41   10626 41   10739 41   11255 41   11403 41   12145 34   12145 34
+  12145 34   12145 34   12145 34   12990 34   13104 34   13949 28   13949 28
+  13949 28   13949 28   14556 28   14708 28   15315 15   15315 15   15315 15
+  15315 15   15315 15   15315 15   15562 15   15708 15   15708 15   15714 15
+  15948 15   16020 15   16026 15   18796 7   18796 7   18796 7   19019 7
+  19035 7   19105 7   19423 7   19707 7   21105 1   21105 1   21460 1
+  21504 1   21734 1   21772 1}
+
+do_execsql_test 5.4.3.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {102 102   113 113   113 113   133 133   148 148   158 158   158 158
+  160 160   208 208   223 223   224 224   234 234   238 238   239 239
+  247 247   250 250   252 252   256 256   257 257   295 295   309 309
+  330 330   335 335   336 336   346 346   354 354   355 355   355 355
+  393 393   393 393   398 398   399 399   399 399   412 412   421 421
+  430 430   443 443   480 480   480 480   572 572   574 574   607 607
+  618 618   618 618   627 627   629 629   629 629   633 633   634 634
+  652 652   660 660   667 667   667 667   670 670   671 671   683 683
+  705 705   711 711   716 716   726 726   730 730   759 759   762 762
+  768 768   768 768   777 777   786 786   790 790   792 792   794 794
+  805 805   822 822   839 839   839 839   840 840   844 844   845 845
+  870 870   870 870   870 870   899 899   911 911   929 929   934 934
+  938 938   938 938   959 959   963 963   979 979}
+
+do_execsql_test 5.4.3.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1   {} 1
+  {} 1   {} 1   {} 1   {} 1   113 1   113 1   133 1   223 1   239 1   247 1
+  257 1   295 1   309 1   335 1   355 1   355 1   393 1   393 1   399 1
+  399 1   421 1   443 1   607 1   627 1   629 1   629 1   633 1   667 1
+  667 1   671 1   683 1   705 1   711 1   759 1   777 1   805 1   839 1
+  839 1   845 1   899 1   911 1   929 1   959 1   963 1   979 1}
+
+do_execsql_test 5.4.4.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {158 158   355 355   399 399   629 629   667 667   870 158   870 158
+  870 158   870 158   870 158   870 158   870 870   911 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   934 158   934 158   934 158
+  934 158   934 158   934 158   934 158   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 102
+  959 102   959 102   959 102   959 102   959 102   959 102   959 113
+  959 113   959 113   959 113   959 113   959 113   959 113   959 113
+  959 113   959 113   959 113   959 158   959 158   959 158   959 158
+  959 158   963 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102   979 102   979 102
+  979 102   979 102   979 102   979 102   979 102}
+
+do_execsql_test 5.4.4.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {{} 1   {} 1   355 1   399 1   629 1   667 1   2050 7   2050 7   2050 7
+  2273 7   2289 7   2359 7   2677 7   2961 7   4359 15   4359 15   4359 15
+  4359 15   4359 15   4359 15   4606 15   4752 15   4752 15   4758 15
+  4992 15   5064 15   5070 15   7840 28   7840 28   7840 28   7840 28
+  8447 28   8599 28   9206 34   9206 34   9206 34   9206 34   9206 34
+  10028 74   10028 74   10028 74   10051 34   10165 34   10396 65   10396 65
+  10396 65   10396 65   10449 74   10471 74   10529 65   10699 74   10751 65
+  10833 74   11002 81   11002 81   11002 81   11002 81   11010 41   11010 41
+  11079 65   11115 81   11123 41   11259 81   11359 65   11375 65   11441 57
+  11441 57   11441 57   11441 57   11441 57   11441 57   11639 41   11776 57
+  11787 41   11841 81   11841 81   11901 81   12370 57   12529 46   12529 46
+  12529 46   12529 46   12529 46   12529 46   12529 46   12529 46   12529 46
+  12824 46   13196 46}
+
+do_execsql_test 5.4.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {102 102   113 113   113 113   133 133   148 148   160 158   160 158
+  160 158   208 208   224 223   224 223   239 234   239 234   239 234
+  252 247   257 247   257 247   257 250   257 252   295 295   309 309
+  336 330   336 330   336 330   346 346   355 354   355 354   355 354
+  399 393   399 393   399 393   399 393   399 393   412 412   421 421
+  430 430   443 443   480 480   480 480   574 572   574 572   607 607
+  618 618   618 618   634 627   634 627   634 627   634 627   634 629
+  652 652   667 660   671 667   671 667   671 667   671 667   683 683
+  711 705   716 705   716 711   730 726   730 726   762 759   768 759
+  768 762   768 762   777 777   792 786   794 786   794 786   794 790
+  805 805   822 822   845 839   845 839   845 839   845 839   845 839
+  870 870   870 870   870 870   899 899   911 911   934 929   938 929
+  938 934   938 934   963 959   963 959   979 979}
+
+do_execsql_test 5.4.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 , 2
+} {{} 1   {} 5   {} 6   {} 6   {} 8   {} 9   {} 25   {} 34   {} 36   {} 38
+  {} 38   {} 40   {} 41   {} 43   {} 43   {} 50   {} 60   {} 61   {} 64
+  {} 64   {} 67   {} 68   {} 69   {} 70   {} 72   {} 78   {} 78   {} 78
+  {} 85   {} 85   113 2   113 2   133 4   223 10   223 11   239 12   239 13
+  239 14   247 15   257 18   257 19   295 20   309 21   335 22   335 23
+  335 24   355 27   355 27   421 35   443 37   504 16   504 17   607 42
+  683 56   710 26   711 59   759 62   759 63   777 66   805 71   899 81
+  911 82   929 83   929 84   979 89   1185 32   1185 32   1191 29   1191 29
+  1334 51   1338 52   1338 52   1416 57   1416 58   1584 31   1684 73
+  1684 73   1889 46   1889 46   1891 49   1922 87   1922 88   2005 54
+  2005 55   2518 45   2518 48   2523 75   2523 76   2523 77}
+
 finish_test