/ Hex Artifact Content
Login

Artifact 50417780d0e0d7cd23cf12a8277bb44024765df3:


0000: 23 20 32 30 31 31 20 46 65 62 72 75 61 72 79 20  # 2011 February 
0010: 31 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  19.#.# 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 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75  ary.  The.# focu
01b0: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 61 74 20 65  s testing that e
01d0: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 72  rror messages ar
01e0: 65 20 6c 6f 67 67 65 64 20 76 69 61 20 74 68 65  e logged via the
01f0: 0a 23 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29  .# sqlite3_log()
0200: 20 6d 65 63 68 61 6e 69 73 6d 20 77 68 65 6e 20   mechanism when 
0210: 63 65 72 74 61 69 6e 20 65 72 72 6f 72 73 20 61  certain errors a
0220: 72 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69  re encountered i
0230: 6e 20 74 68 65 0a 23 20 64 65 66 61 75 6c 74 20  n the.# default 
0240: 75 6e 69 78 20 6f 72 20 77 69 6e 64 6f 77 73 20  unix or windows 
0250: 56 46 53 20 6d 6f 64 75 6c 65 73 2e 0a 23 0a 0a  VFS modules..#..
0260: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0270: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0280: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0290: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 69 66 20  r/tester.tcl.if 
02a0: 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  {$::tcl_platform
02b0: 28 70 6c 61 74 66 6f 72 6d 29 21 3d 22 75 6e 69  (platform)!="uni
02c0: 78 22 7d 20 7b 20 66 69 6e 69 73 68 5f 74 65 73  x"} { finish_tes
02d0: 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 73 65 74  t ; return }.set
02e0: 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20 6f 73   ::testprefix os
02f0: 65 72 72 6f 72 0a 0a 64 62 20 63 6c 6f 73 65 0a  error..db close.
0300: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
0310: 0a 74 65 73 74 5f 73 71 6c 69 74 65 33 5f 6c 6f  .test_sqlite3_lo
0320: 67 20 78 4c 6f 67 0a 70 72 6f 63 20 78 4c 6f 67  g xLog.proc xLog
0330: 20 7b 65 72 72 6f 72 5f 63 6f 64 65 20 6d 73 67   {error_code msg
0340: 7d 20 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  } {.  if {[strin
0350: 67 20 6d 61 74 63 68 20 6f 73 5f 2a 20 24 6d 73  g match os_* $ms
0360: 67 5d 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  g]} {.    lappen
0370: 64 20 3a 3a 6c 6f 67 20 24 6d 73 67 20 0a 20 20  d ::log $msg .  
0380: 7d 0a 7d 0a 0a 70 72 6f 63 20 64 6f 5f 72 65 5f  }.}..proc do_re_
0390: 74 65 73 74 20 7b 74 6e 20 73 63 72 69 70 74 20  test {tn script 
03a0: 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 0a 20 20  expression} {.  
03b0: 75 70 6c 65 76 65 6c 20 64 6f 5f 74 65 73 74 20  uplevel do_test 
03c0: 24 74 6e 20 5b 6c 69 73 74 20 5b 73 75 62 73 74  $tn [list [subst
03d0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 7b 0a 20   -nocommands {. 
03e0: 20 20 20 73 65 74 20 72 65 73 20 5b 65 76 61 6c     set res [eval
03f0: 20 7b 20 24 73 63 72 69 70 74 20 7d 5d 0a 20 20   { $script }].  
0400: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 24    if {[regexp {$
0410: 65 78 70 72 65 73 73 69 6f 6e 7d 20 5b 73 65 74  expression} [set
0420: 20 72 65 73 5d 5d 7d 20 7b 0a 20 20 20 20 20 20   res]]} {.      
0430: 73 65 74 20 7b 7d 20 7b 24 65 78 70 72 65 73 73  set {} {$express
0440: 69 6f 6e 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ion}.    } else 
0450: 7b 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 0a  {.      set res.
0460: 20 20 20 20 7d 0a 20 20 7d 5d 5d 20 5b 6c 69 73      }.  }]] [lis
0470: 74 20 24 65 78 70 72 65 73 73 69 6f 6e 5d 0a 20  t $expression]. 
0480: 20 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   .}..#----------
0490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04d0: 0a 23 20 54 65 73 74 73 20 6f 73 65 72 72 6f 72  .# Tests oserror
04e0: 2d 31 2e 2a 20 74 65 73 74 20 66 61 69 6c 75 72  -1.* test failur
04f0: 65 73 20 69 6e 20 74 68 65 20 6f 70 65 6e 28 29  es in the open()
0500: 20 73 79 73 74 65 6d 20 63 61 6c 6c 2e 0a 23 0a   system call..#.
0510: 0a 23 20 54 65 73 74 20 61 20 66 61 69 6c 75 72  .# Test a failur
0520: 65 20 69 6e 20 6f 70 65 6e 28 29 20 64 75 65 20  e in open() due 
0530: 74 6f 20 74 6f 6f 20 6d 61 6e 79 20 66 69 6c 65  to too many file
0540: 73 2e 20 0a 23 0a 23 20 54 68 65 20 78 4f 70 65  s. .#.# The xOpe
0550: 6e 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  n() method of th
0560: 65 20 75 6e 69 78 20 56 46 53 20 63 61 6c 6c 73  e unix VFS calls
0570: 20 67 65 74 63 77 64 28 29 20 61 73 20 77 65 6c   getcwd() as wel
0580: 6c 20 61 73 20 6f 70 65 6e 28 29 2e 0a 23 20 41  l as open()..# A
0590: 6c 74 68 6f 75 67 68 20 74 68 69 73 20 64 6f 65  lthough this doe
05a0: 73 20 6e 6f 74 20 61 70 70 65 61 72 20 74 6f 20  s not appear to 
05b0: 62 65 20 64 6f 63 75 6d 65 6e 74 65 64 20 69 6e  be documented in
05c0: 20 74 68 65 20 6d 61 6e 20 70 61 67 65 2c 20 6f   the man page, o
05d0: 6e 20 4f 53 58 0a 23 20 61 20 63 61 6c 6c 20 74  n OSX.# a call t
05e0: 6f 20 67 65 74 63 77 64 28 29 20 6d 61 79 20 66  o getcwd() may f
05f0: 61 69 6c 20 69 66 20 74 68 65 72 65 20 61 72 65  ail if there are
0600: 20 6e 6f 20 66 72 65 65 20 66 69 6c 65 20 64 65   no free file de
0610: 73 63 72 69 70 74 6f 72 73 2e 20 53 6f 0a 23 20  scriptors. So.# 
0620: 61 6e 20 65 72 72 6f 72 20 6d 61 79 20 62 65 20  an error may be 
0630: 72 65 70 6f 72 74 65 64 20 66 6f 72 20 65 69 74  reported for eit
0640: 68 65 72 20 6f 70 65 6e 28 29 20 6f 72 20 67 65  her open() or ge
0650: 74 63 77 64 28 29 20 68 65 72 65 2e 0a 23 0a 70  tcwd() here..#.p
0660: 75 74 73 20 22 50 6f 73 73 69 62 6c 65 20 76 61  uts "Possible va
0670: 6c 67 72 69 6e 64 20 65 72 72 6f 72 20 61 62 6f  lgrind error abo
0680: 75 74 20 69 6e 76 61 6c 69 64 20 66 69 6c 65 20  ut invalid file 
0690: 64 65 73 63 72 69 70 74 6f 72 20 66 6f 6c 6c 6f  descriptor follo
06a0: 77 73 3a 22 0a 64 6f 5f 74 65 73 74 20 31 2e 31  ws:".do_test 1.1
06b0: 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 6c 6f 67  .1 {.  set ::log
06c0: 20 5b 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20 5b   [list].  list [
06d0: 63 61 74 63 68 20 7b 0a 20 20 20 20 66 6f 72 20  catch {.    for 
06e0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
06f0: 32 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  2000} {incr i} {
0700: 20 73 71 6c 69 74 65 33 20 64 62 68 5f 24 69 20   sqlite3 dbh_$i 
0710: 74 65 73 74 2e 64 62 20 2d 72 65 61 64 6f 6e 6c  test.db -readonl
0720: 79 20 31 20 7d 0a 20 20 7d 20 6d 73 67 5d 20 24  y 1 }.  } msg] $
0730: 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62 6c 65  msg.} {1 {unable
0740: 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73   to open databas
0750: 65 20 66 69 6c 65 7d 7d 0a 64 6f 5f 74 65 73 74  e file}}.do_test
0760: 20 31 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68   1.1.2 {.  catch
0770: 20 7b 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d   { for {set i 0}
0780: 20 7b 24 69 20 3c 20 32 30 30 30 7d 20 7b 69 6e   {$i < 2000} {in
0790: 63 72 20 69 7d 20 7b 20 64 62 68 5f 24 69 20 63  cr i} { dbh_$i c
07a0: 6c 6f 73 65 20 7d 20 7d 0a 7d 20 7b 31 7d 0a 64  lose } }.} {1}.d
07b0: 6f 5f 72 65 5f 74 65 73 74 20 31 2e 31 2e 33 20  o_re_test 1.1.3 
07c0: 7b 20 0a 20 20 6c 69 6e 64 65 78 20 24 3a 3a 6c  { .  lindex $::l
07d0: 6f 67 20 30 20 0a 7d 20 7b 5e 6f 73 5f 75 6e 69  og 0 .} {^os_uni
07e0: 78 2e 63 3a 5c 64 2b 3a 20 5c 28 5c 64 2b 5c 29  x.c:\d+: \(\d+\)
07f0: 20 28 6f 70 65 6e 7c 67 65 74 63 77 64 29 5c 28   (open|getcwd)\(
0800: 2e 2a 74 65 73 74 2e 64 62 5c 29 20 2d 20 7d 0a  .*test.db\) - }.
0810: 0a 0a 23 20 54 65 73 74 20 61 20 66 61 69 6c 75  ..# Test a failu
0820: 72 65 20 69 6e 20 6f 70 65 6e 28 29 20 64 75 65  re in open() due
0830: 20 74 6f 20 74 68 65 20 70 61 74 68 20 62 65 69   to the path bei
0840: 6e 67 20 61 20 64 69 72 65 63 74 6f 72 79 2e 0a  ng a directory..
0850: 23 0a 64 6f 5f 74 65 73 74 20 31 2e 32 2e 31 20  #.do_test 1.2.1 
0860: 7b 0a 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 64  {.  file mkdir d
0870: 69 72 2e 64 62 0a 20 20 73 65 74 20 3a 3a 6c 6f  ir.db.  set ::lo
0880: 67 20 5b 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20  g [list].  list 
0890: 5b 63 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33  [catch { sqlite3
08a0: 20 64 62 68 20 64 69 72 2e 64 62 20 7d 20 6d 73   dbh dir.db } ms
08b0: 67 5d 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e  g] $msg.} {1 {un
08c0: 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74  able to open dat
08d0: 61 62 61 73 65 20 66 69 6c 65 7d 7d 0a 0a 64 6f  abase file}}..do
08e0: 5f 72 65 5f 74 65 73 74 20 31 2e 32 2e 32 20 7b  _re_test 1.2.2 {
08f0: 20 6c 69 6e 64 65 78 20 24 3a 3a 6c 6f 67 20 30   lindex $::log 0
0900: 20 7d 20 7b 5e 6f 73 5f 75 6e 69 78 2e 63 3a 5c   } {^os_unix.c:\
0910: 64 2b 3a 20 5c 28 5c 64 2b 5c 29 20 6f 70 65 6e  d+: \(\d+\) open
0920: 5c 28 2e 2a 64 69 72 2e 64 62 5c 29 20 2d 20 7d  \(.*dir.db\) - }
0930: 0a 0a 23 20 54 65 73 74 20 61 20 66 61 69 6c 75  ..# Test a failu
0940: 72 65 20 69 6e 20 6f 70 65 6e 28 29 20 64 75 65  re in open() due
0950: 20 74 6f 20 74 68 65 20 70 61 74 68 20 6e 6f 74   to the path not
0960: 20 65 78 69 73 74 69 6e 67 2e 0a 23 0a 64 6f 5f   existing..#.do_
0970: 74 65 73 74 20 31 2e 33 2e 31 20 7b 0a 20 20 73  test 1.3.1 {.  s
0980: 65 74 20 3a 3a 6c 6f 67 20 5b 6c 69 73 74 5d 0a  et ::log [list].
0990: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 20    list [catch { 
09a0: 73 71 6c 69 74 65 33 20 64 62 68 20 2f 78 2f 79  sqlite3 dbh /x/y
09b0: 2f 7a 2f 74 65 73 74 2e 64 62 20 7d 20 6d 73 67  /z/test.db } msg
09c0: 5d 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61  ] $msg.} {1 {una
09d0: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
09e0: 62 61 73 65 20 66 69 6c 65 7d 7d 0a 0a 64 6f 5f  base file}}..do_
09f0: 72 65 5f 74 65 73 74 20 31 2e 33 2e 32 20 7b 20  re_test 1.3.2 { 
0a00: 6c 69 6e 64 65 78 20 24 3a 3a 6c 6f 67 20 30 20  lindex $::log 0 
0a10: 7d 20 7b 5e 6f 73 5f 75 6e 69 78 2e 63 3a 5c 64  } {^os_unix.c:\d
0a20: 2b 3a 20 5c 28 5c 64 2b 5c 29 20 6f 70 65 6e 5c  +: \(\d+\) open\
0a30: 28 2e 2a 74 65 73 74 2e 64 62 5c 29 20 2d 20 7d  (.*test.db\) - }
0a40: 0a 0a 23 20 54 65 73 74 20 61 20 66 61 69 6c 75  ..# Test a failu
0a50: 72 65 20 69 6e 20 6f 70 65 6e 28 29 20 64 75 65  re in open() due
0a60: 20 74 6f 20 74 68 65 20 70 61 74 68 20 6e 6f 74   to the path not
0a70: 20 65 78 69 73 74 69 6e 67 2e 0a 23 0a 64 6f 5f   existing..#.do_
0a80: 74 65 73 74 20 31 2e 34 2e 31 20 7b 0a 20 20 73  test 1.4.1 {.  s
0a90: 65 74 20 3a 3a 6c 6f 67 20 5b 6c 69 73 74 5d 0a  et ::log [list].
0aa0: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 20    list [catch { 
0ab0: 73 71 6c 69 74 65 33 20 64 62 68 20 2f 72 6f 6f  sqlite3 dbh /roo
0ac0: 74 2f 74 65 73 74 2e 64 62 20 7d 20 6d 73 67 5d  t/test.db } msg]
0ad0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62   $msg.} {1 {unab
0ae0: 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
0af0: 61 73 65 20 66 69 6c 65 7d 7d 0a 0a 64 6f 5f 72  ase file}}..do_r
0b00: 65 5f 74 65 73 74 20 31 2e 34 2e 32 20 7b 20 6c  e_test 1.4.2 { l
0b10: 69 6e 64 65 78 20 24 3a 3a 6c 6f 67 20 30 20 7d  index $::log 0 }
0b20: 20 7b 5e 6f 73 5f 75 6e 69 78 2e 63 3a 5c 64 2a   {^os_unix.c:\d*
0b30: 3a 20 5c 28 5c 64 2b 5c 29 20 6f 70 65 6e 5c 28  : \(\d+\) open\(
0b40: 2e 2a 74 65 73 74 2e 64 62 5c 29 20 2d 20 7d 0a  .*test.db\) - }.
0b50: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
0b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
0ba0: 65 73 74 73 20 6f 73 65 72 72 6f 72 2d 31 2e 2a  ests oserror-1.*
0bb0: 20 74 65 73 74 20 66 61 69 6c 75 72 65 73 20 69   test failures i
0bc0: 6e 20 74 68 65 20 75 6e 6c 69 6e 6b 28 29 20 73  n the unlink() s
0bd0: 79 73 74 65 6d 20 63 61 6c 6c 2e 0a 23 0a 69 66  ystem call..#.if
0be0: 63 61 70 61 62 6c 65 20 77 61 6c 20 7b 0a 20 20  capable wal {.  
0bf0: 64 6f 5f 74 65 73 74 20 32 2e 31 2e 31 20 7b 0a  do_test 2.1.1 {.
0c00: 20 20 20 20 73 65 74 20 3a 3a 6c 6f 67 20 5b 6c      set ::log [l
0c10: 69 73 74 5d 0a 20 20 20 20 66 69 6c 65 20 6d 6b  ist].    file mk
0c20: 64 69 72 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a  dir test.db-wal.
0c30: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
0c40: 74 65 73 74 2e 64 62 0a 20 20 20 20 6c 69 73 74  test.db.    list
0c50: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20   [catch {.      
0c60: 73 71 6c 69 74 65 33 20 64 62 68 20 74 65 73 74  sqlite3 dbh test
0c70: 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71  .db.      execsq
0c80: 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  l { SELECT * FRO
0c90: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
0ca0: 7d 20 64 62 68 0a 20 20 20 20 7d 20 6d 73 67 5d  } dbh.    } msg]
0cb0: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 69   $msg.  } {1 {di
0cc0: 73 6b 20 49 2f 4f 20 65 72 72 6f 72 7d 7d 0a 20  sk I/O error}}. 
0cd0: 20 0a 20 20 64 6f 5f 72 65 5f 74 65 73 74 20 32   .  do_re_test 2
0ce0: 2e 31 2e 32 20 7b 20 0a 20 20 20 20 6c 69 6e 64  .1.2 { .    lind
0cf0: 65 78 20 24 3a 3a 6c 6f 67 20 30 20 0a 20 20 7d  ex $::log 0 .  }
0d00: 20 7b 5e 6f 73 5f 75 6e 69 78 2e 63 3a 5c 64 2b   {^os_unix.c:\d+
0d10: 3a 20 5c 28 5c 64 2b 5c 29 20 75 6e 6c 69 6e 6b  : \(\d+\) unlink
0d20: 5c 28 2e 2a 74 65 73 74 2e 64 62 2d 77 61 6c 5c  \(.*test.db-wal\
0d30: 29 20 2d 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ) - }.  do_test 
0d40: 32 2e 31 2e 33 20 7b 20 0a 20 20 20 20 63 61 74  2.1.3 { .    cat
0d50: 63 68 20 7b 20 64 62 68 20 63 6c 6f 73 65 20 7d  ch { dbh close }
0d60: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
0d70: 20 74 65 73 74 2e 64 62 2d 77 61 6c 0a 20 20 7d   test.db-wal.  }
0d80: 20 7b 7d 0a 7d 0a 20 20 0a 0a 74 65 73 74 5f 73   {}.}.  ..test_s
0d90: 79 73 63 61 6c 6c 20 72 65 73 65 74 0a 73 71 6c  yscall reset.sql
0da0: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 74 65  ite3_shutdown.te
0db0: 73 74 5f 73 71 6c 69 74 65 33 5f 6c 6f 67 20 0a  st_sqlite3_log .
0dc0: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
0dd0: 7a 65 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ze.finish_test.