1e2ba6df9Sdan# 2019-08-30 2e2ba6df9Sdan# 3e2ba6df9Sdan# The author disclaims copyright to this source code. In place of 4e2ba6df9Sdan# a legal notice, here is a blessing: 5e2ba6df9Sdan# 6e2ba6df9Sdan# May you do good and not evil. 7e2ba6df9Sdan# May you find forgiveness for yourself and forgive others. 8e2ba6df9Sdan# May you share freely, never taking more than you give. 9e2ba6df9Sdan# 10e2ba6df9Sdan#*********************************************************************** 11e2ba6df9Sdan# Test cases for RANGE BETWEEN and especially with NULLS LAST 12dde13e6fSlarrybr# and for varying separator handling by group_concat(). 13e2ba6df9Sdan# 14e2ba6df9Sdan 15e2ba6df9Sdanset testdir [file dirname $argv0] 16e2ba6df9Sdansource $testdir/tester.tcl 17e2ba6df9Sdanset testprefix windowB 18e2ba6df9Sdan 19e2ba6df9Sdanifcapable !windowfunc { 20e2ba6df9Sdan finish_test 21e2ba6df9Sdan return 22e2ba6df9Sdan} 23e2ba6df9Sdan 24e2ba6df9Sdando_execsql_test 1.0 { 25e2ba6df9Sdan CREATE TABLE t1(a, b); 26e2ba6df9Sdan INSERT INTO t1 VALUES(NULL, 1); 27e2ba6df9Sdan INSERT INTO t1 VALUES(NULL, 2); 28e2ba6df9Sdan INSERT INTO t1 VALUES(NULL, 3); 29e2ba6df9Sdan} {} 30e2ba6df9Sdan 31e2ba6df9Sdanforeach {tn win} { 32e2ba6df9Sdan 1 { ORDER BY a RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING } 33e2ba6df9Sdan 2 { ORDER BY a NULLS LAST RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING } 34e2ba6df9Sdan 3 { ORDER BY a DESC RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING } 35e2ba6df9Sdan 4 { ORDER BY a DESC NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING } 36e2ba6df9Sdan 37e2ba6df9Sdan 5 { ORDER BY a NULLS LAST RANGE BETWEEN 1 FOLLOWING AND 2 FOLLOWING } 38e2ba6df9Sdan 6 { ORDER BY a DESC NULLS FIRST RANGE BETWEEN 1 FOLLOWING AND 2 FOLLOWING } 39e2ba6df9Sdan 40e2ba6df9Sdan 7 { ORDER BY a NULLS LAST RANGE BETWEEN 2 PRECEDING AND 1 PRECEDING } 41e2ba6df9Sdan 8 { ORDER BY a DESC NULLS FIRST RANGE BETWEEN 2 PRECEDING AND 1 PRECEDING } 42e2ba6df9Sdan} { 43e2ba6df9Sdan do_execsql_test 1.$tn " 44e2ba6df9Sdan SELECT sum(b) OVER win FROM t1 45e2ba6df9Sdan WINDOW win AS ( $win ) 46e2ba6df9Sdan " {6 6 6} 47e2ba6df9Sdan} 48e2ba6df9Sdan 49e2ba6df9Sdando_execsql_test 1.2 { 50e2ba6df9Sdan SELECT sum(b) OVER win FROM t1 51e2ba6df9Sdan WINDOW win AS ( 52e2ba6df9Sdan ORDER BY a DESC NULLS FIRST RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING 53e2ba6df9Sdan ) 54e2ba6df9Sdan} {6 6 6} 55e2ba6df9Sdan 56e2ba6df9Sdan#------------------------------------------------------------------------- 57e2ba6df9Sdanreset_db 58e2ba6df9Sdando_execsql_test 2.0 { 59e2ba6df9Sdan CREATE TABLE t1(a, b); 60e2ba6df9Sdan INSERT INTO t1 VALUES(1, NULL); 61e2ba6df9Sdan INSERT INTO t1 VALUES(2, 45); 62e2ba6df9Sdan INSERT INTO t1 VALUES(3, 66.2); 63e2ba6df9Sdan INSERT INTO t1 VALUES(4, 'hello world'); 64e2ba6df9Sdan INSERT INTO t1 VALUES(5, 'hello world'); 65e2ba6df9Sdan INSERT INTO t1 VALUES(6, X'1234'); 66e2ba6df9Sdan INSERT INTO t1 VALUES(7, X'1234'); 67e2ba6df9Sdan INSERT INTO t1 VALUES(8, NULL); 68e2ba6df9Sdan} 69e2ba6df9Sdan 70e2ba6df9Sdanforeach {tn win} { 71e2ba6df9Sdan 1 "ORDER BY b RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING" 72e2ba6df9Sdan 2 "ORDER BY b RANGE BETWEEN 2 FOLLOWING AND 2 FOLLOWING" 73e2ba6df9Sdan 3 "ORDER BY b NULLS LAST RANGE BETWEEN 1 PRECEDING AND 2 PRECEDING" 74e2ba6df9Sdan 4 "ORDER BY b NULLS LAST RANGE BETWEEN 2 FOLLOWING AND 2 FOLLOWING" 75e2ba6df9Sdan} { 76e2ba6df9Sdan do_execsql_test 2.1.$tn " 77e2ba6df9Sdan SELECT a, sum(a) OVER win FROM t1 78e2ba6df9Sdan WINDOW win AS ( $win ) 79e2ba6df9Sdan ORDER BY 1 80e2ba6df9Sdan " {1 9 2 {} 3 {} 4 9 5 9 6 13 7 13 8 9} 81e2ba6df9Sdan} 82e2ba6df9Sdan 83e2ba6df9Sdan#------------------------------------------------------------------------- 8451a75aaaSdanifcapable json1 { 85e2ba6df9Sdan reset_db 86e2ba6df9Sdan do_execsql_test 3.0 { 87fab5b073Sdrh CREATE TABLE testjson(id INTEGER PRIMARY KEY, j TEXT, x TEXT); 88fab5b073Sdrh INSERT INTO testjson VALUES(1, '{"a":1}', 'a'); 89fab5b073Sdrh INSERT INTO testjson VALUES(2, '{"b":2}', 'b'); 90fab5b073Sdrh INSERT INTO testjson VALUES(3, '{"c":3}', 'c'); 91fab5b073Sdrh INSERT INTO testjson VALUES(4, '{"d":4}', 'd'); 92e2ba6df9Sdan } 93e2ba6df9Sdan 94e2ba6df9Sdan do_execsql_test 3.1 { 95e2ba6df9Sdan SELECT json_group_array(json(j)) FROM testjson; 96e2ba6df9Sdan } { 9751a75aaaSdan {[{"a":1},{"b":2},{"c":3},{"d":4}]} 98e2ba6df9Sdan } 99e2ba6df9Sdan 100e2ba6df9Sdan do_execsql_test 3.2 { 101e2ba6df9Sdan SELECT json_group_array(json(j)) OVER (ORDER BY id) FROM testjson; 102e2ba6df9Sdan } { 103e2ba6df9Sdan {[{"a":1}]} 104e2ba6df9Sdan {[{"a":1},{"b":2}]} 10551a75aaaSdan {[{"a":1},{"b":2},{"c":3}]} 10651a75aaaSdan {[{"a":1},{"b":2},{"c":3},{"d":4}]} 10751a75aaaSdan } 10851a75aaaSdan 10951a75aaaSdan do_execsql_test 3.3 { 11051a75aaaSdan SELECT json_group_array(json(j)) OVER ( 111fab5b073Sdrh ORDER BY id RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 112fab5b073Sdrh EXCLUDE TIES 11351a75aaaSdan ) FROM testjson; 11451a75aaaSdan } { 11551a75aaaSdan {[{"a":1}]} 11651a75aaaSdan {[{"a":1},{"b":2}]} 11751a75aaaSdan {[{"a":1},{"b":2},{"c":3}]} 11851a75aaaSdan {[{"a":1},{"b":2},{"c":3},{"d":4}]} 11951a75aaaSdan } 12051a75aaaSdan 12151a75aaaSdan do_execsql_test 3.4 { 12251a75aaaSdan SELECT json_group_array(json(j)) OVER ( 12351a75aaaSdan ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 12451a75aaaSdan ) FROM testjson; 12551a75aaaSdan } { 12651a75aaaSdan {[{"a":1},{"b":2}]} 12751a75aaaSdan {[{"a":1},{"b":2},{"c":3}]} 12851a75aaaSdan {[{"b":2},{"c":3},{"d":4}]} 12951a75aaaSdan {[{"c":3},{"d":4}]} 13051a75aaaSdan } 13151a75aaaSdan 13251a75aaaSdan do_execsql_test 3.5 { 13351a75aaaSdan SELECT json_group_array(json(j)) OVER ( 13451a75aaaSdan ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING 13551a75aaaSdan ) FROM testjson; 13651a75aaaSdan } { 13751a75aaaSdan {[]} 13851a75aaaSdan {[{"a":1}]} 13951a75aaaSdan {[{"a":1},{"b":2}]} 14051a75aaaSdan {[{"b":2},{"c":3}]} 14151a75aaaSdan } 14251a75aaaSdan 143fab5b073Sdrh do_execsql_test 3.5a { 144fab5b073Sdrh UPDATE testjson SET j = replace(j,char(125),',"e":9'||char(125)); 145fab5b073Sdrh SELECT j FROM testjson; 146fab5b073Sdrh } { 147fab5b073Sdrh {{"a":1,"e":9}} 148fab5b073Sdrh {{"b":2,"e":9}} 149fab5b073Sdrh {{"c":3,"e":9}} 150fab5b073Sdrh {{"d":4,"e":9}} 151fab5b073Sdrh } 152fab5b073Sdrh do_execsql_test 3.5b { 153fab5b073Sdrh SELECT group_concat(x,'') OVER ( 154fab5b073Sdrh ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING 155fab5b073Sdrh ) FROM testjson ORDER BY id; 156fab5b073Sdrh } {bc cd d {}} 157fab5b073Sdrh do_execsql_test 3.5c { 15851a75aaaSdan SELECT json_group_array(json(j)) OVER ( 15951a75aaaSdan ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING 16051a75aaaSdan ) FROM testjson; 16151a75aaaSdan } { 162fab5b073Sdrh {[{"b":2,"e":9},{"c":3,"e":9}]} 163fab5b073Sdrh {[{"c":3,"e":9},{"d":4,"e":9}]} 164fab5b073Sdrh {[{"d":4,"e":9}]} 16551a75aaaSdan {[]} 16651a75aaaSdan } 167fab5b073Sdrh do_execsql_test 3.5d { 168fab5b073Sdrh SELECT json_group_object(x,json(j)) OVER ( 169fab5b073Sdrh ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING 17051a75aaaSdan ) FROM testjson; 17151a75aaaSdan } { 172fab5b073Sdrh {{"b":{"b":2,"e":9},"c":{"c":3,"e":9}}} 173fab5b073Sdrh {{"c":{"c":3,"e":9},"d":{"d":4,"e":9}}} 174fab5b073Sdrh {{"d":{"d":4,"e":9}}} 175fab5b073Sdrh {{}} 17651a75aaaSdan } 17751a75aaaSdan 178fab5b073Sdrh do_execsql_test 3.7b { 179fab5b073Sdrh SELECT group_concat(x,'') FILTER (WHERE id!=2) OVER ( 180fab5b073Sdrh ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING 181fab5b073Sdrh ) FROM testjson; 182fab5b073Sdrh } {{} a a c} 183fab5b073Sdrh 184fab5b073Sdrh do_execsql_test 3.7c { 185fab5b073Sdrh SELECT json_group_array(json(j)) FILTER (WHERE id!=2) OVER ( 186fab5b073Sdrh ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING 187fab5b073Sdrh ) FROM testjson 188fab5b073Sdrh } { 189fab5b073Sdrh {[]} 190fab5b073Sdrh {[{"a":1,"e":9}]} 191fab5b073Sdrh {[{"a":1,"e":9}]} 192fab5b073Sdrh {[{"c":3,"e":9}]} 193fab5b073Sdrh } 194fab5b073Sdrh do_execsql_test 3.7d { 195fab5b073Sdrh SELECT json_group_object(x,json(j)) FILTER (WHERE id!=2) OVER ( 196fab5b073Sdrh ORDER BY id ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING 197fab5b073Sdrh ) FROM testjson 198fab5b073Sdrh } { 199fab5b073Sdrh {{}} 200fab5b073Sdrh {{"a":{"a":1,"e":9}}} 201fab5b073Sdrh {{"a":{"a":1,"e":9}}} 202fab5b073Sdrh {{"c":{"c":3,"e":9}}} 203e2ba6df9Sdan } 204e087a7c3Sdrh} 205e2ba6df9Sdan 206b42eb357Sdan#------------------------------------------------------------------------- 207b42eb357Sdanreset_db 208b42eb357Sdando_execsql_test 4.0 { 209b42eb357Sdan CREATE TABLE x(a); 210b42eb357Sdan INSERT INTO x VALUES(1); 211b42eb357Sdan INSERT INTO x VALUES(2); 212b42eb357Sdan} 213b42eb357Sdan 214b42eb357Sdando_execsql_test 4.1 { 215b42eb357Sdan WITH y AS ( 216b42eb357Sdan SELECT Row_Number() OVER (win) FROM x WINDOW win AS (PARTITION BY a) 217b42eb357Sdan ) 218b42eb357Sdan SELECT * FROM y; 219b42eb357Sdan} { 220b42eb357Sdan 1 1 221b42eb357Sdan} 222b42eb357Sdan 223b42eb357Sdando_catchsql_test 4.2 { 224b42eb357Sdan WITH y AS ( 225b42eb357Sdan SELECT Row_Number() OVER (win) FROM x WINDOW win AS (PARTITION 226b42eb357Sdan BY fake_column)) 227b42eb357Sdan SELECT * FROM y; 228b42eb357Sdan} {1 {no such column: fake_column}} 229b42eb357Sdan 230b42eb357Sdando_catchsql_test 4.3 { 231b42eb357Sdan SELECT 1 WINDOW win AS (PARTITION BY fake_column); 232b42eb357Sdan} {0 1} 233b42eb357Sdan 23437d296a7Sdan#------------------------------------------------------------------------- 23537d296a7Sdanreset_db 23637d296a7Sdando_execsql_test 5.0 { 23737d296a7Sdan CREATE TABLE t1(a, c); 23837d296a7Sdan CREATE INDEX i1 ON t1(a); 23937d296a7Sdan 24037d296a7Sdan INSERT INTO t1 VALUES(0, 421); 24137d296a7Sdan INSERT INTO t1 VALUES(1, 844); 24237d296a7Sdan INSERT INTO t1 VALUES(2, 1001); 24337d296a7Sdan} 24437d296a7Sdan 24537d296a7Sdando_execsql_test 5.1 { 24637d296a7Sdan SELECT a, sum(c) OVER ( 24737d296a7Sdan ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING 24837d296a7Sdan ) FROM t1; 24937d296a7Sdan} {0 {} 1 {} 2 {}} 25037d296a7Sdan 25137d296a7Sdando_execsql_test 5.2 { 25237d296a7Sdan INSERT INTO t1 VALUES(NULL, 123); 25337d296a7Sdan INSERT INTO t1 VALUES(NULL, 111); 25437d296a7Sdan INSERT INTO t1 VALUES('xyz', 222); 25537d296a7Sdan INSERT INTO t1 VALUES('xyz', 333); 25637d296a7Sdan 25737d296a7Sdan SELECT a, sum(c) OVER ( 25837d296a7Sdan ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING 25937d296a7Sdan ) FROM t1; 26037d296a7Sdan} {{} 234 {} 234 0 {} 1 {} 2 {} xyz 555 xyz 555} 26137d296a7Sdan 26237d296a7Sdando_execsql_test 5.3 { 26337d296a7Sdan SELECT a, sum(c) OVER ( 26437d296a7Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING 26537d296a7Sdan ) FROM t1; 26637d296a7Sdan} {{} 234 {} 234 0 {} 1 {} 2 {} xyz 555 xyz 555} 26737d296a7Sdan 26837d296a7Sdando_execsql_test 5.4 { 26937d296a7Sdan SELECT a, sum(c) OVER ( 27037d296a7Sdan ORDER BY a RANGE BETWEEN 0 PRECEDING AND 3 PRECEDING EXCLUDE NO OTHERS 27137d296a7Sdan ) FROM t1; 27237d296a7Sdan} {{} 234 {} 234 0 {} 1 {} 2 {} xyz 555 xyz 555} 27337d296a7Sdan 27437d296a7Sdando_execsql_test 5.5 { 27537d296a7Sdan SELECT a, sum(c) OVER ( 27637d296a7Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING EXCLUDE NO OTHERS 27737d296a7Sdan ) FROM t1; 27837d296a7Sdan} {{} 234 {} 234 0 {} 1 {} 2 {} xyz 555 xyz 555} 27937d296a7Sdan 28037d296a7Sdan#------------------------------------------------------------------------- 28137d296a7Sdanreset_db 28237d296a7Sdando_execsql_test 6.0 { 28337d296a7Sdan CREATE TABLE t1(a, c); 28437d296a7Sdan CREATE INDEX i1 ON t1(a); 28537d296a7Sdan 28637d296a7Sdan INSERT INTO t1 VALUES(7, 997); 28737d296a7Sdan INSERT INTO t1 VALUES(8, 997); 28837d296a7Sdan INSERT INTO t1 VALUES('abc', 1001); 28937d296a7Sdan} 29037d296a7Sdando_execsql_test 6.1 { 29137d296a7Sdan SELECT a, sum(c) OVER ( 29237d296a7Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING 29337d296a7Sdan ) FROM t1; 29437d296a7Sdan} {7 {} 8 {} abc 1001} 29537d296a7Sdando_execsql_test 6.2 { 29637d296a7Sdan SELECT a, sum(c) OVER ( 29737d296a7Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING EXCLUDE NO OTHERS 29837d296a7Sdan ) FROM t1; 29937d296a7Sdan} {7 {} 8 {} abc 1001} 30037d296a7Sdan 301e7579a53Sdan#------------------------------------------------------------------------- 302e7579a53Sdanreset_db 303e7579a53Sdando_execsql_test 7.0 { 304e7579a53Sdan CREATE TABLE t1(a, c); 305e7579a53Sdan CREATE INDEX i1 ON t1(a); 306e7579a53Sdan 307e7579a53Sdan INSERT INTO t1 VALUES(NULL, 46); 308e7579a53Sdan INSERT INTO t1 VALUES(NULL, 45); 309e7579a53Sdan INSERT INTO t1 VALUES(7, 997); 310e7579a53Sdan INSERT INTO t1 VALUES(7, 1000); 311e7579a53Sdan INSERT INTO t1 VALUES(8, 997); 312e7579a53Sdan INSERT INTO t1 VALUES(8, 1000); 313e7579a53Sdan INSERT INTO t1 VALUES('abc', 1001); 314e7579a53Sdan INSERT INTO t1 VALUES('abc', 1004); 315e7579a53Sdan INSERT INTO t1 VALUES('xyz', 3333); 316e7579a53Sdan} 317e7579a53Sdan 318e7579a53Sdando_execsql_test 7.1 { 319e7579a53Sdan SELECT a, max(c) OVER ( 320e7579a53Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING 321e7579a53Sdan ) FROM t1; 322e7579a53Sdan} {{} 46 {} 46 7 {} 7 {} 8 {} 8 {} abc 1004 abc 1004 xyz 3333} 323e7579a53Sdando_execsql_test 7.2 { 324e7579a53Sdan SELECT a, min(c) OVER ( 325e7579a53Sdan ORDER BY a RANGE BETWEEN 2 FOLLOWING AND 0 FOLLOWING 326e7579a53Sdan ) FROM t1; 327e7579a53Sdan} {{} 45 {} 45 7 {} 7 {} 8 {} 8 {} abc 1001 abc 1001 xyz 3333} 328e7579a53Sdan 329e7579a53Sdando_execsql_test 7.3 { 330e7579a53Sdan SELECT a, max(c) OVER ( 331e7579a53Sdan ORDER BY a RANGE BETWEEN 0 PRECEDING AND 2 PRECEDING 332e7579a53Sdan ) FROM t1; 333e7579a53Sdan} {{} 46 {} 46 7 {} 7 {} 8 {} 8 {} abc 1004 abc 1004 xyz 3333} 334e7579a53Sdando_execsql_test 7.4 { 335e7579a53Sdan SELECT a, min(c) OVER ( 336e7579a53Sdan ORDER BY a RANGE BETWEEN 0 PRECEDING AND 2 PRECEDING 337e7579a53Sdan ) FROM t1; 338e7579a53Sdan} {{} 45 {} 45 7 {} 7 {} 8 {} 8 {} abc 1001 abc 1001 xyz 3333} 339e7579a53Sdan 3407f8653a2Sdan#------------------------------------------------------------------------- 3417f8653a2Sdanreset_db 3427f8653a2Sdando_execsql_test 8.0 { 3437f8653a2Sdan BEGIN TRANSACTION; 3447f8653a2Sdan CREATE TABLE t1(a, c); 3457f8653a2Sdan INSERT INTO t1 VALUES('aa', 111); 3467f8653a2Sdan INSERT INTO t1 VALUES('BB', 660); 3477f8653a2Sdan INSERT INTO t1 VALUES('CC', 938); 3487f8653a2Sdan INSERT INTO t1 VALUES('dd', 979); 3497f8653a2Sdan COMMIT; 3507f8653a2Sdan 3517f8653a2Sdan CREATE INDEX i1 ON t1(a COLLATE nocase); 3527f8653a2Sdan} 3537f8653a2Sdan 3547f8653a2Sdando_execsql_test 8.1 { 3557f8653a2Sdan SELECT sum(c) OVER 3567f8653a2Sdan (ORDER BY a COLLATE nocase RANGE BETWEEN 10.0 PRECEDING AND 5.0 PRECEDING) 3577f8653a2Sdan FROM t1; 3587f8653a2Sdan} {111 660 938 979} 3597f8653a2Sdan 360dde13e6fSlarrybrdo_execsql_test 9.0 { 361dde13e6fSlarrybr CREATE TABLE seps(x); 362dde13e6fSlarrybr INSERT INTO seps(x) VALUES ('1'), ('22'), ('333'), ('4444'); 363dde13e6fSlarrybr SELECT group_concat('-', x) 364dde13e6fSlarrybr OVER ( ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) 365dde13e6fSlarrybr FROM seps; 366dde13e6fSlarrybr} {-22- -22-333- -333-4444- -4444-} 3677f8653a2Sdan 368*41150bf3Sdan#------------------------------------------------------------------------- 369*41150bf3Sdanreset_db 370*41150bf3Sdando_execsql_test 10.1 { 371*41150bf3Sdan CREATE TABLE t1(i INTEGER PRIMARY KEY, v); 372*41150bf3Sdan INSERT INTO t1 VALUES( 1, 'one' ); 373*41150bf3Sdan INSERT INTO t1 VALUES( 2, 'two' ); 374*41150bf3Sdan} 375*41150bf3Sdan 376*41150bf3Sdando_execsql_test 10.2 { 377*41150bf3Sdan SELECT 378*41150bf3Sdan json_group_array( v ) OVER w, 379*41150bf3Sdan json_group_array( v ) OVER w 380*41150bf3Sdan FROM t1 381*41150bf3Sdan window w as ( 382*41150bf3Sdan range between unbounded preceding and unbounded following 383*41150bf3Sdan ) 384*41150bf3Sdan} { 385*41150bf3Sdan {["one","two"]} 386*41150bf3Sdan {["one","two"]} 387*41150bf3Sdan {["one","two"]} 388*41150bf3Sdan {["one","two"]} 389*41150bf3Sdan} 390*41150bf3Sdan 391*41150bf3Sdando_execsql_test 10.3 { 392*41150bf3Sdan SELECT 393*41150bf3Sdan group_concat( v ) OVER w, 394*41150bf3Sdan json_group_array( v ) OVER w, 395*41150bf3Sdan json_group_array( v ) OVER w, 396*41150bf3Sdan group_concat( v ) OVER w 397*41150bf3Sdan FROM t1 398*41150bf3Sdan window w as ( 399*41150bf3Sdan range between unbounded preceding and unbounded following 400*41150bf3Sdan ) 401*41150bf3Sdan} { 402*41150bf3Sdan one,two 403*41150bf3Sdan {["one","two"]} 404*41150bf3Sdan {["one","two"]} 405*41150bf3Sdan one,two 406*41150bf3Sdan 407*41150bf3Sdan one,two 408*41150bf3Sdan {["one","two"]} 409*41150bf3Sdan {["one","two"]} 410*41150bf3Sdan one,two 411*41150bf3Sdan} 412*41150bf3Sdan 413e2ba6df9Sdanfinish_test 414