]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix problems with window frames that use ORDER BY ... NULLS LAST etc.
authordan <dan@noemail.net>
Mon, 19 Aug 2019 19:59:50 +0000 (19:59 +0000)
committerdan <dan@noemail.net>
Mon, 19 Aug 2019 19:59:50 +0000 (19:59 +0000)
FossilOrigin-Name: 75d665a494dd7d6e77d5a80af386ee5accc0a53416d5493424dc0fef6c7b01a0

manifest
manifest.uuid
src/expr.c
src/window.c
test/nulls1.test
test/pg_common.tcl
test/window7.test
test/window8.tcl
test/window8.test

index b8cb71e76a01aeb6337a4878f11ccbbbf3f99c56..2dac1918ccfa250259aa91732cc6b65be675eb3c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Prevent\sNULLS\sFIRST/LAST\sfrom\sbeing\sused\sin\sCREATE\sINDEX\sand\sother\sstatements.
-D 2019-08-19T17:26:32.202
+C Fix\sproblems\swith\swindow\sframes\sthat\suse\sORDER\sBY\s...\sNULLS\sLAST\setc.
+D 2019-08-19T19:59:50.467
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -475,7 +475,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
 F src/dbstat.c c12833de69cb655751487d2c5a59607e36be1c58ba1f4bd536609909ad47b319
 F src/delete.c d08c9e01a2664afd12edcfa3a9c6578517e8ff8735f35509582693adbe0edeaf
-F src/expr.c 0a3442b0df31f1eca86b2aa3634f61bca5f1a6781f543ca9a0d87e29961f7f4f
+F src/expr.c 223bd0d5132e217fc0967be55a0a31f5e06d4b61805176d487ffe4ce6b4c6a6e
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 6b79f4c2447691aa9ac86e2a6a774b65f3b3dd053d4220a4893051a0de20f82e
 F src/func.c 4ee36219698d50d672a28eca4adb0fd6b92e607a1883d318315e0d2fd5044467
@@ -613,7 +613,7 @@ F src/where.c 52c433208eafdc7e1750ea4622cfffb5d14d906a0a9258e07bae4b6fee182fef
 F src/whereInt.h 807766a6a92893dbba8a887e5b13466d2257ce07a84cf1be0aae2c41aee3bf4f
 F src/wherecode.c 81c5d1eb909f8e1284df58367d25f748d126c475725665e7bb9b10a9bf702242
 F src/whereexpr.c 5cce1fd11876086890a27c05e0cb75ca97ba64ba6984f72154039f1cfd2e69cc
-F src/window.c 331cdac4992c7402da01c981861f3cc989bf7b4a97dd03eb122993e670f7a588
+F src/window.c 94dccce0568dbcc65658d762e5b11c390fd5509d40e73205cb7f0c22f0051532
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
 F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@ -1182,7 +1182,7 @@ F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161
 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934
 F test/notnull.test a37b663d5bb728d66fc182016613fb8e4a0a4bbf3d75b8876a7527f7d4ed3f18
 F test/null.test 0dcce4f04284ec66108c503327ad6d224c0752b3
-F test/nulls1.test 6d226787ee0d479bc009e00b7fa812fb261fbb3eab764de18ecb988f4ec69f4a
+F test/nulls1.test d2f1da489fd24d7af54aed9d7e117e4c7d6bb3e67f3a87ef54377cc088563073
 F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1
 F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823
 F test/offset1.test f06b83657bcf26f9ce805e67450e189e282143b2
@@ -1217,7 +1217,7 @@ F test/pcache.test c8acbedd3b6fd0f9a7ca887a83b11d24a007972b
 F test/pcache2.test af7f3deb1a819f77a6d0d81534e97d1cf62cd442
 F test/percentile.test 4243af26b8f3f4555abe166f723715a1f74c77ff
 F test/permutations.test 4282fb00e5ac0f8c2cd1be62652f6da4ac03ce3c58b7d785fa17f4684492a0e0
-F test/pg_common.tcl 4740dc35190d6acdab14c097783331361301ab504a94d948f6afbb56ce0a51e8
+F test/pg_common.tcl 222a1bad1c41c308fa366313cd7b51b3be7e9b21c8736a421b974ac941693b54
 F test/pragma.test cf066fe0f7f5d49f4758de4986407b8676c61aaa7871599340d64f42a8edc352
 F test/pragma2.test e5d5c176360c321344249354c0c16aec46214c9f
 F test/pragma3.test 8300aa9c63cff1027006ca34bf413a148abbd6dcd471fa9a1ded322fe18c0df9
@@ -1710,9 +1710,9 @@ F test/window4.test 807f3e6b15f9338e5b9742b87c5c7ca825b42b9657fde6096e8901193708
 F test/window5.test d328dd18221217c49c144181975eea17339eaeaf0e9aa558cee3afb84652821e
 F test/window6.test f8d674254b23289cc17c84d79dec7eda7caa1dfb7836c43122cfdf3640d1df32
 F test/window7.tcl 6a1210f05d40ec89c22960213a22cd3f98d4e2f2eb20646c83c8c30d4d76108f
-F test/window7.test ce7f865241fdd1c5c4db869cd7bb2986c3be836bc2e73649a6846dd920f63e0f
-F test/window8.tcl 9e9a82ae9eea90a4a83481d641a812b974980c38f9247f3b89a6e3c8bed45518
-F test/window8.test df187dc19921f7be0ab709d531d681bd80ccaac96a913a89ecee8b272b91d43f
+F test/window7.test 1d31276961ae7801edc72173edaf7593e3cbc79c06d1f1f09e20d8418af403cd
+F test/window8.tcl 5884cc884f9605bf88c0d18a534894bf9342f72687bf1bc43ed0cab4c8af7973
+F test/window8.test 48590f3737d17eec503d77769c13ead15d12e8819820b1dc68afe8a3c5bc3250
 F test/window9.test 20a6b590be718b6bc98a5356d4396d6cdf19329c547da084fa225b92d68e1693
 F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0
 F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b
@@ -1837,7 +1837,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 f892066425671a8a0ac923e3ad4744677f6434a66f97b91afa8141f11f179975
-R 453ca41ba88968d27d033b2c6ac5c131
+P bb9767a287097a615aeb4abdba689b10e1a1c36c016c8e55905b508075e62c86
+R 0d189432ffc682f45a241a646815eff1
 U dan
-Z d9760a7ecfe79d11a5b817a651ccacbf
+Z 3a5c6bb3c2c9a1118645ddff85026963
index 05637d33b1674aa9e14cae9f93c419c2b68024f1..7a21ed26bbf5683c1c7effdbb211bdb1e9fe9732 100644 (file)
@@ -1 +1 @@
-bb9767a287097a615aeb4abdba689b10e1a1c36c016c8e55905b508075e62c86
\ No newline at end of file
+75d665a494dd7d6e77d5a80af386ee5accc0a53416d5493424dc0fef6c7b01a0
\ No newline at end of file
index 6948c5a0fe307c8c6ba7a5c9b30ae51b8832a660..e0b55903d66a5fec527a739df0b378ee626970a1 100644 (file)
@@ -1401,6 +1401,7 @@ ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
     pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
     pItem->sortFlags = pOldItem->sortFlags;
     pItem->done = 0;
+    pItem->bNulls = pOldItem->bNulls;
     pItem->bSpanIsTab = pOldItem->bSpanIsTab;
     pItem->bSorterRef = pOldItem->bSorterRef;
     pItem->u = pOldItem->u;
index b3a7cee1bc21a6fd84d9012be04d0cd89927870a..80dfd612c4753d51c42eb03e33b9f3be07b4c38f 100644 (file)
@@ -1876,12 +1876,13 @@ static void windowCodeRangeTest(
   int reg2 = sqlite3GetTempReg(pParse);
   int arith = OP_Add;
   int addrGe;
+  ExprList *pOrderBy = p->pMWin->pOrderBy;
 
   int regString = ++pParse->nMem;
 
   assert( op==OP_Ge || op==OP_Gt || op==OP_Le );
-  assert( p->pMWin->pOrderBy && p->pMWin->pOrderBy->nExpr==1 );
-  if( p->pMWin->pOrderBy->a[0].sortFlags & KEYINFO_ORDER_DESC ){
+  assert( pOrderBy && pOrderBy->nExpr==1 );
+  if( pOrderBy->a[0].sortFlags & KEYINFO_ORDER_DESC ){
     switch( op ){
       case OP_Ge: op = OP_Le; break;
       case OP_Gt: op = OP_Lt; break;
@@ -1901,6 +1902,22 @@ static void windowCodeRangeTest(
   VdbeCoverage(v);
   sqlite3VdbeAddOp3(v, arith, regVal, reg1, reg1);
   sqlite3VdbeJumpHere(v, addrGe);
+  if( pOrderBy->a[0].sortFlags & KEYINFO_ORDER_BIGNULL ){
+    int addr;
+    addr = sqlite3VdbeAddOp1(v, OP_NotNull, reg1); VdbeCoverage(v);
+    switch( op ){
+      case OP_Ge: sqlite3VdbeAddOp2(v, OP_Goto, 0, lbl); break;
+      case OP_Gt: sqlite3VdbeAddOp2(v, OP_NotNull, reg2, lbl); break;
+      case OP_Le: sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); break;
+      default: assert( op==OP_Lt ); /* no-op */
+    }
+    sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2);
+    sqlite3VdbeJumpHere(v, addr);
+    sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); VdbeCoverage(v);
+    if( op==OP_Gt || op==OP_Ge ){
+      sqlite3VdbeChangeP2(v, -1, sqlite3VdbeCurrentAddr(v)+1);
+    }
+  }
   sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1); VdbeCoverage(v);
   sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
   assert( op==OP_Ge || op==OP_Gt || op==OP_Lt || op==OP_Le );
index dc7fb6e86bd288709df661bf7901407ae908bf52..e54d60856d231663a8fa99d27c5625e374e1d908 100644 (file)
@@ -15,8 +15,6 @@ set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 set testprefix nulls1
 
-if 1 {
-
 do_execsql_test 1.0 {
   DROP TABLE IF EXISTS t3;
   CREATE TABLE t3(a INTEGER);
@@ -55,8 +53,6 @@ for {set a 0} {$a < 3} {incr a} {
   }
 }
 
-}
-
 #-------------------------------------------------------------------------
 reset_db
 do_execsql_test 2.0 {
@@ -84,6 +80,7 @@ do_execsql_test 2.2 {
 }
 
 #-------------------------------------------------------------------------
+#
 reset_db
 do_execsql_test 3.0 {
   CREATE TABLE t1(a, b, c, d, UNIQUE (b));
@@ -121,5 +118,4 @@ do_execsql_test 3.2 {
   400 300
 }
 
-
 finish_test
index bbc52ebede5a5b090ea94e9069b65166bd3f134a..b3f35cd0ed1dc396f3c1ebf59ee93b6c5998c224 100644 (file)
@@ -70,8 +70,8 @@ proc execsql {sql} {
 proc execsql_test {tn sql} {
   set res [execsql $sql]
   set sql [string map {string_agg group_concat} $sql]
-  set sql [string map [list {NULLS FIRST} {}] $sql]
-  set sql [string map [list {NULLS LAST} {}] $sql]
+  set sql [string map [list {NULLS FIRST} {}] $sql]
+  set sql [string map [list {NULLS LAST} {}] $sql]
   puts $::fd "do_execsql_test $tn {"
   puts $::fd "  [string trim $sql]"
   puts $::fd "} {$res}"
index fd04e23c4382da61485d7b5027de58c10e141095..441e2b126a9243e1f86ffdc3477e95d0b7868fa4 100644 (file)
@@ -41,54 +41,146 @@ do_execsql_test 1.0 {
 
 do_execsql_test 1.1 {
   SELECT a, sum(b) FROM t3 GROUP BY a ORDER BY 1;
-} {0 550   1 460   2 470   3 480   4 490   5 500   6 510   7 520   8 530   9 540}
+} {0 550   1 460   2 470   3 480   4 490   5 500   6 510   7 520   8 530
+  9 540}
 
 do_execsql_test 1.2 {
   SELECT a, sum(b) OVER (
     ORDER BY a GROUPS BETWEEN CURRENT ROW AND CURRENT ROW
   ) FROM t3 ORDER BY 1;
-} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540}
+} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550
+  0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460
+  1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470
+  2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480
+  3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490
+  4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500
+  5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510
+  6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520
+  7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530
+  8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530
+  9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540
+  9 540}
 
 do_execsql_test 1.3 {
   SELECT a, sum(b) OVER (
     ORDER BY a GROUPS BETWEEN 0 PRECEDING AND 0 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540}
+} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550
+  0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460
+  1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470
+  2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480
+  3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490
+  4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500
+  5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510
+  6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520
+  7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530
+  8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530
+  9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540
+  9 540}
 
 do_execsql_test 1.4 {
   SELECT a, sum(b) OVER (
     ORDER BY a GROUPS BETWEEN 2 PRECEDING AND 2 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590}
+} {0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480
+  0 1480   0 1480   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960
+  1 1960   1 1960   1 1960   1 1960   2 2450   2 2450   2 2450   2 2450
+  2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   3 2400   3 2400
+  3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400
+  4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450
+  4 2450   4 2450   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500
+  5 2500   5 2500   5 2500   5 2500   6 2550   6 2550   6 2550   6 2550
+  6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   7 2600   7 2600
+  7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600
+  8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100
+  8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590
+  9 1590   9 1590   9 1590   9 1590}
 
 do_execsql_test 1.5 {
   SELECT a, sum(b) OVER (
     ORDER BY a RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540}
+} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550
+  0 550   1 460   1 460   1 460   1 460   1 460   1 460   1 460   1 460
+  1 460   1 460   2 470   2 470   2 470   2 470   2 470   2 470   2 470
+  2 470   2 470   2 470   3 480   3 480   3 480   3 480   3 480   3 480
+  3 480   3 480   3 480   3 480   4 490   4 490   4 490   4 490   4 490
+  4 490   4 490   4 490   4 490   4 490   5 500   5 500   5 500   5 500
+  5 500   5 500   5 500   5 500   5 500   5 500   6 510   6 510   6 510
+  6 510   6 510   6 510   6 510   6 510   6 510   6 510   7 520   7 520
+  7 520   7 520   7 520   7 520   7 520   7 520   7 520   7 520   8 530
+  8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530   8 530
+  9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540
+  9 540}
 
 do_execsql_test 1.6 {
   SELECT a, sum(b) OVER (
     ORDER BY a RANGE BETWEEN 2 PRECEDING AND 2 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590}
+} {0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480   0 1480
+  0 1480   0 1480   1 1960   1 1960   1 1960   1 1960   1 1960   1 1960
+  1 1960   1 1960   1 1960   1 1960   2 2450   2 2450   2 2450   2 2450
+  2 2450   2 2450   2 2450   2 2450   2 2450   2 2450   3 2400   3 2400
+  3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400   3 2400
+  4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450   4 2450
+  4 2450   4 2450   5 2500   5 2500   5 2500   5 2500   5 2500   5 2500
+  5 2500   5 2500   5 2500   5 2500   6 2550   6 2550   6 2550   6 2550
+  6 2550   6 2550   6 2550   6 2550   6 2550   6 2550   7 2600   7 2600
+  7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600   7 2600
+  8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100
+  8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590
+  9 1590   9 1590   9 1590   9 1590}
 
 do_execsql_test 1.7 {
   SELECT a, sum(b) OVER (
     ORDER BY a RANGE BETWEEN 2 PRECEDING AND 1 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480   2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980   6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590}
+} {0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010
+  0 1010   0 1010   1 1480   1 1480   1 1480   1 1480   1 1480   1 1480
+  1 1480   1 1480   1 1480   1 1480   2 1960   2 1960   2 1960   2 1960
+  2 1960   2 1960   2 1960   2 1960   2 1960   2 1960   3 1900   3 1900
+  3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900   3 1900
+  4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940   4 1940
+  4 1940   4 1940   5 1980   5 1980   5 1980   5 1980   5 1980   5 1980
+  5 1980   5 1980   5 1980   5 1980   6 2020   6 2020   6 2020   6 2020
+  6 2020   6 2020   6 2020   6 2020   6 2020   6 2020   7 2060   7 2060
+  7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060   7 2060
+  8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100   8 2100
+  8 2100   8 2100   9 1590   9 1590   9 1590   9 1590   9 1590   9 1590
+  9 1590   9 1590   9 1590   9 1590}
 
 do_execsql_test 1.8.1 {
   SELECT a, sum(b) OVER (
     ORDER BY a RANGE BETWEEN 0 PRECEDING AND 1 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   1 930   1 930   1 930   1 930   1 930   1 930   1 930   1 930   1 930   1 930   2 950   2 950   2 950   2 950   2 950   2 950   2 950   2 950   2 950   2 950   3 970   3 970   3 970   3 970   3 970   3 970   3 970   3 970   3 970   3 970   4 990   4 990   4 990   4 990   4 990   4 990   4 990   4 990   4 990   4 990   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   8 1070   8 1070   8 1070   8 1070   8 1070   8 1070   8 1070   8 1070   8 1070   8 1070   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540   9 540}
+} {0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010   0 1010
+  0 1010   0 1010   1 930   1 930   1 930   1 930   1 930   1 930   1 930
+  1 930   1 930   1 930   2 950   2 950   2 950   2 950   2 950   2 950
+  2 950   2 950   2 950   2 950   3 970   3 970   3 970   3 970   3 970
+  3 970   3 970   3 970   3 970   3 970   4 990   4 990   4 990   4 990
+  4 990   4 990   4 990   4 990   4 990   4 990   5 1010   5 1010   5 1010
+  5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   5 1010   6 1030
+  6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030   6 1030
+  6 1030   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050   7 1050
+  7 1050   7 1050   7 1050   8 1070   8 1070   8 1070   8 1070   8 1070
+  8 1070   8 1070   8 1070   8 1070   8 1070   9 540   9 540   9 540   9 540
+  9 540   9 540   9 540   9 540   9 540   9 540}
 
 do_execsql_test 1.8.2 {
   SELECT a, sum(b) OVER (
     ORDER BY a DESC RANGE BETWEEN 0 PRECEDING AND 1 FOLLOWING
   ) FROM t3 ORDER BY 1;
-} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   2 930   2 930   2 930   2 930   2 930   2 930   2 930   2 930   2 930   2 930   3 950   3 950   3 950   3 950   3 950   3 950   3 950   3 950   3 950   3 950   4 970   4 970   4 970   4 970   4 970   4 970   4 970   4 970   4 970   4 970   5 990   5 990   5 990   5 990   5 990   5 990   5 990   5 990   5 990   5 990   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050   9 1070   9 1070   9 1070   9 1070   9 1070   9 1070   9 1070   9 1070   9 1070   9 1070}
+} {0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550   0 550
+  0 550   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010   1 1010
+  1 1010   1 1010   1 1010   2 930   2 930   2 930   2 930   2 930   2 930
+  2 930   2 930   2 930   2 930   3 950   3 950   3 950   3 950   3 950
+  3 950   3 950   3 950   3 950   3 950   4 970   4 970   4 970   4 970
+  4 970   4 970   4 970   4 970   4 970   4 970   5 990   5 990   5 990
+  5 990   5 990   5 990   5 990   5 990   5 990   5 990   6 1010   6 1010
+  6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010   6 1010
+  7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030   7 1030
+  7 1030   7 1030   8 1050   8 1050   8 1050   8 1050   8 1050   8 1050
+  8 1050   8 1050   8 1050   8 1050   9 1070   9 1070   9 1070   9 1070
+  9 1070   9 1070   9 1070   9 1070   9 1070   9 1070}
 
 finish_test
