/ Hex Artifact Content
Login

Artifact 0c2918ef2a1640553fd791972d458356808a608418c64c02a0a379cecfc7fb0d:


0000: 23 20 32 30 31 38 20 4d 61 79 20 31 39 0a 23 0a  # 2018 May 19.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 0a 0a 73 6f 75 72 63 65 20 5b 66  ***.#..source [f
0170: 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64  ile join [file d
0180: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 20 70  irname $argv0] p
0190: 67 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 5d 0a 0a 23  g_common.tcl]..#
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 0a 73 74 61 72  =========...star
01f0: 74 5f 74 65 73 74 20 77 69 6e 64 6f 77 32 20 22  t_test window2 "
0200: 32 30 31 38 20 4d 61 79 20 31 39 22 0a 0a 69 66  2018 May 19"..if
0210: 63 61 70 61 62 6c 65 20 21 77 69 6e 64 6f 77 66  capable !windowf
0220: 75 6e 63 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73  unc..execsql_tes
0230: 74 20 31 2e 30 20 7b 0a 20 20 44 52 4f 50 20 54  t 1.0 {.  DROP T
0240: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74  ABLE IF EXISTS t
0250: 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  1;.  CREATE TABL
0260: 45 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50  E t1(a INTEGER P
0270: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 54 45  RIMARY KEY, b TE
0280: 58 54 2c 20 63 20 54 45 58 54 2c 20 64 20 49 4e  XT, c TEXT, d IN
0290: 54 45 47 45 52 29 3b 0a 20 20 49 4e 53 45 52 54  TEGER);.  INSERT
02a0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
02b0: 31 2c 20 27 6f 64 64 27 2c 20 20 27 6f 6e 65 27  1, 'odd',  'one'
02c0: 2c 20 20 20 31 29 3b 0a 20 20 49 4e 53 45 52 54  ,   1);.  INSERT
02d0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
02e0: 32 2c 20 27 65 76 65 6e 27 2c 20 27 74 77 6f 27  2, 'even', 'two'
02f0: 2c 20 20 20 32 29 3b 0a 20 20 49 4e 53 45 52 54  ,   2);.  INSERT
0300: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0310: 33 2c 20 27 6f 64 64 27 2c 20 20 27 74 68 72 65  3, 'odd',  'thre
0320: 65 27 2c 20 33 29 3b 0a 20 20 49 4e 53 45 52 54  e', 3);.  INSERT
0330: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0340: 34 2c 20 27 65 76 65 6e 27 2c 20 27 66 6f 75 72  4, 'even', 'four
0350: 27 2c 20 20 34 29 3b 0a 20 20 49 4e 53 45 52 54  ',  4);.  INSERT
0360: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0370: 35 2c 20 27 6f 64 64 27 2c 20 20 27 66 69 76 65  5, 'odd',  'five
0380: 27 2c 20 20 35 29 3b 0a 20 20 49 4e 53 45 52 54  ',  5);.  INSERT
0390: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
03a0: 36 2c 20 27 65 76 65 6e 27 2c 20 27 73 69 78 27  6, 'even', 'six'
03b0: 2c 20 20 20 36 29 3b 0a 7d 0a 0a 65 78 65 63 73  ,   6);.}..execs
03c0: 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20  ql_test 1.1 {.  
03d0: 53 45 4c 45 43 54 20 63 2c 20 73 75 6d 28 64 29  SELECT c, sum(d)
03e0: 20 4f 56 45 52 20 28 50 41 52 54 49 54 49 4f 4e   OVER (PARTITION
03f0: 20 42 59 20 62 20 4f 52 44 45 52 20 42 59 20 63   BY b ORDER BY c
0400: 29 20 46 52 4f 4d 20 74 31 3b 0a 7d 0a 0a 65 78  ) FROM t1;.}..ex
0410: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 20 7b  ecsql_test 1.2 {
0420: 0a 20 20 53 45 4c 45 43 54 20 73 75 6d 28 64 29  .  SELECT sum(d)
0430: 20 4f 56 45 52 20 28 29 20 46 52 4f 4d 20 74 31   OVER () FROM t1
0440: 3b 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73  ;.}..execsql_tes
0450: 74 20 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  t 1.3 {.  SELECT
0460: 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 50 41   sum(d) OVER (PA
0470: 52 54 49 54 49 4f 4e 20 42 59 20 62 29 20 46 52  RTITION BY b) FR
0480: 4f 4d 20 74 31 3b 0a 7d 0a 0a 3d 3d 3d 3d 3d 3d  OM t1;.}..======
0490: 3d 3d 3d 3d 0a 65 78 65 63 73 71 6c 5f 74 65 73  ====.execsql_tes
04a0: 74 20 32 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  t 2.1 {.  SELECT
04b0: 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20   a, sum(d) OVER 
04c0: 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 64  (.    ORDER BY d
04d0: 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45  .    ROWS BETWEE
04e0: 4e 20 31 30 30 30 20 50 52 45 43 45 44 49 4e 47  N 1000 PRECEDING
04f0: 20 41 4e 44 20 31 20 46 4f 4c 4c 4f 57 49 4e 47   AND 1 FOLLOWING
0500: 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 65  .  ) FROM t1.}.e
0510: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 20  xecsql_test 2.2 
0520: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75  {.  SELECT a, su
0530: 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20  m(d) OVER (.    
0540: 4f 52 44 45 52 20 42 59 20 64 0a 20 20 20 20 52  ORDER BY d.    R
0550: 4f 57 53 20 42 45 54 57 45 45 4e 20 31 30 30 30  OWS BETWEEN 1000
0560: 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44 20 31   PRECEDING AND 1
0570: 30 30 30 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  000 FOLLOWING.  
0580: 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 65 78 65 63  ) FROM t1.}.exec
0590: 73 71 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20  sql_test 2.3 {. 
05a0: 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64   SELECT a, sum(d
05b0: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
05c0: 45 52 20 42 59 20 64 0a 20 20 20 20 52 4f 57 53  ER BY d.    ROWS
05d0: 20 42 45 54 57 45 45 4e 20 31 20 50 52 45 43 45   BETWEEN 1 PRECE
05e0: 44 49 4e 47 20 41 4e 44 20 31 30 30 30 20 46 4f  DING AND 1000 FO
05f0: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0600: 20 74 31 0a 7d 0a 65 78 65 63 73 71 6c 5f 74 65   t1.}.execsql_te
0610: 73 74 20 32 2e 34 20 7b 0a 20 20 53 45 4c 45 43  st 2.4 {.  SELEC
0620: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
0630: 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20   (.    ORDER BY 
0640: 64 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57 45  d.    ROWS BETWE
0650: 45 4e 20 31 20 50 52 45 43 45 44 49 4e 47 20 41  EN 1 PRECEDING A
0660: 4e 44 20 31 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20  ND 1 FOLLOWING. 
0670: 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 65 78 65   ) FROM t1.}.exe
0680: 63 73 71 6c 5f 74 65 73 74 20 32 2e 35 20 7b 0a  csql_test 2.5 {.
0690: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
06a0: 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52  d) OVER (.    OR
06b0: 44 45 52 20 42 59 20 64 0a 20 20 20 20 52 4f 57  DER BY d.    ROW
06c0: 53 20 42 45 54 57 45 45 4e 20 31 20 50 52 45 43  S BETWEEN 1 PREC
06d0: 45 44 49 4e 47 20 41 4e 44 20 30 20 46 4f 4c 4c  EDING AND 0 FOLL
06e0: 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74  OWING.  ) FROM t
06f0: 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73  1.}..execsql_tes
0700: 74 20 32 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54  t 2.6 {.  SELECT
0710: 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20   a, sum(d) OVER 
0720: 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e 20  (.    PARTITION 
0730: 42 59 20 62 0a 20 20 20 20 4f 52 44 45 52 20 42  BY b.    ORDER B
0740: 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45  Y d .    ROWS BE
0750: 54 57 45 45 4e 20 31 20 50 52 45 43 45 44 49 4e  TWEEN 1 PRECEDIN
0760: 47 20 41 4e 44 20 31 20 46 4f 4c 4c 4f 57 49 4e  G AND 1 FOLLOWIN
0770: 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a  G.  ) FROM t1.}.
0780: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  .execsql_test 2.
0790: 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  7 {.  SELECT a, 
07a0: 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20  sum(d) OVER (.  
07b0: 20 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20 62    PARTITION BY b
07c0: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 64 20  .    ORDER BY d 
07d0: 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45  .    ROWS BETWEE
07e0: 4e 20 30 20 50 52 45 43 45 44 49 4e 47 20 41 4e  N 0 PRECEDING AN
07f0: 44 20 30 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  D 0 FOLLOWING.  
0800: 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65  ) FROM t1.}..exe
0810: 63 73 71 6c 5f 74 65 73 74 20 32 2e 38 20 7b 0a  csql_test 2.8 {.
0820: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
0830: 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52  d) OVER (.    OR
0840: 44 45 52 20 42 59 20 64 20 0a 20 20 20 20 52 4f  DER BY d .    RO
0850: 57 53 20 42 45 54 57 45 45 4e 20 43 55 52 52 45  WS BETWEEN CURRE
0860: 4e 54 20 52 4f 57 20 41 4e 44 20 32 20 46 4f 4c  NT ROW AND 2 FOL
0870: 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20  LOWING.  ) FROM 
0880: 74 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65  t1.}..execsql_te
0890: 73 74 20 32 2e 39 20 7b 0a 20 20 53 45 4c 45 43  st 2.9 {.  SELEC
08a0: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
08b0: 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20   (.    ORDER BY 
08c0: 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57  d .    ROWS BETW
08d0: 45 45 4e 20 55 4e 42 4f 55 4e 44 45 44 20 50 52  EEN UNBOUNDED PR
08e0: 45 43 45 44 49 4e 47 20 41 4e 44 20 32 20 46 4f  ECEDING AND 2 FO
08f0: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0900: 20 74 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74   t1.}..execsql_t
0910: 65 73 74 20 32 2e 31 30 20 7b 0a 20 20 53 45 4c  est 2.10 {.  SEL
0920: 45 43 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56  ECT a, sum(d) OV
0930: 45 52 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42  ER (.    ORDER B
0940: 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45  Y d .    ROWS BE
0950: 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20 52 4f  TWEEN CURRENT RO
0960: 57 20 41 4e 44 20 32 20 46 4f 4c 4c 4f 57 49 4e  W AND 2 FOLLOWIN
0970: 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a  G.  ) FROM t1.}.
0980: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  .execsql_test 2.
0990: 31 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  11 {.  SELECT a,
09a0: 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20   sum(d) OVER (. 
09b0: 20 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20     ORDER BY d . 
09c0: 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20     ROWS BETWEEN 
09d0: 32 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44 20  2 PRECEDING AND 
09e0: 43 55 52 52 45 4e 54 20 52 4f 57 0a 20 20 29 20  CURRENT ROW.  ) 
09f0: 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65 63 73  FROM t1.}..execs
0a00: 71 6c 5f 74 65 73 74 20 32 2e 31 33 20 7b 0a 20  ql_test 2.13 {. 
0a10: 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64   SELECT a, sum(d
0a20: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
0a30: 45 52 20 42 59 20 64 20 0a 20 20 20 20 52 4f 57  ER BY d .    ROW
0a40: 53 20 42 45 54 57 45 45 4e 20 32 20 50 52 45 43  S BETWEEN 2 PREC
0a50: 45 44 49 4e 47 20 41 4e 44 20 55 4e 42 4f 55 4e  EDING AND UNBOUN
0a60: 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  DED FOLLOWING.  
0a70: 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65  ) FROM t1.}..exe
0a80: 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 34 20 7b  csql_test 2.14 {
0a90: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d  .  SELECT a, sum
0aa0: 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f  (d) OVER (.    O
0ab0: 52 44 45 52 20 42 59 20 64 20 0a 20 20 20 20 52  RDER BY d .    R
0ac0: 4f 57 53 20 42 45 54 57 45 45 4e 20 33 20 50 52  OWS BETWEEN 3 PR
0ad0: 45 43 45 44 49 4e 47 20 41 4e 44 20 31 20 50 52  ECEDING AND 1 PR
0ae0: 45 43 45 44 49 4e 47 0a 20 20 29 20 46 52 4f 4d  ECEDING.  ) FROM
0af0: 20 74 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74   t1.}..execsql_t
0b00: 65 73 74 20 32 2e 31 35 20 7b 0a 20 20 53 45 4c  est 2.15 {.  SEL
0b10: 45 43 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56  ECT a, sum(d) OV
0b20: 45 52 20 28 0a 20 20 20 20 50 41 52 54 49 54 49  ER (.    PARTITI
0b30: 4f 4e 20 42 59 20 62 0a 20 20 20 20 4f 52 44 45  ON BY b.    ORDE
0b40: 52 20 42 59 20 64 20 0a 20 20 20 20 52 4f 57 53  R BY d .    ROWS
0b50: 20 42 45 54 57 45 45 4e 20 31 20 50 52 45 43 45   BETWEEN 1 PRECE
0b60: 44 49 4e 47 20 41 4e 44 20 30 20 50 52 45 43 45  DING AND 0 PRECE
0b70: 44 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31  DING.  ) FROM t1
0b80: 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73 74  .}..execsql_test
0b90: 20 32 2e 31 36 20 7b 0a 20 20 53 45 4c 45 43 54   2.16 {.  SELECT
0ba0: 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20   a, sum(d) OVER 
0bb0: 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e 20  (.    PARTITION 
0bc0: 42 59 20 62 0a 20 20 20 20 4f 52 44 45 52 20 42  BY b.    ORDER B
0bd0: 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45  Y d .    ROWS BE
0be0: 54 57 45 45 4e 20 31 20 50 52 45 43 45 44 49 4e  TWEEN 1 PRECEDIN
0bf0: 47 20 41 4e 44 20 31 20 50 52 45 43 45 44 49 4e  G AND 1 PRECEDIN
0c00: 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a  G.  ) FROM t1.}.
0c10: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  .execsql_test 2.
0c20: 31 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  17 {.  SELECT a,
0c30: 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20   sum(d) OVER (. 
0c40: 20 20 20 50 41 52 54 49 54 49 4f 4e 20 42 59 20     PARTITION BY 
0c50: 62 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 64  b.    ORDER BY d
0c60: 20 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57 45   .    ROWS BETWE
0c70: 45 4e 20 31 20 50 52 45 43 45 44 49 4e 47 20 41  EN 1 PRECEDING A
0c80: 4e 44 20 32 20 50 52 45 43 45 44 49 4e 47 0a 20  ND 2 PRECEDING. 
0c90: 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78   ) FROM t1.}..ex
0ca0: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 38 20  ecsql_test 2.18 
0cb0: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75  {.  SELECT a, su
0cc0: 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20  m(d) OVER (.    
0cd0: 50 41 52 54 49 54 49 4f 4e 20 42 59 20 62 0a 20  PARTITION BY b. 
0ce0: 20 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20     ORDER BY d . 
0cf0: 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20     ROWS BETWEEN 
0d00: 55 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44  UNBOUNDED PRECED
0d10: 49 4e 47 20 41 4e 44 20 32 20 50 52 45 43 45 44  ING AND 2 PRECED
0d20: 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a  ING.  ) FROM t1.
0d30: 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20  }..execsql_test 
0d40: 32 2e 31 39 20 7b 0a 20 20 53 45 4c 45 43 54 20  2.19 {.  SELECT 
0d50: 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28  a, sum(d) OVER (
0d60: 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e 20 42  .    PARTITION B
0d70: 59 20 62 0a 20 20 20 20 4f 52 44 45 52 20 42 59  Y b.    ORDER BY
0d80: 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45 54   d .    ROWS BET
0d90: 57 45 45 4e 20 31 20 46 4f 4c 4c 4f 57 49 4e 47  WEEN 1 FOLLOWING
0da0: 20 41 4e 44 20 33 20 46 4f 4c 4c 4f 57 49 4e 47   AND 3 FOLLOWING
0db0: 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a  .  ) FROM t1.}..
0dc0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32  execsql_test 2.2
0dd0: 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  0 {.  SELECT a, 
0de0: 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20  sum(d) OVER (.  
0df0: 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20 20    ORDER BY d .  
0e00: 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 31    ROWS BETWEEN 1
0e10: 20 46 4f 4c 4c 4f 57 49 4e 47 20 41 4e 44 20 32   FOLLOWING AND 2
0e20: 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46   FOLLOWING.  ) F
0e30: 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65 63 73 71  ROM t1.}..execsq
0e40: 6c 5f 74 65 73 74 20 32 2e 32 31 20 7b 0a 20 20  l_test 2.21 {.  
0e50: 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29  SELECT a, sum(d)
0e60: 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45   OVER (.    ORDE
0e70: 52 20 42 59 20 64 20 0a 20 20 20 20 52 4f 57 53  R BY d .    ROWS
0e80: 20 42 45 54 57 45 45 4e 20 31 20 46 4f 4c 4c 4f   BETWEEN 1 FOLLO
0e90: 57 49 4e 47 20 41 4e 44 20 55 4e 42 4f 55 4e 44  WING AND UNBOUND
0ea0: 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29  ED FOLLOWING.  )
0eb0: 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65 63   FROM t1.}..exec
0ec0: 73 71 6c 5f 74 65 73 74 20 32 2e 32 32 20 7b 0a  sql_test 2.22 {.
0ed0: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
0ee0: 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 50 41  d) OVER (.    PA
0ef0: 52 54 49 54 49 4f 4e 20 42 59 20 62 0a 20 20 20  RTITION BY b.   
0f00: 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20 20 20   ORDER BY d .   
0f10: 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 31 20   ROWS BETWEEN 1 
0f20: 46 4f 4c 4c 4f 57 49 4e 47 20 41 4e 44 20 55 4e  FOLLOWING AND UN
0f30: 42 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f 57 49 4e  BOUNDED FOLLOWIN
0f40: 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a  G.  ) FROM t1.}.
0f50: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  .execsql_test 2.
0f60: 32 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  23 {.  SELECT a,
0f70: 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20   sum(d) OVER (. 
0f80: 20 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20     ORDER BY d . 
0f90: 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20     ROWS BETWEEN 
0fa0: 43 55 52 52 45 4e 54 20 52 4f 57 20 41 4e 44 20  CURRENT ROW AND 
0fb0: 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f 57  UNBOUNDED FOLLOW
0fc0: 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a  ING.  ) FROM t1.
0fd0: 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20  }..execsql_test 
0fe0: 32 2e 32 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  2.24 {.  SELECT 
0ff0: 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28  a, sum(d) OVER (
1000: 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e 20 42  .    PARTITION B
1010: 59 20 61 25 32 0a 20 20 20 20 4f 52 44 45 52 20  Y a%2.    ORDER 
1020: 42 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42  BY d .    ROWS B
1030: 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20 52  ETWEEN CURRENT R
1040: 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44  OW AND UNBOUNDED
1050: 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46   FOLLOWING.  ) F
1060: 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65 63 73 71  ROM t1.}..execsq
1070: 6c 5f 74 65 73 74 20 32 2e 32 35 20 7b 0a 20 20  l_test 2.25 {.  
1080: 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29  SELECT a, sum(d)
1090: 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45   OVER (.    ORDE
10a0: 52 20 42 59 20 64 20 0a 20 20 20 20 52 4f 57 53  R BY d .    ROWS
10b0: 20 42 45 54 57 45 45 4e 20 55 4e 42 4f 55 4e 44   BETWEEN UNBOUND
10c0: 45 44 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44  ED PRECEDING AND
10d0: 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f   UNBOUNDED FOLLO
10e0: 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31  WING.  ) FROM t1
10f0: 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73 74  .}..execsql_test
1100: 20 32 2e 32 36 20 7b 0a 20 20 53 45 4c 45 43 54   2.26 {.  SELECT
1110: 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20   a, sum(d) OVER 
1120: 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e 20  (.    PARTITION 
1130: 42 59 20 62 0a 20 20 20 20 4f 52 44 45 52 20 42  BY b.    ORDER B
1140: 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45  Y d .    ROWS BE
1150: 54 57 45 45 4e 20 55 4e 42 4f 55 4e 44 45 44 20  TWEEN UNBOUNDED 
1160: 50 52 45 43 45 44 49 4e 47 20 41 4e 44 20 55 4e  PRECEDING AND UN
1170: 42 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f 57 49 4e  BOUNDED FOLLOWIN
1180: 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a  G.  ) FROM t1.}.
1190: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  .execsql_test 2.
11a0: 32 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  27 {.  SELECT a,
11b0: 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20   sum(d) OVER (. 
11c0: 20 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20     ORDER BY d . 
11d0: 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20     ROWS BETWEEN 
11e0: 43 55 52 52 45 4e 54 20 52 4f 57 20 41 4e 44 20  CURRENT ROW AND 
11f0: 43 55 52 52 45 4e 54 20 52 4f 57 0a 20 20 29 20  CURRENT ROW.  ) 
1200: 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65 63 73  FROM t1.}..execs
1210: 71 6c 5f 74 65 73 74 20 32 2e 32 38 20 7b 0a 20  ql_test 2.28 {. 
1220: 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64   SELECT a, sum(d
1230: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 50 41 52  ) OVER (.    PAR
1240: 54 49 54 49 4f 4e 20 42 59 20 62 0a 20 20 20 20  TITION BY b.    
1250: 4f 52 44 45 52 20 42 59 20 64 20 0a 20 20 20 20  ORDER BY d .    
1260: 52 4f 57 53 20 42 45 54 57 45 45 4e 20 43 55 52  ROWS BETWEEN CUR
1270: 52 45 4e 54 20 52 4f 57 20 41 4e 44 20 43 55 52  RENT ROW AND CUR
1280: 52 45 4e 54 20 52 4f 57 0a 20 20 29 20 46 52 4f  RENT ROW.  ) FRO
1290: 4d 20 74 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f  M t1.}..execsql_
12a0: 74 65 73 74 20 32 2e 32 39 20 7b 0a 20 20 53 45  test 2.29 {.  SE
12b0: 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29 20 4f  LECT a, sum(d) O
12c0: 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45 52 20  VER (.    ORDER 
12d0: 42 59 20 64 20 0a 20 20 20 20 52 41 4e 47 45 20  BY d .    RANGE 
12e0: 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20  BETWEEN CURRENT 
12f0: 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45  ROW AND UNBOUNDE
1300: 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20  D FOLLOWING.  ) 
1310: 46 52 4f 4d 20 74 31 0a 7d 0a 65 78 65 63 73 71  FROM t1.}.execsq
1320: 6c 5f 74 65 73 74 20 32 2e 33 30 20 7b 0a 20 20  l_test 2.30 {.  
1330: 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29  SELECT a, sum(d)
1340: 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45   OVER (.    ORDE
1350: 52 20 42 59 20 62 20 0a 20 20 20 20 52 41 4e 47  R BY b .    RANG
1360: 45 20 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e  E BETWEEN CURREN
1370: 54 20 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e  T ROW AND UNBOUN
1380: 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  DED FOLLOWING.  
1390: 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65  ) FROM t1.}..exe
13a0: 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b 0a  csql_test 3.1 {.
13b0: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
13c0: 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 50 41  d) OVER (.    PA
13d0: 52 54 49 54 49 4f 4e 20 42 59 20 62 20 4f 52 44  RTITION BY b ORD
13e0: 45 52 20 42 59 20 64 0a 20 20 20 20 52 41 4e 47  ER BY d.    RANG
13f0: 45 20 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e  E BETWEEN CURREN
1400: 54 20 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e  T ROW AND UNBOUN
1410: 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20  DED FOLLOWING.  
1420: 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78 65  ) FROM t1.}..exe
1430: 63 73 71 6c 5f 74 65 73 74 20 33 2e 32 20 7b 0a  csql_test 3.2 {.
1440: 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28    SELECT a, sum(
1450: 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52  d) OVER (.    OR
1460: 44 45 52 20 42 59 20 62 0a 20 20 20 20 52 41 4e  DER BY b.    RAN
1470: 47 45 20 42 45 54 57 45 45 4e 20 43 55 52 52 45  GE BETWEEN CURRE
1480: 4e 54 20 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55  NT ROW AND UNBOU
1490: 4e 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20  NDED FOLLOWING. 
14a0: 20 29 20 46 52 4f 4d 20 74 31 0a 7d 0a 0a 65 78   ) FROM t1.}..ex
14b0: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 33 20 7b  ecsql_test 3.3 {
14c0: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d  .  SELECT a, sum
14d0: 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f  (d) OVER (.    O
14e0: 52 44 45 52 20 42 59 20 64 0a 20 20 20 20 52 4f  RDER BY d.    RO
14f0: 57 53 20 42 45 54 57 45 45 4e 20 55 4e 42 4f 55  WS BETWEEN UNBOU
1500: 4e 44 45 44 20 50 52 45 43 45 44 49 4e 47 20 41  NDED PRECEDING A
1510: 4e 44 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c  ND UNBOUNDED FOL
1520: 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20  LOWING.  ) FROM 
1530: 74 31 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65  t1.}..execsql_te
1540: 73 74 20 33 2e 34 20 7b 0a 20 20 53 45 4c 45 43  st 3.4 {.  SELEC
1550: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
1560: 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20   (.    ORDER BY 
1570: 64 2f 32 0a 20 20 20 20 52 4f 57 53 20 42 45 54  d/2.    ROWS BET
1580: 57 45 45 4e 20 55 4e 42 4f 55 4e 44 45 44 20 50  WEEN UNBOUNDED P
1590: 52 45 43 45 44 49 4e 47 20 41 4e 44 20 43 55 52  RECEDING AND CUR
15a0: 52 45 4e 54 20 52 4f 57 0a 20 20 29 20 46 52 4f  RENT ROW.  ) FRO
15b0: 4d 20 74 31 0a 7d 0a 0a 23 70 75 74 73 20 24 3a  M t1.}..#puts $:
15c0: 3a 66 64 20 66 69 6e 69 73 68 5f 74 65 73 74 0a  :fd finish_test.
15d0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 65 78 65  .==========..exe
15e0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a  csql_test 4.0 {.
15f0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
1600: 45 58 49 53 54 53 20 74 32 3b 0a 20 20 43 52 45  EXISTS t2;.  CRE
1610: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 20 49  ATE TABLE t2(a I
1620: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1630: 45 59 2c 20 62 20 49 4e 54 45 47 45 52 29 3b 0a  EY, b INTEGER);.
1640: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
1650: 28 61 2c 20 62 29 20 56 41 4c 55 45 53 0a 20 20  (a, b) VALUES.  
1660: 28 31 2c 30 29 2c 20 28 32 2c 37 34 29 2c 20 28  (1,0), (2,74), (
1670: 33 2c 34 31 29 2c 20 28 34 2c 37 34 29 2c 20 28  3,41), (4,74), (
1680: 35 2c 32 33 29 2c 20 28 36 2c 39 39 29 2c 20 28  5,23), (6,99), (
1690: 37 2c 32 36 29 2c 20 28 38 2c 33 33 29 2c 20 28  7,26), (8,33), (
16a0: 39 2c 32 29 2c 0a 20 20 28 31 30 2c 38 39 29 2c  9,2),.  (10,89),
16b0: 20 28 31 31 2c 38 31 29 2c 20 28 31 32 2c 39 36   (11,81), (12,96
16c0: 29 2c 20 28 31 33 2c 35 39 29 2c 20 28 31 34 2c  ), (13,59), (14,
16d0: 33 38 29 2c 20 28 31 35 2c 36 38 29 2c 20 28 31  38), (15,68), (1
16e0: 36 2c 33 39 29 2c 20 28 31 37 2c 36 32 29 2c 0a  6,39), (17,62),.
16f0: 20 20 28 31 38 2c 39 31 29 2c 20 28 31 39 2c 34    (18,91), (19,4
1700: 36 29 2c 20 28 32 30 2c 36 29 2c 20 28 32 31 2c  6), (20,6), (21,
1710: 39 39 29 2c 20 28 32 32 2c 39 37 29 2c 20 28 32  99), (22,97), (2
1720: 33 2c 32 37 29 2c 20 28 32 34 2c 34 36 29 2c 20  3,27), (24,46), 
1730: 28 32 35 2c 37 38 29 2c 0a 20 20 28 32 36 2c 35  (25,78),.  (26,5
1740: 34 29 2c 20 28 32 37 2c 39 37 29 2c 20 28 32 38  4), (27,97), (28
1750: 2c 38 29 2c 20 28 32 39 2c 36 37 29 2c 20 28 33  ,8), (29,67), (3
1760: 30 2c 32 39 29 2c 20 28 33 31 2c 39 33 29 2c 20  0,29), (31,93), 
1770: 28 33 32 2c 38 34 29 2c 20 28 33 33 2c 37 37 29  (32,84), (33,77)
1780: 2c 0a 20 20 28 33 34 2c 32 33 29 2c 20 28 33 35  ,.  (34,23), (35
1790: 2c 31 36 29 2c 20 28 33 36 2c 31 36 29 2c 20 28  ,16), (36,16), (
17a0: 33 37 2c 39 33 29 2c 20 28 33 38 2c 36 35 29 2c  37,93), (38,65),
17b0: 20 28 33 39 2c 33 35 29 2c 20 28 34 30 2c 34 37   (39,35), (40,47
17c0: 29 2c 20 28 34 31 2c 37 29 2c 0a 20 20 28 34 32  ), (41,7),.  (42
17d0: 2c 38 36 29 2c 20 28 34 33 2c 37 34 29 2c 20 28  ,86), (43,74), (
17e0: 34 34 2c 36 31 29 2c 20 28 34 35 2c 39 31 29 2c  44,61), (45,91),
17f0: 20 28 34 36 2c 38 35 29 2c 20 28 34 37 2c 32 34   (46,85), (47,24
1800: 29 2c 20 28 34 38 2c 38 35 29 2c 20 28 34 39 2c  ), (48,85), (49,
1810: 34 33 29 2c 0a 20 20 28 35 30 2c 35 39 29 2c 20  43),.  (50,59), 
1820: 28 35 31 2c 31 32 29 2c 20 28 35 32 2c 33 32 29  (51,12), (52,32)
1830: 2c 20 28 35 33 2c 35 36 29 2c 20 28 35 34 2c 33  , (53,56), (54,3
1840: 29 2c 20 28 35 35 2c 39 31 29 2c 20 28 35 36 2c  ), (55,91), (56,
1850: 32 32 29 2c 20 28 35 37 2c 39 30 29 2c 0a 20 20  22), (57,90),.  
1860: 28 35 38 2c 35 35 29 2c 20 28 35 39 2c 31 35 29  (58,55), (59,15)
1870: 2c 20 28 36 30 2c 32 38 29 2c 20 28 36 31 2c 38  , (60,28), (61,8
1880: 39 29 2c 20 28 36 32 2c 32 35 29 2c 20 28 36 33  9), (62,25), (63
1890: 2c 34 37 29 2c 20 28 36 34 2c 31 29 2c 20 28 36  ,47), (64,1), (6
18a0: 35 2c 35 36 29 2c 0a 20 20 28 36 36 2c 34 30 29  5,56),.  (66,40)
18b0: 2c 20 28 36 37 2c 34 33 29 2c 20 28 36 38 2c 35  , (67,43), (68,5
18c0: 36 29 2c 20 28 36 39 2c 31 36 29 2c 20 28 37 30  6), (69,16), (70
18d0: 2c 37 35 29 2c 20 28 37 31 2c 33 36 29 2c 20 28  ,75), (71,36), (
18e0: 37 32 2c 38 39 29 2c 20 28 37 33 2c 39 38 29 2c  72,89), (73,98),
18f0: 0a 20 20 28 37 34 2c 37 36 29 2c 20 28 37 35 2c  .  (74,76), (75,
1900: 38 31 29 2c 20 28 37 36 2c 34 29 2c 20 28 37 37  81), (76,4), (77
1910: 2c 39 34 29 2c 20 28 37 38 2c 34 32 29 2c 20 28  ,94), (78,42), (
1920: 37 39 2c 33 30 29 2c 20 28 38 30 2c 37 38 29 2c  79,30), (80,78),
1930: 20 28 38 31 2c 33 33 29 2c 0a 20 20 28 38 32 2c   (81,33),.  (82,
1940: 32 39 29 2c 20 28 38 33 2c 35 33 29 2c 20 28 38  29), (83,53), (8
1950: 34 2c 36 33 29 2c 20 28 38 35 2c 32 29 2c 20 28  4,63), (85,2), (
1960: 38 36 2c 38 37 29 2c 20 28 38 37 2c 33 37 29 2c  86,87), (87,37),
1970: 20 28 38 38 2c 38 30 29 2c 20 28 38 39 2c 38 34   (88,80), (89,84
1980: 29 2c 0a 20 20 28 39 30 2c 37 32 29 2c 20 28 39  ),.  (90,72), (9
1990: 31 2c 34 31 29 2c 20 28 39 32 2c 39 29 2c 20 28  1,41), (92,9), (
19a0: 39 33 2c 36 31 29 2c 20 28 39 34 2c 37 33 29 2c  93,61), (94,73),
19b0: 20 28 39 35 2c 39 35 29 2c 20 28 39 36 2c 36 35   (95,95), (96,65
19c0: 29 2c 20 28 39 37 2c 31 33 29 2c 0a 20 20 28 39  ), (97,13),.  (9
19d0: 38 2c 35 38 29 2c 20 28 39 39 2c 39 36 29 2c 20  8,58), (99,96), 
19e0: 28 31 30 30 2c 39 38 29 2c 20 28 31 30 31 2c 31  (100,98), (101,1
19f0: 29 2c 20 28 31 30 32 2c 32 31 29 2c 20 28 31 30  ), (102,21), (10
1a00: 33 2c 37 34 29 2c 20 28 31 30 34 2c 36 35 29 2c  3,74), (104,65),
1a10: 20 28 31 30 35 2c 33 35 29 2c 0a 20 20 28 31 30   (105,35),.  (10
1a20: 36 2c 35 29 2c 20 28 31 30 37 2c 37 33 29 2c 20  6,5), (107,73), 
1a30: 28 31 30 38 2c 31 31 29 2c 20 28 31 30 39 2c 35  (108,11), (109,5
1a40: 31 29 2c 20 28 31 31 30 2c 38 37 29 2c 20 28 31  1), (110,87), (1
1a50: 31 31 2c 34 31 29 2c 20 28 31 31 32 2c 31 32 29  11,41), (112,12)
1a60: 2c 20 28 31 31 33 2c 38 29 2c 0a 20 20 28 31 31  , (113,8),.  (11
1a70: 34 2c 32 30 29 2c 20 28 31 31 35 2c 33 31 29 2c  4,20), (115,31),
1a80: 20 28 31 31 36 2c 33 31 29 2c 20 28 31 31 37 2c   (116,31), (117,
1a90: 31 35 29 2c 20 28 31 31 38 2c 39 35 29 2c 20 28  15), (118,95), (
1aa0: 31 31 39 2c 32 32 29 2c 20 28 31 32 30 2c 37 33  119,22), (120,73
1ab0: 29 2c 20 0a 20 20 28 31 32 31 2c 37 39 29 2c 20  ), .  (121,79), 
1ac0: 28 31 32 32 2c 38 38 29 2c 20 28 31 32 33 2c 33  (122,88), (123,3
1ad0: 34 29 2c 20 28 31 32 34 2c 38 29 2c 20 28 31 32  4), (124,8), (12
1ae0: 35 2c 31 31 29 2c 20 28 31 32 36 2c 34 39 29 2c  5,11), (126,49),
1af0: 20 28 31 32 37 2c 33 34 29 2c 20 0a 20 20 28 31   (127,34), .  (1
1b00: 32 38 2c 39 30 29 2c 20 28 31 32 39 2c 35 39 29  28,90), (129,59)
1b10: 2c 20 28 31 33 30 2c 39 36 29 2c 20 28 31 33 31  , (130,96), (131
1b20: 2c 36 30 29 2c 20 28 31 33 32 2c 35 35 29 2c 20  ,60), (132,55), 
1b30: 28 31 33 33 2c 37 35 29 2c 20 28 31 33 34 2c 37  (133,75), (134,7
1b40: 37 29 2c 0a 20 20 28 31 33 35 2c 34 34 29 2c 20  7),.  (135,44), 
1b50: 28 31 33 36 2c 32 29 2c 20 28 31 33 37 2c 37 29  (136,2), (137,7)
1b60: 2c 20 28 31 33 38 2c 38 35 29 2c 20 28 31 33 39  , (138,85), (139
1b70: 2c 35 37 29 2c 20 28 31 34 30 2c 37 34 29 2c 20  ,57), (140,74), 
1b80: 28 31 34 31 2c 32 39 29 2c 20 28 31 34 32 2c 37  (141,29), (142,7
1b90: 30 29 2c 0a 20 20 28 31 34 33 2c 35 39 29 2c 20  0),.  (143,59), 
1ba0: 28 31 34 34 2c 31 39 29 2c 20 28 31 34 35 2c 33  (144,19), (145,3
1bb0: 39 29 2c 20 28 31 34 36 2c 32 36 29 2c 20 28 31  9), (146,26), (1
1bc0: 34 37 2c 32 36 29 2c 20 28 31 34 38 2c 34 37 29  47,26), (148,47)
1bd0: 2c 20 28 31 34 39 2c 38 30 29 2c 0a 20 20 28 31  , (149,80),.  (1
1be0: 35 30 2c 39 30 29 2c 20 28 31 35 31 2c 33 36 29  50,90), (151,36)
1bf0: 2c 20 28 31 35 32 2c 35 38 29 2c 20 28 31 35 33  , (152,58), (153
1c00: 2c 34 37 29 2c 20 28 31 35 34 2c 39 29 2c 20 28  ,47), (154,9), (
1c10: 31 35 35 2c 37 32 29 2c 20 28 31 35 36 2c 37 32  155,72), (156,72
1c20: 29 2c 20 28 31 35 37 2c 36 36 29 2c 0a 20 20 28  ), (157,66),.  (
1c30: 31 35 38 2c 33 33 29 2c 20 28 31 35 39 2c 39 33  158,33), (159,93
1c40: 29 2c 20 28 31 36 30 2c 37 35 29 2c 20 28 31 36  ), (160,75), (16
1c50: 31 2c 36 34 29 2c 20 28 31 36 32 2c 38 31 29 2c  1,64), (162,81),
1c60: 20 28 31 36 33 2c 39 29 2c 20 28 31 36 34 2c 32   (163,9), (164,2
1c70: 33 29 2c 20 28 31 36 35 2c 33 37 29 2c 0a 20 20  3), (165,37),.  
1c80: 28 31 36 36 2c 31 33 29 2c 20 28 31 36 37 2c 31  (166,13), (167,1
1c90: 32 29 2c 20 28 31 36 38 2c 31 34 29 2c 20 28 31  2), (168,14), (1
1ca0: 36 39 2c 36 32 29 2c 20 28 31 37 30 2c 39 31 29  69,62), (170,91)
1cb0: 2c 20 28 31 37 31 2c 33 36 29 2c 20 28 31 37 32  , (171,36), (172
1cc0: 2c 39 31 29 2c 0a 20 20 28 31 37 33 2c 33 33 29  ,91),.  (173,33)
1cd0: 2c 20 28 31 37 34 2c 31 35 29 2c 20 28 31 37 35  , (174,15), (175
1ce0: 2c 33 34 29 2c 20 28 31 37 36 2c 33 36 29 2c 20  ,34), (176,36), 
1cf0: 28 31 37 37 2c 39 39 29 2c 20 28 31 37 38 2c 33  (177,99), (178,3
1d00: 29 2c 20 28 31 37 39 2c 39 35 29 2c 20 28 31 38  ), (179,95), (18
1d10: 30 2c 36 39 29 2c 0a 20 20 28 31 38 31 2c 35 38  0,69),.  (181,58
1d20: 29 2c 20 28 31 38 32 2c 35 32 29 2c 20 28 31 38  ), (182,52), (18
1d30: 33 2c 33 30 29 2c 20 28 31 38 34 2c 35 30 29 2c  3,30), (184,50),
1d40: 20 28 31 38 35 2c 38 34 29 2c 20 28 31 38 36 2c   (185,84), (186,
1d50: 31 30 29 2c 20 28 31 38 37 2c 38 34 29 2c 0a 20  10), (187,84),. 
1d60: 20 28 31 38 38 2c 33 33 29 2c 20 28 31 38 39 2c   (188,33), (189,
1d70: 32 31 29 2c 20 28 31 39 30 2c 33 39 29 2c 20 28  21), (190,39), (
1d80: 31 39 31 2c 34 34 29 2c 20 28 31 39 32 2c 35 38  191,44), (192,58
1d90: 29 2c 20 28 31 39 33 2c 33 30 29 2c 20 28 31 39  ), (193,30), (19
1da0: 34 2c 33 38 29 2c 0a 20 20 28 31 39 35 2c 33 34  4,38),.  (195,34
1db0: 29 2c 20 28 31 39 36 2c 38 33 29 2c 20 28 31 39  ), (196,83), (19
1dc0: 37 2c 32 37 29 2c 20 28 31 39 38 2c 38 32 29 2c  7,27), (198,82),
1dd0: 20 28 31 39 39 2c 31 37 29 2c 20 28 32 30 30 2c   (199,17), (200,
1de0: 37 29 3b 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74  7);.}..execsql_t
1df0: 65 73 74 20 34 2e 31 20 7b 0a 20 20 53 45 4c 45  est 4.1 {.  SELE
1e00: 43 54 20 61 2c 20 73 75 6d 28 62 29 20 4f 56 45  CT a, sum(b) OVE
1e10: 52 20 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f  R (.    PARTITIO
1e20: 4e 20 42 59 20 28 62 25 31 30 29 0a 20 20 20 20  N BY (b%10).    
1e30: 4f 52 44 45 52 20 42 59 20 62 0a 20 20 29 20 46  ORDER BY b.  ) F
1e40: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
1e50: 61 3b 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65  a;.}..execsql_te
1e60: 73 74 20 34 2e 32 20 7b 0a 20 20 53 45 4c 45 43  st 4.2 {.  SELEC
1e70: 54 20 61 2c 20 73 75 6d 28 62 29 20 4f 56 45 52  T a, sum(b) OVER
1e80: 20 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e   (.    PARTITION
1e90: 20 42 59 20 28 62 25 31 30 29 0a 20 20 20 20 4f   BY (b%10).    O
1ea0: 52 44 45 52 20 42 59 20 62 0a 20 20 20 20 52 41  RDER BY b.    RA
1eb0: 4e 47 45 20 42 45 54 57 45 45 4e 20 55 4e 42 4f  NGE BETWEEN UNBO
1ec0: 55 4e 44 45 44 20 50 52 45 43 45 44 49 4e 47 20  UNDED PRECEDING 
1ed0: 41 4e 44 20 43 55 52 52 45 4e 54 20 52 4f 57 0a  AND CURRENT ROW.
1ee0: 20 20 29 20 46 52 4f 4d 20 74 32 20 4f 52 44 45    ) FROM t2 ORDE
1ef0: 52 20 42 59 20 61 3b 0a 7d 0a 0a 65 78 65 63 73  R BY a;.}..execs
1f00: 71 6c 5f 74 65 73 74 20 34 2e 33 20 7b 0a 20 20  ql_test 4.3 {.  
1f10: 53 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62 29  SELECT b, sum(b)
1f20: 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45   OVER (.    ORDE
1f30: 52 20 42 59 20 62 0a 20 20 20 20 52 4f 57 53 20  R BY b.    ROWS 
1f40: 42 45 54 57 45 45 4e 20 55 4e 42 4f 55 4e 44 45  BETWEEN UNBOUNDE
1f50: 44 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44 20  D PRECEDING AND 
1f60: 43 55 52 52 45 4e 54 20 52 4f 57 0a 20 20 29 20  CURRENT ROW.  ) 
1f70: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
1f80: 20 62 3b 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74   b;.}..execsql_t
1f90: 65 73 74 20 34 2e 34 20 7b 0a 20 20 53 45 4c 45  est 4.4 {.  SELE
1fa0: 43 54 20 62 2c 20 73 75 6d 28 62 29 20 4f 56 45  CT b, sum(b) OVE
1fb0: 52 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59  R (.    ORDER BY
1fc0: 20 62 0a 20 20 20 20 52 41 4e 47 45 20 42 45 54   b.    RANGE BET
1fd0: 57 45 45 4e 20 55 4e 42 4f 55 4e 44 45 44 20 50  WEEN UNBOUNDED P
1fe0: 52 45 43 45 44 49 4e 47 20 41 4e 44 20 55 4e 42  RECEDING AND UNB
1ff0: 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47  OUNDED FOLLOWING
2000: 0a 20 20 29 20 46 52 4f 4d 20 74 32 20 4f 52 44  .  ) FROM t2 ORD
2010: 45 52 20 42 59 20 62 3b 0a 7d 0a 0a 65 78 65 63  ER BY b;.}..exec
2020: 73 71 6c 5f 74 65 73 74 20 34 2e 35 20 7b 0a 20  sql_test 4.5 {. 
2030: 20 53 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62   SELECT b, sum(b
2040: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
2050: 45 52 20 42 59 20 62 0a 20 20 20 20 52 41 4e 47  ER BY b.    RANG
2060: 45 20 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e  E BETWEEN CURREN
2070: 54 20 52 4f 57 20 41 4e 44 20 43 55 52 52 45 4e  T ROW AND CURREN
2080: 54 20 52 4f 57 0a 20 20 29 20 46 52 4f 4d 20 74  T ROW.  ) FROM t
2090: 32 20 4f 52 44 45 52 20 42 59 20 62 3b 0a 7d 0a  2 ORDER BY b;.}.
20a0: 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  .execsql_test 4.
20b0: 36 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 62  6.1 {.  SELECT b
20c0: 2c 20 73 75 6d 28 62 29 20 4f 56 45 52 20 28 0a  , sum(b) OVER (.
20d0: 20 20 20 20 52 41 4e 47 45 20 42 45 54 57 45 45      RANGE BETWEE
20e0: 4e 20 43 55 52 52 45 4e 54 20 52 4f 57 20 41 4e  N CURRENT ROW AN
20f0: 44 20 43 55 52 52 45 4e 54 20 52 4f 57 0a 20 20  D CURRENT ROW.  
2100: 29 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  ) FROM t2 ORDER 
2110: 42 59 20 62 3b 0a 7d 0a 65 78 65 63 73 71 6c 5f  BY b;.}.execsql_
2120: 74 65 73 74 20 34 2e 36 2e 32 20 7b 0a 20 20 53  test 4.6.2 {.  S
2130: 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62 29 20  ELECT b, sum(b) 
2140: 4f 56 45 52 20 28 29 20 46 52 4f 4d 20 74 32 20  OVER () FROM t2 
2150: 4f 52 44 45 52 20 42 59 20 62 3b 0a 7d 0a 65 78  ORDER BY b;.}.ex
2160: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 36 2e 33  ecsql_test 4.6.3
2170: 20 7b 0a 20 20 53 45 4c 45 43 54 20 62 2c 20 73   {.  SELECT b, s
2180: 75 6d 28 62 29 20 4f 56 45 52 20 28 0a 20 20 20  um(b) OVER (.   
2190: 20 52 41 4e 47 45 20 42 45 54 57 45 45 4e 20 55   RANGE BETWEEN U
21a0: 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44 49  NBOUNDED PRECEDI
21b0: 4e 47 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44  NG AND UNBOUNDED
21c0: 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46   FOLLOWING.  ) F
21d0: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
21e0: 62 3b 0a 7d 0a 65 78 65 63 73 71 6c 5f 74 65 73  b;.}.execsql_tes
21f0: 74 20 34 2e 36 2e 34 20 7b 0a 20 20 53 45 4c 45  t 4.6.4 {.  SELE
2200: 43 54 20 62 2c 20 73 75 6d 28 62 29 20 4f 56 45  CT b, sum(b) OVE
2210: 52 20 28 0a 20 20 20 20 52 41 4e 47 45 20 42 45  R (.    RANGE BE
2220: 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20 52 4f  TWEEN CURRENT RO
2230: 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44 20  W AND UNBOUNDED 
2240: 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52  FOLLOWING.  ) FR
2250: 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 62  OM t2 ORDER BY b
2260: 3b 0a 7d 0a 0a 65 78 65 63 73 71 6c 5f 74 65 73  ;.}..execsql_tes
2270: 74 20 34 2e 37 2e 31 20 7b 0a 20 20 53 45 4c 45  t 4.7.1 {.  SELE
2280: 43 54 20 62 2c 20 73 75 6d 28 62 29 20 4f 56 45  CT b, sum(b) OVE
2290: 52 20 28 0a 20 20 20 20 52 4f 57 53 20 42 45 54  R (.    ROWS BET
22a0: 57 45 45 4e 20 43 55 52 52 45 4e 54 20 52 4f 57  WEEN CURRENT ROW
22b0: 20 41 4e 44 20 43 55 52 52 45 4e 54 20 52 4f 57   AND CURRENT ROW
22c0: 0a 20 20 29 20 46 52 4f 4d 20 74 32 20 4f 52 44  .  ) FROM t2 ORD
22d0: 45 52 20 42 59 20 31 2c 20 32 3b 0a 7d 0a 65 78  ER BY 1, 2;.}.ex
22e0: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 37 2e 32  ecsql_test 4.7.2
22f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 62 2c 20 73   {.  SELECT b, s
2300: 75 6d 28 62 29 20 4f 56 45 52 20 28 0a 20 20 20  um(b) OVER (.   
2310: 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 55 4e   ROWS BETWEEN UN
2320: 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44 49 4e  BOUNDED PRECEDIN
2330: 47 20 41 4e 44 20 43 55 52 52 45 4e 54 20 52 4f  G AND CURRENT RO
2340: 57 0a 20 20 29 20 46 52 4f 4d 20 74 32 20 4f 52  W.  ) FROM t2 OR
2350: 44 45 52 20 42 59 20 31 2c 20 32 3b 0a 7d 0a 65  DER BY 1, 2;.}.e
2360: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 37 2e  xecsql_test 4.7.
2370: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 62 2c 20  3 {.  SELECT b, 
2380: 73 75 6d 28 62 29 20 4f 56 45 52 20 28 0a 20 20  sum(b) OVER (.  
2390: 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 55    ROWS BETWEEN U
23a0: 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44 49  NBOUNDED PRECEDI
23b0: 4e 47 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44  NG AND UNBOUNDED
23c0: 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46   FOLLOWING.  ) F
23d0: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
23e0: 31 2c 20 32 3b 0a 7d 0a 65 78 65 63 73 71 6c 5f  1, 2;.}.execsql_
23f0: 74 65 73 74 20 34 2e 37 2e 34 20 7b 0a 20 20 53  test 4.7.4 {.  S
2400: 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62 29 20  ELECT b, sum(b) 
2410: 4f 56 45 52 20 28 0a 20 20 20 20 52 4f 57 53 20  OVER (.    ROWS 
2420: 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20  BETWEEN CURRENT 
2430: 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45  ROW AND UNBOUNDE
2440: 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20  D FOLLOWING.  ) 
2450: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
2460: 20 31 2c 20 32 3b 0a 7d 0a 0a 65 78 65 63 73 71   1, 2;.}..execsq
2470: 6c 5f 74 65 73 74 20 34 2e 38 2e 31 20 7b 0a 20  l_test 4.8.1 {. 
2480: 20 53 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62   SELECT b, sum(b
2490: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
24a0: 45 52 20 42 59 20 61 0a 20 20 20 20 52 4f 57 53  ER BY a.    ROWS
24b0: 20 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54   BETWEEN CURRENT
24c0: 20 52 4f 57 20 41 4e 44 20 43 55 52 52 45 4e 54   ROW AND CURRENT
24d0: 20 52 4f 57 0a 20 20 29 20 46 52 4f 4d 20 74 32   ROW.  ) FROM t2
24e0: 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32 3b 0a   ORDER BY 1, 2;.
24f0: 7d 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  }.execsql_test 4
2500: 2e 38 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  .8.2 {.  SELECT 
2510: 62 2c 20 73 75 6d 28 62 29 20 4f 56 45 52 20 28  b, sum(b) OVER (
2520: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 0a  .    ORDER BY a.
2530: 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e      ROWS BETWEEN
2540: 20 55 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45   UNBOUNDED PRECE
2550: 44 49 4e 47 20 41 4e 44 20 43 55 52 52 45 4e 54  DING AND CURRENT
2560: 20 52 4f 57 0a 20 20 29 20 46 52 4f 4d 20 74 32   ROW.  ) FROM t2
2570: 20 4f 52 44 45 52 20 42 59 20 31 2c 20 32 3b 0a   ORDER BY 1, 2;.
2580: 7d 0a 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  }.execsql_test 4
2590: 2e 38 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  .8.3 {.  SELECT 
25a0: 62 2c 20 73 75 6d 28 62 29 20 4f 56 45 52 20 28  b, sum(b) OVER (
25b0: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 61 0a  .    ORDER BY a.
25c0: 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e      ROWS BETWEEN
25d0: 20 55 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45   UNBOUNDED PRECE
25e0: 44 49 4e 47 20 41 4e 44 20 55 4e 42 4f 55 4e 44  DING AND UNBOUND
25f0: 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29  ED FOLLOWING.  )
2600: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
2610: 59 20 31 2c 20 32 3b 0a 7d 0a 65 78 65 63 73 71  Y 1, 2;.}.execsq
2620: 6c 5f 74 65 73 74 20 34 2e 38 2e 34 20 7b 0a 20  l_test 4.8.4 {. 
2630: 20 53 45 4c 45 43 54 20 62 2c 20 73 75 6d 28 62   SELECT b, sum(b
2640: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
2650: 45 52 20 42 59 20 61 0a 20 20 20 20 52 4f 57 53  ER BY a.    ROWS
2660: 20 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54   BETWEEN CURRENT
2670: 20 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44   ROW AND UNBOUND
2680: 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29  ED FOLLOWING.  )
2690: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
26a0: 59 20 31 2c 20 32 3b 0a 7d 0a 0a 65 78 65 63 73  Y 1, 2;.}..execs
26b0: 71 6c 5f 66 6c 6f 61 74 5f 74 65 73 74 20 34 2e  ql_float_test 4.
26c0: 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 0a 20 20  9 {.  SELECT .  
26d0: 20 20 72 61 6e 6b 28 29 20 4f 56 45 52 20 77 69    rank() OVER wi
26e0: 6e 20 41 53 20 72 61 6e 6b 2c 0a 20 20 20 20 63  n AS rank,.    c
26f0: 75 6d 65 5f 64 69 73 74 28 29 20 4f 56 45 52 20  ume_dist() OVER 
2700: 77 69 6e 20 41 53 20 63 75 6d 65 5f 64 69 73 74  win AS cume_dist
2710: 20 46 52 4f 4d 20 74 31 0a 20 20 57 49 4e 44 4f   FROM t1.  WINDO
2720: 57 20 77 69 6e 20 41 53 20 28 4f 52 44 45 52 20  W win AS (ORDER 
2730: 42 59 20 31 29 3b 0a 7d 0a 0a 0a 0a 66 69 6e 69  BY 1);.}....fini
2740: 73 68 5f 74 65 73 74 0a 0a 0a                    sh_test...