/ Hex Artifact Content
Login

Artifact d4ccf606a0c77498e2beb542764fd9394acb4d66:


0000: 23 20 32 30 31 34 20 4d 61 72 63 68 20 32 35 2e  # 2014 March 25.
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you 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 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 0a 23 0a 23 20 53 70 65 63 69 66 69 63  y. .#.# Specific
01b0: 61 6c 6c 79 2c 20 69 74 20 74 65 73 74 73 20 74  ally, it tests t
01c0: 68 65 20 65 66 66 65 63 74 73 20 6f 66 20 66 61  he effects of fa
01d0: 75 6c 74 20 69 6e 6a 65 63 74 69 6f 6e 20 6f 6e  ult injection on
01e0: 20 74 68 65 20 73 6f 72 74 65 72 0a 23 20 6d 6f   the sorter.# mo
01f0: 64 75 6c 65 20 28 63 6f 64 65 20 69 6e 20 76 64  dule (code in vd
0200: 62 65 73 6f 72 74 2e 63 29 2e 0a 23 0a 0a 73 65  besort.c)..#..se
0210: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0220: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0230: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0240: 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74  tester.tcl.set t
0250: 65 73 74 70 72 65 66 69 78 20 73 6f 72 74 66 61  estprefix sortfa
0260: 75 6c 74 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  ult.db close.sql
0270: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 73 71  ite3_shutdown.sq
0280: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70 6d 61  lite3_config_pma
0290: 73 7a 20 31 30 0a 73 71 6c 69 74 65 33 5f 69 6e  sz 10.sqlite3_in
02a0: 69 74 69 61 6c 69 7a 65 0a 73 71 6c 69 74 65 33  itialize.sqlite3
02b0: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 0a 64 6f   db test.db...do
02c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
02d0: 30 20 7b 0a 20 20 50 52 41 47 4d 41 20 63 61 63  0 {.  PRAGMA cac
02e0: 68 65 5f 73 69 7a 65 20 3d 20 35 3b 0a 7d 0a 0a  he_size = 5;.}..
02f0: 66 6f 72 65 61 63 68 20 7b 74 6e 20 6d 6d 61 70  foreach {tn mmap
0300: 5f 6c 69 6d 69 74 20 6e 57 6f 72 6b 65 72 20 74  _limit nWorker t
0310: 6d 70 73 74 6f 72 65 20 74 68 72 65 61 64 73 6d  mpstore threadsm
0320: 6f 64 65 20 66 61 6b 65 68 65 61 70 20 6c 6f 6f  ode fakeheap loo
0330: 6b 61 73 69 64 65 7d 20 7b 0a 20 20 20 20 20 20  kaside} {.      
0340: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 30      1          0
0350: 20 20 20 20 20 20 20 30 20 20 20 20 20 66 69 6c         0     fil
0360: 65 20 6d 75 6c 74 69 74 68 72 65 61 64 20 20 20  e multithread   
0370: 20 66 61 6c 73 65 20 20 20 20 20 66 61 6c 73 65   false     false
0380: 0a 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20  .          2    
0390: 20 31 30 30 30 30 30 20 20 20 20 20 20 20 30 20   100000       0 
03a0: 20 20 20 20 66 69 6c 65 20 6d 75 6c 74 69 74 68      file multith
03b0: 72 65 61 64 20 20 20 20 66 61 6c 73 65 20 20 20  read    false   
03c0: 20 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20 20    false.        
03d0: 20 20 33 20 20 20 20 20 31 30 30 30 30 30 20 20    3     100000  
03e0: 20 20 20 20 20 31 20 20 20 20 20 66 69 6c 65 20       1     file 
03f0: 6d 75 6c 74 69 74 68 72 65 61 64 20 20 20 20 66  multithread    f
0400: 61 6c 73 65 20 20 20 20 20 66 61 6c 73 65 0a 20  alse     false. 
0410: 20 20 20 20 20 20 20 20 20 34 20 20 20 20 32 30           4    20
0420: 30 30 30 30 30 20 20 20 20 20 20 20 30 20 20 20  00000       0   
0430: 20 20 66 69 6c 65 20 73 69 6e 67 6c 65 74 68 72    file singlethr
0440: 65 61 64 20 20 20 66 61 6c 73 65 20 20 20 20 20  ead   false     
0450: 20 74 72 75 65 0a 7d 20 7b 0a 20 20 69 66 20 7b   true.} {.  if {
0460: 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28  $sqlite_options(
0470: 74 68 72 65 61 64 73 61 66 65 29 7d 20 7b 20 73  threadsafe)} { s
0480: 65 74 20 74 68 72 65 61 64 73 6d 6f 64 65 20 73  et threadsmode s
0490: 69 6e 67 6c 65 74 68 72 65 61 64 20 7d 0a 0a 20  inglethread }.. 
04a0: 20 64 62 20 65 76 61 6c 20 22 50 52 41 47 4d 41   db eval "PRAGMA
04b0: 20 74 68 72 65 61 64 73 3d 24 6e 57 6f 72 6b 65   threads=$nWorke
04c0: 72 22 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  r".  sqlite3_con
04d0: 66 69 67 20 24 74 68 72 65 61 64 73 6d 6f 64 65  fig $threadsmode
04e0: 0a 20 20 69 66 20 7b 20 24 6c 6f 6f 6b 61 73 69  .  if { $lookasi
04f0: 64 65 20 7d 20 7b 0a 20 20 20 20 73 71 6c 69 74  de } {.    sqlit
0500: 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73  e3_config_lookas
0510: 69 64 65 20 31 30 30 20 35 30 30 0a 20 20 7d 20  ide 100 500.  } 
0520: 65 6c 73 65 20 7b 0a 20 20 20 20 73 71 6c 69 74  else {.    sqlit
0530: 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73  e3_config_lookas
0540: 69 64 65 20 30 20 30 0a 20 20 7d 0a 20 20 73 71  ide 0 0.  }.  sq
0550: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
0560: 0a 20 20 73 6f 72 74 65 72 5f 74 65 73 74 5f 66  .  sorter_test_f
0570: 61 6b 65 68 65 61 70 20 24 66 61 6b 65 68 65 61  akeheap $fakehea
0580: 70 0a 0a 20 20 73 65 74 20 73 74 72 20 5b 73 74  p..  set str [st
0590: 72 69 6e 67 20 72 65 70 65 61 74 20 61 20 31 30  ring repeat a 10
05a0: 30 30 5d 0a 20 20 70 75 74 73 20 24 74 68 72 65  00].  puts $thre
05b0: 61 64 73 6d 6f 64 65 0a 0a 20 20 64 6f 5f 66 61  adsmode..  do_fa
05c0: 75 6c 74 73 69 6d 5f 74 65 73 74 20 31 2e 24 74  ultsim_test 1.$t
05d0: 6e 20 2d 70 72 65 70 20 7b 0a 20 20 20 20 73 71  n -prep {.    sq
05e0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
05f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 73  .    sqlite3_tes
0600: 74 5f 63 6f 6e 74 72 6f 6c 20 53 51 4c 49 54 45  t_control SQLITE
0610: 5f 54 45 53 54 43 54 52 4c 5f 53 4f 52 54 45 52  _TESTCTRL_SORTER
0620: 5f 4d 4d 41 50 20 64 62 20 24 3a 3a 6d 6d 61 70  _MMAP db $::mmap
0630: 5f 6c 69 6d 69 74 0a 20 20 20 20 65 78 65 63 73  _limit.    execs
0640: 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68  ql { PRAGMA cach
0650: 65 5f 73 69 7a 65 20 3d 20 35 20 7d 0a 20 20 7d  e_size = 5 }.  }
0660: 20 2d 62 6f 64 79 20 7b 0a 20 20 20 20 65 78 65   -body {.    exe
0670: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 57 49  csql { .      WI
0680: 54 48 20 72 28 78 2c 79 29 20 41 53 20 28 0a 20  TH r(x,y) AS (. 
0690: 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
06a0: 31 2c 20 24 3a 3a 73 74 72 0a 20 20 20 20 20 20  1, $::str.      
06b0: 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
06c0: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 78          SELECT x
06d0: 2b 31 2c 20 24 3a 3a 73 74 72 20 46 52 4f 4d 20  +1, $::str FROM 
06e0: 72 0a 20 20 20 20 20 20 20 20 20 20 4c 49 4d 49  r.          LIMI
06f0: 54 20 32 30 30 0a 20 20 20 20 20 20 29 0a 20 20  T 200.      ).  
0700: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
0710: 28 78 29 2c 20 6c 65 6e 67 74 68 28 79 29 20 46  (x), length(y) F
0720: 52 4f 4d 20 72 20 47 52 4f 55 50 20 42 59 20 28  ROM r GROUP BY (
0730: 78 25 35 29 0a 20 20 20 20 7d 0a 20 20 7d 20 2d  x%5).    }.  } -
0740: 74 65 73 74 20 7b 0a 20 20 20 20 66 61 75 6c 74  test {.    fault
0750: 73 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20  sim_test_result 
0760: 7b 30 20 7b 34 30 20 31 30 30 30 20 34 30 20 31  {0 {40 1000 40 1
0770: 30 30 30 20 34 30 20 31 30 30 30 20 34 30 20 31  000 40 1000 40 1
0780: 30 30 30 20 34 30 20 31 30 30 30 7d 7d 0a 20 20  000 40 1000}}.  
0790: 7d 0a 0a 20 20 64 6f 5f 66 61 75 6c 74 73 69 6d  }..  do_faultsim
07a0: 5f 74 65 73 74 20 32 2e 24 74 6e 20 2d 66 61 75  _test 2.$tn -fau
07b0: 6c 74 73 20 6f 6f 6d 2a 20 2d 70 72 65 70 20 7b  lts oom* -prep {
07c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
07d0: 74 65 73 74 2e 64 62 0a 20 20 20 20 73 71 6c 69  test.db.    sqli
07e0: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
07f0: 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
0800: 5f 53 4f 52 54 45 52 5f 4d 4d 41 50 20 64 62 20  _SORTER_MMAP db 
0810: 24 3a 3a 6d 6d 61 70 5f 6c 69 6d 69 74 0a 20 20  $::mmap_limit.  
0820: 20 20 61 64 64 5f 74 65 73 74 5f 75 74 66 31 36    add_test_utf16
0830: 62 69 6e 5f 63 6f 6c 6c 61 74 65 20 64 62 0a 20  bin_collate db. 
0840: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41     execsql { PRA
0850: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 3d  GMA cache_size =
0860: 20 35 20 7d 0a 20 20 7d 20 2d 62 6f 64 79 20 7b   5 }.  } -body {
0870: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
0880: 20 20 20 20 20 20 57 49 54 48 20 72 28 78 2c 79        WITH r(x,y
0890: 29 20 41 53 20 28 0a 20 20 20 20 20 20 20 20 20  ) AS (.         
08a0: 20 53 45 4c 45 43 54 20 31 30 30 2c 20 24 3a 3a   SELECT 100, $::
08b0: 73 74 72 0a 20 20 20 20 20 20 20 20 20 20 55 4e  str.          UN
08c0: 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 20 20 20  ION ALL.        
08d0: 20 20 53 45 4c 45 43 54 20 78 2d 31 2c 20 24 3a    SELECT x-1, $:
08e0: 3a 73 74 72 20 46 52 4f 4d 20 72 0a 20 20 20 20  :str FROM r.    
08f0: 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30 0a        LIMIT 100.
0900: 20 20 20 20 20 20 29 0a 20 20 20 20 20 20 53 45        ).      SE
0910: 4c 45 43 54 20 63 6f 75 6e 74 28 78 29 2c 20 6c  LECT count(x), l
0920: 65 6e 67 74 68 28 79 29 20 46 52 4f 4d 20 72 20  ength(y) FROM r 
0930: 47 52 4f 55 50 20 42 59 20 79 20 43 4f 4c 4c 41  GROUP BY y COLLA
0940: 54 45 20 75 74 66 31 36 62 69 6e 2c 20 28 78 25  TE utf16bin, (x%
0950: 35 29 0a 20 20 20 20 7d 0a 20 20 7d 20 2d 74 65  5).    }.  } -te
0960: 73 74 20 7b 0a 20 20 20 20 66 61 75 6c 74 73 69  st {.    faultsi
0970: 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 7b 30  m_test_result {0
0980: 20 7b 32 30 20 31 30 30 30 20 32 30 20 31 30 30   {20 1000 20 100
0990: 30 20 32 30 20 31 30 30 30 20 32 30 20 31 30 30  0 20 1000 20 100
09a0: 30 20 32 30 20 31 30 30 30 7d 7d 0a 20 20 7d 0a  0 20 1000}}.  }.
09b0: 0a 20 20 69 66 20 7b 24 6d 6d 61 70 5f 6c 69 6d  .  if {$mmap_lim
09c0: 69 74 20 3e 20 31 30 30 30 30 30 30 7d 20 7b 0a  it > 1000000} {.
09d0: 20 20 20 20 73 65 74 20 73 74 72 32 20 5b 73 74      set str2 [st
09e0: 72 69 6e 67 20 72 65 70 65 61 74 20 24 73 74 72  ring repeat $str
09f0: 20 31 30 5d 0a 0a 20 20 20 20 73 71 6c 69 74 65   10]..    sqlite
0a00: 33 5f 6d 65 6d 64 65 62 75 67 5f 76 66 73 5f 6f  3_memdebug_vfs_o
0a10: 6f 6d 5f 74 65 73 74 20 30 0a 20 20 20 20 73 71  om_test 0.    sq
0a20: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
0a30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 73  .    sqlite3_tes
0a40: 74 5f 63 6f 6e 74 72 6f 6c 20 53 51 4c 49 54 45  t_control SQLITE
0a50: 5f 54 45 53 54 43 54 52 4c 5f 53 4f 52 54 45 52  _TESTCTRL_SORTER
0a60: 5f 4d 4d 41 50 20 64 62 20 24 3a 3a 6d 6d 61 70  _MMAP db $::mmap
0a70: 5f 6c 69 6d 69 74 0a 20 20 20 20 65 78 65 63 73  _limit.    execs
0a80: 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68  ql { PRAGMA cach
0a90: 65 5f 73 69 7a 65 20 3d 20 35 20 7d 0a 0a 20 20  e_size = 5 }..  
0aa0: 20 20 64 6f 5f 66 61 75 6c 74 73 69 6d 5f 74 65    do_faultsim_te
0ab0: 73 74 20 33 2e 24 74 6e 20 2d 66 61 75 6c 74 73  st 3.$tn -faults
0ac0: 20 6f 6f 6d 2d 74 72 61 6e 73 2a 20 2d 62 6f 64   oom-trans* -bod
0ad0: 79 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  y {.      execsq
0ae0: 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 57 49 54  l { .        WIT
0af0: 48 20 72 28 78 2c 79 29 20 41 53 20 28 0a 20 20  H r(x,y) AS (.  
0b00: 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54            SELECT
0b10: 20 33 30 30 2c 20 24 3a 3a 73 74 72 32 0a 20 20   300, $::str2.  
0b20: 20 20 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 20            UNION 
0b30: 41 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ALL.            
0b40: 53 45 4c 45 43 54 20 78 2d 31 2c 20 24 3a 3a 73  SELECT x-1, $::s
0b50: 74 72 32 20 46 52 4f 4d 20 72 0a 20 20 20 20 20  tr2 FROM r.     
0b60: 20 20 20 20 20 20 20 4c 49 4d 49 54 20 33 30 30         LIMIT 300
0b70: 0a 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20  .        ).     
0b80: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
0b90: 78 29 2c 20 6c 65 6e 67 74 68 28 79 29 20 46 52  x), length(y) FR
0ba0: 4f 4d 20 72 20 47 52 4f 55 50 20 42 59 20 79 2c  OM r GROUP BY y,
0bb0: 20 28 78 25 35 29 0a 20 20 20 20 20 20 7d 0a 20   (x%5).      }. 
0bc0: 20 20 20 7d 20 2d 74 65 73 74 20 7b 0a 20 20 20     } -test {.   
0bd0: 20 20 20 66 61 75 6c 74 73 69 6d 5f 74 65 73 74     faultsim_test
0be0: 5f 72 65 73 75 6c 74 20 7b 30 20 7b 36 30 20 31  _result {0 {60 1
0bf0: 30 30 30 30 20 36 30 20 31 30 30 30 30 20 36 30  0000 60 10000 60
0c00: 20 31 30 30 30 30 20 36 30 20 31 30 30 30 30 20   10000 60 10000 
0c10: 36 30 20 31 30 30 30 30 7d 7d 0a 20 20 20 20 7d  60 10000}}.    }
0c20: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65  ..    sqlite3_me
0c30: 6d 64 65 62 75 67 5f 76 66 73 5f 6f 6f 6d 5f 74  mdebug_vfs_oom_t
0c40: 65 73 74 20 31 0a 20 20 7d 0a 7d 0a 0a 63 61 74  est 1.  }.}..cat
0c50: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
0c60: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
0c70: 0a 73 65 74 20 74 28 30 29 20 73 69 6e 67 6c 65  .set t(0) single
0c80: 74 68 72 65 61 64 0a 73 65 74 20 74 28 31 29 20  thread.set t(1) 
0c90: 6d 75 6c 74 69 74 68 72 65 61 64 0a 73 65 74 20  multithread.set 
0ca0: 74 28 32 29 20 73 65 72 69 61 6c 69 7a 65 64 0a  t(2) serialized.
0cb0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 20 24  sqlite3_config $
0cc0: 74 28 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  t($sqlite_option
0cd0: 73 28 74 68 72 65 61 64 73 61 66 65 29 29 0a 73  s(threadsafe)).s
0ce0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
0cf0: 6f 6b 61 73 69 64 65 20 31 30 30 20 35 30 30 0a  okaside 100 500.
0d00: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
0d10: 7a 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ze..#-----------
0d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0d60: 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65  .reset_db.do_exe
0d70: 63 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 20  csql_test 4.0 { 
0d80: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0d90: 74 31 28 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20  t1(a, b, c); .  
0da0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0db0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
0dc0: 7d 0a 64 6f 5f 74 65 73 74 20 34 2e 31 20 7b 20  }.do_test 4.1 { 
0dd0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
0de0: 20 7b 24 69 20 3c 20 32 35 36 7d 20 7b 69 6e 63   {$i < 256} {inc
0df0: 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  r i} {.    execs
0e00: 71 6c 20 7b 20 0a 20 20 20 20 20 20 49 4e 53 45  ql { .      INSE
0e10: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
0e20: 54 0a 20 20 20 20 20 20 20 20 28 28 61 3c 3c 33  T.        ((a<<3
0e30: 29 20 2b 20 62 29 20 26 20 32 31 34 37 34 38 33  ) + b) & 2147483
0e40: 36 34 37 2c 0a 20 20 20 20 20 20 20 20 28 28 62  647,.        ((b
0e50: 3c 3c 33 29 20 2b 20 63 29 20 26 20 32 31 34 37  <<3) + c) & 2147
0e60: 34 38 33 36 34 37 2c 0a 20 20 20 20 20 20 20 20  483647,.        
0e70: 28 28 63 3c 3c 33 29 20 2b 20 61 29 20 26 20 32  ((c<<3) + a) & 2
0e80: 31 34 37 34 38 33 36 34 37 0a 20 20 20 20 20 20  147483647.      
0e90: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0ea0: 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d 49   rowid DESC LIMI
0eb0: 54 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  T 1;.    }.  }.}
0ec0: 20 7b 7d 0a 0a 66 61 75 6c 74 73 69 6d 5f 73 61   {}..faultsim_sa
0ed0: 76 65 5f 61 6e 64 5f 63 6c 6f 73 65 0a 0a 64 6f  ve_and_close..do
0ee0: 5f 66 61 75 6c 74 73 69 6d 5f 74 65 73 74 20 34  _faultsim_test 4
0ef0: 2e 32 20 2d 66 61 75 6c 74 73 20 6f 6f 6d 2a 20  .2 -faults oom* 
0f00: 2d 70 72 65 70 20 7b 0a 20 20 66 61 75 6c 74 73  -prep {.  faults
0f10: 69 6d 5f 72 65 73 74 6f 72 65 5f 61 6e 64 5f 72  im_restore_and_r
0f20: 65 6f 70 65 6e 0a 7d 20 2d 62 6f 64 79 20 7b 0a  eopen.} -body {.
0f30: 20 20 65 78 65 63 73 71 6c 20 7b 20 43 52 45 41    execsql { CREA
0f40: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
0f50: 69 31 20 4f 4e 20 74 31 28 61 2c 62 2c 63 29 20  i1 ON t1(a,b,c) 
0f60: 7d 0a 7d 20 2d 74 65 73 74 20 7b 0a 20 20 66 61  }.} -test {.  fa
0f70: 75 6c 74 73 69 6d 5f 74 65 73 74 5f 72 65 73 75  ultsim_test_resu
0f80: 6c 74 20 7b 30 20 7b 7d 7d 0a 7d 0a 0a 23 2d 2d  lt {0 {}}.}..#--
0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fd0: 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73 65 74 5f  -------.#.reset_
0fe0: 64 62 0a 73 65 74 20 61 20 5b 73 74 72 69 6e 67  db.set a [string
0ff0: 20 72 65 70 65 61 74 20 61 20 35 30 30 5d 0a 73   repeat a 500].s
1000: 65 74 20 62 20 5b 73 74 72 69 6e 67 20 72 65 70  et b [string rep
1010: 65 61 74 20 62 20 35 30 30 5d 0a 73 65 74 20 63  eat b 500].set c
1020: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20   [string repeat 
1030: 63 20 35 30 30 5d 0a 64 6f 5f 65 78 65 63 73 71  c 500].do_execsq
1040: 6c 5f 74 65 73 74 20 35 2e 30 20 7b 20 0a 20 20  l_test 5.0 { .  
1050: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1060: 61 2c 20 62 2c 20 63 29 3b 20 0a 20 20 49 4e 53  a, b, c); .  INS
1070: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1080: 45 53 28 24 61 2c 20 24 62 2c 20 24 63 29 3b 20  ES($a, $b, $c); 
1090: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
10a0: 31 20 56 41 4c 55 45 53 28 24 63 2c 20 24 62 2c  1 VALUES($c, $b,
10b0: 20 24 61 29 3b 20 0a 7d 0a 0a 64 6f 5f 66 61 75   $a); .}..do_fau
10c0: 6c 74 73 69 6d 5f 74 65 73 74 20 35 2e 31 20 2d  ltsim_test 5.1 -
10d0: 66 61 75 6c 74 73 20 6f 6f 6d 2a 20 2d 62 6f 64  faults oom* -bod
10e0: 79 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  y {.  execsql { 
10f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1100: 20 4f 52 44 45 52 20 42 59 20 61 20 7d 0a 7d 20   ORDER BY a }.} 
1110: 2d 74 65 73 74 20 7b 0a 20 20 66 61 75 6c 74 73  -test {.  faults
1120: 69 6d 5f 74 65 73 74 5f 72 65 73 75 6c 74 20 5b  im_test_result [
1130: 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 24 3a 3a  list 0 [list $::
1140: 61 20 24 3a 3a 62 20 24 3a 3a 63 20 24 3a 3a 63  a $::b $::c $::c
1150: 20 24 3a 3a 62 20 24 3a 3a 61 5d 5d 0a 7d 0a 0a   $::b $::a]].}..
1160: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.