/ Hex Artifact Content
Login

Artifact ca65b0818ddc948a7b0b07ee16a3c489dafcb958203bf8b75356eacd4696a206:


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 20 54 68 69 73 20 66 69 6c 65 20  ***.# This file 
0170: 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65  implements regre
0180: 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20  ssion tests for 
0190: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
01a0: 23 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01d0: 23 23 23 23 23 23 23 0a 23 20 44 4f 20 4e 4f 54  #######.# DO NOT
01e0: 20 45 44 49 54 21 20 54 48 49 53 20 46 49 4c 45   EDIT! THIS FILE
01f0: 20 49 53 20 41 55 54 4f 4d 41 54 49 43 41 4c 4c   IS AUTOMATICALL
0200: 59 20 47 45 4e 45 52 41 54 45 44 21 0a 23 23 23  Y GENERATED!.###
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  #..set testdir [
0250: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0260: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0270: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0280: 73 65 74 20 74 65 73 74 70 72 65 66 69 78 20 77  set testprefix w
0290: 69 6e 64 6f 77 32 0a 0a 64 6f 5f 65 78 65 63 73  indow2..do_execs
02a0: 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20  ql_test 1.0 {.  
02b0: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
02c0: 49 53 54 53 20 74 31 3b 0a 20 20 43 52 45 41 54  ISTS t1;.  CREAT
02d0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54  E TABLE t1(a INT
02e0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
02f0: 2c 20 62 20 54 45 58 54 2c 20 63 20 54 45 58 54  , b TEXT, c TEXT
0300: 2c 20 64 20 49 4e 54 45 47 45 52 29 3b 0a 20 20  , d INTEGER);.  
0310: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0320: 41 4c 55 45 53 28 31 2c 20 27 6f 64 64 27 2c 20  ALUES(1, 'odd', 
0330: 20 27 6f 6e 65 27 2c 20 20 20 31 29 3b 0a 20 20   'one',   1);.  
0340: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0350: 41 4c 55 45 53 28 32 2c 20 27 65 76 65 6e 27 2c  ALUES(2, 'even',
0360: 20 27 74 77 6f 27 2c 20 20 20 32 29 3b 0a 20 20   'two',   2);.  
0370: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0380: 41 4c 55 45 53 28 33 2c 20 27 6f 64 64 27 2c 20  ALUES(3, 'odd', 
0390: 20 27 74 68 72 65 65 27 2c 20 33 29 3b 0a 20 20   'three', 3);.  
03a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
03b0: 41 4c 55 45 53 28 34 2c 20 27 65 76 65 6e 27 2c  ALUES(4, 'even',
03c0: 20 27 66 6f 75 72 27 2c 20 20 34 29 3b 0a 20 20   'four',  4);.  
03d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
03e0: 41 4c 55 45 53 28 35 2c 20 27 6f 64 64 27 2c 20  ALUES(5, 'odd', 
03f0: 20 27 66 69 76 65 27 2c 20 20 35 29 3b 0a 20 20   'five',  5);.  
0400: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0410: 41 4c 55 45 53 28 36 2c 20 27 65 76 65 6e 27 2c  ALUES(6, 'even',
0420: 20 27 73 69 78 27 2c 20 20 20 36 29 3b 0a 7d 20   'six',   6);.} 
0430: 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {}..do_execsql_t
0440: 65 73 74 20 31 2e 31 20 7b 0a 20 20 53 45 4c 45  est 1.1 {.  SELE
0450: 43 54 20 63 2c 20 73 75 6d 28 64 29 20 4f 56 45  CT c, sum(d) OVE
0460: 52 20 28 50 41 52 54 49 54 49 4f 4e 20 42 59 20  R (PARTITION BY 
0470: 62 20 4f 52 44 45 52 20 42 59 20 63 29 20 46 52  b ORDER BY c) FR
0480: 4f 4d 20 74 31 3b 0a 7d 20 7b 66 6f 75 72 20 34  OM t1;.} {four 4
0490: 20 20 20 73 69 78 20 31 30 20 20 20 74 77 6f 20     six 10   two 
04a0: 31 32 20 20 20 66 69 76 65 20 35 20 20 20 6f 6e  12   five 5   on
04b0: 65 20 36 20 20 20 74 68 72 65 65 20 39 7d 0a 0a  e 6   three 9}..
04c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
04d0: 31 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 73  1.2 {.  SELECT s
04e0: 75 6d 28 64 29 20 4f 56 45 52 20 28 29 20 46 52  um(d) OVER () FR
04f0: 4f 4d 20 74 31 3b 0a 7d 20 7b 32 31 20 20 20 32  OM t1;.} {21   2
0500: 31 20 20 20 32 31 20 20 20 32 31 20 20 20 32 31  1   21   21   21
0510: 20 20 20 32 31 7d 0a 0a 64 6f 5f 65 78 65 63 73     21}..do_execs
0520: 71 6c 5f 74 65 73 74 20 31 2e 33 20 7b 0a 20 20  ql_test 1.3 {.  
0530: 53 45 4c 45 43 54 20 73 75 6d 28 64 29 20 4f 56  SELECT sum(d) OV
0540: 45 52 20 28 50 41 52 54 49 54 49 4f 4e 20 42 59  ER (PARTITION BY
0550: 20 62 29 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b   b) FROM t1;.} {
0560: 31 32 20 20 20 31 32 20 20 20 31 32 20 20 20 39  12   12   12   9
0570: 20 20 20 39 20 20 20 39 7d 0a 0a 23 3d 3d 3d 3d     9   9}..#====
0580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0590: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
05a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
05b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
05c0: 3d 3d 3d 3d 3d 3d 0a 0a 64 6f 5f 65 78 65 63 73  ======..do_execs
05d0: 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20  ql_test 2.1 {.  
05e0: 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29  SELECT a, sum(d)
05f0: 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44 45   OVER (.    ORDE
0600: 52 20 42 59 20 64 0a 20 20 20 20 52 4f 57 53 20  R BY d.    ROWS 
0610: 42 45 54 57 45 45 4e 20 31 30 30 30 20 50 52 45  BETWEEN 1000 PRE
0620: 43 45 44 49 4e 47 20 41 4e 44 20 31 20 46 4f 4c  CEDING AND 1 FOL
0630: 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20  LOWING.  ) FROM 
0640: 74 31 0a 7d 20 7b 31 20 33 20 20 20 32 20 36 20  t1.} {1 3   2 6 
0650: 20 20 33 20 31 30 20 20 20 34 20 31 35 20 20 20    3 10   4 15   
0660: 35 20 32 31 20 20 20 36 20 32 31 7d 0a 0a 64 6f  5 21   6 21}..do
0670: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0680: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  2 {.  SELECT a, 
0690: 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20  sum(d) OVER (.  
06a0: 20 20 4f 52 44 45 52 20 42 59 20 64 0a 20 20 20    ORDER BY d.   
06b0: 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 31 30   ROWS BETWEEN 10
06c0: 30 30 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44  00 PRECEDING AND
06d0: 20 31 30 30 30 20 46 4f 4c 4c 4f 57 49 4e 47 0a   1000 FOLLOWING.
06e0: 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d 20 7b 31    ) FROM t1.} {1
06f0: 20 32 31 20 20 20 32 20 32 31 20 20 20 33 20 32   21   2 21   3 2
0700: 31 20 20 20 34 20 32 31 20 20 20 35 20 32 31 20  1   4 21   5 21 
0710: 20 20 36 20 32 31 7d 0a 0a 64 6f 5f 65 78 65 63    6 21}..do_exec
0720: 73 71 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20  sql_test 2.3 {. 
0730: 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64   SELECT a, sum(d
0740: 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f 52 44  ) OVER (.    ORD
0750: 45 52 20 42 59 20 64 0a 20 20 20 20 52 4f 57 53  ER BY d.    ROWS
0760: 20 42 45 54 57 45 45 4e 20 31 20 50 52 45 43 45   BETWEEN 1 PRECE
0770: 44 49 4e 47 20 41 4e 44 20 31 30 30 30 20 46 4f  DING AND 1000 FO
0780: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0790: 20 74 31 0a 7d 20 7b 31 20 32 31 20 20 20 32 20   t1.} {1 21   2 
07a0: 32 31 20 20 20 33 20 32 30 20 20 20 34 20 31 38  21   3 20   4 18
07b0: 20 20 20 35 20 31 35 20 20 20 36 20 31 31 7d 0a     5 15   6 11}.
07c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
07d0: 20 32 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20   2.4 {.  SELECT 
07e0: 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28  a, sum(d) OVER (
07f0: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 64 0a  .    ORDER BY d.
0800: 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e      ROWS BETWEEN
0810: 20 31 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44   1 PRECEDING AND
0820: 20 31 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29   1 FOLLOWING.  )
0830: 20 46 52 4f 4d 20 74 31 0a 7d 20 7b 31 20 33 20   FROM t1.} {1 3 
0840: 20 20 32 20 36 20 20 20 33 20 39 20 20 20 34 20    2 6   3 9   4 
0850: 31 32 20 20 20 35 20 31 35 20 20 20 36 20 31 31  12   5 15   6 11
0860: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0870: 73 74 20 32 2e 35 20 7b 0a 20 20 53 45 4c 45 43  st 2.5 {.  SELEC
0880: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
0890: 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20   (.    ORDER BY 
08a0: 64 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57 45  d.    ROWS BETWE
08b0: 45 4e 20 31 20 50 52 45 43 45 44 49 4e 47 20 41  EN 1 PRECEDING A
08c0: 4e 44 20 30 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20  ND 0 FOLLOWING. 
08d0: 20 29 20 46 52 4f 4d 20 74 31 0a 7d 20 7b 31 20   ) FROM t1.} {1 
08e0: 31 20 20 20 32 20 33 20 20 20 33 20 35 20 20 20  1   2 3   3 5   
08f0: 34 20 37 20 20 20 35 20 39 20 20 20 36 20 31 31  4 7   5 9   6 11
0900: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0910: 73 74 20 32 2e 36 20 7b 0a 20 20 53 45 4c 45 43  st 2.6 {.  SELEC
0920: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
0930: 20 28 0a 20 20 20 20 50 41 52 54 49 54 49 4f 4e   (.    PARTITION
0940: 20 42 59 20 62 0a 20 20 20 20 4f 52 44 45 52 20   BY b.    ORDER 
0950: 42 59 20 64 20 0a 20 20 20 20 52 4f 57 53 20 42  BY d .    ROWS B
0960: 45 54 57 45 45 4e 20 31 20 50 52 45 43 45 44 49  ETWEEN 1 PRECEDI
0970: 4e 47 20 41 4e 44 20 31 20 46 4f 4c 4c 4f 57 49  NG AND 1 FOLLOWI
0980: 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d  NG.  ) FROM t1.}
0990: 20 7b 32 20 36 20 20 20 34 20 31 32 20 20 20 36   {2 6   4 12   6
09a0: 20 31 30 20 20 20 31 20 34 20 20 20 33 20 39 20   10   1 4   3 9 
09b0: 20 20 35 20 38 7d 0a 0a 64 6f 5f 65 78 65 63 73    5 8}..do_execs
09c0: 71 6c 5f 74 65 73 74 20 32 2e 37 20 7b 0a 20 20  ql_test 2.7 {.  
09d0: 53 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29  SELECT a, sum(d)
09e0: 20 4f 56 45 52 20 28 0a 20 20 20 20 50 41 52 54   OVER (.    PART
09f0: 49 54 49 4f 4e 20 42 59 20 62 0a 20 20 20 20 4f  ITION BY b.    O
0a00: 52 44 45 52 20 42 59 20 64 20 0a 20 20 20 20 52  RDER BY d .    R
0a10: 4f 57 53 20 42 45 54 57 45 45 4e 20 30 20 50 52  OWS BETWEEN 0 PR
0a20: 45 43 45 44 49 4e 47 20 41 4e 44 20 30 20 46 4f  ECEDING AND 0 FO
0a30: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0a40: 20 74 31 0a 7d 20 7b 32 20 32 20 20 20 34 20 34   t1.} {2 2   4 4
0a50: 20 20 20 36 20 36 20 20 20 31 20 31 20 20 20 33     6 6   1 1   3
0a60: 20 33 20 20 20 35 20 35 7d 0a 0a 64 6f 5f 65 78   3   5 5}..do_ex
0a70: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 38 20 7b  ecsql_test 2.8 {
0a80: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d  .  SELECT a, sum
0a90: 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f  (d) OVER (.    O
0aa0: 52 44 45 52 20 42 59 20 64 20 0a 20 20 20 20 52  RDER BY d .    R
0ab0: 4f 57 53 20 42 45 54 57 45 45 4e 20 43 55 52 52  OWS BETWEEN CURR
0ac0: 45 4e 54 20 52 4f 57 20 41 4e 44 20 32 20 46 4f  ENT ROW AND 2 FO
0ad0: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0ae0: 20 74 31 0a 7d 20 7b 31 20 36 20 20 20 32 20 39   t1.} {1 6   2 9
0af0: 20 20 20 33 20 31 32 20 20 20 34 20 31 35 20 20     3 12   4 15  
0b00: 20 35 20 31 31 20 20 20 36 20 36 7d 0a 0a 64 6f   5 11   6 6}..do
0b10: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0b20: 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  9 {.  SELECT a, 
0b30: 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20  sum(d) OVER (.  
0b40: 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a 20 20    ORDER BY d .  
0b50: 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e 20 55    ROWS BETWEEN U
0b60: 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44 49  NBOUNDED PRECEDI
0b70: 4e 47 20 41 4e 44 20 32 20 46 4f 4c 4c 4f 57 49  NG AND 2 FOLLOWI
0b80: 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31 0a 7d  NG.  ) FROM t1.}
0b90: 20 7b 31 20 36 20 20 20 32 20 31 30 20 20 20 33   {1 6   2 10   3
0ba0: 20 31 35 20 20 20 34 20 32 31 20 20 20 35 20 32   15   4 21   5 2
0bb0: 31 20 20 20 36 20 32 31 7d 0a 0a 64 6f 5f 65 78  1   6 21}..do_ex
0bc0: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 30 20  ecsql_test 2.10 
0bd0: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75  {.  SELECT a, su
0be0: 6d 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20  m(d) OVER (.    
0bf0: 4f 52 44 45 52 20 42 59 20 64 20 0a 20 20 20 20  ORDER BY d .    
0c00: 52 4f 57 53 20 42 45 54 57 45 45 4e 20 43 55 52  ROWS BETWEEN CUR
0c10: 52 45 4e 54 20 52 4f 57 20 41 4e 44 20 32 20 46  RENT ROW AND 2 F
0c20: 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f  OLLOWING.  ) FRO
0c30: 4d 20 74 31 0a 7d 20 7b 31 20 36 20 20 20 32 20  M t1.} {1 6   2 
0c40: 39 20 20 20 33 20 31 32 20 20 20 34 20 31 35 20  9   3 12   4 15 
0c50: 20 20 35 20 31 31 20 20 20 36 20 36 7d 0a 0a 64    5 11   6 6}..d
0c60: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
0c70: 2e 31 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  .11 {.  SELECT a
0c80: 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a  , sum(d) OVER (.
0c90: 20 20 20 20 4f 52 44 45 52 20 42 59 20 64 20 0a      ORDER BY d .
0ca0: 20 20 20 20 52 4f 57 53 20 42 45 54 57 45 45 4e      ROWS BETWEEN
0cb0: 20 32 20 50 52 45 43 45 44 49 4e 47 20 41 4e 44   2 PRECEDING AND
0cc0: 20 43 55 52 52 45 4e 54 20 52 4f 57 0a 20 20 29   CURRENT ROW.  )
0cd0: 20 46 52 4f 4d 20 74 31 0a 7d 20 7b 31 20 31 20   FROM t1.} {1 1 
0ce0: 20 20 32 20 33 20 20 20 33 20 36 20 20 20 34 20    2 3   3 6   4 
0cf0: 39 20 20 20 35 20 31 32 20 20 20 36 20 31 35 7d  9   5 12   6 15}
0d00: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0d10: 74 20 32 2e 31 33 20 7b 0a 20 20 53 45 4c 45 43  t 2.13 {.  SELEC
0d20: 54 20 61 2c 20 73 75 6d 28 64 29 20 4f 56 45 52  T a, sum(d) OVER
0d30: 20 28 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20   (.    ORDER BY 
0d40: 64 20 0a 20 20 20 20 52 4f 57 53 20 42 45 54 57  d .    ROWS BETW
0d50: 45 45 4e 20 32 20 50 52 45 43 45 44 49 4e 47 20  EEN 2 PRECEDING 
0d60: 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f  AND UNBOUNDED FO
0d70: 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d  LLOWING.  ) FROM
0d80: 20 74 31 0a 7d 20 7b 31 20 32 31 20 20 20 32 20   t1.} {1 21   2 
0d90: 32 31 20 20 20 33 20 32 31 20 20 20 34 20 32 30  21   3 21   4 20
0da0: 20 20 20 35 20 31 38 20 20 20 36 20 31 35 7d 0a     5 18   6 15}.
0db0: 0a 23 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .#==============
0dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 66 69  ============..fi
0e00: 6e 69 73 68 5f 74 65 73 74 0a 23 3d 3d 3d 3d 3d  nish_test.#=====
0e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0e50: 3d 3d 3d 3d 3d 0a 0a 64 6f 5f 65 78 65 63 73 71  =====..do_execsq
0e60: 6c 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20 53  l_test 3.1 {.  S
0e70: 45 4c 45 43 54 20 61 2c 20 73 75 6d 28 64 29 20  ELECT a, sum(d) 
0e80: 4f 56 45 52 20 28 0a 20 20 20 20 50 41 52 54 49  OVER (.    PARTI
0e90: 54 49 4f 4e 20 42 59 20 62 20 4f 52 44 45 52 20  TION BY b ORDER 
0ea0: 42 59 20 64 0a 20 20 20 20 52 41 4e 47 45 20 42  BY d.    RANGE B
0eb0: 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20 52  ETWEEN CURRENT R
0ec0: 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45 44  OW AND UNBOUNDED
0ed0: 20 46 4f 4c 4c 4f 57 49 4e 47 0a 20 20 29 20 46   FOLLOWING.  ) F
0ee0: 52 4f 4d 20 74 31 0a 7d 20 7b 32 20 31 32 20 20  ROM t1.} {2 12  
0ef0: 20 34 20 31 30 20 20 20 36 20 36 20 20 20 31 20   4 10   6 6   1 
0f00: 39 20 20 20 33 20 38 20 20 20 35 20 35 7d 0a 0a  9   3 8   5 5}..
0f10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0f20: 33 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  3.2 {.  SELECT a
0f30: 2c 20 73 75 6d 28 64 29 20 4f 56 45 52 20 28 0a  , sum(d) OVER (.
0f40: 20 20 20 20 4f 52 44 45 52 20 42 59 20 62 0a 20      ORDER BY b. 
0f50: 20 20 20 52 41 4e 47 45 20 42 45 54 57 45 45 4e     RANGE BETWEEN
0f60: 20 43 55 52 52 45 4e 54 20 52 4f 57 20 41 4e 44   CURRENT ROW AND
0f70: 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c 4c 4f   UNBOUNDED FOLLO
0f80: 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20 74 31  WING.  ) FROM t1
0f90: 0a 7d 20 7b 32 20 32 31 20 20 20 34 20 32 31 20  .} {2 21   4 21 
0fa0: 20 20 36 20 32 31 20 20 20 31 20 39 20 20 20 33    6 21   1 9   3
0fb0: 20 39 20 20 20 35 20 39 7d 0a 0a 64 6f 5f 65 78   9   5 9}..do_ex
0fc0: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 33 20 7b  ecsql_test 3.3 {
0fd0: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 73 75 6d  .  SELECT a, sum
0fe0: 28 64 29 20 4f 56 45 52 20 28 0a 20 20 20 20 4f  (d) OVER (.    O
0ff0: 52 44 45 52 20 42 59 20 64 0a 20 20 20 20 52 4f  RDER BY d.    RO
1000: 57 53 20 42 45 54 57 45 45 4e 20 55 4e 42 4f 55  WS BETWEEN UNBOU
1010: 4e 44 45 44 20 50 52 45 43 45 44 49 4e 47 20 41  NDED PRECEDING A
1020: 4e 44 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c  ND UNBOUNDED FOL
1030: 4c 4f 57 49 4e 47 0a 20 20 29 20 46 52 4f 4d 20  LOWING.  ) FROM 
1040: 74 31 0a 7d 20 7b 31 20 32 31 20 20 20 32 20 32  t1.} {1 21   2 2
1050: 31 20 20 20 33 20 32 31 20 20 20 34 20 32 31 20  1   3 21   4 21 
1060: 20 20 35 20 32 31 20 20 20 36 20 32 31 7d 0a 0a    5 21   6 21}..
1070: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.