xref: /sqlite-3.40.0/test/window2.test (revision 067b92ba)
1# 2018 May 19
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11# This file implements regression tests for SQLite library.
12#
13
14####################################################
15# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED!
16####################################################
17
18set testdir [file dirname $argv0]
19source $testdir/tester.tcl
20set testprefix window2
21
22ifcapable !windowfunc { finish_test ; return }
23do_execsql_test 1.0 {
24  DROP TABLE IF EXISTS t1;
25  CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER);
26  INSERT INTO t1 VALUES(1, 'odd',  'one',   1);
27  INSERT INTO t1 VALUES(2, 'even', 'two',   2);
28  INSERT INTO t1 VALUES(3, 'odd',  'three', 3);
29  INSERT INTO t1 VALUES(4, 'even', 'four',  4);
30  INSERT INTO t1 VALUES(5, 'odd',  'five',  5);
31  INSERT INTO t1 VALUES(6, 'even', 'six',   6);
32} {}
33
34do_execsql_test 1.1 {
35  SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1;
36} {four 4   six 10   two 12   five 5   one 6   three 9}
37
38do_execsql_test 1.2 {
39  SELECT sum(d) OVER () FROM t1;
40} {21   21   21   21   21   21}
41
42do_execsql_test 1.3 {
43  SELECT sum(d) OVER (PARTITION BY b) FROM t1;
44} {12   12   12   9   9   9}
45
46#==========================================================================
47
48do_execsql_test 2.1 {
49  SELECT a, sum(d) OVER (
50    ORDER BY d
51    ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING
52  ) FROM t1
53} {1 3   2 6   3 10   4 15   5 21   6 21}
54
55do_execsql_test 2.2 {
56  SELECT a, sum(d) OVER (
57    ORDER BY d
58    ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
59  ) FROM t1
60} {1 21   2 21   3 21   4 21   5 21   6 21}
61
62do_execsql_test 2.3 {
63  SELECT a, sum(d) OVER (
64    ORDER BY d
65    ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING
66  ) FROM t1
67} {1 21   2 21   3 20   4 18   5 15   6 11}
68
69do_execsql_test 2.4 {
70  SELECT a, sum(d) OVER (
71    ORDER BY d
72    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
73  ) FROM t1
74} {1 3   2 6   3 9   4 12   5 15   6 11}
75
76do_execsql_test 2.5 {
77  SELECT a, sum(d) OVER (
78    ORDER BY d
79    ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING
80  ) FROM t1
81} {1 1   2 3   3 5   4 7   5 9   6 11}
82
83do_execsql_test 2.6 {
84  SELECT a, sum(d) OVER (
85    PARTITION BY b
86    ORDER BY d
87    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
88  ) FROM t1
89} {2 6   4 12   6 10   1 4   3 9   5 8}
90
91do_execsql_test 2.7 {
92  SELECT a, sum(d) OVER (
93    PARTITION BY b
94    ORDER BY d
95    ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING
96  ) FROM t1
97} {2 2   4 4   6 6   1 1   3 3   5 5}
98
99do_execsql_test 2.8 {
100  SELECT a, sum(d) OVER (
101    ORDER BY d
102    ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
103  ) FROM t1
104} {1 6   2 9   3 12   4 15   5 11   6 6}
105
106do_execsql_test 2.9 {
107  SELECT a, sum(d) OVER (
108    ORDER BY d
109    ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING
110  ) FROM t1
111} {1 6   2 10   3 15   4 21   5 21   6 21}
112
113do_execsql_test 2.10 {
114  SELECT a, sum(d) OVER (
115    ORDER BY d
116    ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
117  ) FROM t1
118} {1 6   2 9   3 12   4 15   5 11   6 6}
119
120do_execsql_test 2.11 {
121  SELECT a, sum(d) OVER (
122    ORDER BY d
123    ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
124  ) FROM t1
125} {1 1   2 3   3 6   4 9   5 12   6 15}
126
127do_execsql_test 2.13 {
128  SELECT a, sum(d) OVER (
129    ORDER BY d
130    ROWS BETWEEN 2 PRECEDING AND UNBOUNDED FOLLOWING
131  ) FROM t1
132} {1 21   2 21   3 21   4 20   5 18   6 15}
133
134do_execsql_test 2.14 {
135  SELECT a, sum(d) OVER (
136    ORDER BY d
137    ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING
138  ) FROM t1
139} {1 {}   2 1   3 3   4 6   5 9   6 12}
140
141do_execsql_test 2.15 {
142  SELECT a, sum(d) OVER (
143    PARTITION BY b
144    ORDER BY d
145    ROWS BETWEEN 1 PRECEDING AND 0 PRECEDING
146  ) FROM t1
147} {2 2   4 6   6 10   1 1   3 4   5 8}
148
149do_execsql_test 2.16 {
150  SELECT a, sum(d) OVER (
151    PARTITION BY b
152    ORDER BY d
153    ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
154  ) FROM t1
155} {2 {}   4 2   6 4   1 {}   3 1   5 3}
156
157do_execsql_test 2.17 {
158  SELECT a, sum(d) OVER (
159    PARTITION BY b
160    ORDER BY d
161    ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING
162  ) FROM t1
163} {2 {}   4 {}   6 {}   1 {}   3 {}   5 {}}
164
165do_execsql_test 2.18 {
166  SELECT a, sum(d) OVER (
167    PARTITION BY b
168    ORDER BY d
169    ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING
170  ) FROM t1
171} {2 {}   4 {}   6 2   1 {}   3 {}   5 1}
172
173do_execsql_test 2.19 {
174  SELECT a, sum(d) OVER (
175    PARTITION BY b
176    ORDER BY d
177    ROWS BETWEEN 1 FOLLOWING AND 3 FOLLOWING
178  ) FROM t1
179} {2 10   4 6   6 {}   1 8   3 5   5 {}}
180
181do_execsql_test 2.20 {
182  SELECT a, sum(d) OVER (
183    ORDER BY d
184    ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING
185  ) FROM t1
186} {1 5   2 7   3 9   4 11   5 6   6 {}}
187
188do_execsql_test 2.21 {
189  SELECT a, sum(d) OVER (
190    ORDER BY d
191    ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
192  ) FROM t1
193} {1 20   2 18   3 15   4 11   5 6   6 {}}
194
195do_execsql_test 2.22 {
196  SELECT a, sum(d) OVER (
197    PARTITION BY b
198    ORDER BY d
199    ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
200  ) FROM t1
201} {2 10   4 6   6 {}   1 8   3 5   5 {}}
202
203do_execsql_test 2.23 {
204  SELECT a, sum(d) OVER (
205    ORDER BY d
206    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
207  ) FROM t1
208} {1 21   2 20   3 18   4 15   5 11   6 6}
209
210do_execsql_test 2.24 {
211  SELECT a, sum(d) OVER (
212    PARTITION BY a%2
213    ORDER BY d
214    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
215  ) FROM t1
216} {2 12   4 10   6 6   1 9   3 8   5 5}
217
218do_execsql_test 2.25 {
219  SELECT a, sum(d) OVER (
220    ORDER BY d
221    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
222  ) FROM t1
223} {1 21   2 21   3 21   4 21   5 21   6 21}
224
225do_execsql_test 2.26 {
226  SELECT a, sum(d) OVER (
227    PARTITION BY b
228    ORDER BY d
229    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
230  ) FROM t1
231} {2 12   4 12   6 12   1 9   3 9   5 9}
232
233do_execsql_test 2.27 {
234  SELECT a, sum(d) OVER (
235    ORDER BY d
236    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
237  ) FROM t1
238} {1 1   2 2   3 3   4 4   5 5   6 6}
239
240do_execsql_test 2.28 {
241  SELECT a, sum(d) OVER (
242    PARTITION BY b
243    ORDER BY d
244    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
245  ) FROM t1
246} {2 2   4 4   6 6   1 1   3 3   5 5}
247
248do_execsql_test 2.29 {
249  SELECT a, sum(d) OVER (
250    ORDER BY d
251    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
252  ) FROM t1
253} {1 21   2 20   3 18   4 15   5 11   6 6}
254
255do_execsql_test 2.30 {
256  SELECT a, sum(d) OVER (
257    ORDER BY b
258    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
259  ) FROM t1
260} {2 21   4 21   6 21   1 9   3 9   5 9}
261
262do_execsql_test 3.1 {
263  SELECT a, sum(d) OVER (
264    PARTITION BY b ORDER BY d
265    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
266  ) FROM t1
267} {2 12   4 10   6 6   1 9   3 8   5 5}
268
269do_execsql_test 3.2 {
270  SELECT a, sum(d) OVER (
271    ORDER BY b
272    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
273  ) FROM t1
274} {2 21   4 21   6 21   1 9   3 9   5 9}
275
276do_execsql_test 3.3 {
277  SELECT a, sum(d) OVER (
278    ORDER BY d
279    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
280  ) FROM t1
281} {1 21   2 21   3 21   4 21   5 21   6 21}
282
283do_execsql_test 3.4 {
284  SELECT a, sum(d) OVER (
285    ORDER BY d/2
286    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
287  ) FROM t1
288} {1 1   2 3   3 6   4 10   5 15   6 21}
289
290#==========================================================================
291
292do_execsql_test 4.0 {
293  DROP TABLE IF EXISTS t2;
294  CREATE TABLE t2(a INTEGER PRIMARY KEY, b INTEGER);
295  INSERT INTO t2(a, b) VALUES
296  (1,0), (2,74), (3,41), (4,74), (5,23), (6,99), (7,26), (8,33), (9,2),
297  (10,89), (11,81), (12,96), (13,59), (14,38), (15,68), (16,39), (17,62),
298  (18,91), (19,46), (20,6), (21,99), (22,97), (23,27), (24,46), (25,78),
299  (26,54), (27,97), (28,8), (29,67), (30,29), (31,93), (32,84), (33,77),
300  (34,23), (35,16), (36,16), (37,93), (38,65), (39,35), (40,47), (41,7),
301  (42,86), (43,74), (44,61), (45,91), (46,85), (47,24), (48,85), (49,43),
302  (50,59), (51,12), (52,32), (53,56), (54,3), (55,91), (56,22), (57,90),
303  (58,55), (59,15), (60,28), (61,89), (62,25), (63,47), (64,1), (65,56),
304  (66,40), (67,43), (68,56), (69,16), (70,75), (71,36), (72,89), (73,98),
305  (74,76), (75,81), (76,4), (77,94), (78,42), (79,30), (80,78), (81,33),
306  (82,29), (83,53), (84,63), (85,2), (86,87), (87,37), (88,80), (89,84),
307  (90,72), (91,41), (92,9), (93,61), (94,73), (95,95), (96,65), (97,13),
308  (98,58), (99,96), (100,98), (101,1), (102,21), (103,74), (104,65), (105,35),
309  (106,5), (107,73), (108,11), (109,51), (110,87), (111,41), (112,12), (113,8),
310  (114,20), (115,31), (116,31), (117,15), (118,95), (119,22), (120,73),
311  (121,79), (122,88), (123,34), (124,8), (125,11), (126,49), (127,34),
312  (128,90), (129,59), (130,96), (131,60), (132,55), (133,75), (134,77),
313  (135,44), (136,2), (137,7), (138,85), (139,57), (140,74), (141,29), (142,70),
314  (143,59), (144,19), (145,39), (146,26), (147,26), (148,47), (149,80),
315  (150,90), (151,36), (152,58), (153,47), (154,9), (155,72), (156,72), (157,66),
316  (158,33), (159,93), (160,75), (161,64), (162,81), (163,9), (164,23), (165,37),
317  (166,13), (167,12), (168,14), (169,62), (170,91), (171,36), (172,91),
318  (173,33), (174,15), (175,34), (176,36), (177,99), (178,3), (179,95), (180,69),
319  (181,58), (182,52), (183,30), (184,50), (185,84), (186,10), (187,84),
320  (188,33), (189,21), (190,39), (191,44), (192,58), (193,30), (194,38),
321  (195,34), (196,83), (197,27), (198,82), (199,17), (200,7);
322} {}
323
324do_execsql_test 4.1 {
325  SELECT a, sum(b) OVER (
326    PARTITION BY (b%10)
327    ORDER BY b
328  ) FROM t2 ORDER BY a;
329} {1 0   2 754   3 251   4 754   5 101   6 1247   7 132   8 266   9 6   10 950
330  11 667   12 1052   13 535   14 128   15 428   16 250   17 336   18 1122
331  19 368   20 6   21 1247   22 1000   23 92   24 368   25 584   26 320
332  27 1000   28 24   29 478   30 133   31 1049   32 1090   33 632   34 101
333  35 54   36 54   37 1049   38 450   39 145   40 354   41 21   42 764
334  43 754   44 424   45 1122   46 930   47 42   48 930   49 352   50 535
335  51 42   52 118   53 536   54 6   55 1122   56 86   57 770   58 255   59 50
336  60 52   61 950   62 75   63 354   64 2   65 536   66 160   67 352   68 536
337  69 54   70 675   71 276   72 950   73 868   74 678   75 667   76 4
338  77 1184   78 160   79 120   80 584   81 266   82 133   83 405   84 468
339  85 6   86 806   87 166   88 500   89 1090   90 552   91 251   92 27
340  93 424   94 687   95 1215   96 450   97 32   98 360   99 1052   100 868
341  101 2   102 66   103 754   104 450   105 145   106 5   107 687   108 24
342  109 302   110 806   111 251   112 42   113 24   114 30   115 128   116 128
343  117 50   118 1215   119 86   120 687   121 683   122 672   123 178   124 24
344  125 24   126 299   127 178   128 770   129 535   130 1052   131 270
345  132 255   133 675   134 632   135 266   136 6   137 21   138 930   139 411
346  140 754   141 133   142 340   143 535   144 46   145 250   146 132
347  147 132   148 354   149 500   150 770   151 276   152 360   153 354
348  154 27   155 552   156 552   157 602   158 266   159 1049   160 675
349  161 384   162 667   163 27   164 101   165 166   166 32   167 42   168 18
350  169 336   170 1122   171 276   172 1122   173 266   174 50   175 178
351  176 276   177 1247   178 6   179 1215   180 604   181 360   182 212
352  183 120   184 210   185 1090   186 10   187 1090   188 266   189 66
353  190 250   191 266   192 360   193 120   194 128   195 178   196 770
354  197 92   198 634   199 38   200 21}
355
356do_execsql_test 4.2 {
357  SELECT a, sum(b) OVER (
358    PARTITION BY (b%10)
359    ORDER BY b
360    RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
361  ) FROM t2 ORDER BY a;
362} {1 0   2 754   3 251   4 754   5 101   6 1247   7 132   8 266   9 6   10 950
363  11 667   12 1052   13 535   14 128   15 428   16 250   17 336   18 1122
364  19 368   20 6   21 1247   22 1000   23 92   24 368   25 584   26 320
365  27 1000   28 24   29 478   30 133   31 1049   32 1090   33 632   34 101
366  35 54   36 54   37 1049   38 450   39 145   40 354   41 21   42 764
367  43 754   44 424   45 1122   46 930   47 42   48 930   49 352   50 535
368  51 42   52 118   53 536   54 6   55 1122   56 86   57 770   58 255   59 50
369  60 52   61 950   62 75   63 354   64 2   65 536   66 160   67 352   68 536
370  69 54   70 675   71 276   72 950   73 868   74 678   75 667   76 4
371  77 1184   78 160   79 120   80 584   81 266   82 133   83 405   84 468
372  85 6   86 806   87 166   88 500   89 1090   90 552   91 251   92 27
373  93 424   94 687   95 1215   96 450   97 32   98 360   99 1052   100 868
374  101 2   102 66   103 754   104 450   105 145   106 5   107 687   108 24
375  109 302   110 806   111 251   112 42   113 24   114 30   115 128   116 128
376  117 50   118 1215   119 86   120 687   121 683   122 672   123 178   124 24
377  125 24   126 299   127 178   128 770   129 535   130 1052   131 270
378  132 255   133 675   134 632   135 266   136 6   137 21   138 930   139 411
379  140 754   141 133   142 340   143 535   144 46   145 250   146 132
380  147 132   148 354   149 500   150 770   151 276   152 360   153 354
381  154 27   155 552   156 552   157 602   158 266   159 1049   160 675
382  161 384   162 667   163 27   164 101   165 166   166 32   167 42   168 18
383  169 336   170 1122   171 276   172 1122   173 266   174 50   175 178
384  176 276   177 1247   178 6   179 1215   180 604   181 360   182 212
385  183 120   184 210   185 1090   186 10   187 1090   188 266   189 66
386  190 250   191 266   192 360   193 120   194 128   195 178   196 770
387  197 92   198 634   199 38   200 21}
388
389do_execsql_test 4.3 {
390  SELECT b, sum(b) OVER (
391    ORDER BY b
392    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
393  ) FROM t2 ORDER BY b;
394} {0 0   1 1   1 2   2 4   2 6   2 8   3 11   3 14   4 18   5 23   6 29   7 36
395  7 43   7 50   8 58   8 66   8 74   9 83   9 92   9 101   10 111   11 122
396  11 133   12 145   12 157   12 169   13 182   13 195   14 209   15 224
397  15 239   15 254   16 270   16 286   16 302   17 319   19 338   20 358
398  21 379   21 400   22 422   22 444   23 467   23 490   23 513   24 537
399  25 562   26 588   26 614   26 640   27 667   27 694   28 722   29 751
400  29 780   29 809   30 839   30 869   30 899   31 930   31 961   32 993
401  33 1026   33 1059   33 1092   33 1125   33 1158   34 1192   34 1226
402  34 1260   34 1294   35 1329   35 1364   36 1400   36 1436   36 1472
403  36 1508   37 1545   37 1582   38 1620   38 1658   39 1697   39 1736
404  39 1775   40 1815   41 1856   41 1897   41 1938   42 1980   43 2023
405  43 2066   44 2110   44 2154   46 2200   46 2246   47 2293   47 2340
406  47 2387   47 2434   49 2483   50 2533   51 2584   52 2636   53 2689
407  54 2743   55 2798   55 2853   56 2909   56 2965   56 3021   57 3078
408  58 3136   58 3194   58 3252   58 3310   59 3369   59 3428   59 3487
409  59 3546   60 3606   61 3667   61 3728   62 3790   62 3852   63 3915
410  64 3979   65 4044   65 4109   65 4174   66 4240   67 4307   68 4375
411  69 4444   70 4514   72 4586   72 4658   72 4730   73 4803   73 4876
412  73 4949   74 5023   74 5097   74 5171   74 5245   74 5319   75 5394
413  75 5469   75 5544   76 5620   77 5697   77 5774   78 5852   78 5930
414  79 6009   80 6089   80 6169   81 6250   81 6331   81 6412   82 6494
415  83 6577   84 6661   84 6745   84 6829   84 6913   85 6998   85 7083
416  85 7168   86 7254   87 7341   87 7428   88 7516   89 7605   89 7694
417  89 7783   90 7873   90 7963   90 8053   91 8144   91 8235   91 8326
418  91 8417   91 8508   93 8601   93 8694   93 8787   94 8881   95 8976
419  95 9071   95 9166   96 9262   96 9358   96 9454   97 9551   97 9648
420  98 9746   98 9844   99 9943   99 10042   99 10141}
421
422do_execsql_test 4.4 {
423  SELECT b, sum(b) OVER (
424    ORDER BY b
425    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
426  ) FROM t2 ORDER BY b;
427} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
428  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
429  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
430  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
431  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
432  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
433  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
434  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
435  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
436  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
437  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
438  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
439  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
440  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
441  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
442  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
443  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
444  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
445  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
446  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
447  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
448  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
449  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
450  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
451  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
452  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
453  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
454  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
455  98 10141   99 10141   99 10141   99 10141}
456
457do_execsql_test 4.5 {
458  SELECT b, sum(b) OVER (
459    ORDER BY b
460    RANGE BETWEEN CURRENT ROW AND CURRENT ROW
461  ) FROM t2 ORDER BY b;
462} {0 0   1 2   1 2   2 6   2 6   2 6   3 6   3 6   4 4   5 5   6 6   7 21
463  7 21   7 21   8 24   8 24   8 24   9 27   9 27   9 27   10 10   11 22
464  11 22   12 36   12 36   12 36   13 26   13 26   14 14   15 45   15 45
465  15 45   16 48   16 48   16 48   17 17   19 19   20 20   21 42   21 42
466  22 44   22 44   23 69   23 69   23 69   24 24   25 25   26 78   26 78
467  26 78   27 54   27 54   28 28   29 87   29 87   29 87   30 90   30 90
468  30 90   31 62   31 62   32 32   33 165   33 165   33 165   33 165   33 165
469  34 136   34 136   34 136   34 136   35 70   35 70   36 144   36 144
470  36 144   36 144   37 74   37 74   38 76   38 76   39 117   39 117   39 117
471  40 40   41 123   41 123   41 123   42 42   43 86   43 86   44 88   44 88
472  46 92   46 92   47 188   47 188   47 188   47 188   49 49   50 50   51 51
473  52 52   53 53   54 54   55 110   55 110   56 168   56 168   56 168   57 57
474  58 232   58 232   58 232   58 232   59 236   59 236   59 236   59 236
475  60 60   61 122   61 122   62 124   62 124   63 63   64 64   65 195   65 195
476  65 195   66 66   67 67   68 68   69 69   70 70   72 216   72 216   72 216
477  73 219   73 219   73 219   74 370   74 370   74 370   74 370   74 370
478  75 225   75 225   75 225   76 76   77 154   77 154   78 156   78 156
479  79 79   80 160   80 160   81 243   81 243   81 243   82 82   83 83   84 336
480  84 336   84 336   84 336   85 255   85 255   85 255   86 86   87 174
481  87 174   88 88   89 267   89 267   89 267   90 270   90 270   90 270
482  91 455   91 455   91 455   91 455   91 455   93 279   93 279   93 279
483  94 94   95 285   95 285   95 285   96 288   96 288   96 288   97 194
484  97 194   98 196   98 196   99 297   99 297   99 297}
485
486do_execsql_test 4.6.1 {
487  SELECT b, sum(b) OVER (
488    RANGE BETWEEN CURRENT ROW AND CURRENT ROW
489  ) FROM t2 ORDER BY b;
490} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
491  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
492  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
493  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
494  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
495  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
496  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
497  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
498  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
499  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
500  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
501  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
502  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
503  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
504  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
505  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
506  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
507  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
508  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
509  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
510  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
511  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
512  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
513  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
514  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
515  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
516  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
517  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
518  98 10141   99 10141   99 10141   99 10141}
519
520do_execsql_test 4.6.2 {
521  SELECT b, sum(b) OVER () FROM t2 ORDER BY b;
522} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
523  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
524  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
525  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
526  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
527  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
528  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
529  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
530  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
531  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
532  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
533  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
534  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
535  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
536  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
537  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
538  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
539  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
540  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
541  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
542  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
543  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
544  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
545  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
546  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
547  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
548  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
549  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
550  98 10141   99 10141   99 10141   99 10141}
551
552do_execsql_test 4.6.3 {
553  SELECT b, sum(b) OVER (
554    RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
555  ) FROM t2 ORDER BY b;
556} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
557  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
558  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
559  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
560  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
561  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
562  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
563  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
564  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
565  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
566  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
567  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
568  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
569  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
570  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
571  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
572  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
573  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
574  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
575  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
576  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
577  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
578  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
579  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
580  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
581  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
582  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
583  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
584  98 10141   99 10141   99 10141   99 10141}
585
586do_execsql_test 4.6.4 {
587  SELECT b, sum(b) OVER (
588    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
589  ) FROM t2 ORDER BY b;
590} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
591  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
592  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
593  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
594  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
595  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
596  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
597  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
598  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
599  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
600  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
601  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
602  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
603  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
604  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
605  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
606  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
607  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
608  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
609  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
610  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
611  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
612  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
613  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
614  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
615  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
616  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
617  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
618  98 10141   99 10141   99 10141   99 10141}
619
620do_execsql_test 4.7.1 {
621  SELECT b, sum(b) OVER (
622    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
623  ) FROM t2 ORDER BY 1, 2;
624} {0 0   1 1   1 1   2 2   2 2   2 2   3 3   3 3   4 4   5 5   6 6   7 7   7 7
625  7 7   8 8   8 8   8 8   9 9   9 9   9 9   10 10   11 11   11 11   12 12
626  12 12   12 12   13 13   13 13   14 14   15 15   15 15   15 15   16 16
627  16 16   16 16   17 17   19 19   20 20   21 21   21 21   22 22   22 22
628  23 23   23 23   23 23   24 24   25 25   26 26   26 26   26 26   27 27
629  27 27   28 28   29 29   29 29   29 29   30 30   30 30   30 30   31 31
630  31 31   32 32   33 33   33 33   33 33   33 33   33 33   34 34   34 34
631  34 34   34 34   35 35   35 35   36 36   36 36   36 36   36 36   37 37
632  37 37   38 38   38 38   39 39   39 39   39 39   40 40   41 41   41 41
633  41 41   42 42   43 43   43 43   44 44   44 44   46 46   46 46   47 47
634  47 47   47 47   47 47   49 49   50 50   51 51   52 52   53 53   54 54
635  55 55   55 55   56 56   56 56   56 56   57 57   58 58   58 58   58 58
636  58 58   59 59   59 59   59 59   59 59   60 60   61 61   61 61   62 62
637  62 62   63 63   64 64   65 65   65 65   65 65   66 66   67 67   68 68
638  69 69   70 70   72 72   72 72   72 72   73 73   73 73   73 73   74 74
639  74 74   74 74   74 74   74 74   75 75   75 75   75 75   76 76   77 77
640  77 77   78 78   78 78   79 79   80 80   80 80   81 81   81 81   81 81
641  82 82   83 83   84 84   84 84   84 84   84 84   85 85   85 85   85 85
642  86 86   87 87   87 87   88 88   89 89   89 89   89 89   90 90   90 90
643  90 90   91 91   91 91   91 91   91 91   91 91   93 93   93 93   93 93
644  94 94   95 95   95 95   95 95   96 96   96 96   96 96   97 97   97 97
645  98 98   98 98   99 99   99 99   99 99}
646
647do_execsql_test 4.7.2 {
648  SELECT b, sum(b) OVER (
649    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
650  ) FROM t2 ORDER BY 1, 2;
651} {0 0   1 3379   1 5443   2 372   2 4473   2 7074   3 2916   3 9096   4 4049
652  5 5643   6 1047   7 2205   7 7081   7 10141   8 1553   8 5926   8 6422
653  9 4883   9 7932   9 8497   10 9544   11 5727   11 6433   12 2825   12 5918
654  12 8582   13 5190   13 8570   14 8596   15 3189   15 6023   15 8924
655  16 1942   16 1958   16 3590   17 10134   19 7474   20 5946   21 5464
656  21 9682   22 3029   22 6140   23 212   23 1926   23 8520   24 2626
657  25 3331   26 337   26 7539   26 7565   27 1270   27 10035   28 3217
658  29 1649   29 4355   29 7326   30 4215   30 9400   30 9853   31 5977
659  31 6008   32 2857   33 370   33 4326   33 8175   33 8909   33 9661
660  34 6414   34 6516   34 8958   34 9925   35 2151   35 5638   36 3701
661  36 7818   36 8785   36 8994   37 4597   37 8557   38 735   38 9891   39 842
662  39 7513   39 9721   40 3475   41 115   41 4874   41 5906   42 4185
663  43 2754   43 3518   44 7072   44 9765   46 1041   46 1316   47 2198
664  47 3378   47 7612   47 7923   49 6482   50 9450   51 5778   52 9370
665  53 4408   54 1448   55 3174   55 6876   56 2913   56 3435   56 3574
666  57 7223   58 5248   58 7876   58 9318   58 9823   59 697   59 2813
667  59 6665   59 7455   60 6821   61 2426   61 4944   62 904   62 8658
668  63 4471   64 8407   65 2116   65 5177   65 5603   66 8142   67 1620
669  68 803   69 9260   70 7396   72 4833   72 8004   72 8076   73 5017
670  73 5716   73 6213   74 74   74 189   74 2365   74 5538   74 7297   75 3665
671  75 6951   75 8343   76 3964   77 1903   77 7028   78 1394   78 4293
672  79 6292   80 4677   80 7692   81 542   81 4045   81 8488   82 10117
673  83 10008   84 1826   84 4761   84 9534   84 9628   85 2602   85 2711
674  85 7166   86 2291   87 4560   87 5865   88 6380   89 461   89 3306
675  89 3790   90 3119   90 6606   90 7782   91 995   91 2517   91 3007
676  91 8749   91 8876   93 1742   93 2051   93 8268   94 4143   95 5112
677  95 6118   95 9191   96 638   96 5344   96 6761   97 1243   97 1545
678  98 3888   98 5442   99 311   99 1146   99 9093}
679
680do_execsql_test 4.7.3 {
681  SELECT b, sum(b) OVER (
682    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
683  ) FROM t2 ORDER BY 1, 2;
684} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
685  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
686  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
687  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
688  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
689  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
690  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
691  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
692  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
693  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
694  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
695  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
696  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
697  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
698  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
699  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
700  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
701  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
702  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
703  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
704  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
705  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
706  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
707  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
708  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
709  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
710  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
711  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
712  98 10141   99 10141   99 10141   99 10141}
713
714do_execsql_test 4.7.4 {
715  SELECT b, sum(b) OVER (
716    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
717  ) FROM t2 ORDER BY 1, 2;
718} {0 10141   1 4699   1 6763   2 3069   2 5670   2 9771   3 1048   3 7228
719  4 6096   5 4503   6 9100   7 7   7 3067   7 7943   8 3727   8 4223   8 8596
720  9 1653   9 2218   9 5267   10 607   11 3719   11 4425   12 1571   12 4235
721  12 7328   13 1584   13 4964   14 1559   15 1232   15 4133   15 6967
722  16 6567   16 8199   16 8215   17 24   19 2686   20 4215   21 480   21 4698
723  22 4023   22 7134   23 1644   23 8238   23 9952   24 7539   25 6835
724  26 2602   26 2628   26 9830   27 133   27 8898   28 6952   29 2844
725  29 5815   29 8521   30 318   30 771   30 5956   31 4164   31 4195   32 7316
726  33 513   33 1265   33 1999   33 5848   33 9804   34 250   34 1217   34 3659
727  34 3761   35 4538   35 8025   36 1183   36 1392   36 2359   36 6476
728  37 1621   37 5581   38 288   38 9444   39 459   39 2667   39 9338   40 6706
729  41 4276   41 5308   41 10067   42 5998   43 6666   43 7430   44 420
730  44 3113   46 8871   46 9146   47 2265   47 2576   47 6810   47 7990
731  49 3708   50 741   51 4414   52 823   53 5786   54 8747   55 3320   55 7022
732  56 6623   56 6762   56 7284   57 2975   58 376   58 881   58 2323   58 4951
733  59 2745   59 3535   59 7387   59 9503   60 3380   61 5258   61 7776
734  62 1545   62 9299   63 5733   64 1798   65 4603   65 5029   65 8090
735  66 2065   67 8588   68 9406   69 950   70 2815   72 2137   72 2209
736  72 5380   73 4001   73 4498   73 5197   74 2918   74 4677   74 7850
737  74 10026   74 10141   75 1873   75 3265   75 6551   76 6253   77 3190
738  77 8315   78 5926   78 8825   79 3928   80 2529   80 5544   81 1734
739  81 6177   81 9680   82 106   83 216   84 597   84 691   84 5464   84 8399
740  85 3060   85 7515   85 7624   86 7936   87 4363   87 5668   88 3849
741  89 6440   89 6924   89 9769   90 2449   90 3625   90 7112   91 1356
742  91 1483   91 7225   91 7715   91 9237   93 1966   93 8183   93 8492
743  94 6092   95 1045   95 4118   95 5124   96 3476   96 4893   96 9599
744  97 8693   97 8995   98 4797   98 6351   99 1147   99 9094   99 9929}
745
746do_execsql_test 4.8.1 {
747  SELECT b, sum(b) OVER (
748    ORDER BY a
749    ROWS BETWEEN CURRENT ROW AND CURRENT ROW
750  ) FROM t2 ORDER BY 1, 2;
751} {0 0   1 1   1 1   2 2   2 2   2 2   3 3   3 3   4 4   5 5   6 6   7 7   7 7
752  7 7   8 8   8 8   8 8   9 9   9 9   9 9   10 10   11 11   11 11   12 12
753  12 12   12 12   13 13   13 13   14 14   15 15   15 15   15 15   16 16
754  16 16   16 16   17 17   19 19   20 20   21 21   21 21   22 22   22 22
755  23 23   23 23   23 23   24 24   25 25   26 26   26 26   26 26   27 27
756  27 27   28 28   29 29   29 29   29 29   30 30   30 30   30 30   31 31
757  31 31   32 32   33 33   33 33   33 33   33 33   33 33   34 34   34 34
758  34 34   34 34   35 35   35 35   36 36   36 36   36 36   36 36   37 37
759  37 37   38 38   38 38   39 39   39 39   39 39   40 40   41 41   41 41
760  41 41   42 42   43 43   43 43   44 44   44 44   46 46   46 46   47 47
761  47 47   47 47   47 47   49 49   50 50   51 51   52 52   53 53   54 54
762  55 55   55 55   56 56   56 56   56 56   57 57   58 58   58 58   58 58
763  58 58   59 59   59 59   59 59   59 59   60 60   61 61   61 61   62 62
764  62 62   63 63   64 64   65 65   65 65   65 65   66 66   67 67   68 68
765  69 69   70 70   72 72   72 72   72 72   73 73   73 73   73 73   74 74
766  74 74   74 74   74 74   74 74   75 75   75 75   75 75   76 76   77 77
767  77 77   78 78   78 78   79 79   80 80   80 80   81 81   81 81   81 81
768  82 82   83 83   84 84   84 84   84 84   84 84   85 85   85 85   85 85
769  86 86   87 87   87 87   88 88   89 89   89 89   89 89   90 90   90 90
770  90 90   91 91   91 91   91 91   91 91   91 91   93 93   93 93   93 93
771  94 94   95 95   95 95   95 95   96 96   96 96   96 96   97 97   97 97
772  98 98   98 98   99 99   99 99   99 99}
773
774do_execsql_test 4.8.2 {
775  SELECT b, sum(b) OVER (
776    ORDER BY a
777    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
778  ) FROM t2 ORDER BY 1, 2;
779} {0 0   1 3379   1 5443   2 372   2 4473   2 7074   3 2916   3 9096   4 4049
780  5 5643   6 1047   7 2205   7 7081   7 10141   8 1553   8 5926   8 6422
781  9 4883   9 7932   9 8497   10 9544   11 5727   11 6433   12 2825   12 5918
782  12 8582   13 5190   13 8570   14 8596   15 3189   15 6023   15 8924
783  16 1942   16 1958   16 3590   17 10134   19 7474   20 5946   21 5464
784  21 9682   22 3029   22 6140   23 212   23 1926   23 8520   24 2626
785  25 3331   26 337   26 7539   26 7565   27 1270   27 10035   28 3217
786  29 1649   29 4355   29 7326   30 4215   30 9400   30 9853   31 5977
787  31 6008   32 2857   33 370   33 4326   33 8175   33 8909   33 9661
788  34 6414   34 6516   34 8958   34 9925   35 2151   35 5638   36 3701
789  36 7818   36 8785   36 8994   37 4597   37 8557   38 735   38 9891   39 842
790  39 7513   39 9721   40 3475   41 115   41 4874   41 5906   42 4185
791  43 2754   43 3518   44 7072   44 9765   46 1041   46 1316   47 2198
792  47 3378   47 7612   47 7923   49 6482   50 9450   51 5778   52 9370
793  53 4408   54 1448   55 3174   55 6876   56 2913   56 3435   56 3574
794  57 7223   58 5248   58 7876   58 9318   58 9823   59 697   59 2813
795  59 6665   59 7455   60 6821   61 2426   61 4944   62 904   62 8658
796  63 4471   64 8407   65 2116   65 5177   65 5603   66 8142   67 1620
797  68 803   69 9260   70 7396   72 4833   72 8004   72 8076   73 5017
798  73 5716   73 6213   74 74   74 189   74 2365   74 5538   74 7297   75 3665
799  75 6951   75 8343   76 3964   77 1903   77 7028   78 1394   78 4293
800  79 6292   80 4677   80 7692   81 542   81 4045   81 8488   82 10117
801  83 10008   84 1826   84 4761   84 9534   84 9628   85 2602   85 2711
802  85 7166   86 2291   87 4560   87 5865   88 6380   89 461   89 3306
803  89 3790   90 3119   90 6606   90 7782   91 995   91 2517   91 3007
804  91 8749   91 8876   93 1742   93 2051   93 8268   94 4143   95 5112
805  95 6118   95 9191   96 638   96 5344   96 6761   97 1243   97 1545
806  98 3888   98 5442   99 311   99 1146   99 9093}
807
808do_execsql_test 4.8.3 {
809  SELECT b, sum(b) OVER (
810    ORDER BY a
811    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
812  ) FROM t2 ORDER BY 1, 2;
813} {0 10141   1 10141   1 10141   2 10141   2 10141   2 10141   3 10141
814  3 10141   4 10141   5 10141   6 10141   7 10141   7 10141   7 10141
815  8 10141   8 10141   8 10141   9 10141   9 10141   9 10141   10 10141
816  11 10141   11 10141   12 10141   12 10141   12 10141   13 10141   13 10141
817  14 10141   15 10141   15 10141   15 10141   16 10141   16 10141   16 10141
818  17 10141   19 10141   20 10141   21 10141   21 10141   22 10141   22 10141
819  23 10141   23 10141   23 10141   24 10141   25 10141   26 10141   26 10141
820  26 10141   27 10141   27 10141   28 10141   29 10141   29 10141   29 10141
821  30 10141   30 10141   30 10141   31 10141   31 10141   32 10141   33 10141
822  33 10141   33 10141   33 10141   33 10141   34 10141   34 10141   34 10141
823  34 10141   35 10141   35 10141   36 10141   36 10141   36 10141   36 10141
824  37 10141   37 10141   38 10141   38 10141   39 10141   39 10141   39 10141
825  40 10141   41 10141   41 10141   41 10141   42 10141   43 10141   43 10141
826  44 10141   44 10141   46 10141   46 10141   47 10141   47 10141   47 10141
827  47 10141   49 10141   50 10141   51 10141   52 10141   53 10141   54 10141
828  55 10141   55 10141   56 10141   56 10141   56 10141   57 10141   58 10141
829  58 10141   58 10141   58 10141   59 10141   59 10141   59 10141   59 10141
830  60 10141   61 10141   61 10141   62 10141   62 10141   63 10141   64 10141
831  65 10141   65 10141   65 10141   66 10141   67 10141   68 10141   69 10141
832  70 10141   72 10141   72 10141   72 10141   73 10141   73 10141   73 10141
833  74 10141   74 10141   74 10141   74 10141   74 10141   75 10141   75 10141
834  75 10141   76 10141   77 10141   77 10141   78 10141   78 10141   79 10141
835  80 10141   80 10141   81 10141   81 10141   81 10141   82 10141   83 10141
836  84 10141   84 10141   84 10141   84 10141   85 10141   85 10141   85 10141
837  86 10141   87 10141   87 10141   88 10141   89 10141   89 10141   89 10141
838  90 10141   90 10141   90 10141   91 10141   91 10141   91 10141   91 10141
839  91 10141   93 10141   93 10141   93 10141   94 10141   95 10141   95 10141
840  95 10141   96 10141   96 10141   96 10141   97 10141   97 10141   98 10141
841  98 10141   99 10141   99 10141   99 10141}
842
843do_execsql_test 4.8.4 {
844  SELECT b, sum(b) OVER (
845    ORDER BY a
846    ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
847  ) FROM t2 ORDER BY 1, 2;
848} {0 10141   1 4699   1 6763   2 3069   2 5670   2 9771   3 1048   3 7228
849  4 6096   5 4503   6 9100   7 7   7 3067   7 7943   8 3727   8 4223   8 8596
850  9 1653   9 2218   9 5267   10 607   11 3719   11 4425   12 1571   12 4235
851  12 7328   13 1584   13 4964   14 1559   15 1232   15 4133   15 6967
852  16 6567   16 8199   16 8215   17 24   19 2686   20 4215   21 480   21 4698
853  22 4023   22 7134   23 1644   23 8238   23 9952   24 7539   25 6835
854  26 2602   26 2628   26 9830   27 133   27 8898   28 6952   29 2844
855  29 5815   29 8521   30 318   30 771   30 5956   31 4164   31 4195   32 7316
856  33 513   33 1265   33 1999   33 5848   33 9804   34 250   34 1217   34 3659
857  34 3761   35 4538   35 8025   36 1183   36 1392   36 2359   36 6476
858  37 1621   37 5581   38 288   38 9444   39 459   39 2667   39 9338   40 6706
859  41 4276   41 5308   41 10067   42 5998   43 6666   43 7430   44 420
860  44 3113   46 8871   46 9146   47 2265   47 2576   47 6810   47 7990
861  49 3708   50 741   51 4414   52 823   53 5786   54 8747   55 3320   55 7022
862  56 6623   56 6762   56 7284   57 2975   58 376   58 881   58 2323   58 4951
863  59 2745   59 3535   59 7387   59 9503   60 3380   61 5258   61 7776
864  62 1545   62 9299   63 5733   64 1798   65 4603   65 5029   65 8090
865  66 2065   67 8588   68 9406   69 950   70 2815   72 2137   72 2209
866  72 5380   73 4001   73 4498   73 5197   74 2918   74 4677   74 7850
867  74 10026   74 10141   75 1873   75 3265   75 6551   76 6253   77 3190
868  77 8315   78 5926   78 8825   79 3928   80 2529   80 5544   81 1734
869  81 6177   81 9680   82 106   83 216   84 597   84 691   84 5464   84 8399
870  85 3060   85 7515   85 7624   86 7936   87 4363   87 5668   88 3849
871  89 6440   89 6924   89 9769   90 2449   90 3625   90 7112   91 1356
872  91 1483   91 7225   91 7715   91 9237   93 1966   93 8183   93 8492
873  94 6092   95 1045   95 4118   95 5124   96 3476   96 4893   96 9599
874  97 8693   97 8995   98 4797   98 6351   99 1147   99 9094   99 9929}
875
876
877do_test 4.9 {
878  set myres {}
879  foreach r [db eval {SELECT
880    rank() OVER win AS rank,
881    cume_dist() OVER win AS cume_dist FROM t1
882  WINDOW win AS (ORDER BY 1);}] {
883    lappend myres [format %.4f [set r]]
884  }
885  set res2 {1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000}
886  set i 0
887  foreach r [set myres] r2 [set res2] {
888    if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
889      error "list element [set i] does not match: got=[set r] expected=[set r2]"
890    }
891    incr i
892  }
893  set {} {}
894} {}
895
896do_execsql_test 4.10 {
897  SELECT count(*) OVER (ORDER BY b) FROM t1
898} {3   3   3   6   6   6}
899
900do_execsql_test 4.11 {
901  SELECT count(distinct a) FILTER (WHERE b='odd') FROM t1
902} {3}
903
904#==========================================================================
905
906do_execsql_test 5.0 {
907  DROP TABLE IF EXISTS t1;
908  CREATE TABLE t1(x INTEGER, y INTEGER);
909  INSERT INTO t1 VALUES(10, 1);
910  INSERT INTO t1 VALUES(20, 2);
911  INSERT INTO t1 VALUES(3, 3);
912  INSERT INTO t1 VALUES(2, 4);
913  INSERT INTO t1 VALUES(1, 5);
914} {}
915
916
917do_test 5.1 {
918  set myres {}
919  foreach r [db eval {SELECT avg(x) OVER (ORDER BY y) AS z FROM t1 ORDER BY z;}] {
920    lappend myres [format %.4f [set r]]
921  }
922  set res2 {7.2000 8.7500 10.0000 11.0000 15.0000}
923  set i 0
924  foreach r [set myres] r2 [set res2] {
925    if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
926      error "list element [set i] does not match: got=[set r] expected=[set r2]"
927    }
928    incr i
929  }
930  set {} {}
931} {}
932
933#==========================================================================
934
935do_execsql_test 6.0 {
936  DROP TABLE IF EXISTS t0;
937  CREATE TABLE t0(c0 INTEGER UNIQUE);
938  INSERT INTO t0 VALUES(0);
939} {}
940
941do_execsql_test 6.1 {
942  SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0;
943} {1 {}}
944
945do_execsql_test 6.2 {
946  SELECT * FROM t0 WHERE
947      (0, t0.c0) IN (SELECT DENSE_RANK() OVER(), LAG(0) OVER() FROM t0);
948} {}
949
950#==========================================================================
951
952do_execsql_test 7.0 {
953  DROP TABLE IF EXISTS t1;
954  CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER);
955  INSERT INTO t1 VALUES(1, 1, 1);
956  INSERT INTO t1 VALUES(1, 2, 2);
957  INSERT INTO t1 VALUES(3, 3, 3);
958  INSERT INTO t1 VALUES(3, 4, 4);
959} {}
960
961do_execsql_test 7.1 {
962  SELECT c, sum(c) OVER win1 FROM t1
963  WINDOW win1 AS (ORDER BY b)
964} {1 1   2 3   3 6   4 10}
965
966do_execsql_test 7.2 {
967  SELECT c, sum(c) OVER win1 FROM t1
968  WINDOW win1 AS (PARTITION BY 1 ORDER BY b)
969} {1 1   2 3   3 6   4 10}
970
971do_execsql_test 7.3 {
972  SELECT c, sum(c) OVER win1 FROM t1
973  WINDOW win1 AS (ORDER BY 1)
974} {1 10   2 10   3 10   4 10}
975
976finish_test
977