/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 14fec2796c2b6fe431c7823750e8a18a761176d7:


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 69  tcwd() here..#.i
0660: 66 20 7b 21 5b 63 6c 61 6e 67 5f 73 61 6e 69 74  f {![clang_sanit
0670: 69 7a 65 5f 61 64 64 72 65 73 73 5d 7d 20 7b 0a  ize_address]} {.
0680: 20 20 64 6f 5f 74 65 73 74 20 31 2e 31 2e 31 20    do_test 1.1.1 
0690: 7b 0a 20 20 20 20 73 65 74 20 3a 3a 6c 6f 67 20  {.    set ::log 
06a0: 5b 6c 69 73 74 5d 0a 20 20 20 20 6c 69 73 74 20  [list].    list 
06b0: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 66  [catch {.      f
06c0: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
06d0: 20 3c 20 32 30 30 30 7d 20 7b 69 6e 63 72 20 69   < 2000} {incr i
06e0: 7d 20 7b 20 73 71 6c 69 74 65 33 20 64 62 68 5f  } { sqlite3 dbh_
06f0: 24 69 20 74 65 73 74 2e 64 62 20 2d 72 65 61 64  $i test.db -read
0700: 6f 6e 6c 79 20 31 20 7d 0a 20 20 20 20 7d 20 6d  only 1 }.    } m
0710: 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20  sg] $msg.  } {1 
0720: 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  {unable to open 
0730: 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 7d 0a  database file}}.
0740: 20 20 64 6f 5f 74 65 73 74 20 31 2e 31 2e 32 20    do_test 1.1.2 
0750: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 66 6f  {.    catch { fo
0760: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
0770: 3c 20 32 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d  < 2000} {incr i}
0780: 20 7b 20 64 62 68 5f 24 69 20 63 6c 6f 73 65 20   { dbh_$i close 
0790: 7d 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f  } }.  } {1}.  do
07a0: 5f 72 65 5f 74 65 73 74 20 31 2e 31 2e 33 20 7b  _re_test 1.1.3 {
07b0: 20 0a 20 20 20 20 6c 69 6e 64 65 78 20 24 3a 3a   .    lindex $::
07c0: 6c 6f 67 20 30 20 0a 20 20 7d 20 7b 5e 6f 73 5f  log 0 .  } {^os_
07d0: 75 6e 69 78 2e 63 3a 5c 64 2b 3a 20 5c 28 5c 64  unix.c:\d+: \(\d
07e0: 2b 5c 29 20 28 6f 70 65 6e 7c 67 65 74 63 77 64  +\) (open|getcwd
07f0: 29 5c 28 2e 2a 74 65 73 74 2e 64 62 5c 29 20 2d  )\(.*test.db\) -
0800: 20 7d 0a 7d 0a 0a 0a 23 20 54 65 73 74 20 61 20   }.}...# Test a 
0810: 66 61 69 6c 75 72 65 20 69 6e 20 6f 70 65 6e 28  failure in open(
0820: 29 20 64 75 65 20 74 6f 20 74 68 65 20 70 61 74  ) due to the pat
0830: 68 20 62 65 69 6e 67 20 61 20 64 69 72 65 63 74  h being a direct
0840: 6f 72 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 31  ory..#.do_test 1
0850: 2e 32 2e 31 20 7b 0a 20 20 66 69 6c 65 20 6d 6b  .2.1 {.  file mk
0860: 64 69 72 20 64 69 72 2e 64 62 0a 20 20 73 65 74  dir dir.db.  set
0870: 20 3a 3a 6c 6f 67 20 5b 6c 69 73 74 5d 0a 20 20   ::log [list].  
0880: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 20 73 71  list [catch { sq
0890: 6c 69 74 65 33 20 64 62 68 20 64 69 72 2e 64 62  lite3 dbh dir.db
08a0: 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 7b   } msg] $msg.} {
08b0: 31 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  1 {unable to ope
08c0: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d  n database file}
08d0: 7d 0a 0a 64 6f 5f 72 65 5f 74 65 73 74 20 31 2e  }..do_re_test 1.
08e0: 32 2e 32 20 7b 20 6c 69 6e 64 65 78 20 24 3a 3a  2.2 { lindex $::
08f0: 6c 6f 67 20 30 20 7d 20 7b 5e 6f 73 5f 75 6e 69  log 0 } {^os_uni
0900: 78 2e 63 3a 5c 64 2b 3a 20 5c 28 5c 64 2b 5c 29  x.c:\d+: \(\d+\)
0910: 20 6f 70 65 6e 5c 28 2e 2a 64 69 72 2e 64 62 5c   open\(.*dir.db\
0920: 29 20 2d 20 7d 0a 0a 23 20 54 65 73 74 20 61 20  ) - }..# Test a 
0930: 66 61 69 6c 75 72 65 20 69 6e 20 6f 70 65 6e 28  failure in open(
0940: 29 20 64 75 65 20 74 6f 20 74 68 65 20 70 61 74  ) due to the pat
0950: 68 20 6e 6f 74 20 65 78 69 73 74 69 6e 67 2e 0a  h not existing..
0960: 23 0a 64 6f 5f 74 65 73 74 20 31 2e 33 2e 31 20  #.do_test 1.3.1 
0970: 7b 0a 20 20 73 65 74 20 3a 3a 6c 6f 67 20 5b 6c  {.  set ::log [l
0980: 69 73 74 5d 0a 20 20 6c 69 73 74 20 5b 63 61 74  ist].  list [cat
0990: 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 68  ch { sqlite3 dbh
09a0: 20 2f 78 2f 79 2f 7a 2f 74 65 73 74 2e 64 62 20   /x/y/z/test.db 
09b0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 7b 31  } msg] $msg.} {1
09c0: 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e   {unable to open
09d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 7d   database file}}
09e0: 0a 0a 64 6f 5f 72 65 5f 74 65 73 74 20 31 2e 33  ..do_re_test 1.3
09f0: 2e 32 20 7b 20 6c 69 6e 64 65 78 20 24 3a 3a 6c  .2 { lindex $::l
0a00: 6f 67 20 30 20 7d 20 7b 5e 6f 73 5f 75 6e 69 78  og 0 } {^os_unix
0a10: 2e 63 3a 5c 64 2b 3a 20 5c 28 5c 64 2b 5c 29 20  .c:\d+: \(\d+\) 
0a20: 6f 70 65 6e 5c 28 2e 2a 74 65 73 74 2e 64 62 5c  open\(.*test.db\
0a30: 29 20 2d 20 7d 0a 0a 23 20 54 65 73 74 20 61 20  ) - }..# Test a 
0a40: 66 61 69 6c 75 72 65 20 69 6e 20 6f 70 65 6e 28  failure in open(
0a50: 29 20 64 75 65 20 74 6f 20 74 68 65 20 70 61 74  ) due to the pat
0a60: 68 20 6e 6f 74 20 65 78 69 73 74 69 6e 67 2e 0a  h not existing..
0a70: 23 0a 64 6f 5f 74 65 73 74 20 31 2e 34 2e 31 20  #.do_test 1.4.1 
0a80: 7b 0a 20 20 73 65 74 20 3a 3a 6c 6f 67 20 5b 6c  {.  set ::log [l
0a90: 69 73 74 5d 0a 20 20 6c 69 73 74 20 5b 63 61 74  ist].  list [cat
0aa0: 63 68 20 7b 20 73 71 6c 69 74 65 33 20 64 62 68  ch { sqlite3 dbh
0ab0: 20 2f 72 6f 6f 74 2f 74 65 73 74 2e 64 62 20 7d   /root/test.db }
0ac0: 20 6d 73 67 5d 20 24 6d 73 67 0a 7d 20 7b 31 20   msg] $msg.} {1 
0ad0: 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  {unable to open 
0ae0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 7d 7d 0a  database file}}.
0af0: 0a 64 6f 5f 72 65 5f 74 65 73 74 20 31 2e 34 2e  .do_re_test 1.4.
0b00: 32 20 7b 20 6c 69 6e 64 65 78 20 24 3a 3a 6c 6f  2 { lindex $::lo
0b10: 67 20 30 20 7d 20 7b 5e 6f 73 5f 75 6e 69 78 2e  g 0 } {^os_unix.
0b20: 63 3a 5c 64 2a 3a 20 5c 28 5c 64 2b 5c 29 20 6f  c:\d*: \(\d+\) o
0b30: 70 65 6e 5c 28 2e 2a 74 65 73 74 2e 64 62 5c 29  pen\(.*test.db\)
0b40: 20 2d 20 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   - }..#---------
0b50: 2d 2d 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 0a 23 20 54 65 73 74 73 20 6f 73 65 72 72 6f  -.# Tests oserro
0ba0: 72 2d 31 2e 2a 20 74 65 73 74 20 66 61 69 6c 75  r-1.* test failu
0bb0: 72 65 73 20 69 6e 20 74 68 65 20 75 6e 6c 69 6e  res in the unlin
0bc0: 6b 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 2e  k() system call.
0bd0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 77 61 6c  .#.ifcapable wal
0be0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 32 2e 31   {.  do_test 2.1
0bf0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 6c  .1 {.    set ::l
0c00: 6f 67 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 69  og [list].    fi
0c10: 6c 65 20 6d 6b 64 69 72 20 74 65 73 74 2e 64 62  le mkdir test.db
0c20: 2d 77 61 6c 0a 20 20 20 20 66 6f 72 63 65 64 65  -wal.    forcede
0c30: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 20  lete test.db.   
0c40: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20   list [catch {. 
0c50: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 68       sqlite3 dbh
0c60: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 20 20 65   test.db.      e
0c70: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
0c80: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
0c90: 73 74 65 72 20 7d 20 64 62 68 0a 20 20 20 20 7d  ster } dbh.    }
0ca0: 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b   msg] $msg.  } {
0cb0: 31 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f  1 {disk I/O erro
0cc0: 72 7d 7d 0a 20 20 0a 20 20 64 6f 5f 72 65 5f 74  r}}.  .  do_re_t
0cd0: 65 73 74 20 32 2e 31 2e 32 20 7b 20 0a 20 20 20  est 2.1.2 { .   
0ce0: 20 6c 69 6e 64 65 78 20 24 3a 3a 6c 6f 67 20 30   lindex $::log 0
0cf0: 20 0a 20 20 7d 20 7b 5e 6f 73 5f 75 6e 69 78 2e   .  } {^os_unix.
0d00: 63 3a 5c 64 2b 3a 20 5c 28 5c 64 2b 5c 29 20 75  c:\d+: \(\d+\) u
0d10: 6e 6c 69 6e 6b 5c 28 2e 2a 74 65 73 74 2e 64 62  nlink\(.*test.db
0d20: 2d 77 61 6c 5c 29 20 2d 20 7d 0a 20 20 64 6f 5f  -wal\) - }.  do_
0d30: 74 65 73 74 20 32 2e 31 2e 33 20 7b 20 0a 20 20  test 2.1.3 { .  
0d40: 20 20 63 61 74 63 68 20 7b 20 64 62 68 20 63 6c    catch { dbh cl
0d50: 6f 73 65 20 7d 0a 20 20 20 20 66 6f 72 63 65 64  ose }.    forced
0d60: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 2d 77 61  elete test.db-wa
0d70: 6c 0a 20 20 7d 20 7b 7d 0a 7d 0a 20 20 0a 0a 74  l.  } {}.}.  ..t
0d80: 65 73 74 5f 73 79 73 63 61 6c 6c 20 72 65 73 65  est_syscall rese
0d90: 74 0a 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  t.sqlite3_shutdo
0da0: 77 6e 0a 74 65 73 74 5f 73 71 6c 69 74 65 33 5f  wn.test_sqlite3_
0db0: 6c 6f 67 20 0a 73 71 6c 69 74 65 33 5f 69 6e 69  log .sqlite3_ini
0dc0: 74 69 61 6c 69 7a 65 0a 66 69 6e 69 73 68 5f 74  tialize.finish_t
0dd0: 65 73 74 0a                                      est.