index df1fd78ab78b8994788ae2289d21be1671edf28e..64fd98aea94d8ef7253c9a1c533384733def107d 100644 (file)
@@ -197,30 +197,55 @@ execsql_test 4.2.1 {
     ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
-
 execsql_test 4.2.2 {
+  SELECT sum(b) OVER (
+    ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+}
+
+execsql_test 4.2.3 {
   SELECT sum(b) OVER (
     ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
+execsql_test 4.2.4 {
+  SELECT sum(b) OVER (
+    ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+}
 
 execsql_test 4.3.1 {
   SELECT sum(b) OVER (
     ORDER BY a NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
+execsql_test 4.3.2 {
+  SELECT sum(b) OVER (
+    ORDER BY a NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+}
 
 execsql_test 4.4.1 {
   SELECT sum(b) OVER (
     ORDER BY a NULLS FIRST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
-
 execsql_test 4.4.2 {
+  SELECT sum(b) OVER (
+    ORDER BY a NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+}
+
+execsql_test 4.4.3 {
   SELECT sum(b) OVER (
     ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
   ) FROM t1 ORDER BY 1 NULLS FIRST;
 }
+execsql_test 4.4.4 {
+  SELECT sum(b) OVER (
+    ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+}
 
 ==========
 
@@ -248,6 +273,17 @@ foreach {tn ex} {
     6 { ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING }
     7 { ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING }
+
+    8 { RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+    9 { ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+   10 { PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
+   11 { ORDER BY a NULLS LAST GROUPS 6 PRECEDING }
+   12 { ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING }
+   13 { ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING }
+   14 { ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING }
   } {
     execsql_test 5.$tn.$tn2.1 "
       SELECT max(c) OVER win,
@@ -294,6 +330,7 @@ execsql_test 6.2 {
 }
 
 
+
 finish_test
 
 
index 829bd0b252b53de8b67f75aed75a53d88f1aae0c..e149979cd4270ae0f8b4af0358050bd14d58e535 100644 (file)
@@ -3522,31 +3522,61 @@ do_execsql_test 4.1.2 {
 do_execsql_test 4.2.1 {
   SELECT sum(b) OVER (
     ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
-  ) FROM t1 ORDER BY 1 ;
+  ) FROM t1 ORDER BY 1 NULLS FIRST;
 } {{}   {}   6   6   6}
 
 do_execsql_test 4.2.2 {
+  SELECT sum(b) OVER (
+    ORDER BY a RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+} {6   6   6   {}   {}}
+
+do_execsql_test 4.2.3 {
   SELECT sum(b) OVER (
     ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
-  ) FROM t1 ORDER BY 1 ;
+  ) FROM t1 ORDER BY 1 NULLS FIRST;
 } {{}   {}   6   6   6}
 
+do_execsql_test 4.2.4 {
+  SELECT sum(b) OVER (
+    ORDER BY a DESC RANGE BETWEEN 5 FOLLOWING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+} {6   6   6   {}   {}}
+
 do_execsql_test 4.3.1 {
   SELECT sum(b) OVER (
-    ORDER BY a  RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING
-  ) FROM t1 ORDER BY 1 ;
+    ORDER BY a NULLS FIRST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS FIRST;
 } {6   6   6   15   15}
 
+do_execsql_test 4.3.2 {
+  SELECT sum(b) OVER (
+    ORDER BY a NULLS LAST RANGE BETWEEN UNBOUNDED PRECEDING AND 10 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+} {9   9   15   15   15}
+
 do_execsql_test 4.4.1 {
   SELECT sum(b) OVER (
-    ORDER BY a  ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-  ) FROM t1 ORDER BY 1 ;
+    ORDER BY a NULLS FIRST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS FIRST;
 } {3   6   9   9   12}
 
 do_execsql_test 4.4.2 {
   SELECT sum(b) OVER (
-    ORDER BY a DESC  ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-  ) FROM t1 ORDER BY 1 ;
+    ORDER BY a NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
+} {5   6   8   9   10}
+
+do_execsql_test 4.4.3 {
+  SELECT sum(b) OVER (
+    ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS FIRST;
+} {5   6   8   9   10}
+
+do_execsql_test 4.4.4 {
+  SELECT sum(b) OVER (
+    ORDER BY a DESC NULLS LAST ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+  ) FROM t1 ORDER BY 1 NULLS LAST;
 } {5   6   8   9   10}
 
 #==========================================================================
@@ -3564,7 +3594,7 @@ do_execsql_test 5.1.1.1 {
              count(a) OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
@@ -3587,7 +3617,7 @@ do_execsql_test 5.1.1.2 {
              dense_rank() OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
@@ -3609,9 +3639,9 @@ do_execsql_test 5.1.2.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {899 113 9   899 113 9   899 113 9   899 113 9   899 113 9   899 113 9
   899 113 9   899 113 9   899 113 9   899 113 16   899 113 16   899 113 16
   899 113 16   899 113 16   899 113 16   899 113 16   979 102 44   979 102 44
@@ -3633,9 +3663,9 @@ do_execsql_test 5.1.2.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {2947 81 11   2947 81 11   2947 81 11   2947 81 11   2947 81 11   2947 81 11
   2947 81 11   2947 81 11   2947 81 11   5287 74 10   5287 74 10   5287 74 10
   5287 74 10   5287 74 10   5287 74 10   5287 74 10   8400 65 9   8400 65 9
@@ -3659,7 +3689,7 @@ do_execsql_test 5.1.3.1 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {777 113 5   777 113 5   777 113 5   777 113 5   777 113 5   805 250 7
   805 250 7   805 250 7   805 250 7   805 250 7   805 250 7   805 250 7
   822 158 6   822 158 6   822 158 6   822 158 6   822 158 6   822 158 6
@@ -3683,7 +3713,7 @@ do_execsql_test 5.1.3.2 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   962 1 1
   962 1 1   962 1 1   962 1 1   962 1 1   1264 1 1   1264 1 1   1264 1 1
   1264 1 1   1264 1 1   1264 1 1   1264 1 1   1264 1 1   1366 1 1   1366 1 1
@@ -3703,8 +3733,8 @@ do_execsql_test 5.1.4.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {870 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0
   934 158 8   934 158 8   934 158 8   934 158 8   934 158 8   934 158 8
   934 158 8   934 158 8   934 158 21   934 158 21   934 158 21   934 158 21
@@ -3726,8 +3756,8 @@ do_execsql_test 5.1.4.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {2050 1 1   2050 1 1   2050 1 1   2050 1 1   2050 1 1   2050 1 1   4359 7 2
   4359 7 2   4359 7 2   4359 7 2   4359 7 2   4359 7 2   4359 7 2   4359 7 2
   7840 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3
@@ -3750,8 +3780,8 @@ do_execsql_test 5.1.5.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 2   113 113 2   133 133 1   148 148 1   160 158 2
   160 158 2   160 158 2   208 208 1   224 223 2   224 223 2   239 234 3
   239 234 3   239 234 3   252 247 3   257 247 5   257 247 5   257 250 4
@@ -3773,8 +3803,8 @@ do_execsql_test 5.1.5.2 {
              rank() OVER win,
              dense_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 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 25 23   {} 34 29
   {} 36 31   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 43 37   {} 43 37
   {} 50 42   {} 60 51   {} 61 52   {} 64 55   {} 64 55   {} 67 57   {} 68 58
@@ -3795,8 +3825,8 @@ do_execsql_test 5.1.6.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 2   113 113 2   133 133 1   148 148 1   158 158 1
   158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
   238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
@@ -3818,8 +3848,8 @@ do_execsql_test 5.1.6.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 11 9   {} 12 10
   {} 13 11   {} 16 14   {} 17 15   {} 18 16   {} 22 20   {} 24 22   {} 25 23
   {} 26 24   {} 31 27   {} 34 29   {} 36 31   {} 38 33   {} 38 33   {} 40 34
@@ -3840,9 +3870,9 @@ do_execsql_test 5.1.7.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
   979 102 83   979 113 81   979 113 82   979 133 80   979 148 79   979 158 77
   979 158 78   979 160 77   979 208 76   979 223 75   979 224 74   979 234 73
@@ -3864,9 +3894,9 @@ do_execsql_test 5.1.7.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {3830 89 89   4741 88 88   5640 84 84   5640 85 85   5640 86 86   5640 87 87
   6485 81 81   6485 82 82   6485 83 83   7324 80 80   8163 78 78   8163 79 79
   8968 73 73   8968 74 74   8968 75 75   8968 76 76   8968 77 77   9745 69 69
@@ -3885,43 +3915,43 @@ do_execsql_test 5.1.7.2 {
   22796 16 16   22929 10 10   23042 9 9   23155 1 1   23155 2 2   23155 3 3
   23155 4 4   23155 5 5   23155 6 6   23155 7 7   23155 8 8}
 
-do_execsql_test 5.2.1.1 {
+do_execsql_test 5.1.8.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {963 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 83   979 102 83
-  979 102 83   979 102 83   979 102 83   979 102 83   979 113 82}
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83}
 
-do_execsql_test 5.2.1.2 {
+do_execsql_test 5.1.8.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {22176 1 1   22192 1 1   22196 1 1   22226 1 1   22244 1 1   22256 1 1
-  22310 1 1   22316 1 1   22316 1 1   22350 1 1   22378 1 1   22396 1 1
-  22444 1 1   22450 1 1   22472 1 1   22484 1 1   22488 1 1   22488 1 1
-  22522 1 1   22526 1 1   22526 1 1   22528 1 1   22548 1 1   22712 1 1
-  22734 1 1   22756 1 1   22756 1 1   22762 1 1   22762 1 1   22800 1 1
-  22800 1 1   22820 1 1   22846 1 1   22860 1 1   22898 1 1   22908 1 1
-  22916 1 1   22932 1 1   23022 1 1   23042 1 1   23042 1 1   23155 1 1
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
@@ -3931,185 +3961,836 @@ do_execsql_test 5.2.1.2 {
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1}
 
-do_execsql_test 5.2.2.1 {
+do_execsql_test 5.1.9.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
-        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {839 113 8   899 113 8   899 113 8   899 113 8   899 113 8   899 113 8
-  899 113 8   899 113 8   899 113 15   899 113 15   899 113 15   899 113 15
-  899 113 15   899 113 15   899 113 15   899 234 8   963 113 24   979 102 43
-  979 102 43   979 102 43   979 102 43   979 102 43   979 102 43   979 102 43
-  979 102 43   979 102 43   979 102 43   979 102 48   979 102 48   979 102 48
-  979 102 48   979 102 48   979 102 55   979 102 55   979 102 55   979 102 55
-  979 102 55   979 102 55   979 102 55   979 102 61   979 102 61   979 102 61
-  979 102 61   979 102 61   979 102 61   979 102 74   979 102 74   979 102 74
-  979 102 74   979 102 74   979 102 74   979 102 74   979 102 74   979 102 74
-  979 102 74   979 102 74   979 102 74   979 102 74   979 102 82   979 102 82
-  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {870 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0
+  899 113 9   899 113 9   899 113 9   899 113 9   899 113 9   899 113 9
+  899 113 9   899 113 9   899 113 9   899 113 16   899 113 16   899 113 16
+  899 113 16   899 113 16   899 113 16   899 113 16   979 102 44   979 102 44
+  979 102 44   979 102 44   979 102 44   979 102 44   979 102 44   979 102 44
+  979 102 44   979 102 44   979 102 44   979 102 49   979 102 49   979 102 49
+  979 102 49   979 102 49   979 102 56   979 102 56   979 102 56   979 102 56
+  979 102 56   979 102 56   979 102 56   979 102 62   979 102 62   979 102 62
+  979 102 62   979 102 62   979 102 62   979 102 75   979 102 75   979 102 75
+  979 102 75   979 102 75   979 102 75   979 102 75   979 102 75   979 102 75
+  979 102 75   979 102 75   979 102 75   979 102 75   979 102 83   979 102 83
   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
-  979 113 24   979 113 24   979 113 24   979 113 24   979 113 24   979 113 24
-  979 113 24   979 113 24   979 113 32   979 113 32   979 113 32   979 113 32
-  979 113 32   979 113 32   979 113 32   979 113 32   979 113 43}
+  979 113 25   979 113 25   979 113 25   979 113 25   979 113 25   979 113 25
+  979 113 25   979 113 25   979 113 25   979 113 33   979 113 33   979 113 33
+  979 113 33   979 113 33   979 113 33   979 113 33   979 113 33}
 
-do_execsql_test 5.2.2.2 {
+do_execsql_test 5.1.9.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_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 , 3
-} {2048 81 11   2108 81 11   2108 81 11   2690 81 11   2834 81 11   2947 81 11
-  2947 81 11   2947 81 11   2947 81 11   4482 74 10   4616 74 10   4844 74 10
-  4866 74 10   5287 74 10   5287 74 10   5287 74 10   7421 65 9   7437 65 9
-  7717 65 9   8045 65 9   8267 65 9   8400 65 9   8400 65 9   8400 65 9
-  8400 65 9   8735 57 8   9329 57 8   9664 57 8   9664 57 8   9664 57 8
-  9664 57 8   9664 57 8   9664 57 8   9959 46 7   10331 46 7   10626 46 7
-  10626 46 7   10626 46 7   10626 46 7   10626 46 7   10626 46 7   10626 46 7
-  10626 46 7   10626 46 7   11368 41 6   11516 41 6   12032 41 6   12145 41 6
-  12145 41 6   12990 34 5   13104 34 5   13949 34 5   13949 34 5   13949 34 5
-  13949 34 5   13949 34 5   14556 28 4   14708 28 4   15315 28 4   15315 28 4
-  15315 28 4   15315 28 4   18085 15 3   18091 15 3   18163 15 3   18397 15 3
-  18403 15 3   18403 15 3   18549 15 3   18796 15 3   18796 15 3   18796 15 3
-  18796 15 3   18796 15 3   18796 15 3   20194 7 2   20478 7 2   20796 7 2
-  20866 7 2   20882 7 2   21105 7 2   21105 7 2   21105 7 2   22488 1 1
-  22526 1 1   22756 1 1   22800 1 1   23155 1 1   23155 1 1}
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {2050 84 11   2050 84 11   2050 84 11   2050 84 11   2050 84 11   2050 84 11
+  4997 75 10   4997 75 10   4997 75 10   4997 75 10   4997 75 10   4997 75 10
+  4997 75 10   4997 75 10   4997 75 10   7337 68 9   7337 68 9   7337 68 9
+  7337 68 9   7337 68 9   7337 68 9   7337 68 9   10450 59 8   10450 59 8
+  10450 59 8   10450 59 8   10450 59 8   10450 59 8   10450 59 8   10450 59 8
+  10450 59 8   11714 51 7   11714 51 7   11714 51 7   11714 51 7   11714 51 7
+  11714 51 7   11714 51 7   11714 51 7   12676 40 6   12676 40 6   12676 40 6
+  12676 40 6   12676 40 6   12676 40 6   12676 40 6   12676 40 6   12676 40 6
+  12676 40 6   12676 40 6   14195 35 5   14195 35 5   14195 35 5   14195 35 5
+  14195 35 5   15999 28 4   15999 28 4   15999 28 4   15999 28 4   15999 28 4
+  15999 28 4   15999 28 4   17365 22 3   17365 22 3   17365 22 3   17365 22 3
+  17365 22 3   17365 22 3   20846 9 2   20846 9 2   20846 9 2   20846 9 2
+  20846 9 2   20846 9 2   20846 9 2   20846 9 2   20846 9 2   20846 9 2
+  20846 9 2   20846 9 2   20846 9 2   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1}
 
-do_execsql_test 5.2.3.1 {
+do_execsql_test 5.1.10.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) 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 , 3
-} {667 158 0   671 250 6   759 158 5   768 113 4   777 113 4   777 113 4
-  777 113 4   777 252 4   792 247 12   805 250 6   805 250 6   805 250 6
-  805 250 6   805 250 6   805 398 6   822 158 5   822 158 5   822 158 5
-  822 158 5   822 346 5   839 113 8   840 247 12   840 247 12   840 247 12
-  840 247 12   840 247 12   840 247 12   840 247 12   840 247 12   840 247 12
-  840 247 12   840 247 12   840 393 12   845 224 6   870 102 10   870 158 0
-  870 158 0   870 158 0   870 158 0   870 355 0   899 113 8   899 113 8
-  899 113 8   899 113 8   899 113 8   899 113 8   899 113 8   899 234 8
-  911 223 7   929 148 7   934 223 7   934 223 7   934 223 7   934 223 7
-  934 223 7   934 223 7   934 239 7   938 102 10   938 102 10   938 102 10
-  938 102 10   938 102 10   938 102 10   938 102 10   938 102 10   938 102 10
-  938 148 7   938 148 7   938 148 7   938 148 7   938 148 7   938 148 7
-  938 160 7   938 208 10   959 224 6   959 224 6   959 224 6   959 224 6
-  959 224 6   959 238 6   963 133 8   979 133 8   979 133 8   979 133 8
-  979 133 8   979 133 8   979 133 8   979 133 8   979 330 8}
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {777 113 5   777 113 5   777 113 5   777 113 5   777 113 5   805 250 7
+  805 250 7   805 250 7   805 250 7   805 250 7   805 250 7   805 250 7
+  822 158 6   822 158 6   822 158 6   822 158 6   822 158 6   822 158 6
+  840 247 13   840 247 13   840 247 13   840 247 13   840 247 13   840 247 13
+  840 247 13   840 247 13   840 247 13   840 247 13   840 247 13   840 247 13
+  840 247 13   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0
+  870 158 0   899 113 9   899 113 9   899 113 9   899 113 9   899 113 9
+  899 113 9   899 113 9   899 113 9   899 113 9   934 223 8   934 223 8
+  934 223 8   934 223 8   934 223 8   934 223 8   934 223 8   934 223 8
+  938 102 11   938 102 11   938 102 11   938 102 11   938 102 11   938 102 11
+  938 102 11   938 102 11   938 102 11   938 102 11   938 102 11   938 148 8
+  938 148 8   938 148 8   938 148 8   938 148 8   938 148 8   938 148 8
+  938 148 8   959 224 7   959 224 7   959 224 7   959 224 7   959 224 7
+  959 224 7   959 224 7   979 133 9   979 133 9   979 133 9   979 133 9
+  979 133 9   979 133 9   979 133 9   979 133 9   979 133 9}
 
-do_execsql_test 5.2.3.2 {
+do_execsql_test 5.1.10.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_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 , 3
-} {295 1 1   335 1 1   607 1 1   667 1 1   742 1 1   759 1 1   845 1 1
-  890 1 1   929 1 1   959 1 1   962 1 1   962 1 1   962 1 1   962 1 1
-  962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   1264 1 1   1264 1 1
-  1264 1 1   1264 1 1   1264 1 1   1264 1 1   1366 1 1   1366 1 1   1366 1 1
-  1366 1 1   1383 1 1   1398 1 1   1406 1 1   1421 1 1   1519 1 1   1519 1 1
-  1535 1 1   1651 1 1   1669 1 1   1682 1 1   1695 1 1   1804 1 1   1804 1 1
-  1804 1 1   1804 1 1   1804 1 1   1897 1 1   1919 1 1   2000 1 1   2048 1 1
-  2050 1 1   2050 1 1   2070 1 1   2086 1 1   2108 1 1   2108 1 1   2134 1 1
-  2150 1 1   2309 1 1   2309 1 1   2309 1 1   2340 1 1   2340 1 1   2340 1 1
-  2430 1 1   2690 1 1   2758 1 1   2770 1 1   2776 1 1   2834 1 1   2848 1 1
-  2947 1 1   2947 1 1   2947 1 1   2947 1 1   2980 1 1   3082 1 1   3088 1 1
-  3088 1 1   3113 1 1   3113 1 1   3113 1 1   3113 1 1   3234 1 1   3481 1 1
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   962 1 1
+  962 1 1   962 1 1   962 1 1   962 1 1   1264 1 1   1264 1 1   1264 1 1
+  1264 1 1   1264 1 1   1264 1 1   1264 1 1   1264 1 1   1366 1 1   1366 1 1
+  1366 1 1   1366 1 1   1366 1 1   1366 1 1   1519 1 1   1519 1 1   1519 1 1
+  1519 1 1   1519 1 1   1804 1 1   1804 1 1   1804 1 1   1804 1 1   1804 1 1
+  1804 1 1   1804 1 1   2050 1 1   2050 1 1   2050 1 1   2050 1 1   2050 1 1
+  2050 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1
+  2309 1 1   2309 1 1   2340 1 1   2340 1 1   2340 1 1   2340 1 1   2340 1 1
+  2340 1 1   2340 1 1   2947 1 1   2947 1 1   2947 1 1   2947 1 1   2947 1 1
+  2947 1 1   2947 1 1   2947 1 1   2947 1 1   3113 1 1   3113 1 1   3113 1 1
+  3113 1 1   3113 1 1   3113 1 1   3113 1 1   3113 1 1   3113 1 1   3481 1 1
+  3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1
   3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1}
 
-do_execsql_test 5.2.4.1 {
+do_execsql_test 5.1.11.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {667 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 355 0
-  911 158 7   934 158 7   934 158 7   934 158 7   934 158 7   934 158 7
-  934 158 7   934 158 7   934 158 20   934 158 20   934 158 20   934 158 20
-  934 158 20   934 158 20   934 158 20   934 158 20   934 158 20   934 158 20
-  934 158 20   934 158 20   934 158 20   934 158 26   934 158 26   934 158 26
-  934 158 26   934 158 26   934 158 26   934 158 33   959 102 49   959 102 49
-  959 102 49   959 102 49   959 102 49   959 102 49   959 102 49   959 102 49
-  959 102 49   959 102 49   959 102 57   959 102 57   959 102 57   959 102 57
-  959 102 57   959 102 57   959 102 57   959 102 57   959 113 38   959 113 38
-  959 113 38   959 113 38   959 113 49   959 158 33   959 158 33   959 158 33
-  959 158 33   959 158 33   959 158 33   959 158 38   963 102 58   979 102 52
-  979 102 52   979 102 52   979 102 52   979 102 52   979 102 52   979 102 52
-  979 102 55   979 102 55   979 102 55   979 102 55   979 102 55   979 102 55
-  979 102 55   979 102 55   979 102 55   979 102 58   979 102 58   979 102 58
-  979 102 58   979 102 58   979 102 58   979 102 58   979 102 58}
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {934 158 27   934 158 27   934 158 27   934 158 27   934 158 27   934 158 27
+  934 223 8   934 223 8   934 223 8   934 223 8   934 223 8   934 223 8
+  934 223 8   934 223 8   934 223 21   934 223 21   934 223 21   934 223 21
+  934 223 21   934 223 21   934 223 21   934 223 21   934 223 21   934 223 21
+  934 223 21   934 223 21   934 223 21   959 102 50   959 102 50   959 102 50
+  959 102 50   959 102 50   959 102 50   959 102 50   959 102 50   959 102 50
+  959 102 50   959 102 50   959 102 58   959 102 58   959 102 58   959 102 58
+  959 102 58   959 102 58   959 102 58   959 102 58   959 113 39   959 113 39
+  959 113 39   959 113 39   959 113 39   959 158 34   959 158 34   959 158 34
+  959 158 34   959 158 34   959 158 34   959 158 34   979 102 49   979 102 49
+  979 102 49   979 102 49   979 102 49   979 102 49   979 102 53   979 102 53
+  979 102 53   979 102 53   979 102 53   979 102 53   979 102 53   979 102 56
+  979 102 56   979 102 56   979 102 56   979 102 56   979 102 56   979 102 56
+  979 102 56   979 102 56   979 102 59   979 102 59   979 102 59   979 102 59
+  979 102 59   979 102 59   979 102 59   979 102 59   979 102 59}
 
-do_execsql_test 5.2.4.2 {
+do_execsql_test 5.1.11.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {1383 1 1   1421 1 1   1651 1 1   1695 1 1   2050 1 1   2050 1 1   3448 7 2
-  3732 7 2   4050 7 2   4120 7 2   4136 7 2   4359 7 2   4359 7 2   4359 7 2
-  7129 15 3   7135 15 3   7207 15 3   7441 15 3   7447 15 3   7447 15 3
-  7593 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3
-  7840 15 3   8447 28 4   8599 28 4   9206 28 4   9206 28 4   9206 28 4
-  9206 28 4   10051 34 5   10165 34 5   11010 34 5   11010 34 5   11010 34 5
-  11010 34 5   11010 34 5   11563 74 10   11697 74 10   11752 41 6
-  11776 57 8   11900 41 6   11925 74 10   11947 74 10   12368 74 10
-  12368 74 10   12368 74 10   12370 57 8   12416 41 6   12529 41 6
-  12529 41 6   12530 65 9   12546 65 9   12705 57 8   12705 57 8   12705 57 8
-  12705 57 8   12705 57 8   12705 57 8   12824 46 7   12826 65 9
-  13050 81 11   13110 81 11   13110 81 11   13154 65 9   13196 46 7
-  13376 65 9   13491 46 7   13491 46 7   13491 46 7   13491 46 7   13491 46 7
-  13491 46 7   13491 46 7   13491 46 7   13491 46 7   13509 65 9   13509 65 9
-  13509 65 9   13509 65 9   13692 81 11   13836 81 11   13949 81 11
-  13949 81 11   13949 81 11   13949 81 11}
-
-do_execsql_test 5.2.5.1 {
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {2309 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1   2309 1 1
+  2309 1 1   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2
+  5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2
+  7156 22 3   7156 22 3   7156 22 3   7156 22 3   7156 22 3   7156 22 3
+  8960 28 4   8960 28 4   8960 28 4   8960 28 4   8960 28 4   8960 28 4
+  8960 28 4   10479 35 5   10479 35 5   10479 35 5   10479 35 5   10479 35 5
+  11441 40 6   11441 40 6   11441 40 6   11441 40 6   11441 40 6   11441 40 6
+  11441 40 6   11441 40 6   11441 40 6   11441 40 6   11441 40 6   12368 68 9
+  12368 68 9   12368 68 9   12368 68 9   12368 68 9   12368 68 9   12368 68 9
+  12705 51 7   12705 51 7   12705 51 7   12705 51 7   12705 51 7   12705 51 7
+  12705 51 7   12705 51 7   13509 59 8   13509 59 8   13509 59 8   13509 59 8
+  13509 59 8   13509 59 8   13509 59 8   13509 59 8   13509 59 8
+  13949 75 10   13949 75 10   13949 75 10   13949 75 10   13949 75 10
+  13949 75 10   13949 75 10   13949 75 10   13949 75 10   14195 84 11
+  14195 84 11   14195 84 11   14195 84 11   14195 84 11   14195 84 11}
+
+do_execsql_test 5.1.12.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
-} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
-  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
-  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   113 113 1
-  113 113 1   158 158 1   160 158 1   160 158 2   223 223 1   224 224 1
-  238 234 2   239 234 2   239 238 2   252 250 2   256 252 2   257 247 4
-  257 247 4   257 250 3   335 330 2   336 330 2   336 335 2   355 354 1
-  355 354 2   355 355 1   399 393 3   399 393 3   399 393 3   399 393 3
-  399 393 4   480 480 1   480 480 1   572 572 1   574 574 1   618 618 1
-  618 618 1   633 629 2   634 627 3   634 627 3   634 627 4   634 629 3
-  667 667 1   670 667 2   671 667 2   671 667 2   671 667 3   711 711 1
-  711 711 1   716 705 2   726 726 1   730 730 1   762 762 1   768 759 3
-  768 762 2   768 762 2   792 790 2   792 790 2   794 786 3   794 786 3
-  844 839 4   845 839 4   845 839 4   845 839 4   845 839 4   870 870 1
-  870 870 1   870 870 2   934 934 1   938 929 3   938 934 2   938 934 2
-  959 959 1   963 963 1}
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 2   113 113 2   133 133 1   148 148 1   160 158 2
+  160 158 2   160 158 2   208 208 1   224 223 2   224 223 2   239 234 3
+  239 234 3   239 234 3   252 247 3   257 247 5   257 247 5   257 250 4
+  257 252 3   295 295 1   309 309 1   336 330 3   336 330 3   336 330 3
+  346 346 1   355 354 2   355 354 2   355 354 2   399 393 4   399 393 4
+  399 393 4   399 393 4   399 393 4   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 2   480 480 2   574 572 2   574 572 2   607 607 1
+  618 618 2   618 618 2   634 627 4   634 627 4   634 627 4   634 627 4
+  634 629 3   652 652 1   667 660 2   671 667 3   671 667 3   671 667 3
+  671 667 3   683 683 1   711 705 2   716 705 3   716 711 2   730 726 2
+  730 726 2   762 759 2   768 759 4   768 762 3   768 762 3   777 777 1
+  792 786 3   794 786 4   794 786 4   794 790 3   805 805 1   822 822 1
+  845 839 5   845 839 5   845 839 5   845 839 5   845 839 5   870 870 2
+  870 870 2   870 870 2   899 899 1   911 911 1   934 929 2   938 929 4
+  938 934 3   938 934 3   963 959 2   963 959 2   979 979 1}
 
-do_execsql_test 5.2.5.2 {
+do_execsql_test 5.1.12.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_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 , 3
-} {{} 1 1   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 10 8
-  {} 14 12   {} 15 13   {} 19 17   {} 20 18   {} 21 19   {} 23 21   {} 25 23
-  {} 34 29   {} 35 30   {} 36 31   {} 37 32   {} 38 33   {} 38 33   {} 40 34
-  {} 41 35   {} 42 36   {} 43 37   {} 43 37   {} 50 42   {} 56 47   {} 60 51
-  {} 61 52   {} 62 53   {} 64 55   {} 64 55   {} 66 56   {} 67 57   {} 68 58
-  {} 69 59   {} 70 60   {} 71 61   {} 72 62   {} 78 67   {} 78 67   {} 78 67
-  {} 81 68   {} 82 69   {} 83 70   {} 85 72   {} 85 72   {} 89 75   113 2 2
-  113 2 2   223 11 9   239 12 10   239 13 11   257 18 16   335 22 20
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 25 23   {} 34 29
+  {} 36 31   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 43 37   {} 43 37
+  {} 50 42   {} 60 51   {} 61 52   {} 64 55   {} 64 55   {} 67 57   {} 68 58
+  {} 69 59   {} 70 60   {} 72 62   {} 78 67   {} 78 67   {} 78 67   {} 85 72
+  {} 85 72   133 4 3   223 10 8   223 11 9   226 2 2   226 2 2   239 12 10
+  239 13 11   239 14 12   247 15 13   257 18 16   257 19 17   295 20 18
+  309 21 19   335 22 20   335 23 21   335 24 22   421 35 30   443 37 32
+  504 16 14   504 17 15   607 42 36   683 56 47   710 26 24   710 27 25
+  710 27 25   711 59 50   759 62 53   759 63 54   777 66 56   805 71 61
+  899 81 68   911 82 69   929 83 70   929 84 71   979 89 75   1334 51 43
+  1416 57 48   1416 58 49   1584 29 26   1584 29 26   1584 31 27   1584 32 28
+  1584 32 28   1891 49 41   1922 87 73   1922 88 74   2005 52 44   2005 52 44
+  2005 54 45   2005 55 46   2518 45 38   2518 46 39   2518 46 39   2518 48 40
+  2523 73 63   2523 73 63   2523 75 64   2523 76 65   2523 77 66}
+
+do_execsql_test 5.1.13.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 2   113 113 2   133 133 1   148 148 1   158 158 1
+  158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
+  238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
+  257 257 1   295 295 1   309 309 1   330 330 1   335 335 1   336 336 1
+  346 346 1   354 354 1   355 355 1   355 355 1   393 393 2   393 393 2
+  398 398 1   399 399 1   399 399 1   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 2   480 480 2   572 572 1   574 574 1   607 607 1
+  618 618 2   618 618 2   627 627 1   629 629 1   629 629 1   633 633 1
+  634 634 1   652 652 1   660 660 1   667 667 1   667 667 1   670 670 1
+  671 671 1   683 683 1   705 705 1   711 711 1   716 716 1   726 726 1
+  730 730 1   759 759 1   762 762 1   768 768 2   768 768 2   777 777 1
+  786 786 1   790 790 1   792 792 1   794 794 1   805 805 1   822 822 1
+  839 839 2   839 839 2   840 840 1   844 844 1   845 845 1   870 870 2
+  870 870 2   870 870 2   899 899 1   911 911 1   929 929 1   934 934 1
+  938 938 2   938 938 2   959 959 1   963 963 1   979 979 1}
+
+do_execsql_test 5.1.13.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 11 9   {} 12 10
+  {} 13 11   {} 16 14   {} 17 15   {} 18 16   {} 22 20   {} 24 22   {} 25 23
+  {} 26 24   {} 31 27   {} 34 29   {} 36 31   {} 38 33   {} 38 33   {} 40 34
+  {} 41 35   {} 43 37   {} 43 37   {} 49 41   {} 50 42   {} 51 43   {} 54 45
+  {} 59 50   {} 60 51   {} 61 52   {} 63 54   {} 64 55   {} 64 55   {} 67 57
+  {} 68 58   {} 69 59   {} 70 60   {} 72 62   {} 75 64   {} 76 65   {} 78 67
+  {} 78 67   {} 78 67   {} 84 71   {} 85 72   {} 85 72   133 4 3   223 10 8
+  226 2 2   226 2 2   239 14 12   247 15 13   257 19 17   295 20 18
+  309 21 19   335 23 21   421 35 30   443 37 32   607 42 36   627 45 38
+  633 48 40   671 55 46   683 56 47   705 57 48   710 27 25   710 27 25
+  711 58 49   759 62 53   777 66 56   786 29 26   786 29 26   798 32 28
+  798 32 28   805 71 61   845 77 66   899 81 68   911 82 69   929 83 70
+  959 87 73   963 88 74   979 89 75   1258 46 39   1258 46 39   1334 52 44
+  1334 52 44   1678 73 63   1678 73 63}
+
+do_execsql_test 5.1.14.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 113 81   979 113 82   979 133 80   979 148 79   979 158 77
+  979 158 78   979 160 77   979 208 76   979 223 75   979 224 74   979 234 73
+  979 238 72   979 239 71   979 247 70   979 250 69   979 252 68   979 256 67
+  979 257 66   979 295 65   979 309 64   979 330 63   979 335 62   979 336 61
+  979 346 60   979 354 59   979 355 57   979 355 58   979 393 56   979 393 57
+  979 398 55   979 399 53   979 399 54   979 412 53   979 421 52   979 430 51
+  979 443 50   979 480 48   979 480 49   979 572 47   979 574 46   979 607 45
+  979 618 43   979 618 44   979 627 42   979 629 40   979 629 41   979 633 40
+  979 634 39   979 652 38   979 660 37   979 667 35   979 667 36   979 670 35
+  979 671 34   979 683 33   979 705 32   979 711 31   979 716 30   979 726 29
+  979 730 28   979 759 27   979 762 26   979 768 24   979 768 25   979 777 23
+  979 786 22   979 790 21   979 792 20   979 794 19   979 805 18   979 822 17
+  979 839 15   979 839 16   979 840 14   979 844 13   979 845 12   979 870 9
+  979 870 10   979 870 11   979 899 9   979 911 8   979 929 7}
+
+do_execsql_test 5.1.14.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE NO OTHERS  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {3830 89 89   4741 88 88   5640 84 84   5640 85 85   5640 86 86   5640 87 87
+  6485 81 81   6485 82 82   6485 83 83   7324 80 80   8163 78 78   8163 79 79
+  8968 73 73   8968 74 74   8968 75 75   8968 76 76   8968 77 77   9745 69 69
+  9745 70 70   9745 71 71   9745 72 72   10504 65 65   10504 66 66
+  10504 67 67   10504 68 68   11215 64 64   11920 63 63   12603 62 62
+  13274 60 60   13274 61 61   13941 59 59   14608 55 55   14608 56 56
+  14608 57 57   14608 58 58   15241 54 54   15870 53 53   16499 52 52
+  17126 49 49   17126 50 50   17126 51 51   17733 44 44   17733 45 45
+  17733 46 46   17733 47 47   17733 48 48   18176 42 42   18176 43 43
+  18597 40 40   18597 41 41   18996 39 39   19395 37 37   19395 38 38
+  19788 36 36   20181 35 35   20536 34 34   20891 30 30   20891 31 31
+  20891 32 32   20891 33 33   21226 28 28   21226 29 29   21535 27 27
+  21830 26 26   22087 22 22   22087 23 23   22087 24 24   22087 25 25
+  22334 21 21   22573 17 17   22573 18 18   22573 19 19   22573 20 20
+  22796 11 11   22796 12 12   22796 13 13   22796 14 14   22796 15 15
+  22796 16 16   22929 10 10   23042 9 9   23155 1 1   23155 2 2   23155 3 3
+  23155 4 4   23155 5 5   23155 6 6   23155 7 7   23155 8 8}
+
+do_execsql_test 5.2.1.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {963 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 113 82}
+
+do_execsql_test 5.2.1.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {22176 1 1   22192 1 1   22196 1 1   22226 1 1   22244 1 1   22256 1 1
+  22310 1 1   22316 1 1   22316 1 1   22350 1 1   22378 1 1   22396 1 1
+  22444 1 1   22450 1 1   22472 1 1   22484 1 1   22488 1 1   22488 1 1
+  22522 1 1   22526 1 1   22526 1 1   22528 1 1   22548 1 1   22712 1 1
+  22734 1 1   22756 1 1   22756 1 1   22762 1 1   22762 1 1   22800 1 1
+  22800 1 1   22820 1 1   22846 1 1   22860 1 1   22898 1 1   22908 1 1
+  22916 1 1   22932 1 1   23022 1 1   23042 1 1   23042 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1}
+
+do_execsql_test 5.2.2.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {839 113 8   899 113 8   899 113 8   899 113 8   899 113 8   899 113 8
+  899 113 8   899 113 8   899 113 15   899 113 15   899 113 15   899 113 15
+  899 113 15   899 113 15   899 113 15   899 234 8   963 113 24   979 102 43
+  979 102 43   979 102 43   979 102 43   979 102 43   979 102 43   979 102 43
+  979 102 43   979 102 43   979 102 43   979 102 48   979 102 48   979 102 48
+  979 102 48   979 102 48   979 102 55   979 102 55   979 102 55   979 102 55
+  979 102 55   979 102 55   979 102 55   979 102 61   979 102 61   979 102 61
+  979 102 61   979 102 61   979 102 61   979 102 74   979 102 74   979 102 74
+  979 102 74   979 102 74   979 102 74   979 102 74   979 102 74   979 102 74
+  979 102 74   979 102 74   979 102 74   979 102 74   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 113 24   979 113 24   979 113 24   979 113 24   979 113 24   979 113 24
+  979 113 24   979 113 24   979 113 32   979 113 32   979 113 32   979 113 32
+  979 113 32   979 113 32   979 113 32   979 113 32   979 113 43}
+
+do_execsql_test 5.2.2.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {2048 81 11   2108 81 11   2108 81 11   2690 81 11   2834 81 11   2947 81 11
+  2947 81 11   2947 81 11   2947 81 11   4482 74 10   4616 74 10   4844 74 10
+  4866 74 10   5287 74 10   5287 74 10   5287 74 10   7421 65 9   7437 65 9
+  7717 65 9   8045 65 9   8267 65 9   8400 65 9   8400 65 9   8400 65 9
+  8400 65 9   8735 57 8   9329 57 8   9664 57 8   9664 57 8   9664 57 8
+  9664 57 8   9664 57 8   9664 57 8   9959 46 7   10331 46 7   10626 46 7
+  10626 46 7   10626 46 7   10626 46 7   10626 46 7   10626 46 7   10626 46 7
+  10626 46 7   10626 46 7   11368 41 6   11516 41 6   12032 41 6   12145 41 6
+  12145 41 6   12990 34 5   13104 34 5   13949 34 5   13949 34 5   13949 34 5
+  13949 34 5   13949 34 5   14556 28 4   14708 28 4   15315 28 4   15315 28 4
+  15315 28 4   15315 28 4   18085 15 3   18091 15 3   18163 15 3   18397 15 3
+  18403 15 3   18403 15 3   18549 15 3   18796 15 3   18796 15 3   18796 15 3
+  18796 15 3   18796 15 3   18796 15 3   20194 7 2   20478 7 2   20796 7 2
+  20866 7 2   20882 7 2   21105 7 2   21105 7 2   21105 7 2   22488 1 1
+  22526 1 1   22756 1 1   22800 1 1   23155 1 1   23155 1 1}
+
+do_execsql_test 5.2.3.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {667 158 0   671 250 6   759 158 5   768 113 4   777 113 4   777 113 4
+  777 113 4   777 252 4   792 247 12   805 250 6   805 250 6   805 250 6
+  805 250 6   805 250 6   805 398 6   822 158 5   822 158 5   822 158 5
+  822 158 5   822 346 5   839 113 8   840 247 12   840 247 12   840 247 12
+  840 247 12   840 247 12   840 247 12   840 247 12   840 247 12   840 247 12
+  840 247 12   840 247 12   840 393 12   845 224 6   870 102 10   870 158 0
+  870 158 0   870 158 0   870 158 0   870 355 0   899 113 8   899 113 8
+  899 113 8   899 113 8   899 113 8   899 113 8   899 113 8   899 234 8
+  911 223 7   929 148 7   934 223 7   934 223 7   934 223 7   934 223 7
+  934 223 7   934 223 7   934 239 7   938 102 10   938 102 10   938 102 10
+  938 102 10   938 102 10   938 102 10   938 102 10   938 102 10   938 102 10
+  938 148 7   938 148 7   938 148 7   938 148 7   938 148 7   938 148 7
+  938 160 7   938 208 10   959 224 6   959 224 6   959 224 6   959 224 6
+  959 224 6   959 238 6   963 133 8   979 133 8   979 133 8   979 133 8
+  979 133 8   979 133 8   979 133 8   979 133 8   979 330 8}
+
+do_execsql_test 5.2.3.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_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 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {295 1 1   335 1 1   607 1 1   667 1 1   742 1 1   759 1 1   845 1 1
+  890 1 1   929 1 1   959 1 1   962 1 1   962 1 1   962 1 1   962 1 1
+  962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   1264 1 1   1264 1 1
+  1264 1 1   1264 1 1   1264 1 1   1264 1 1   1366 1 1   1366 1 1   1366 1 1
+  1366 1 1   1383 1 1   1398 1 1   1406 1 1   1421 1 1   1519 1 1   1519 1 1
+  1535 1 1   1651 1 1   1669 1 1   1682 1 1   1695 1 1   1804 1 1   1804 1 1
+  1804 1 1   1804 1 1   1804 1 1   1897 1 1   1919 1 1   2000 1 1   2048 1 1
+  2050 1 1   2050 1 1   2070 1 1   2086 1 1   2108 1 1   2108 1 1   2134 1 1
+  2150 1 1   2309 1 1   2309 1 1   2309 1 1   2340 1 1   2340 1 1   2340 1 1
+  2430 1 1   2690 1 1   2758 1 1   2770 1 1   2776 1 1   2834 1 1   2848 1 1
+  2947 1 1   2947 1 1   2947 1 1   2947 1 1   2980 1 1   3082 1 1   3088 1 1
+  3088 1 1   3113 1 1   3113 1 1   3113 1 1   3113 1 1   3234 1 1   3481 1 1
+  3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1}
+
+do_execsql_test 5.2.4.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {667 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 355 0
+  911 158 7   934 158 7   934 158 7   934 158 7   934 158 7   934 158 7
+  934 158 7   934 158 7   934 158 20   934 158 20   934 158 20   934 158 20
+  934 158 20   934 158 20   934 158 20   934 158 20   934 158 20   934 158 20
+  934 158 20   934 158 20   934 158 20   934 158 26   934 158 26   934 158 26
+  934 158 26   934 158 26   934 158 26   934 158 33   959 102 49   959 102 49
+  959 102 49   959 102 49   959 102 49   959 102 49   959 102 49   959 102 49
+  959 102 49   959 102 49   959 102 57   959 102 57   959 102 57   959 102 57
+  959 102 57   959 102 57   959 102 57   959 102 57   959 113 38   959 113 38
+  959 113 38   959 113 38   959 113 49   959 158 33   959 158 33   959 158 33
+  959 158 33   959 158 33   959 158 33   959 158 38   963 102 58   979 102 52
+  979 102 52   979 102 52   979 102 52   979 102 52   979 102 52   979 102 52
+  979 102 55   979 102 55   979 102 55   979 102 55   979 102 55   979 102 55
+  979 102 55   979 102 55   979 102 55   979 102 58   979 102 58   979 102 58
+  979 102 58   979 102 58   979 102 58   979 102 58   979 102 58}
+
+do_execsql_test 5.2.4.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {1383 1 1   1421 1 1   1651 1 1   1695 1 1   2050 1 1   2050 1 1   3448 7 2
+  3732 7 2   4050 7 2   4120 7 2   4136 7 2   4359 7 2   4359 7 2   4359 7 2
+  7129 15 3   7135 15 3   7207 15 3   7441 15 3   7447 15 3   7447 15 3
+  7593 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3   7840 15 3
+  7840 15 3   8447 28 4   8599 28 4   9206 28 4   9206 28 4   9206 28 4
+  9206 28 4   10051 34 5   10165 34 5   11010 34 5   11010 34 5   11010 34 5
+  11010 34 5   11010 34 5   11563 74 10   11697 74 10   11752 41 6
+  11776 57 8   11900 41 6   11925 74 10   11947 74 10   12368 74 10
+  12368 74 10   12368 74 10   12370 57 8   12416 41 6   12529 41 6
+  12529 41 6   12530 65 9   12546 65 9   12705 57 8   12705 57 8   12705 57 8
+  12705 57 8   12705 57 8   12705 57 8   12824 46 7   12826 65 9
+  13050 81 11   13110 81 11   13110 81 11   13154 65 9   13196 46 7
+  13376 65 9   13491 46 7   13491 46 7   13491 46 7   13491 46 7   13491 46 7
+  13491 46 7   13491 46 7   13491 46 7   13491 46 7   13509 65 9   13509 65 9
+  13509 65 9   13509 65 9   13692 81 11   13836 81 11   13949 81 11
+  13949 81 11   13949 81 11   13949 81 11}
+
+do_execsql_test 5.2.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   113 113 1
+  113 113 1   158 158 1   160 158 1   160 158 2   223 223 1   224 224 1
+  238 234 2   239 234 2   239 238 2   252 250 2   256 252 2   257 247 4
+  257 247 4   257 250 3   335 330 2   336 330 2   336 335 2   355 354 1
+  355 354 2   355 355 1   399 393 3   399 393 3   399 393 3   399 393 3
+  399 393 4   480 480 1   480 480 1   572 572 1   574 574 1   618 618 1
+  618 618 1   633 629 2   634 627 3   634 627 3   634 627 4   634 629 3
+  667 667 1   670 667 2   671 667 2   671 667 2   671 667 3   711 711 1
+  711 711 1   716 705 2   726 726 1   730 730 1   762 762 1   768 759 3
+  768 762 2   768 762 2   792 790 2   792 790 2   794 786 3   794 786 3
+  844 839 4   845 839 4   845 839 4   845 839 4   845 839 4   870 870 1
+  870 870 1   870 870 2   934 934 1   938 929 3   938 934 2   938 934 2
+  959 959 1   963 963 1}
+
+do_execsql_test 5.2.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 10 8
+  {} 14 12   {} 15 13   {} 19 17   {} 20 18   {} 21 19   {} 23 21   {} 25 23
+  {} 34 29   {} 35 30   {} 36 31   {} 37 32   {} 38 33   {} 38 33   {} 40 34
+  {} 41 35   {} 42 36   {} 43 37   {} 43 37   {} 50 42   {} 56 47   {} 60 51
+  {} 61 52   {} 62 53   {} 64 55   {} 64 55   {} 66 56   {} 67 57   {} 68 58
+  {} 69 59   {} 70 60   {} 71 61   {} 72 62   {} 78 67   {} 78 67   {} 78 67
+  {} 81 68   {} 82 69   {} 83 70   {} 85 72   {} 85 72   {} 89 75   113 2 2
+  113 2 2   223 11 9   239 12 10   239 13 11   257 18 16   335 22 20
+  335 24 22   355 27 25   355 27 25   504 16 14   504 17 15   705 58 49
+  710 26 24   711 57 48   711 59 50   759 63 54   929 84 71   959 88 74
+  963 87 73   1185 32 28   1185 32 28   1191 29 26   1191 29 26   1334 51 43
+  1334 55 46   1338 52 44   1338 52 44   1584 31 27   1678 77 66   1684 73 63
+  1684 73 63   1885 48 40   1889 46 39   1889 46 39   1891 45 38   1891 49 41
+  2005 54 45   2523 75 64   2523 76 65}
+
+do_execsql_test 5.2.6.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   113 113 1
+  113 113 1   158 158 0   158 158 1   355 355 0   355 355 1   393 393 1
+  393 393 1   399 399 0   399 399 1   480 480 1   480 480 1   618 618 1
+  618 618 1   629 629 0   629 629 1   667 667 0   667 667 1   768 768 1
+  768 768 1   839 839 1   839 839 1   870 870 1   870 870 1   870 870 2
+  938 938 1   938 938 1}
+
+do_execsql_test 5.2.6.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 10 8
+  {} 11 9   {} 12 10   {} 13 11   {} 14 12   {} 15 13   {} 16 14   {} 17 15
+  {} 18 16   {} 19 17   {} 20 18   {} 21 19   {} 22 20   {} 23 21   {} 24 22
+  {} 25 23   {} 26 24   {} 31 27   {} 34 29   {} 35 30   {} 36 31   {} 37 32
+  {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 42 36   {} 43 37   {} 43 37
+  {} 45 38   {} 48 40   {} 49 41   {} 50 42   {} 51 43   {} 54 45   {} 55 46
+  {} 56 47   {} 57 48   {} 58 49   {} 59 50   {} 60 51   {} 61 52   {} 62 53
+  {} 63 54   {} 64 55   {} 64 55   {} 66 56   {} 67 57   {} 68 58   {} 69 59
+  {} 70 60   {} 71 61   {} 72 62   {} 75 64   {} 76 65   {} 77 66   {} 78 67
+  {} 78 67   {} 78 67   {} 81 68   {} 82 69   {} 83 70   {} 84 71   {} 85 72
+  {} 85 72   {} 87 73   {} 88 74   {} 89 75   113 2 2   113 2 2   355 27 25
+  355 27 25   393 29 26   393 29 26   399 32 28   399 32 28   629 46 39
+  629 46 39   667 52 44   667 52 44   839 73 63   839 73 63}
+
+do_execsql_test 5.2.7.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {963 929 6   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 83   979 113 80   979 113 81   979 113 82   979 133 79   979 148 78
+  979 158 76   979 158 77   979 160 76   979 208 75   979 223 74   979 224 73
+  979 234 72   979 238 71   979 239 70   979 247 69   979 250 68   979 252 67
+  979 256 66   979 257 65   979 295 64   979 309 64   979 330 62   979 335 61
+  979 336 60   979 346 59   979 354 59   979 355 57   979 355 57   979 393 55
+  979 393 56   979 398 54   979 399 53   979 399 53   979 412 52   979 421 51
+  979 430 50   979 443 49   979 480 47   979 480 48   979 572 47   979 574 45
+  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 41
+  979 633 39   979 634 38   979 652 37   979 660 36   979 667 35   979 667 35
+  979 670 34   979 671 33   979 683 32   979 705 31   979 711 30   979 716 29
+  979 726 28   979 730 27   979 759 26   979 762 25   979 768 23   979 768 24
+  979 777 22   979 786 21   979 790 20   979 792 19   979 794 18   979 805 17
+  979 822 17   979 839 14   979 839 15   979 840 13   979 844 12   979 845 11
+  979 870 9   979 870 10   979 870 10   979 899 8   979 911 7}
+
+do_execsql_test 5.2.7.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {2851 89 89   3778 88 88   4681 87 87   5556 83 83   5574 82 82   5586 81 81
+  5640 84 84   5640 85 85   5640 86 86   7324 80 80   8123 77 77   8129 73 73
+  8129 74 74   8163 78 78   8163 79 79   8940 71 71   8968 75 75   8968 76 76
+  9727 66 66   9745 69 69   9745 70 70   9745 72 72   10504 65 65
+  10504 67 67   10504 68 68   11215 64 64   11844 62 62   11920 63 63
+  13274 60 60   13274 61 61   13897 58 58   13903 57 57   13925 56 56
+  13937 55 55   13941 59 59   15203 53 53   15241 54 54   15832 52 52
+  17100 48 48   17104 46 46   17104 47 47   17106 45 45   17126 49 49
+  17126 50 50   17126 51 51   17569 42 42   17733 44 44   18176 43 43
+  18597 40 40   18597 41 41   18952 37 37   18996 39 39   19395 38 38
+  19760 35 35   19788 36 36   20492 32 32   20492 33 33   20498 30 30
+  20536 34 34   20833 29 29   20871 28 28   20891 31 31   21180 27 27
+  21752 23 23   21830 26 26   22025 21 21   22087 22 22   22087 24 24
+  22087 25 25   22278 20 20   22316 19 19   22549 15 15   22557 14 14
+  22573 17 17   22573 18 18   22706 10 10   22796 11 11   22796 12 12
+  22796 13 13   22796 16 16   23022 4 4   23042 2 2   23042 3 3   23042 9 9
+  23155 1 1   23155 5 5   23155 6 6   23155 7 7   23155 8 8}
+
+do_execsql_test 5.2.8.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {963 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 83   979 102 83
+  979 102 83   979 102 83   979 102 83   979 102 83   979 113 82}
+
+do_execsql_test 5.2.8.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {22176 1 1   22192 1 1   22196 1 1   22226 1 1   22244 1 1   22256 1 1
+  22310 1 1   22316 1 1   22316 1 1   22350 1 1   22378 1 1   22396 1 1
+  22444 1 1   22450 1 1   22472 1 1   22484 1 1   22488 1 1   22488 1 1
+  22522 1 1   22526 1 1   22526 1 1   22528 1 1   22548 1 1   22712 1 1
+  22734 1 1   22756 1 1   22756 1 1   22762 1 1   22762 1 1   22800 1 1
+  22800 1 1   22820 1 1   22846 1 1   22860 1 1   22898 1 1   22908 1 1
+  22916 1 1   22932 1 1   23022 1 1   23042 1 1   23042 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1
+  23155 1 1   23155 1 1   23155 1 1   23155 1 1   23155 1 1}
+
+do_execsql_test 5.2.9.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {667 158 0   870 113 8   870 158 0   870 158 0   870 158 0   870 158 0
+  870 355 0   899 113 8   899 113 8   899 113 8   899 113 8   899 113 8
+  899 113 8   899 113 8   899 113 15   899 113 15   899 113 15   899 113 15
+  899 113 15   899 113 15   899 113 15   899 158 8   963 113 24   979 102 43
+  979 102 43   979 102 43   979 102 43   979 102 43   979 102 43   979 102 43
+  979 102 43   979 102 43   979 102 43   979 102 48   979 102 48   979 102 48
+  979 102 48   979 102 48   979 102 55   979 102 55   979 102 55   979 102 55
+  979 102 55   979 102 55   979 102 55   979 102 61   979 102 61   979 102 61
+  979 102 61   979 102 61   979 102 61   979 102 74   979 102 74   979 102 74
+  979 102 74   979 102 74   979 102 74   979 102 74   979 102 74   979 102 74
+  979 102 74   979 102 74   979 102 74   979 102 74   979 102 82   979 102 82
+  979 102 82   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 113 24   979 113 24   979 113 24   979 113 24   979 113 24   979 113 24
+  979 113 24   979 113 24   979 113 32   979 113 32   979 113 32   979 113 32
+  979 113 32   979 113 32   979 113 32   979 113 32   979 113 43}
+
+do_execsql_test 5.2.9.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {1383 84 11   1421 84 11   1651 84 11   1695 84 11   2050 84 11   2050 84 11
+  4098 75 10   4158 75 10   4158 75 10   4740 75 10   4884 75 10   4997 75 10
+  4997 75 10   4997 75 10   4997 75 10   6532 68 9   6666 68 9   6894 68 9
+  6916 68 9   7337 68 9   7337 68 9   7337 68 9   9471 59 8   9487 59 8
+  9767 59 8   10095 59 8   10317 59 8   10450 59 8   10450 59 8   10450 59 8
+  10450 59 8   10785 51 7   11379 51 7   11714 51 7   11714 51 7   11714 51 7
+  11714 51 7   11714 51 7   11714 51 7   12009 40 6   12381 40 6   12676 40 6
+  12676 40 6   12676 40 6   12676 40 6   12676 40 6   12676 40 6   12676 40 6
+  12676 40 6   12676 40 6   13418 35 5   13566 35 5   14082 35 5   14195 35 5
+  14195 35 5   15040 28 4   15154 28 4   15999 28 4   15999 28 4   15999 28 4
+  15999 28 4   15999 28 4   16606 22 3   16758 22 3   17365 22 3   17365 22 3
+  17365 22 3   17365 22 3   20135 9 2   20141 9 2   20213 9 2   20447 9 2
+  20453 9 2   20453 9 2   20599 9 2   20846 9 2   20846 9 2   20846 9 2
+  20846 9 2   20846 9 2   20846 9 2   22244 1 1   22528 1 1   22846 1 1
+  22916 1 1   22932 1 1   23155 1 1   23155 1 1   23155 1 1}
+
+do_execsql_test 5.2.10.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {667 158 0   671 250 6   759 158 5   768 113 4   777 113 4   777 113 4
+  777 113 4   777 252 4   792 247 12   805 250 6   805 250 6   805 250 6
+  805 250 6   805 250 6   805 398 6   822 158 5   822 158 5   822 158 5
+  822 158 5   822 346 5   839 113 8   840 247 12   840 247 12   840 247 12
+  840 247 12   840 247 12   840 247 12   840 247 12   840 247 12   840 247 12
+  840 247 12   840 247 12   840 393 12   845 224 6   870 102 10   870 158 0
+  870 158 0   870 158 0   870 158 0   870 355 0   899 113 8   899 113 8
+  899 113 8   899 113 8   899 113 8   899 113 8   899 113 8   899 234 8
+  911 223 7   929 148 7   934 223 7   934 223 7   934 223 7   934 223 7
+  934 223 7   934 223 7   934 239 7   938 102 10   938 102 10   938 102 10
+  938 102 10   938 102 10   938 102 10   938 102 10   938 102 10   938 102 10
+  938 148 7   938 148 7   938 148 7   938 148 7   938 148 7   938 148 7
+  938 160 7   938 208 10   959 224 6   959 224 6   959 224 6   959 224 6
+  959 224 6   959 238 6   963 133 8   979 133 8   979 133 8   979 133 8
+  979 133 8   979 133 8   979 133 8   979 133 8   979 330 8}
+
+do_execsql_test 5.2.10.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_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 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {295 1 1   335 1 1   607 1 1   667 1 1   742 1 1   759 1 1   845 1 1
+  890 1 1   929 1 1   959 1 1   962 1 1   962 1 1   962 1 1   962 1 1
+  962 1 1   962 1 1   962 1 1   962 1 1   962 1 1   1264 1 1   1264 1 1
+  1264 1 1   1264 1 1   1264 1 1   1264 1 1   1366 1 1   1366 1 1   1366 1 1
+  1366 1 1   1383 1 1   1398 1 1   1406 1 1   1421 1 1   1519 1 1   1519 1 1
+  1535 1 1   1651 1 1   1669 1 1   1682 1 1   1695 1 1   1804 1 1   1804 1 1
+  1804 1 1   1804 1 1   1804 1 1   1897 1 1   1919 1 1   2000 1 1   2048 1 1
+  2050 1 1   2050 1 1   2070 1 1   2086 1 1   2108 1 1   2108 1 1   2134 1 1
+  2150 1 1   2309 1 1   2309 1 1   2309 1 1   2340 1 1   2340 1 1   2340 1 1
+  2430 1 1   2690 1 1   2758 1 1   2770 1 1   2776 1 1   2834 1 1   2848 1 1
+  2947 1 1   2947 1 1   2947 1 1   2947 1 1   2980 1 1   3082 1 1   3088 1 1
+  3088 1 1   3113 1 1   3113 1 1   3113 1 1   3113 1 1   3234 1 1   3481 1 1
+  3481 1 1   3481 1 1   3481 1 1   3481 1 1   3481 1 1}
+
+do_execsql_test 5.2.11.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {911 223 7   934 158 26   934 158 26   934 158 26   934 158 26   934 158 26
+  934 158 33   934 223 7   934 223 7   934 223 7   934 223 7   934 223 7
+  934 223 7   934 223 20   934 223 20   934 223 20   934 223 20   934 223 20
+  934 223 20   934 223 20   934 223 20   934 223 20   934 223 20   934 223 20
+  934 223 20   934 223 20   934 223 26   934 239 7   959 102 49   959 102 49
+  959 102 49   959 102 49   959 102 49   959 102 49   959 102 49   959 102 49
+  959 102 49   959 102 49   959 102 57   959 102 57   959 102 57   959 102 57
+  959 102 57   959 102 57   959 102 57   959 102 57   959 113 38   959 113 38
+  959 113 38   959 113 38   959 113 49   959 158 33   959 158 33   959 158 33
+  959 158 33   959 158 33   959 158 33   959 158 38   963 102 58   979 102 49
+  979 102 49   979 102 49   979 102 49   979 102 49   979 102 49   979 102 52
+  979 102 52   979 102 52   979 102 52   979 102 52   979 102 52   979 102 52
+  979 102 55   979 102 55   979 102 55   979 102 55   979 102 55   979 102 55
+  979 102 55   979 102 55   979 102 55   979 102 58   979 102 58   979 102 58
+  979 102 58   979 102 58   979 102 58   979 102 58   979 102 58}
+
+do_execsql_test 5.2.11.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {1398 1 1   1682 1 1   2000 1 1   2070 1 1   2086 1 1   2309 1 1   2309 1 1
+  2309 1 1   5079 9 2   5085 9 2   5157 9 2   5391 9 2   5397 9 2   5397 9 2
+  5543 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2   5790 9 2
+  6397 22 3   6549 22 3   7156 22 3   7156 22 3   7156 22 3   7156 22 3
+  8001 28 4   8115 28 4   8960 28 4   8960 28 4   8960 28 4   8960 28 4
+  8960 28 4   9702 35 5   9850 35 5   10366 35 5   10479 35 5   10479 35 5
+  10774 40 6   11146 40 6   11441 40 6   11441 40 6   11441 40 6   11441 40 6
+  11441 40 6   11441 40 6   11441 40 6   11441 40 6   11441 40 6   11563 68 9
+  11697 68 9   11776 51 7   11925 68 9   11947 68 9   12368 68 9   12368 68 9
+  12368 68 9   12370 51 7   12530 59 8   12546 59 8   12705 51 7   12705 51 7
+  12705 51 7   12705 51 7   12705 51 7   12705 51 7   12826 59 8
+  13050 75 10   13110 75 10   13110 75 10   13154 59 8   13376 59 8
+  13509 59 8   13509 59 8   13509 59 8   13509 59 8   13528 84 11
+  13566 84 11   13692 75 10   13796 84 11   13836 75 10   13840 84 11
+  13949 75 10   13949 75 10   13949 75 10   13949 75 10   14195 84 11
+  14195 84 11}
+
+do_execsql_test 5.2.12.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   113 113 1
+  113 113 1   158 158 1   160 158 1   160 158 2   223 223 1   224 224 1
+  238 234 2   239 234 2   239 238 2   252 250 2   256 252 2   257 247 4
+  257 247 4   257 250 3   335 330 2   336 330 2   336 335 2   355 354 1
+  355 354 2   355 355 1   399 393 3   399 393 3   399 393 3   399 393 3
+  399 393 4   480 480 1   480 480 1   572 572 1   574 574 1   618 618 1
+  618 618 1   633 629 2   634 627 3   634 627 3   634 627 4   634 629 3
+  667 667 1   670 667 2   671 667 2   671 667 2   671 667 3   711 711 1
+  711 711 1   716 705 2   726 726 1   730 730 1   762 762 1   768 759 3
+  768 762 2   768 762 2   792 790 2   792 790 2   794 786 3   794 786 3
+  844 839 4   845 839 4   845 839 4   845 839 4   845 839 4   870 870 1
+  870 870 1   870 870 2   934 934 1   938 929 3   938 934 2   938 934 2
+  959 959 1   963 963 1}
+
+do_execsql_test 5.2.12.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 10 8
+  {} 14 12   {} 15 13   {} 19 17   {} 20 18   {} 21 19   {} 23 21   {} 25 23
+  {} 34 29   {} 35 30   {} 36 31   {} 37 32   {} 38 33   {} 38 33   {} 40 34
+  {} 41 35   {} 42 36   {} 43 37   {} 43 37   {} 50 42   {} 56 47   {} 60 51
+  {} 61 52   {} 62 53   {} 64 55   {} 64 55   {} 66 56   {} 67 57   {} 68 58
+  {} 69 59   {} 70 60   {} 71 61   {} 72 62   {} 78 67   {} 78 67   {} 78 67
+  {} 81 68   {} 82 69   {} 83 70   {} 85 72   {} 85 72   {} 89 75   113 2 2
+  113 2 2   223 11 9   239 12 10   239 13 11   257 18 16   335 22 20
   335 24 22   355 27 25   355 27 25   504 16 14   504 17 15   705 58 49
   710 26 24   711 57 48   711 59 50   759 63 54   929 84 71   959 88 74
   963 87 73   1185 32 28   1185 32 28   1191 29 26   1191 29 26   1334 51 43
@@ -4117,13 +4798,13 @@ do_execsql_test 5.2.5.2 {
   1684 73 63   1885 48 40   1889 46 39   1889 46 39   1891 45 38   1891 49 41
   2005 54 45   2523 75 64   2523 76 65}
 
-do_execsql_test 5.2.6.1 {
+do_execsql_test 5.2.13.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
@@ -4139,13 +4820,13 @@ do_execsql_test 5.2.6.1 {
   768 768 1   839 839 1   839 839 1   870 870 1   870 870 1   870 870 2
   938 938 1   938 938 1}
 
-do_execsql_test 5.2.6.2 {
+do_execsql_test 5.2.13.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE CURRENT ROW  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 10 8
   {} 11 9   {} 12 10   {} 13 11   {} 14 12   {} 15 13   {} 16 14   {} 17 15
   {} 18 16   {} 19 17   {} 20 18   {} 21 19   {} 22 20   {} 23 21   {} 24 22
@@ -4160,38 +4841,38 @@ do_execsql_test 5.2.6.2 {
   355 27 25   393 29 26   393 29 26   399 32 28   399 32 28   629 46 39
   629 46 39   667 52 44   667 52 44   839 73 63   839 73 63}
 
-do_execsql_test 5.2.7.1 {
+do_execsql_test 5.2.14.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {963 929 6   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
   979 102 83   979 113 80   979 113 81   979 113 82   979 133 79   979 148 78
   979 158 76   979 158 77   979 160 76   979 208 75   979 223 74   979 224 73
   979 234 72   979 238 71   979 239 70   979 247 69   979 250 68   979 252 67
-  979 256 66   979 257 65   979 295 64   979 309 64   979 330 62   979 335 61
-  979 336 60   979 346 59   979 354 59   979 355 57   979 355 57   979 393 55
-  979 393 56   979 398 54   979 399 53   979 399 53   979 412 52   979 421 51
-  979 430 50   979 443 49   979 480 47   979 480 48   979 572 47   979 574 45
-  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 41
-  979 633 39   979 634 38   979 652 37   979 660 36   979 667 35   979 667 35
+  979 256 66   979 257 65   979 295 64   979 309 63   979 330 63   979 335 61
+  979 336 60   979 346 59   979 354 58   979 355 56   979 355 58   979 393 55
+  979 393 56   979 398 54   979 399 52   979 399 53   979 412 52   979 421 51
+  979 430 50   979 443 49   979 480 47   979 480 48   979 572 46   979 574 46
+  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 40
+  979 633 39   979 634 38   979 652 37   979 660 36   979 667 34   979 667 35
   979 670 34   979 671 33   979 683 32   979 705 31   979 711 30   979 716 29
   979 726 28   979 730 27   979 759 26   979 762 25   979 768 23   979 768 24
   979 777 22   979 786 21   979 790 20   979 792 19   979 794 18   979 805 17
-  979 822 17   979 839 14   979 839 15   979 840 13   979 844 12   979 845 11
-  979 870 9   979 870 10   979 870 10   979 899 8   979 911 7}
+  979 822 16   979 839 15   979 839 15   979 840 13   979 844 12   979 845 11
+  979 870 8   979 870 9   979 870 10   979 899 8   979 911 7}
 
-do_execsql_test 5.2.7.2 {
+do_execsql_test 5.2.14.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE CURRENT ROW  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {2851 89 89   3778 88 88   4681 87 87   5556 83 83   5574 82 82   5586 81 81
   5640 84 84   5640 85 85   5640 86 86   7324 80 80   8123 77 77   8129 73 73
   8129 74 74   8163 78 78   8163 79 79   8940 71 71   8968 75 75   8968 76 76
@@ -4216,7 +4897,7 @@ do_execsql_test 5.3.1.1 {
              count(a) OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
@@ -4237,7 +4918,7 @@ do_execsql_test 5.3.1.2 {
              dense_rank() OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 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
@@ -4256,9 +4937,9 @@ do_execsql_test 5.3.2.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   899 113 9   899 113 9   899 113 9   899 113 9
   899 113 9   899 113 9   899 113 9   899 113 16   899 113 16   899 113 16
@@ -4280,9 +4961,9 @@ do_execsql_test 5.3.2.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 81 11   {} 81 11   {} 81 11   {} 81 11   {} 81 11   {} 81 11   {} 81 11
   {} 81 11   {} 81 11   2947 74 10   2947 74 10   2947 74 10   2947 74 10
   2947 74 10   2947 74 10   2947 74 10   5287 65 9   5287 65 9   5287 65 9
@@ -4306,7 +4987,7 @@ do_execsql_test 5.3.3.1 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
@@ -4328,7 +5009,7 @@ do_execsql_test 5.3.3.2 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 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
@@ -4347,8 +5028,8 @@ do_execsql_test 5.3.4.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   870 158 0
   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0
   870 158 0   934 158 8   934 158 8   934 158 8   934 158 8   934 158 8
@@ -4370,8 +5051,8 @@ do_execsql_test 5.3.4.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1   2050 7 2   2050 7 2
   2050 7 2   2050 7 2   2050 7 2   2050 7 2   2050 7 2   2050 7 2   4359 15 3
   4359 15 3   4359 15 3   4359 15 3   4359 15 3   4359 15 3   4359 15 3
@@ -4388,13 +5069,328 @@ do_execsql_test 5.3.4.2 {
   11441 57 8   12529 46 7   12529 46 7   12529 46 7   12529 46 7   12529 46 7
   12529 46 7   12529 46 7   12529 46 7   12529 46 7   12529 46 7   12529 46 7}
 
-do_execsql_test 5.3.5.1 {
+do_execsql_test 5.3.5.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   158 158 1   160 160 1   160 160 1   223 223 1   224 224 1
+  238 234 2   239 234 2   239 238 2   252 250 2   256 252 2   257 247 4
+  257 247 4   257 250 3   335 330 2   336 330 2   336 335 2   354 354 1
+  354 354 1   355 355 1   398 393 3   398 393 3   399 393 3   399 398 2
+  399 398 2   572 572 1   574 574 1   633 629 2   634 627 3   634 627 3
+  634 627 3   634 629 3   667 667 1   670 667 2   671 667 2   671 670 2
+  671 670 2   711 711 1   711 711 1   716 705 2   726 726 1   730 730 1
+  762 762 1   762 762 1   762 762 1   768 759 3   792 790 2   792 790 2
+  794 786 3   794 786 3   844 839 4   845 839 4   845 839 4   845 840 3
+  845 840 3   934 934 1   934 934 1   934 934 1   938 929 3   959 959 1
+  963 963 1}
+
+do_execsql_test 5.3.5.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 2 2   {} 2 2   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6
+  {} 9 7   {} 10 8   {} 14 12   {} 15 13   {} 19 17   {} 20 18   {} 21 19
+  {} 23 21   {} 25 23   {} 27 25   {} 27 25   {} 34 29   {} 35 30   {} 36 31
+  {} 37 32   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 42 36   {} 43 37
+  {} 43 37   {} 50 42   {} 56 47   {} 60 51   {} 61 52   {} 62 53   {} 64 55
+  {} 64 55   {} 66 56   {} 67 57   {} 68 58   {} 69 59   {} 70 60   {} 71 61
+  {} 72 62   {} 78 67   {} 78 67   {} 78 67   {} 81 68   {} 82 69   {} 83 70
+  {} 85 72   {} 85 72   {} 89 75   223 11 9   239 12 10   239 13 11
+  257 18 16   335 22 20   335 24 22   504 16 14   504 17 15   671 52 44
+  671 52 44   705 58 49   710 26 24   711 57 48   711 59 50   759 63 54
+  786 32 28   786 32 28   798 29 26   798 29 26   845 73 63   845 73 63
+  929 84 71   959 88 74   963 87 73   1260 46 39   1260 46 39   1334 51 43
+  1334 55 46   1584 31 27   1678 77 66   1885 48 40   1891 45 38   1891 49 41
+  2005 54 45   2523 75 64   2523 76 65}
+
+do_execsql_test 5.3.6.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0}
+
+do_execsql_test 5.3.6.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 2 2   {} 2 2   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6
+  {} 9 7   {} 10 8   {} 11 9   {} 12 10   {} 13 11   {} 14 12   {} 15 13
+  {} 16 14   {} 17 15   {} 18 16   {} 19 17   {} 20 18   {} 21 19   {} 22 20
+  {} 23 21   {} 24 22   {} 25 23   {} 26 24   {} 27 25   {} 27 25   {} 29 26
+  {} 29 26   {} 31 27   {} 32 28   {} 32 28   {} 34 29   {} 35 30   {} 36 31
+  {} 37 32   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 42 36   {} 43 37
+  {} 43 37   {} 45 38   {} 46 39   {} 46 39   {} 48 40   {} 49 41   {} 50 42
+  {} 51 43   {} 52 44   {} 52 44   {} 54 45   {} 55 46   {} 56 47   {} 57 48
+  {} 58 49   {} 59 50   {} 60 51   {} 61 52   {} 62 53   {} 63 54   {} 64 55
+  {} 64 55   {} 66 56   {} 67 57   {} 68 58   {} 69 59   {} 70 60   {} 71 61
+  {} 72 62   {} 73 63   {} 73 63   {} 75 64   {} 76 65   {} 77 66   {} 78 67
+  {} 78 67   {} 78 67   {} 81 68   {} 82 69   {} 83 70   {} 84 71   {} 85 72
+  {} 85 72   {} 87 73   {} 88 74   {} 89 75}
+
+do_execsql_test 5.3.7.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {963 929 6   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
+  979 102 83   979 113 80   979 113 81   979 113 82   979 133 79   979 148 78
+  979 158 76   979 158 77   979 160 76   979 208 75   979 223 74   979 224 73
+  979 234 72   979 238 71   979 239 70   979 247 69   979 250 68   979 252 67
+  979 256 66   979 257 65   979 295 64   979 309 64   979 330 62   979 335 61
+  979 336 60   979 346 59   979 354 59   979 355 57   979 355 57   979 393 55
+  979 393 56   979 398 54   979 399 53   979 399 53   979 412 52   979 421 51
+  979 430 50   979 443 49   979 480 47   979 480 48   979 572 47   979 574 45
+  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 41
+  979 633 39   979 634 38   979 652 37   979 660 36   979 667 35   979 667 35
+  979 670 34   979 671 33   979 683 32   979 705 31   979 711 30   979 716 29
+  979 726 28   979 730 27   979 759 26   979 762 25   979 768 23   979 768 24
+  979 777 22   979 786 21   979 790 20   979 792 19   979 794 18   979 805 17
+  979 822 17   979 839 14   979 839 15   979 840 13   979 844 12   979 845 11
+  979 870 9   979 870 10   979 870 10   979 899 8   979 911 7}
+
+do_execsql_test 5.3.7.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {2851 89 89   3778 88 88   4681 87 87   5556 83 83   5574 82 82   5586 81 81
+  5640 84 84   5640 85 85   5640 86 86   7324 80 80   8123 77 77   8129 73 73
+  8129 74 74   8163 78 78   8163 79 79   8940 71 71   8968 75 75   8968 76 76
+  9727 66 66   9745 69 69   9745 70 70   9745 72 72   10504 65 65
+  10504 67 67   10504 68 68   11215 64 64   11844 62 62   11920 63 63
+  13274 60 60   13274 61 61   13897 58 58   13903 57 57   13925 56 56
+  13937 55 55   13941 59 59   15203 53 53   15241 54 54   15832 52 52
+  17100 48 48   17104 46 46   17104 47 47   17106 45 45   17126 49 49
+  17126 50 50   17126 51 51   17569 42 42   17733 44 44   18176 43 43
+  18597 40 40   18597 41 41   18952 37 37   18996 39 39   19395 38 38
+  19760 35 35   19788 36 36   20492 32 32   20492 33 33   20498 30 30
+  20536 34 34   20833 29 29   20871 28 28   20891 31 31   21180 27 27
+  21752 23 23   21830 26 26   22025 21 21   22087 22 22   22087 24 24
+  22087 25 25   22278 20 20   22316 19 19   22549 15 15   22557 14 14
+  22573 17 17   22573 18 18   22706 10 10   22796 11 11   22796 12 12
+  22796 13 13   22796 16 16   23022 4 4   23042 2 2   23042 3 3   23042 9 9
+  23155 1 1   23155 5 5   23155 6 6   23155 7 7   23155 8 8}
+
+do_execsql_test 5.3.8.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0}
+
+do_execsql_test 5.3.8.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 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 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.9.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   870 158 0
+  870 158 0   870 158 0   870 158 0   870 158 0   870 158 0   870 158 0
+  870 158 0   870 158 0   899 113 9   899 113 9   899 113 9   899 113 9
+  899 113 9   899 113 9   899 113 9   899 113 16   899 113 16   899 113 16
+  899 113 16   899 113 16   899 113 16   899 113 16   899 113 16   899 113 16
+  979 102 44   979 102 44   979 102 44   979 102 44   979 102 44   979 102 49
+  979 102 49   979 102 49   979 102 49   979 102 49   979 102 49   979 102 49
+  979 102 56   979 102 56   979 102 56   979 102 56   979 102 56   979 102 56
+  979 102 62   979 102 62   979 102 62   979 102 62   979 102 62   979 102 62
+  979 102 62   979 102 62   979 102 62   979 102 62   979 102 62   979 102 62
+  979 102 62   979 102 75   979 102 75   979 102 75   979 102 75   979 102 75
+  979 102 75   979 102 75   979 102 75   979 113 25   979 113 25   979 113 25
+  979 113 25   979 113 25   979 113 25   979 113 25   979 113 25   979 113 33
+  979 113 33   979 113 33   979 113 33   979 113 33   979 113 33   979 113 33
+  979 113 33   979 113 33   979 113 33   979 113 33}
+
+do_execsql_test 5.3.9.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 84 11   {} 84 11   {} 84 11   {} 84 11   {} 84 11   {} 84 11
+  2050 75 10   2050 75 10   2050 75 10   2050 75 10   2050 75 10   2050 75 10
+  2050 75 10   2050 75 10   2050 75 10   4997 68 9   4997 68 9   4997 68 9
+  4997 68 9   4997 68 9   4997 68 9   4997 68 9   7337 59 8   7337 59 8
+  7337 59 8   7337 59 8   7337 59 8   7337 59 8   7337 59 8   7337 59 8
+  7337 59 8   10450 51 7   10450 51 7   10450 51 7   10450 51 7   10450 51 7
+  10450 51 7   10450 51 7   10450 51 7   11714 40 6   11714 40 6   11714 40 6
+  11714 40 6   11714 40 6   11714 40 6   11714 40 6   11714 40 6   11714 40 6
+  11714 40 6   11714 40 6   12676 35 5   12676 35 5   12676 35 5   12676 35 5
+  12676 35 5   14195 28 4   14195 28 4   14195 28 4   14195 28 4   14195 28 4
+  14195 28 4   14195 28 4   15999 22 3   15999 22 3   15999 22 3   15999 22 3
+  15999 22 3   15999 22 3   17365 9 2   17365 9 2   17365 9 2   17365 9 2
+  17365 9 2   17365 9 2   17365 9 2   17365 9 2   17365 9 2   17365 9 2
+  17365 9 2   17365 9 2   17365 9 2   20846 1 1   20846 1 1   20846 1 1
+  20846 1 1   20846 1 1   20846 1 1   20846 1 1   20846 1 1}
+
+do_execsql_test 5.3.10.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0}
+
+do_execsql_test 5.3.10.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 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 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.11.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
+  {} {} 0   934 158 27   934 158 27   934 158 27   934 158 27   934 158 27
+  934 158 27   934 158 27   934 223 8   934 223 8   934 223 8   934 223 8
+  934 223 8   934 223 8   934 223 8   934 223 8   934 223 8   934 223 8
+  934 223 8   934 223 8   934 223 8   934 223 21   934 223 21   934 223 21
+  934 223 21   934 223 21   934 223 21   959 102 50   959 102 50   959 102 50
+  959 102 50   959 102 50   959 102 50   959 102 50   959 102 50   959 102 50
+  959 102 50   959 102 50   959 102 50   959 102 50   959 102 50   959 102 50
+  959 102 50   959 102 50   959 113 39   959 113 39   959 113 39   959 113 39
+  959 113 39   959 113 39   959 113 39   959 113 39   959 113 39   959 113 39
+  959 113 39   959 158 34   959 158 34   959 158 34   959 158 34   959 158 34
+  979 102 46   979 102 46   979 102 46   979 102 46   979 102 46   979 102 46
+  979 102 46   979 102 47   979 102 47   979 102 47   979 102 47   979 102 47
+  979 102 47   979 102 47   979 102 47   979 102 47   979 102 49   979 102 49
+  979 102 49   979 102 49   979 102 49   979 102 49}
+
+do_execsql_test 5.3.11.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1   {} 1 1
+  2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2
+  2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   5790 22 3
+  5790 22 3   5790 22 3   5790 22 3   5790 22 3   5790 22 3   7156 28 4
+  7156 28 4   7156 28 4   7156 28 4   7156 28 4   7156 28 4   7156 28 4
+  8960 35 5   8960 35 5   8960 35 5   8960 35 5   8960 35 5   10028 68 9
+  10028 68 9   10028 68 9   10028 68 9   10028 68 9   10028 68 9   10028 68 9
+  10396 59 8   10396 59 8   10396 59 8   10396 59 8   10396 59 8   10396 59 8
+  10396 59 8   10396 59 8   10396 59 8   10479 40 6   10479 40 6   10479 40 6
+  10479 40 6   10479 40 6   10479 40 6   10479 40 6   10479 40 6   10479 40 6
+  10479 40 6   10479 40 6   11002 75 10   11002 75 10   11002 75 10
+  11002 75 10   11002 75 10   11002 75 10   11002 75 10   11002 75 10
+  11002 75 10   11441 51 7   11441 51 7   11441 51 7   11441 51 7
+  11441 51 7   11441 51 7   11441 51 7   11441 51 7   12145 84 11
+  12145 84 11   12145 84 11   12145 84 11   12145 84 11   12145 84 11}
+
+do_execsql_test 5.3.12.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
@@ -4411,13 +5407,13 @@ do_execsql_test 5.3.5.1 {
   845 840 3   934 934 1   934 934 1   934 934 1   938 929 3   959 959 1
   963 963 1}
 
-do_execsql_test 5.3.5.2 {
+do_execsql_test 5.3.12.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 2 2   {} 2 2   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6
   {} 9 7   {} 10 8   {} 14 12   {} 15 13   {} 19 17   {} 20 18   {} 21 19
   {} 23 21   {} 25 23   {} 27 25   {} 27 25   {} 34 29   {} 35 30   {} 36 31
@@ -4433,13 +5429,13 @@ do_execsql_test 5.3.5.2 {
   1334 55 46   1584 31 27   1678 77 66   1885 48 40   1891 45 38   1891 49 41
   2005 54 45   2523 75 64   2523 76 65}
 
-do_execsql_test 5.3.6.1 {
+do_execsql_test 5.3.13.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
@@ -4454,13 +5450,13 @@ do_execsql_test 5.3.6.1 {
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0
   {} {} 0   {} {} 0   {} {} 0   {} {} 0   {} {} 0}
 
-do_execsql_test 5.3.6.2 {
+do_execsql_test 5.3.13.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE GROUP  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 2 2   {} 2 2   {} 4 3   {} 5 4   {} 6 5   {} 6 5   {} 8 6
   {} 9 7   {} 10 8   {} 11 9   {} 12 10   {} 13 11   {} 14 12   {} 15 13
   {} 16 14   {} 17 15   {} 18 16   {} 19 17   {} 20 18   {} 21 19   {} 22 20
@@ -4475,38 +5471,38 @@ do_execsql_test 5.3.6.2 {
   {} 78 67   {} 78 67   {} 81 68   {} 82 69   {} 83 70   {} 84 71   {} 85 72
   {} 85 72   {} 87 73   {} 88 74   {} 89 75}
 
-do_execsql_test 5.3.7.1 {
+do_execsql_test 5.3.14.1 {
   SELECT max(c) OVER win,
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {963 929 6   979 102 82   979 102 82   979 102 82   979 102 82   979 102 82
   979 102 83   979 113 80   979 113 81   979 113 82   979 133 79   979 148 78
   979 158 76   979 158 77   979 160 76   979 208 75   979 223 74   979 224 73
   979 234 72   979 238 71   979 239 70   979 247 69   979 250 68   979 252 67
-  979 256 66   979 257 65   979 295 64   979 309 64   979 330 62   979 335 61
-  979 336 60   979 346 59   979 354 59   979 355 57   979 355 57   979 393 55
-  979 393 56   979 398 54   979 399 53   979 399 53   979 412 52   979 421 51
-  979 430 50   979 443 49   979 480 47   979 480 48   979 572 47   979 574 45
-  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 41
-  979 633 39   979 634 38   979 652 37   979 660 36   979 667 35   979 667 35
+  979 256 66   979 257 65   979 295 64   979 309 63   979 330 63   979 335 61
+  979 336 60   979 346 59   979 354 58   979 355 56   979 355 58   979 393 55
+  979 393 56   979 398 54   979 399 52   979 399 53   979 412 52   979 421 51
+  979 430 50   979 443 49   979 480 47   979 480 48   979 572 46   979 574 46
+  979 607 44   979 618 42   979 618 43   979 627 41   979 629 40   979 629 40
+  979 633 39   979 634 38   979 652 37   979 660 36   979 667 34   979 667 35
   979 670 34   979 671 33   979 683 32   979 705 31   979 711 30   979 716 29
   979 726 28   979 730 27   979 759 26   979 762 25   979 768 23   979 768 24
   979 777 22   979 786 21   979 790 20   979 792 19   979 794 18   979 805 17
-  979 822 17   979 839 14   979 839 15   979 840 13   979 844 12   979 845 11
-  979 870 9   979 870 10   979 870 10   979 899 8   979 911 7}
+  979 822 16   979 839 15   979 839 15   979 840 13   979 844 12   979 845 11
+  979 870 8   979 870 9   979 870 10   979 899 8   979 911 7}
 
-do_execsql_test 5.3.7.2 {
+do_execsql_test 5.3.14.2 {
   SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE GROUP  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {2851 89 89   3778 88 88   4681 87 87   5556 83 83   5574 82 82   5586 81 81
   5640 84 84   5640 85 85   5640 86 86   7324 80 80   8123 77 77   8129 73 73
   8129 74 74   8163 78 78   8163 79 79   8940 71 71   8968 75 75   8968 76 76
@@ -4531,7 +5527,7 @@ do_execsql_test 5.4.1.1 {
              count(a) OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
   158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
   238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
@@ -4554,7 +5550,7 @@ do_execsql_test 5.4.1.2 {
              dense_rank() OVER win
       FROM t3
       WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 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
@@ -4573,9 +5569,9 @@ do_execsql_test 5.4.2.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {113 113 1   234 234 1   257 257 1   336 336 1   354 354 1   768 768 1
   839 839 1   839 839 1   899 113 10   899 113 10   899 113 10   899 113 10
   899 113 10   899 113 10   899 113 10   899 113 17   899 113 17   899 113 17
@@ -4597,9 +5593,9 @@ do_execsql_test 5.4.2.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  
+      WINDOW win AS (  ORDER BY a NULLS FIRST 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 81 11   {} 81 11   {} 81 11   {} 81 11   113 81 11   257 81 11
   839 81 11   839 81 11   899 81 11   2947 74 10   2947 74 10   2947 74 10
   3368 74 10   3390 74 10   3618 74 10   3752 74 10   5287 65 9   5287 65 9
@@ -4623,7 +5619,7 @@ do_execsql_test 5.4.3.1 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
   158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
   238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
@@ -4647,7 +5643,7 @@ do_execsql_test 5.4.3.2 {
       FROM t3
       WINDOW win AS (  PARTITION BY coalesce(a, '') 
         RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 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
@@ -4666,8 +5662,8 @@ do_execsql_test 5.4.4.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {158 158 0   355 355 0   399 399 0   629 629 0   667 667 0   870 158 1
   870 158 1   870 158 1   870 158 1   870 158 1   870 158 1   870 870 0
   911 158 1   934 158 1   934 158 9   934 158 9   934 158 9   934 158 9
@@ -4689,8 +5685,8 @@ do_execsql_test 5.4.4.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY a  GROUPS 6 PRECEDING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY a NULLS FIRST GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 1 1   355 1 1   399 1 1   629 1 1   667 1 1   2050 7 2
   2050 7 2   2050 7 2   2273 7 2   2289 7 2   2359 7 2   2677 7 2   2961 7 2
   4359 15 3   4359 15 3   4359 15 3   4359 15 3   4359 15 3   4359 15 3
@@ -4713,8 +5709,8 @@ do_execsql_test 5.4.5.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   160 158 1
   160 158 2   160 158 2   208 208 1   224 223 2   224 223 2   239 234 3
   239 234 3   239 234 3   252 247 3   257 247 5   257 247 5   257 250 4
@@ -4736,8 +5732,8 @@ do_execsql_test 5.4.5.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 25 23   {} 34 29
   {} 36 31   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 43 37   {} 43 37
   {} 50 42   {} 60 51   {} 61 52   {} 64 55   {} 64 55   {} 67 57   {} 68 58
@@ -4758,8 +5754,8 @@ do_execsql_test 5.4.6.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
   158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
   238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
@@ -4781,8 +5777,8 @@ do_execsql_test 5.4.6.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c  RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      WINDOW win AS (  ORDER BY c NULLS FIRST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 11 9   {} 12 10
   {} 13 11   {} 16 14   {} 17 15   {} 18 16   {} 22 20   {} 24 22   {} 25 23
   {} 26 24   {} 31 27   {} 34 29   {} 36 31   {} 38 33   {} 38 33   {} 40 34
@@ -4803,9 +5799,9 @@ do_execsql_test 5.4.7.1 {
              min(c) OVER win,
              count(a) OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
   979 102 83   979 113 81   979 113 82   979 133 80   979 148 79   979 158 77
   979 158 78   979 160 77   979 208 76   979 223 75   979 224 74   979 234 73
@@ -4827,9 +5823,331 @@ do_execsql_test 5.4.7.2 {
              rank() OVER win,
              dense_rank() OVER win
       FROM t3
-      WINDOW win AS (  ORDER BY c , b , a 
+      WINDOW win AS (  ORDER BY c NULLS FIRST, b NULLS FIRST, a NULLS FIRST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {3830 89 89   4741 88 88   5640 84 84   5640 85 85   5640 86 86   5640 87 87
+  6485 81 81   6485 82 82   6485 83 83   7324 80 80   8163 78 78   8163 79 79
+  8968 73 73   8968 74 74   8968 75 75   8968 76 76   8968 77 77   9745 69 69
+  9745 70 70   9745 71 71   9745 72 72   10504 65 65   10504 66 66
+  10504 67 67   10504 68 68   11215 64 64   11920 63 63   12603 62 62
+  13274 60 60   13274 61 61   13941 59 59   14608 55 55   14608 56 56
+  14608 57 57   14608 58 58   15241 54 54   15870 53 53   16499 52 52
+  17126 49 49   17126 50 50   17126 51 51   17733 44 44   17733 45 45
+  17733 46 46   17733 47 47   17733 48 48   18176 42 42   18176 43 43
+  18597 40 40   18597 41 41   18996 39 39   19395 37 37   19395 38 38
+  19788 36 36   20181 35 35   20536 34 34   20891 30 30   20891 31 31
+  20891 32 32   20891 33 33   21226 28 28   21226 29 29   21535 27 27
+  21830 26 26   22087 22 22   22087 23 23   22087 24 24   22087 25 25
+  22334 21 21   22573 17 17   22573 18 18   22573 19 19   22573 20 20
+  22796 11 11   22796 12 12   22796 13 13   22796 14 14   22796 15 15
+  22796 16 16   22929 10 10   23042 9 9   23155 1 1   23155 2 2   23155 3 3
+  23155 4 4   23155 5 5   23155 6 6   23155 7 7   23155 8 8}
+
+do_execsql_test 5.4.8.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
+  158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
+  238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
+  257 257 1   295 295 1   309 309 1   330 330 1   335 335 1   336 336 1
+  346 346 1   354 354 1   355 355 0   355 355 1   393 393 1   393 393 1
+  398 398 1   399 399 0   399 399 1   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 1   480 480 1   572 572 1   574 574 1   607 607 1
+  618 618 1   618 618 1   627 627 1   629 629 0   629 629 1   633 633 1
+  634 634 1   652 652 1   660 660 1   667 667 0   667 667 1   670 670 1
+  671 671 1   683 683 1   705 705 1   711 711 1   716 716 1   726 726 1
+  730 730 1   759 759 1   762 762 1   768 768 1   768 768 1   777 777 1
+  786 786 1   790 790 1   792 792 1   794 794 1   805 805 1   822 822 1
+  839 839 1   839 839 1   840 840 1   844 844 1   845 845 1   870 870 0
+  870 870 1   870 870 1   899 899 1   911 911 1   929 929 1   934 934 1
+  938 938 1   938 938 1   959 959 1   963 963 1   979 979 1}
+
+do_execsql_test 5.4.8.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 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 1   {} 1 1   {} 1 1   {} 1 1
+  113 1 1   113 1 1   133 1 1   223 1 1   239 1 1   247 1 1   257 1 1
+  295 1 1   309 1 1   335 1 1   355 1 1   355 1 1   393 1 1   393 1 1
+  399 1 1   399 1 1   421 1 1   443 1 1   607 1 1   627 1 1   629 1 1
+  629 1 1   633 1 1   667 1 1   667 1 1   671 1 1   683 1 1   705 1 1
+  711 1 1   759 1 1   777 1 1   805 1 1   839 1 1   839 1 1   845 1 1
+  899 1 1   911 1 1   929 1 1   959 1 1   963 1 1   979 1 1}
+
+do_execsql_test 5.4.9.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {158 158 0   355 355 0   399 399 0   629 629 0   667 667 0   870 113 1
+  870 158 1   870 158 1   870 158 1   870 158 1   870 158 1   870 158 1
+  870 158 1   870 870 0   899 113 10   899 113 10   899 113 10   899 113 10
+  899 113 10   899 113 10   899 113 10   899 113 17   899 113 17   899 113 17
+  899 113 17   899 113 17   899 113 17   899 113 17   899 158 1   963 113 17
+  979 102 34   979 102 45   979 102 45   979 102 45   979 102 45   979 102 45
+  979 102 50   979 102 50   979 102 50   979 102 50   979 102 50   979 102 50
+  979 102 50   979 102 57   979 102 57   979 102 57   979 102 57   979 102 57
+  979 102 57   979 102 63   979 102 63   979 102 63   979 102 63   979 102 63
+  979 102 63   979 102 63   979 102 63   979 102 63   979 102 63   979 102 63
+  979 102 63   979 102 63   979 102 76   979 102 76   979 102 76   979 102 76
+  979 102 76   979 102 76   979 102 76   979 102 76   979 113 17   979 113 26
+  979 113 26   979 113 26   979 113 26   979 113 26   979 113 26   979 113 26
+  979 113 26   979 113 34   979 113 34   979 113 34   979 113 34   979 113 34
+  979 113 34   979 113 34   979 113 34   979 113 34   979 113 34}
+
+do_execsql_test 5.4.9.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 84 11   {} 84 11   355 84 11   399 84 11   629 84 11   667 84 11
+  2050 75 10   2050 75 10   2050 75 10   2050 75 10   2163 75 10   2307 75 10
+  2889 75 10   2889 75 10   2949 75 10   4997 68 9   4997 68 9   4997 68 9
+  5418 68 9   5440 68 9   5668 68 9   5802 68 9   7337 59 8   7337 59 8
+  7337 59 8   7337 59 8   7470 59 8   7692 59 8   8020 59 8   8300 59 8
+  8316 59 8   10450 51 7   10450 51 7   10450 51 7   10450 51 7   10450 51 7
+  10450 51 7   10785 51 7   11379 51 7   11714 40 6   11714 40 6   11714 40 6
+  11714 40 6   11714 40 6   11714 40 6   11714 40 6   11714 40 6   11714 40 6
+  12009 40 6   12381 40 6   12676 35 5   12676 35 5   12789 35 5   13305 35 5
+  13453 35 5   14195 28 4   14195 28 4   14195 28 4   14195 28 4   14195 28 4
+  15040 28 4   15154 28 4   15999 22 3   15999 22 3   15999 22 3   15999 22 3
+  16606 22 3   16758 22 3   17365 9 2   17365 9 2   17365 9 2   17365 9 2
+  17365 9 2   17365 9 2   17612 9 2   17758 9 2   17758 9 2   17764 9 2
+  17998 9 2   18070 9 2   18076 9 2   20846 1 1   20846 1 1   20846 1 1
+  21069 1 1   21085 1 1   21155 1 1   21473 1 1   21757 1 1}
+
+do_execsql_test 5.4.10.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
+  158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
+  238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
+  257 257 1   295 295 1   309 309 1   330 330 1   335 335 1   336 336 1
+  346 346 1   354 354 1   355 355 0   355 355 1   393 393 1   393 393 1
+  398 398 1   399 399 0   399 399 1   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 1   480 480 1   572 572 1   574 574 1   607 607 1
+  618 618 1   618 618 1   627 627 1   629 629 0   629 629 1   633 633 1
+  634 634 1   652 652 1   660 660 1   667 667 0   667 667 1   670 670 1
+  671 671 1   683 683 1   705 705 1   711 711 1   716 716 1   726 726 1
+  730 730 1   759 759 1   762 762 1   768 768 1   768 768 1   777 777 1
+  786 786 1   790 790 1   792 792 1   794 794 1   805 805 1   822 822 1
+  839 839 1   839 839 1   840 840 1   844 844 1   845 845 1   870 870 0
+  870 870 1   870 870 1   899 899 1   911 911 1   929 929 1   934 934 1
+  938 938 1   938 938 1   959 959 1   963 963 1   979 979 1}
+
+do_execsql_test 5.4.10.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  PARTITION BY coalesce(a, '') 
+        RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 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 1   {} 1 1   {} 1 1   {} 1 1
+  113 1 1   113 1 1   133 1 1   223 1 1   239 1 1   247 1 1   257 1 1
+  295 1 1   309 1 1   335 1 1   355 1 1   355 1 1   393 1 1   393 1 1
+  399 1 1   399 1 1   421 1 1   443 1 1   607 1 1   627 1 1   629 1 1
+  629 1 1   633 1 1   667 1 1   667 1 1   671 1 1   683 1 1   705 1 1
+  711 1 1   759 1 1   777 1 1   805 1 1   839 1 1   839 1 1   845 1 1
+  899 1 1   911 1 1   929 1 1   959 1 1   963 1 1   979 1 1}
+
+do_execsql_test 5.4.11.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {223 223 1   239 239 1   309 309 1   572 572 1   627 627 1   870 870 1
+  911 911 1   934 158 22   934 158 28   934 158 28   934 158 28   934 158 28
+  934 158 28   934 158 28   934 223 9   934 223 9   934 223 9   934 223 9
+  934 223 9   934 223 9   934 223 9   934 223 9   934 223 9   934 223 9
+  934 223 9   934 223 9   934 223 9   934 223 22   934 223 22   934 223 22
+  934 223 22   934 223 22   934 934 1   959 102 40   959 102 51   959 102 51
+  959 102 51   959 102 51   959 102 51   959 102 51   959 102 51   959 102 51
+  959 102 51   959 102 51   959 102 51   959 102 51   959 102 51   959 102 51
+  959 102 51   959 113 35   959 113 40   959 113 40   959 113 40   959 113 40
+  959 113 40   959 113 40   959 113 40   959 113 40   959 113 40   959 113 40
+  959 158 28   959 158 35   959 158 35   959 158 35   959 158 35   963 102 51
+  979 102 47   979 102 47   979 102 47   979 102 47   979 102 47   979 102 47
+  979 102 47   979 102 48   979 102 48   979 102 48   979 102 48   979 102 48
+  979 102 48   979 102 48   979 102 48   979 102 48   979 102 49   979 102 49
+  979 102 49   979 102 49   979 102 49   979 102 49   979 102 51}
+
+do_execsql_test 5.4.11.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY a NULLS LAST GROUPS 6 PRECEDING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 1 1   {} 1 1   223 1 1   239 1 1   309 1 1   627 1 1   911 1 1
+  2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   2309 9 2   2556 9 2
+  2702 9 2   2702 9 2   2708 9 2   2942 9 2   3014 9 2   3020 9 2   5790 22 3
+  5790 22 3   5790 22 3   5790 22 3   6397 22 3   6549 22 3   7156 28 4
+  7156 28 4   7156 28 4   7156 28 4   7156 28 4   8001 28 4   8115 28 4
+  8960 35 5   8960 35 5   9073 35 5   9589 35 5   9737 35 5   10028 68 9
+  10028 68 9   10028 68 9   10396 59 8   10396 59 8   10396 59 8   10396 59 8
+  10449 68 9   10471 68 9   10479 40 6   10479 40 6   10479 40 6   10479 40 6
+  10479 40 6   10479 40 6   10479 40 6   10479 40 6   10479 40 6   10529 59 8
+  10699 68 9   10751 59 8   10774 40 6   10833 68 9   11002 75 10
+  11002 75 10   11002 75 10   11002 75 10   11079 59 8   11115 75 10
+  11146 40 6   11259 75 10   11359 59 8   11375 59 8   11441 51 7
+  11441 51 7   11441 51 7   11441 51 7   11441 51 7   11441 51 7   11776 51 7
+  11841 75 10   11841 75 10   11901 75 10   12145 84 11   12145 84 11
+  12370 51 7   12500 84 11   12544 84 11   12774 84 11   12812 84 11}
+
+do_execsql_test 5.4.12.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   160 158 1
+  160 158 2   160 158 2   208 208 1   224 223 2   224 223 2   239 234 3
+  239 234 3   239 234 3   252 247 3   257 247 5   257 247 5   257 250 4
+  257 252 3   295 295 1   309 309 1   336 330 3   336 330 3   336 330 3
+  346 346 1   355 354 1   355 354 2   355 354 2   399 393 3   399 393 3
+  399 393 3   399 393 4   399 393 4   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 1   480 480 1   574 572 2   574 572 2   607 607 1
+  618 618 1   618 618 1   634 627 3   634 627 4   634 627 4   634 627 4
+  634 629 3   652 652 1   667 660 2   671 667 2   671 667 3   671 667 3
+  671 667 3   683 683 1   711 705 2   716 705 3   716 711 2   730 726 2
+  730 726 2   762 759 2   768 759 4   768 762 2   768 762 2   777 777 1
+  792 786 3   794 786 4   794 786 4   794 790 3   805 805 1   822 822 1
+  845 839 4   845 839 4   845 839 5   845 839 5   845 839 5   870 870 0
+  870 870 1   870 870 1   899 899 1   911 911 1   934 929 2   938 929 4
+  938 934 2   938 934 2   963 959 2   963 959 2   979 979 1}
+
+do_execsql_test 5.4.12.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 6 PRECEDING AND 7 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 25 23   {} 34 29
+  {} 36 31   {} 38 33   {} 38 33   {} 40 34   {} 41 35   {} 43 37   {} 43 37
+  {} 50 42   {} 60 51   {} 61 52   {} 64 55   {} 64 55   {} 67 57   {} 68 58
+  {} 69 59   {} 70 60   {} 72 62   {} 78 67   {} 78 67   {} 78 67   {} 85 72
+  {} 85 72   113 2 2   113 2 2   133 4 3   223 10 8   223 11 9   239 12 10
+  239 13 11   239 14 12   247 15 13   257 18 16   257 19 17   295 20 18
+  309 21 19   335 22 20   335 23 21   335 24 22   355 27 25   355 27 25
+  421 35 30   443 37 32   504 16 14   504 17 15   607 42 36   683 56 47
+  710 26 24   711 59 50   759 62 53   759 63 54   777 66 56   805 71 61
+  899 81 68   911 82 69   929 83 70   929 84 71   979 89 75   1185 32 28
+  1185 32 28   1191 29 26   1191 29 26   1334 51 43   1338 52 44   1338 52 44
+  1416 57 48   1416 58 49   1584 31 27   1684 73 63   1684 73 63   1889 46 39
+  1889 46 39   1891 49 41   1922 87 73   1922 88 74   2005 54 45   2005 55 46
+  2518 45 38   2518 48 40   2523 75 64   2523 76 65   2523 77 66}
+
+do_execsql_test 5.4.13.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {102 102 1   113 113 1   113 113 1   133 133 1   148 148 1   158 158 0
+  158 158 1   160 160 1   208 208 1   223 223 1   224 224 1   234 234 1
+  238 238 1   239 239 1   247 247 1   250 250 1   252 252 1   256 256 1
+  257 257 1   295 295 1   309 309 1   330 330 1   335 335 1   336 336 1
+  346 346 1   354 354 1   355 355 0   355 355 1   393 393 1   393 393 1
+  398 398 1   399 399 0   399 399 1   412 412 1   421 421 1   430 430 1
+  443 443 1   480 480 1   480 480 1   572 572 1   574 574 1   607 607 1
+  618 618 1   618 618 1   627 627 1   629 629 0   629 629 1   633 633 1
+  634 634 1   652 652 1   660 660 1   667 667 0   667 667 1   670 670 1
+  671 671 1   683 683 1   705 705 1   711 711 1   716 716 1   726 726 1
+  730 730 1   759 759 1   762 762 1   768 768 1   768 768 1   777 777 1
+  786 786 1   790 790 1   792 792 1   794 794 1   805 805 1   822 822 1
+  839 839 1   839 839 1   840 840 1   844 844 1   845 845 1   870 870 0
+  870 870 1   870 870 1   899 899 1   911 911 1   929 929 1   934 934 1
+  938 938 1   938 938 1   959 959 1   963 963 1   979 979 1}
+
+do_execsql_test 5.4.13.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST RANGE BETWEEN 0 PRECEDING AND 0 FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {{} 1 1   {} 5 4   {} 6 5   {} 6 5   {} 8 6   {} 9 7   {} 11 9   {} 12 10
+  {} 13 11   {} 16 14   {} 17 15   {} 18 16   {} 22 20   {} 24 22   {} 25 23
+  {} 26 24   {} 31 27   {} 34 29   {} 36 31   {} 38 33   {} 38 33   {} 40 34
+  {} 41 35   {} 43 37   {} 43 37   {} 49 41   {} 50 42   {} 51 43   {} 54 45
+  {} 59 50   {} 60 51   {} 61 52   {} 63 54   {} 64 55   {} 64 55   {} 67 57
+  {} 68 58   {} 69 59   {} 70 60   {} 72 62   {} 75 64   {} 76 65   {} 78 67
+  {} 78 67   {} 78 67   {} 84 71   {} 85 72   {} 85 72   113 2 2   113 2 2
+  133 4 3   223 10 8   239 14 12   247 15 13   257 19 17   295 20 18
+  309 21 19   335 23 21   355 27 25   355 27 25   393 29 26   393 29 26
+  399 32 28   399 32 28   421 35 30   443 37 32   607 42 36   627 45 38
+  629 46 39   629 46 39   633 48 40   667 52 44   667 52 44   671 55 46
+  683 56 47   705 57 48   711 58 49   759 62 53   777 66 56   805 71 61
+  839 73 63   839 73 63   845 77 66   899 81 68   911 82 69   929 83 70
+  959 87 73   963 88 74   979 89 75}
+
+do_execsql_test 5.4.14.1 {
+  SELECT max(c) OVER win,
+             min(c) OVER win,
+             count(a) OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
+        ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
+} {979 102 83   979 102 83   979 102 83   979 102 83   979 102 83   979 102 83
+  979 102 83   979 113 81   979 113 82   979 133 80   979 148 79   979 158 77
+  979 158 78   979 160 77   979 208 76   979 223 75   979 224 74   979 234 73
+  979 238 72   979 239 71   979 247 70   979 250 69   979 252 68   979 256 67
+  979 257 66   979 295 65   979 309 64   979 330 63   979 335 62   979 336 61
+  979 346 60   979 354 59   979 355 57   979 355 58   979 393 56   979 393 57
+  979 398 55   979 399 53   979 399 54   979 412 53   979 421 52   979 430 51
+  979 443 50   979 480 48   979 480 49   979 572 47   979 574 46   979 607 45
+  979 618 43   979 618 44   979 627 42   979 629 40   979 629 41   979 633 40
+  979 634 39   979 652 38   979 660 37   979 667 35   979 667 36   979 670 35
+  979 671 34   979 683 33   979 705 32   979 711 31   979 716 30   979 726 29
+  979 730 28   979 759 27   979 762 26   979 768 24   979 768 25   979 777 23
+  979 786 22   979 790 21   979 792 20   979 794 19   979 805 18   979 822 17
+  979 839 15   979 839 16   979 840 14   979 844 13   979 845 12   979 870 9
+  979 870 10   979 870 11   979 899 9   979 911 8   979 929 7}
+
+do_execsql_test 5.4.14.2 {
+  SELECT sum(c) FILTER (WHERE (c%2)!=0) OVER win,
+             rank() OVER win,
+             dense_rank() OVER win
+      FROM t3
+      WINDOW win AS (  ORDER BY c NULLS LAST, b NULLS LAST, a NULLS LAST
         ROWS BETWEEN 6 PRECEDING AND UNBOUNDED FOLLOWING   EXCLUDE TIES  )
-      ORDER BY 1 , 2 , 3
+      ORDER BY 1 NULLS FIRST, 2 NULLS FIRST, 3 NULLS FIRST
 } {3830 89 89   4741 88 88   5640 84 84   5640 85 85   5640 86 86   5640 87 87
   6485 81 81   6485 82 82   6485 83 83   7324 80 80   8163 78 78   8163 79 79
   8968 73 73   8968 74 74   8968 75 75   8968 76 76   8968 77 77   9745 69 69
@@ -4860,14 +6178,14 @@ do_execsql_test 6.0 {
 
 do_execsql_test 6.1 {
   SELECT group_concat(a, '.') OVER (
-    ORDER BY b  RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
+    ORDER BY b NULLS FIRST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
   )
   FROM t2
 } {A.B   A.B   {}}
 
 do_execsql_test 6.2 {
   SELECT group_concat(a, '.') OVER (
-    ORDER BY b DESC  RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
+    ORDER BY b DESC NULLS LAST RANGE BETWEEN 7 PRECEDING AND 2 PRECEDING
   )
   FROM t2
 } {{}   A.B   A.B}