/ Hex Artifact Content
Login

Artifact e426aa58122d20f2b9fbe9a507f9eb8cab85b8af:


0000: 23 20 32 30 31 31 20 44 65 63 65 6d 62 65 72 20  # 2011 December 
0010: 31 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  16.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 2a 0a 23 0a 23 20 54 68 69  ********.#.# Thi
0170: 73 20 74 65 73 74 20 73 69 6d 75 6c 61 74 65 73  s test simulates
0180: 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
0190: 63 72 61 73 68 20 69 6d 6d 65 64 69 61 74 65 6c  crash immediatel
01a0: 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 0a 23 20  y following a.# 
01b0: 73 79 73 74 65 6d 20 63 61 6c 6c 20 74 6f 20 74  system call to t
01c0: 72 75 6e 63 61 74 65 20 61 20 66 69 6c 65 2e 20  runcate a file. 
01d0: 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68  Specifically, th
01e0: 65 20 73 79 73 74 65 6d 20 63 61 6c 6c 20 74 68  e system call th
01f0: 61 74 0a 23 20 74 72 75 6e 63 61 74 65 73 20 74  at.# truncates t
0200: 68 65 20 57 41 4c 20 66 69 6c 65 20 69 66 20 22  he WAL file if "
0210: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 73  PRAGMA journal_s
0220: 69 7a 65 5f 6c 69 6d 69 74 22 20 69 73 20 63 6f  ize_limit" is co
0230: 6e 66 69 67 75 72 65 64 2e 0a 23 0a 0a 73 65 74  nfigured..#..set
0240: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0250: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0260: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0270: 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63 61 70  ester.tcl..ifcap
0280: 61 62 6c 65 20 21 77 61 6c 20 7b 66 69 6e 69 73  able !wal {finis
0290: 68 5f 74 65 73 74 20 3b 20 72 65 74 75 72 6e 20  h_test ; return 
02a0: 7d 0a 73 65 74 20 74 65 73 74 70 72 65 66 69 78  }.set testprefix
02b0: 20 77 61 6c 63 72 61 73 68 33 0a 0a 64 62 20 63   walcrash3..db c
02c0: 6c 6f 73 65 0a 74 65 73 74 76 66 73 20 74 76 66  lose.testvfs tvf
02d0: 73 0a 74 76 66 73 20 66 69 6c 74 65 72 20 7b 78  s.tvfs filter {x
02e0: 54 72 75 6e 63 61 74 65 20 78 57 72 69 74 65 7d  Truncate xWrite}
02f0: 0a 74 76 66 73 20 73 63 72 69 70 74 20 74 76 66  .tvfs script tvf
0300: 73 5f 63 61 6c 6c 62 61 63 6b 0a 70 72 6f 63 20  s_callback.proc 
0310: 74 76 66 73 5f 63 61 6c 6c 62 61 63 6b 20 7b 61  tvfs_callback {a
0320: 72 67 73 7d 20 7b 7d 0a 0a 73 71 6c 69 74 65 33  rgs} {}..sqlite3
0330: 20 64 62 20 74 65 73 74 2e 64 62 20 2d 76 66 73   db test.db -vfs
0340: 20 74 76 66 73 0a 64 6f 5f 65 78 65 63 73 71 6c   tvfs.do_execsql
0350: 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20 50 52  _test 1.1 {.  PR
0360: 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d  AGMA page_size =
0370: 20 31 30 32 34 3b 0a 20 20 50 52 41 47 4d 41 20   1024;.  PRAGMA 
0380: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 57  journal_mode = W
0390: 41 4c 3b 0a 20 20 50 52 41 47 4d 41 20 77 61 6c  AL;.  PRAGMA wal
03a0: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20  _autocheckpoint 
03b0: 3d 20 31 32 38 3b 0a 20 20 50 52 41 47 4d 41 20  = 128;.  PRAGMA 
03c0: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
03d0: 69 74 20 3d 20 31 36 33 38 34 3b 0a 0a 20 20 43  it = 16384;..  C
03e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
03f0: 20 42 4c 4f 42 2c 20 62 20 42 4c 4f 42 2c 20 55   BLOB, b BLOB, U
0400: 4e 49 51 55 45 28 61 2c 20 62 29 29 3b 0a 20 20  NIQUE(a, b));.  
0410: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0420: 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62  ALUES(randomblob
0430: 28 31 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62  (10), randomblob
0440: 28 31 30 30 30 29 29 3b 0a 7d 20 7b 77 61 6c 20  (1000));.} {wal 
0450: 31 32 38 20 31 36 33 38 34 7d 0a 0a 70 72 6f 63  128 16384}..proc
0460: 20 74 76 66 73 5f 63 61 6c 6c 62 61 63 6b 20 7b   tvfs_callback {
0470: 6d 65 74 68 6f 64 20 66 69 6c 65 20 61 72 67 6c  method file argl
0480: 69 73 74 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a  ist} {.  if {$::
0490: 73 74 61 74 65 3d 3d 31 7d 20 7b 0a 20 20 20 20  state==1} {.    
04a0: 66 6f 72 65 61 63 68 20 66 20 5b 67 6c 6f 62 20  foreach f [glob 
04b0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 78 78 5f 74  -nocomplain xx_t
04c0: 65 73 74 2e 2a 5d 20 7b 20 66 6f 72 63 65 64 65  est.*] { forcede
04d0: 6c 65 74 65 20 24 66 20 7d 0a 20 20 20 20 66 6f  lete $f }.    fo
04e0: 72 65 61 63 68 20 66 20 5b 67 6c 6f 62 20 2d 6e  reach f [glob -n
04f0: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 2e 2a  ocomplain test.*
0500: 5d 20 20 20 20 7b 20 66 6f 72 63 65 63 6f 70 79  ]    { forcecopy
0510: 20 24 66 20 22 78 78 5f 24 66 22 20 7d 0a 20 20   $f "xx_$f" }.  
0520: 20 20 73 65 74 20 3a 3a 73 74 61 74 65 20 32 0a    set ::state 2.
0530: 20 20 7d 0a 20 20 69 66 20 7b 24 3a 3a 73 74 61    }.  if {$::sta
0540: 74 65 3d 3d 30 20 26 26 20 24 6d 65 74 68 6f 64  te==0 && $method
0550: 3d 3d 22 78 54 72 75 6e 63 61 74 65 22 20 26 26  =="xTruncate" &&
0560: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil
0570: 65 5d 3d 3d 22 74 65 73 74 2e 64 62 2d 77 61 6c  e]=="test.db-wal
0580: 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 73  "} {.    set ::s
0590: 74 61 74 65 20 31 0a 20 20 7d 0a 7d 0a 0a 66 6f  tate 1.  }.}..fo
05a0: 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c  r {set i 2} {$i<
05b0: 31 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  1000} {incr i} {
05c0: 0a 0a 20 20 23 20 49 66 20 74 68 65 20 57 41 4c  ..  # If the WAL
05d0: 20 66 69 6c 65 20 69 73 20 74 72 75 6e 63 61 74   file is truncat
05e0: 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 66 6f  ed within the fo
05f0: 6c 6c 6f 77 69 6e 67 2c 20 77 69 74 68 69 6e 20  llowing, within 
0600: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 20  the following.  
0610: 23 20 78 57 72 69 74 65 20 63 61 6c 6c 20 74 68  # xWrite call th
0620: 65 20 5b 74 76 66 73 5f 63 61 6c 6c 62 61 63 6b  e [tvfs_callback
0630: 5d 20 6d 61 6b 65 73 20 61 20 63 6f 70 79 20 6f  ] makes a copy o
0640: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
0650: 6e 64 20 57 41 4c 20 0a 20 20 23 20 66 69 6c 65  nd WAL .  # file
0660: 73 20 73 65 74 20 73 65 74 73 20 24 3a 3a 73 74  s set sets $::st
0670: 61 74 65 20 74 6f 20 32 2e 20 53 6f 20 74 68 61  ate to 2. So tha
0680: 74 20 74 68 65 20 63 6f 70 69 65 64 20 66 69 6c  t the copied fil
0690: 65 73 20 61 72 65 20 69 6e 20 74 68 65 20 73 61  es are in the sa
06a0: 6d 65 0a 20 20 23 20 73 74 61 74 65 20 61 73 20  me.  # state as 
06b0: 74 68 65 20 72 65 61 6c 20 64 61 74 61 62 61 73  the real databas
06c0: 65 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 73 20  e and WAL files 
06d0: 77 6f 75 6c 64 20 62 65 20 69 66 20 61 6e 20 61  would be if an a
06e0: 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61 73 68  pplication crash
06f0: 20 0a 20 20 23 20 6f 63 63 75 72 72 65 64 20 69   .  # occurred i
0700: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
0710: 77 69 6e 67 20 74 68 65 20 78 54 72 75 6e 63 61  wing the xTrunca
0720: 74 65 28 29 2e 0a 20 20 23 20 0a 20 20 73 65 74  te()..  # .  set
0730: 20 3a 3a 73 74 61 74 65 20 30 0a 20 20 64 6f 5f   ::state 0.  do_
0740: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 24  execsql_test 1.$
0750: 69 2e 31 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  i.1 {.    INSERT
0760: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0770: 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 29 2c 20  randomblob(10), 
0780: 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30 30 30 29  randomblob(1000)
0790: 29 3b 0a 20 20 7d 0a 0a 20 20 23 20 49 66 20 61  );.  }..  # If a
07a0: 20 63 6f 70 79 20 77 61 73 20 6d 61 64 65 2c 20   copy was made, 
07b0: 6f 70 65 6e 20 69 74 20 61 6e 64 20 72 75 6e 20  open it and run 
07c0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 2d 63 68  the integrity-ch
07d0: 65 63 6b 2e 0a 20 20 23 0a 20 20 69 66 20 7b 24  eck..  #.  if {$
07e0: 3a 3a 73 74 61 74 65 3d 3d 32 7d 20 7b 0a 20 20  ::state==2} {.  
07f0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 78 78    sqlite3 db2 xx
0800: 5f 74 65 73 74 2e 64 62 0a 20 20 20 20 64 6f 5f  _test.db.    do_
0810: 74 65 73 74 20 31 2e 24 69 2e 32 20 7b 20 65 78  test 1.$i.2 { ex
0820: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 69  ecsql { PRAGMA i
0830: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 20  ntegrity_check  
0840: 7d 20 64 62 32 20 7d 20 22 6f 6b 22 0a 20 20 20  } db2 } "ok".   
0850: 20 64 6f 5f 74 65 73 74 20 31 2e 24 69 2e 33 20   do_test 1.$i.3 
0860: 7b 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45  { execsql { SELE
0870: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0880: 20 74 31 20 7d 20 64 62 32 20 7d 20 5b 65 78 70   t1 } db2 } [exp
0890: 72 20 24 69 2d 31 5d 0a 20 20 20 20 64 62 32 20  r $i-1].    db2 
08a0: 63 6c 6f 73 65 0a 20 20 7d 0a 7d 0a 63 61 74 63  close.  }.}.catc
08b0: 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 74  h { db close }.t
08c0: 76 66 73 20 64 65 6c 65 74 65 0a 0a 23 2d 2d 2d  vfs delete..#---
08d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0910: 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 63 61 74 63 68 20  -------.#.catch 
0920: 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 66 6f 72  { db close }.for
0930: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
0940: 0a 0a 64 6f 5f 74 65 73 74 20 32 2e 31 20 7b 0a  ..do_test 2.1 {.
0950: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
0960: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0970: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
0980: 5f 73 69 7a 65 20 3d 20 35 31 32 3b 0a 20 20 20  _size = 512;.   
0990: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
09a0: 6d 6f 64 65 20 3d 20 57 41 4c 3b 0a 20 20 20 20  mode = WAL;.    
09b0: 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
09c0: 68 65 63 6b 70 6f 69 6e 74 20 3d 20 31 32 38 3b  heckpoint = 128;
09d0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
09e0: 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b  E t1(a PRIMARY K
09f0: 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45  EY, b);.    INSE
0a00: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0a10: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 35 29  S(randomblob(25)
0a20: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 30 30  , randomblob(200
0a30: 29 29 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 20 7b  ));.  }..  for {
0a40: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 31  set i 0} {$i < 1
0a50: 35 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  500} {incr i} {.
0a60: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
0a70: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0a80: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 32  UES(randomblob(2
0a90: 35 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 32  5), randomblob(2
0aa0: 30 30 29 29 20 7d 0a 20 20 7d 0a 0a 20 20 64 62  00)) }.  }..  db
0ab0: 5f 73 61 76 65 0a 20 20 64 62 20 63 6c 6f 73 65  _save.  db close
0ac0: 0a 7d 20 7b 7d 0a 0a 73 65 74 20 6e 49 6e 69 74  .} {}..set nInit
0ad0: 69 61 6c 45 72 72 20 5b 73 65 74 5f 74 65 73 74  ialErr [set_test
0ae0: 5f 63 6f 75 6e 74 65 72 20 65 72 72 6f 72 73 5d  _counter errors]
0af0: 0a 66 6f 72 20 7b 73 65 74 20 69 20 32 7d 20 7b  .for {set i 2} {
0b00: 24 69 3c 31 30 30 30 30 20 26 26 20 5b 73 65 74  $i<10000 && [set
0b10: 5f 74 65 73 74 5f 63 6f 75 6e 74 65 72 20 65 72  _test_counter er
0b20: 72 6f 72 73 5d 3d 3d 24 6e 49 6e 69 74 69 61 6c  rors]==$nInitial
0b30: 45 72 72 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  Err} {incr i} {.
0b40: 0a 20 20 64 6f 5f 74 65 73 74 20 32 2e 24 69 2e  .  do_test 2.$i.
0b50: 31 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  1 {.    catch { 
0b60: 64 62 20 63 6c 6f 73 65 20 7d 20 0a 20 20 20 20  db close } .    
0b70: 64 62 5f 72 65 73 74 6f 72 65 0a 20 20 20 20 63  db_restore.    c
0b80: 72 61 73 68 73 71 6c 20 2d 64 65 6c 61 79 20 32  rashsql -delay 2
0b90: 20 2d 66 69 6c 65 20 74 65 73 74 2e 64 62 2d 77   -file test.db-w
0ba0: 61 6c 20 2d 73 65 65 64 20 24 69 20 7b 0a 20 20  al -seed $i {.  
0bb0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0bc0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  M sqlite_master;
0bd0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 79  .      PRAGMA sy
0be0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 66 75 6c 6c  nchronous = full
0bf0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 77  ;.      PRAGMA w
0c00: 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 3b 0a 20  al_checkpoint;. 
0c10: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
0c20: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c30: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0c40: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0c50: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0c60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c70: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0c80: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0c90: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0ca0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0cb0: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0cc0: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0cd0: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0ce0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0cf0: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0d00: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0d10: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0d20: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0d30: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0d40: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0d50: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0d60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0d70: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0d80: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0d90: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0da0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0db0: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0dc0: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0dd0: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0de0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0df0: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d  t1 VALUES(random
0e00: 62 6c 6f 62 28 32 36 29 2c 20 72 61 6e 64 6f 6d  blob(26), random
0e10: 62 6c 6f 62 28 32 30 30 29 29 3b 0a 20 20 20 20  blob(200));.    
0e20: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 7d 0a    COMMIT;.    }.
0e30: 20 20 7d 20 7b 31 20 7b 63 68 69 6c 64 20 70 72    } {1 {child pr
0e40: 6f 63 65 73 73 20 65 78 69 74 65 64 20 61 62 6e  ocess exited abn
0e50: 6f 72 6d 61 6c 6c 79 7d 7d 0a 0a 20 20 64 6f 5f  ormally}}..  do_
0e60: 74 65 73 74 20 32 2e 24 69 2e 32 20 7b 0a 20 20  test 2.$i.2 {.  
0e70: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
0e80: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
0e90: 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72   { PRAGMA integr
0ea0: 69 74 79 5f 63 68 65 63 6b 20 7d 20 0a 20 20 7d  ity_check } .  }
0eb0: 20 7b 6f 6b 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f   {ok}.}..finish_
0ec0: 74 65 73 74 0a                                   test.