xref: /sqlite-3.40.0/test/windowB.test (revision 41150bf3)
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