/ Hex Artifact Content
Login

Artifact 12ceb6bbb355d13e8fcd88c5731a57256dfdf77b9a7ae20842a76fcd4623df5b:


0000: 23 20 32 30 31 38 20 4d 61 79 20 38 0a 23 0a 23  # 2018 May 8.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 23  QLite library..#
01a0: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
01b0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
01c0: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
01d0: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73  dir/tester.tcl.s
01e0: 65 74 20 74 65 73 74 70 72 65 66 69 78 20 77 69  et testprefix wi
01f0: 6e 64 6f 77 66 61 75 6c 74 0a 0a 69 66 63 61 70  ndowfault..ifcap
0200: 61 62 6c 65 20 21 77 69 6e 64 6f 77 66 75 6e 63  able !windowfunc
0210: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0220: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64 6f 5f  .  return.}..do_
0230: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30  execsql_test 1.0
0240: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
0250: 45 20 74 31 28 61 2c 20 62 2c 20 63 2c 20 64 29  E t1(a, b, c, d)
0260: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0270: 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  t1 VALUES(1, 2, 
0280: 33 2c 20 34 29 3b 0a 20 20 49 4e 53 45 52 54 20  3, 4);.  INSERT 
0290: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35  INTO t1 VALUES(5
02a0: 2c 20 36 2c 20 37 2c 20 38 29 3b 0a 20 20 49 4e  , 6, 7, 8);.  IN
02b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
02c0: 55 45 53 28 39 2c 20 31 30 2c 20 31 31 2c 20 31  UES(9, 10, 11, 1
02d0: 32 29 3b 0a 7d 0a 66 61 75 6c 74 73 69 6d 5f 73  2);.}.faultsim_s
02e0: 61 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a 0a 64  ave_and_close..d
02f0: 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20  o_faultsim_test 
0300: 31 20 2d 73 74 61 72 74 20 31 20 2d 66 61 75 6c  1 -start 1 -faul
0310: 74 73 20 6f 6f 6d 2d 2a 20 2d 70 72 65 70 20 7b  ts oom-* -prep {
0320: 0a 20 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74  .  faultsim_rest
0330: 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 7d  ore_and_reopen.}
0340: 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65 63 73   -body {.  execs
0350: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0360: 72 6f 77 5f 6e 75 6d 62 65 72 28 29 20 4f 56 45  row_number() OVE
0370: 52 20 77 69 6e 2c 0a 20 20 20 20 20 20 20 20 20  R win,.         
0380: 20 20 72 61 6e 6b 28 29 20 4f 56 45 52 20 77 69    rank() OVER wi
0390: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 64 65  n,.           de
03a0: 6e 73 65 5f 72 61 6e 6b 28 29 20 4f 56 45 52 20  nse_rank() OVER 
03b0: 77 69 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  win,.           
03c0: 6e 74 69 6c 65 28 32 29 20 4f 56 45 52 20 77 69  ntile(2) OVER wi
03d0: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 66 69  n,.           fi
03e0: 72 73 74 5f 76 61 6c 75 65 28 64 29 20 4f 56 45  rst_value(d) OVE
03f0: 52 20 77 69 6e 2c 0a 20 20 20 20 20 20 20 20 20  R win,.         
0400: 20 20 6c 61 73 74 5f 76 61 6c 75 65 28 64 29 20    last_value(d) 
0410: 4f 56 45 52 20 77 69 6e 2c 0a 20 20 20 20 20 20  OVER win,.      
0420: 20 20 20 20 20 6e 74 68 5f 76 61 6c 75 65 28 64       nth_value(d
0430: 2c 32 29 20 4f 56 45 52 20 77 69 6e 2c 0a 20 20  ,2) OVER win,.  
0440: 20 20 20 20 20 20 20 20 20 6c 65 61 64 28 64 29           lead(d)
0450: 20 4f 56 45 52 20 77 69 6e 2c 0a 20 20 20 20 20   OVER win,.     
0460: 20 20 20 20 20 20 6c 61 67 28 64 29 20 4f 56 45        lag(d) OVE
0470: 52 20 77 69 6e 2c 0a 20 20 20 20 20 20 20 20 20  R win,.         
0480: 20 20 6d 61 78 28 64 29 20 4f 56 45 52 20 77 69    max(d) OVER wi
0490: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 6d 69  n,.           mi
04a0: 6e 28 64 29 20 4f 56 45 52 20 77 69 6e 0a 20 20  n(d) OVER win.  
04b0: 20 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 57 49    FROM t1.    WI
04c0: 4e 44 4f 57 20 77 69 6e 20 41 53 20 28 4f 52 44  NDOW win AS (ORD
04d0: 45 52 20 42 59 20 61 29 0a 20 20 7d 0a 7d 20 2d  ER BY a).  }.} -
04e0: 74 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73 69  test {.  faultsi
04f0: 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30  m_test_result {0
0500: 20 7b 31 20 31 20 31 20 31 20 34 20 34 20 7b 7d   {1 1 1 1 4 4 {}
0510: 20 38 20 7b 7d 20 34 20 34 20 32 20 32 20 32 20   8 {} 4 4 2 2 2 
0520: 31 20 34 20 38 20 38 20 31 32 20 34 20 38 20 34  1 4 8 8 12 4 8 4
0530: 20 33 20 33 20 33 20 32 20 34 20 31 32 20 38 20   3 3 3 2 4 12 8 
0540: 7b 7d 20 38 20 31 32 20 34 7d 7d 0a 7d 0a 0a 64  {} 8 12 4}}.}..d
0550: 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20  o_faultsim_test 
0560: 31 2e 31 20 2d 66 61 75 6c 74 73 20 6f 6f 6d 2d  1.1 -faults oom-
0570: 74 2a 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75  t* -prep {.  fau
0580: 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e  ltsim_restore_an
0590: 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79  d_reopen.} -body
05a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
05b0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 5f 6e 75     SELECT row_nu
05c0: 6d 62 65 72 28 29 20 4f 56 45 52 20 77 69 6e 2c  mber() OVER win,
05d0: 0a 20 20 20 20 20 20 20 20 20 20 20 72 61 6e 6b  .           rank
05e0: 28 29 20 4f 56 45 52 20 77 69 6e 2c 0a 20 20 20  () OVER win,.   
05f0: 20 20 20 20 20 20 20 20 64 65 6e 73 65 5f 72 61          dense_ra
0600: 6e 6b 28 29 20 4f 56 45 52 20 77 69 6e 0a 20 20  nk() OVER win.  
0610: 20 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 57 49    FROM t1.    WI
0620: 4e 44 4f 57 20 77 69 6e 20 41 53 20 28 50 41 52  NDOW win AS (PAR
0630: 54 49 54 49 4f 4e 20 42 59 20 63 3c 37 20 4f 52  TITION BY c<7 OR
0640: 44 45 52 20 42 59 20 61 29 0a 20 20 7d 0a 7d 20  DER BY a).  }.} 
0650: 2d 74 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73  -test {.  faults
0660: 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b  im_test_result {
0670: 30 20 7b 31 20 31 20 31 20 32 20 32 20 32 20 31  0 {1 1 1 2 2 2 1
0680: 20 31 20 31 7d 7d 0a 7d 0a 0a 64 6f 5f 66 61 75   1 1}}.}..do_fau
0690: 6c 74 73 69 6d 5f 74 65 73 74 20 31 2e 32 20 2d  ltsim_test 1.2 -
06a0: 66 61 75 6c 74 73 20 6f 6f 6d 2d 74 2a 20 2d 70  faults oom-t* -p
06b0: 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d  rep {.  faultsim
06c0: 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f  _restore_and_reo
06d0: 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20  pen.} -body {.  
06e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
06f0: 4c 45 43 54 20 6e 74 69 6c 65 28 31 30 35 29 20  LECT ntile(105) 
0700: 0a 20 20 20 20 4f 56 45 52 20 28 20 52 41 4e 47  .    OVER ( RANG
0710: 45 20 42 45 54 57 45 45 4e 20 55 4e 42 4f 55 4e  E BETWEEN UNBOUN
0720: 44 45 44 20 50 52 45 43 45 44 49 4e 47 20 41 4e  DED PRECEDING AN
0730: 44 20 43 55 52 52 45 4e 54 20 52 4f 57 20 29 20  D CURRENT ROW ) 
0740: 0a 20 20 20 20 46 52 4f 4d 20 74 31 0a 20 20 7d  .    FROM t1.  }
0750: 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61 75  .} -test {.  fau
0760: 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c  ltsim_test_resul
0770: 74 20 7b 30 20 7b 31 20 32 20 33 7d 7d 0a 7d 0a  t {0 {1 2 3}}.}.
0780: 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73  .do_faultsim_tes
0790: 74 20 32 20 2d 73 74 61 72 74 20 31 20 2d 66 61  t 2 -start 1 -fa
07a0: 75 6c 74 73 20 6f 6f 6d 2d 2a 20 2d 70 72 65 70  ults oom-* -prep
07b0: 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 72 65   {.  faultsim_re
07c0: 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f 70 65 6e  store_and_reopen
07d0: 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65 78 65  .} -body {.  exe
07e0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
07f0: 54 20 72 6f 75 6e 64 28 70 65 72 63 65 6e 74 5f  T round(percent_
0800: 72 61 6e 6b 28 29 20 4f 56 45 52 20 77 69 6e 2c  rank() OVER win,
0810: 20 32 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20   2),.           
0820: 72 6f 75 6e 64 28 63 75 6d 65 5f 64 69 73 74 28  round(cume_dist(
0830: 29 20 4f 56 45 52 20 77 69 6e 2c 20 32 29 0a 20  ) OVER win, 2). 
0840: 20 20 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 57     FROM t1.    W
0850: 49 4e 44 4f 57 20 77 69 6e 20 41 53 20 28 4f 52  INDOW win AS (OR
0860: 44 45 52 20 42 59 20 61 29 0a 20 20 7d 0a 7d 20  DER BY a).  }.} 
0870: 2d 74 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73  -test {.  faults
0880: 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b  im_test_result {
0890: 30 20 7b 30 2e 30 20 30 2e 33 33 20 30 2e 35 20  0 {0.0 0.33 0.5 
08a0: 30 2e 36 37 20 31 2e 30 20 31 2e 30 7d 7d 0a 7d  0.67 1.0 1.0}}.}
08b0: 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65  ..do_faultsim_te
08c0: 73 74 20 33 20 2d 66 61 75 6c 74 73 20 6f 6f 6d  st 3 -faults oom
08d0: 2d 2a 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75  -* -prep {.  fau
08e0: 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e  ltsim_restore_an
08f0: 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79  d_reopen.} -body
0900: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0910: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 64 29     SELECT min(d)
0920: 20 4f 56 45 52 20 77 69 6e 2c 20 6d 61 78 28 64   OVER win, max(d
0930: 29 20 4f 56 45 52 20 77 69 6e 0a 20 20 20 20 46  ) OVER win.    F
0940: 52 4f 4d 20 74 31 0a 20 20 20 20 57 49 4e 44 4f  ROM t1.    WINDO
0950: 57 20 77 69 6e 20 41 53 20 28 4f 52 44 45 52 20  W win AS (ORDER 
0960: 42 59 20 61 20 52 41 4e 47 45 20 42 45 54 57 45  BY a RANGE BETWE
0970: 45 4e 20 43 55 52 52 45 4e 54 20 52 4f 57 20 41  EN CURRENT ROW A
0980: 4e 44 20 55 4e 42 4f 55 4e 44 45 44 20 46 4f 4c  ND UNBOUNDED FOL
0990: 4c 4f 57 49 4e 47 29 0a 20 20 7d 0a 7d 20 2d 74  LOWING).  }.} -t
09a0: 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d  est {.  faultsim
09b0: 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30 20  _test_result {0 
09c0: 7b 34 20 31 32 20 38 20 31 32 20 31 32 20 31 32  {4 12 8 12 12 12
09d0: 7d 7d 0a 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73 69  }}.}..do_faultsi
09e0: 6d 5f 74 65 73 74 20 34 20 2d 66 61 75 6c 74 73  m_test 4 -faults
09f0: 20 6f 6f 6d 2d 2a 20 2d 70 72 65 70 20 7b 0a 20   oom-* -prep {. 
0a00: 20 66 61 75 6c 74 73 69 6d 5f 72 65 73 74 6f 72   faultsim_restor
0a10: 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d  e_and_reopen.} -
0a20: 62 6f 64 79 20 7b 0a 20 20 65 78 65 63 73 71 6c  body {.  execsql
0a30: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49   {.    CREATE VI
0a40: 45 57 20 61 61 61 20 41 53 0a 20 20 20 20 53 45  EW aaa AS.    SE
0a50: 4c 45 43 54 20 6d 69 6e 28 64 29 20 4f 56 45 52  LECT min(d) OVER
0a60: 20 77 2c 20 6d 61 78 28 64 29 20 4f 56 45 52 20   w, max(d) OVER 
0a70: 77 0a 20 20 20 20 46 52 4f 4d 20 74 31 0a 20 20  w.    FROM t1.  
0a80: 20 20 57 49 4e 44 4f 57 20 77 20 41 53 20 28 4f    WINDOW w AS (O
0a90: 52 44 45 52 20 42 59 20 61 20 52 41 4e 47 45 20  RDER BY a RANGE 
0aa0: 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20  BETWEEN CURRENT 
0ab0: 52 4f 57 20 41 4e 44 20 55 4e 42 4f 55 4e 44 45  ROW AND UNBOUNDE
0ac0: 44 20 46 4f 4c 4c 4f 57 49 4e 47 29 3b 0a 20 20  D FOLLOWING);.  
0ad0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0ae0: 61 61 61 3b 0a 20 20 7d 0a 7d 20 2d 74 65 73 74  aaa;.  }.} -test
0af0: 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74 65   {.  faultsim_te
0b00: 73 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b 34 20  st_result {0 {4 
0b10: 31 32 20 38 20 31 32 20 31 32 20 31 32 7d 7d 0a  12 8 12 12 12}}.
0b20: 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74  }..do_faultsim_t
0b30: 65 73 74 20 35 20 2d 73 74 61 72 74 20 31 20 2d  est 5 -start 1 -
0b40: 66 61 75 6c 74 73 20 6f 6f 6d 2d 2a 20 2d 70 72  faults oom-* -pr
0b50: 65 70 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f  ep {.  faultsim_
0b60: 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72 65 6f 70  restore_and_reop
0b70: 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a 20 20 65  en.} -body {.  e
0b80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0b90: 45 43 54 20 6c 61 73 74 5f 76 61 6c 75 65 28 61  ECT last_value(a
0ba0: 29 20 4f 56 45 52 20 77 69 6e 31 2c 0a 20 20 20  ) OVER win1,.   
0bb0: 20 20 20 20 20 20 20 20 6c 61 73 74 5f 76 61 6c          last_val
0bc0: 75 65 28 61 29 20 4f 56 45 52 20 77 69 6e 32 0a  ue(a) OVER win2.
0bd0: 20 20 20 20 46 52 4f 4d 20 74 31 0a 20 20 20 20      FROM t1.    
0be0: 57 49 4e 44 4f 57 20 77 69 6e 31 20 41 53 20 28  WINDOW win1 AS (
0bf0: 4f 52 44 45 52 20 42 59 20 61 20 52 4f 57 53 20  ORDER BY a ROWS 
0c00: 42 45 54 57 45 45 4e 20 43 55 52 52 45 4e 54 20  BETWEEN CURRENT 
0c10: 52 4f 57 20 41 4e 44 20 31 20 46 4f 4c 4c 4f 57  ROW AND 1 FOLLOW
0c20: 49 4e 47 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ING),.          
0c30: 20 77 69 6e 32 20 41 53 20 28 4f 52 44 45 52 20   win2 AS (ORDER 
0c40: 42 59 20 61 29 0a 20 20 7d 0a 7d 20 2d 74 65 73  BY a).  }.} -tes
0c50: 74 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d 5f 74  t {.  faultsim_t
0c60: 65 73 74 5f 72 65 73 75 6c 74 20 7b 30 20 7b 35  est_result {0 {5
0c70: 20 31 20 39 20 35 20 39 20 39 7d 7d 0a 7d 0a 0a   1 9 5 9 9}}.}..
0c80: 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74  do_faultsim_test
0c90: 20 36 20 2d 66 61 75 6c 74 73 20 6f 6f 6d 2d 2a   6 -faults oom-*
0ca0: 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75 6c 74   -prep {.  fault
0cb0: 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f  sim_restore_and_
0cc0: 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b  reopen.} -body {
0cd0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0ce0: 20 53 45 4c 45 43 54 20 70 65 72 63 65 6e 74 5f   SELECT percent_
0cf0: 72 61 6e 6b 28 29 20 4f 56 45 52 20 28 29 2c 20  rank() OVER (), 
0d00: 63 75 6d 65 5f 64 69 73 74 28 29 20 4f 56 45 52  cume_dist() OVER
0d10: 20 28 29 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a   () FROM t1.  }.
0d20: 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61 75 6c  } -test {.  faul
0d30: 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74  tsim_test_result
0d40: 20 7b 30 20 7b 30 2e 30 20 31 2e 30 20 30 2e 30   {0 {0.0 1.0 0.0
0d50: 20 31 2e 30 20 30 2e 30 20 31 2e 30 7d 7d 0a 7d   1.0 0.0 1.0}}.}
0d60: 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65  ..do_faultsim_te
0d70: 73 74 20 37 20 2d 66 61 75 6c 74 73 20 6f 6f 6d  st 7 -faults oom
0d80: 2d 2a 20 2d 70 72 65 70 20 7b 0a 20 20 66 61 75  -* -prep {.  fau
0d90: 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e  ltsim_restore_an
0da0: 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79  d_reopen.} -body
0db0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0dc0: 20 20 20 53 45 4c 45 43 54 20 70 65 72 63 65 6e     SELECT percen
0dd0: 74 5f 72 61 6e 6b 28 29 20 4f 56 45 52 20 28 29  t_rank() OVER ()
0de0: 2c 20 63 75 6d 65 5f 64 69 73 74 28 29 20 4f 56  , cume_dist() OV
0df0: 45 52 20 28 29 20 46 52 4f 4d 20 74 31 0a 20 20  ER () FROM t1.  
0e00: 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61  }.} -test {.  fa
0e10: 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75  ultsim_test_resu
0e20: 6c 74 20 7b 30 20 7b 30 2e 30 20 31 2e 30 20 30  lt {0 {0.0 1.0 0
0e30: 2e 30 20 31 2e 30 20 30 2e 30 20 31 2e 30 7d 7d  .0 1.0 0.0 1.0}}
0e40: 0a 7d 0a 0a 64 6f 5f 66 61 75 6c 74 73 69 6d 5f  .}..do_faultsim_
0e50: 74 65 73 74 20 38 20 2d 66 61 75 6c 74 73 20 6f  test 8 -faults o
0e60: 6f 6d 2d 74 2a 20 2d 70 72 65 70 20 7b 0a 20 20  om-t* -prep {.  
0e70: 66 61 75 6c 74 73 69 6d 5f 72 65 73 74 6f 72 65  faultsim_restore
0e80: 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 7d 20 2d 62  _and_reopen.} -b
0e90: 6f 64 79 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  ody {.  execsql 
0ea0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20  {.    SELECT a, 
0eb0: 73 75 6d 28 62 29 20 4f 56 45 52 20 77 69 6e 31  sum(b) OVER win1
0ec0: 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20 20 57   FROM t1.      W
0ed0: 49 4e 44 4f 57 20 77 69 6e 31 20 41 53 20 28 50  INDOW win1 AS (P
0ee0: 41 52 54 49 54 49 4f 4e 20 42 59 20 61 20 29 2c  ARTITION BY a ),
0ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 77 69  .             wi
0f00: 6e 32 20 41 53 20 28 50 41 52 54 49 54 49 4f 4e  n2 AS (PARTITION
0f10: 20 42 59 20 62 20 29 0a 20 20 20 20 4f 52 44 45   BY b ).    ORDE
0f20: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 2d 74  R BY a;.  }.} -t
0f30: 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73 69 6d  est {.  faultsim
0f40: 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30 20  _test_result {0 
0f50: 7b 31 20 32 20 35 20 36 20 39 20 31 30 7d 7d 0a  {1 2 5 6 9 10}}.
0f60: 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     }..finish_test.