System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 6e8ed789bb36bc1dd4100682181f0fb3b1e6fcb1:

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51  .    proc haveSQ
0590: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
05a0: 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nt { name } {..
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76       return [hav
05c0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
05d0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
05e0: 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44  Args [getSQLiteD
05f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65  efineConstantPre
0600: 66 69 78 5d 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20  fix] $name]].. 0610: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 0620: 20 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d getBuildYear {} 0630: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 0640: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 0650: 66 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 f the "year" set 0660: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 ting has been ov 0670: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 0680: 75 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 user (e.g... 0690: 20 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 # on the 06a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 command line). 06b0: 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 This helps cont 06c0: 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 rol exactly whic 06d0: 68 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 h set of.. 06e0: 23 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 # binaries 06f0: 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c we are testing, 0700: 20 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 those produced 0710: 75 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c using the Visual 0720: 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 Studio.. # 0730: 20 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 2005, 200 0740: 38 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 8, 2010, 2012, 2 0750: 30 31 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 013, or 2015 bui 0760: 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 ld systems. To 0770: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 0780: 23 20 20 20 20 20 20 20 74 68 69 73 20 76 61 6c # this val 0790: 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ue via the comma 07a0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 nd line, enter a 07b0: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 07c0: 20 74 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 to one.. # 07d0: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f of the fo 07e0: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 llowing (all on 07f0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 0800: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0810: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0820: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0830: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 "set test_year 0840: 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 2005".. # 0850: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 -file .\p 0860: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 0870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0880: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0890: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 08a0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 08b0: 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 _year 2008".. 08c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 08d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 08e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 08f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 0910: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 0920: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 t test_year 2010 0930: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 0940: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 0950: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 0960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0970: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0980: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0990: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 09a0: 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 r 2012".. # 09b0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 09c0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 09d0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 09e0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 09f0: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0a00: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 0a10: 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 st_year 2013".. 0a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 0a30: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 0a40: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 0a50: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 0a60: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a70: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a80: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a90: 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 15".. # 0aa0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0ab0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0ac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0ad0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0ae0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0af0: 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 lize "unset -noc 0b00: 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 omplain test_yea 0b10: 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 r".. # 0b20: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 0b30: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 0b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 0b50: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 0b60: 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b :test_year] && [ 0b70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
0b80: 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d  :test_year] > 0}
0b90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
0ba0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
0bb0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
0bc0: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 2e  ified test year.
0bd0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
0be0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74  le is not set, t
0bf0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
0c00: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
0c10: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
0c20: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
0c30: 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  t Eagle has been
0c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c50: 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e    compiled again
0c60: 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20  st the CLR v2.0
0c70: 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20  or CLR v4.0...
0c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0c90: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 0ca0: 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c year.. } el 0cb0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 0cc0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 0cd0: 20 49 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 If Eagle has be 0ce0: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 en compiled agai 0cf0: 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 nst the CLR v4.0 0d00: 2c 20 75 73 65 20 22 32 30 31 30 22 20 62 79 0d , use "2010" by. 0d10: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0d20: 20 64 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 default (we cou 0d30: 6c 64 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 ld use "2012", " 0d40: 32 30 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 2013", or "2015" 0d50: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0d60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0d70: 20 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 well) as the t 0d80: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 est year; otherw 0d90: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 ise, use "2008" 0da0: 62 79 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a by default (we.. 0db0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0dc0: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 could use "2005" 0dd0: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0de0: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 well). If anot 0df0: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 her major.. 0e00: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f # [inco 0e10: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f mpatible] versio 0e20: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 n of the CLR is 0e30: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 released, this c 0e40: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 heck will.. 0e50: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20 # have 0e60: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 to be changed. 0e70: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 The default test 0e80: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 year to use for 0e90: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 a.. # 0ea0: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 particular C 0eb0: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 LR version may b 0ec0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 e overridden by 0ed0: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 setting the glob 0ee0: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # 0ef0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 variable "te 0f00: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 st_year_clr_v$X"
0f10: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79  , where "$X" may 0f20: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d [currently] be. 0f30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0f40: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 either "2" or " 0f50: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 4"... #.. 0f60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 0f70: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 eConstraint imag 0f80: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 eRuntime40]} the 0f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 0fa0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 0fb0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0fc0: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 v4] && \.. 0fd0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 0fe0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
0ff0: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d  ear_clr_v4] > 0}
1000: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1020: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1030: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
1040: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20  st year for the
1050: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1060: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1080: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 test_year_clr_v4 1090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 10a0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 10b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10c0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 10d0: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 default test ye 10e0: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 ar for the CLR v 10f0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1110: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 return 2010; # 1120: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c TODO: Good "fall 1130: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a back" default?.. 1140: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1150: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1160: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e if {[in 1170: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1180: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 _year_clr_v2] && 1190: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11a0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 11b0: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c$::test_year_cl
11c0: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20  r_v2] > 0} then
11d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
11e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
11f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
1200: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61  ecified test yea
1210: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  r for the CLR v2
1220: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
1230: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1240: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79  return $::test_y 1250: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 ear_clr_v2.. 1260: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1270: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1280: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1290: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 12a0: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 lt test year for 12b0: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a the CLR v2.0... 12c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 12d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 12e0: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 n 2008; # TODO: 12f0: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 Good "fallback" 1300: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 default?.. 1310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1320: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1330: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 ..... #.. 1340: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 1350: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 cedure is only u 1360: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 sed when adding 1370: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e shimmed test con 1380: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 straints... # 1390: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 13a0: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d ildClrVersion {} 13b0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i 13c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 13d0: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e t_clr] && [strin 13e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 g length$::test
13f0: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20  _clr] > 0} then
1400: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1410: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1420: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1430: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1440: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68   the CLR.  If th
1450: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  is variable..
1460: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
1470: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66  not set, the def
1480: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
1490: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  be based on whet
14a0: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20  her or not..
14b0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
14c0: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
14d0: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
14e0: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20  CLR v2.0 or CLR
14f0: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23  v4.0...        #
1500: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1510: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20   $::test_clr.. 1520: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1540: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1550: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e f Eagle has been 1560: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 compiled agains 1570: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 t the CLR v4.0. 1580: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 If so,.. 1590: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 # just us 15a0: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 e that CLR versi 15b0: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 on. Otherwise, 15c0: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 use the version 15d0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 for the.. 15e0: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e # CLR v2. 15f0: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 0. If another m 1600: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 ajor [incompatib 1610: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 le] version of t 1620: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 he CLR.. 1630: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 # is relea 1640: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 sed, this check 1650: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 will have to be 1660: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 changed. The de 1670: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 fault.. # 1680: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 version v 1690: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 alue for a parti 16a0: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f cular CLR versio 16b0: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 n may be overrid 16c0: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 den.. # 16d0: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 by setting 16e0: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 the global varia 16f0: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 ble "test_clr_v$
1700: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d  X", where "$X" m 1710: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ay.. # 1720: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 [currently] 1730: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 be either "2" or 1740: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 "4"... # 1750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 1760: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d aveConstraint im 1770: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 ageRuntime40]} t 1780: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1790: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 17a0: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d s ::test_clr_v4] 17b0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 17c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 17d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f gth$::test_clr_
17e0: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  v4] > 0} then {.
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1800: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1810: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
1820: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69  ified test versi
1830: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  on for the CLR v
1840: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1850: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1860: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1870: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 clr_v4.. 1880: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 18b0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 se the default t 18c0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 18d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 18e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1900: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 4.0.30319; # TO 1910: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1920: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1930: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1940: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1950: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1960: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 exists ::test_c 1970: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 lr_v2] && \.. 1980: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1990: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
19a0: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  t_clr_v2] > 0} t
19b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
19e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
19f0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1a00: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...
1a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 1a30: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 :test_clr_v2.. 1a40: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1a70: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 OTE: Use the def 1a80: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f ault test versio 1a90: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1aa0: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1ab0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1ac0: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 return 2.0.50727 1ad0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 1ae0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 1af0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 1b00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b20: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 1b30: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 Years {} {.. 1b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b50: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 E: See if the li 1b60: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1b70: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 1b80: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 dden by the user 1b90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ba0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d (e.g. on the com 1bb0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 mand line)... 1bc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1bd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1be0: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c est_years] && [l 1bf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
1c00: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ears] > 0} then
1c10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1c30: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1c40: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61  list of test yea
1c50: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rs...        #..
1c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $1c70: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 ::test_years.. 1c80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ca0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1cb0: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 default list of 1cc0: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 test years (i.e 1cd0: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 . all)... 1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1cf0: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 rn [list 2005 20 1d00: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 08 2010 2012 201 1d10: 33 20 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 3 2015].. } 1d20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1d30: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 proc getBuildNet 1d40: 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 Fx {} {.. # 1d50: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1d60: 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 See if the test 1d70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 .NET Framework s 1d80: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 1d90: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 overridden by.. 1da0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1db0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 1dc0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 1dd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1de0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 1df0: 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 ts ::test_net_fx 1e00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1e20: 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d$::test_net_fx]
1e30: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1e40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e50: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1e60: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20   specified test
1e70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  .NET Framework..
1e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e90: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 1ea0: 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 st_net_fx.. 1eb0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1ec0: 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 set year [get 1ed0: 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 BuildYear].. 1ee0: 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72 4e set yearVarN 1ef0: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 1f00: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 ::test_net_fx_$
1f10: 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  year]....
1f20: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1f30: 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20  s $yearVarName] 1f40: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1f50: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1f60: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1f70: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  me]] > 0} then {
1f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1fa0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
1fb0: 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61  ed test .NET Fra
1fc0: 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e  mework, based on
1fd0: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20   the build..
1fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 65        #       ye
1ff0: 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ar...          #
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
2010: 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 72  rn [set $yearVar 2020: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d Name].. } 2030: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2040: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2050: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 2060: 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e to the "well kn 2070: 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 own" .NET Framew 2080: 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 ork version that 2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 20a0: 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 is most clos 20b0: 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 ely associated w 20c0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 ith a particular 20d0: 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 version of.. 20e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 56 # V 20f0: 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 isual Studio... 2100: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2110: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 switch -ex 2120: 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a act --$year {..
2130: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 35              2005
2140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2150: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30    return netFx20
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30  .            200
2180: 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  8 {..
2190: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33     return netFx3
21a0: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  5..            }
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30  ..            20
21c0: 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  10 {..
21d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78      return netFx
21e0: 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..
21f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32  }..            2
2200: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  012 {..
2210: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46       return netF
2220: 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..
2230: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2240: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20  2013 {..
2250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74        return net
2260: 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f  Fx451; # TODO: O
2270: 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20  r "netFx452"?..
2280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2290: 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 7b            2015 {
22a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b0: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20  return netFx46;
22c0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
22d0: 78 34 36 31 22 3f 0d 0a 20 20 20 20 20 20 20 20  x461"?..
22e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
22f0: 20 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20     default {..
2300: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2310: 72 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f  rn netFx35; # TO
2320: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
2330: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2360: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
2370: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20    }.....    #..
2380: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
2390: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
23a0: 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   return non-zero
23b0: 20 69 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72   if the configur
23c0: 65 64 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20  ed test..    #
23d0: 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73       platform is
23e0: 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65   most likely the
23f0: 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69   default for thi
2400: 73 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20  s machine...
2410: 23 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65  #..    proc isDe
2420: 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f  faultBuildPlatfo
2430: 72 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 66 61  rm { {verbose fa
2440: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
2450: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2460: 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36   Running on WoW6
2470: 34 20 69 73 20 6e 65 76 65 72 20 74 68 65 20 64  4 is never the d
2480: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e  efault platform.
2490: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
24a0: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57   if {[isRunningW
24b0: 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  oW64]} then {..
24c0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb 24d0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 24e0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
24f0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2510: 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e  --- detected non
2520: 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72  -default platfor
2530: 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20  m (WoW64)\n"..
2540: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2550: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
2560: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2570: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2580: 20 54 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64   This has a good
2590: 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67   chance of being
25a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61   the default pla
25b0: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  tform...      #.
25c0: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb 25d0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 25e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
25f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  st_channel "----
2600: 20 64 65 74 65 63 74 65 64 20 64 65 66 61 75 6c   detected defaul
2610: 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20  t platform\n"..
2620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
2630: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d  turn true..    }
2640: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2650: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b  tBuildPlatform {
2660: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
2670: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
2680: 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66  sts ::test_platf
2690: 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  orm] && \..
26a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
26b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74  gth $::test_plat 26c0: 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26d0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 26e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 26f0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 2700: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 test platform. 2710: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 2720: 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 is not set,.. 2730: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2740: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 2750: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 2760: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 2770: 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 2780: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2790: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 eturn [expr {$na
27a0: 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70  tive ? $::test_p 27b0: 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a latform : ""}].. 27c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 27d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 27e0: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 est_machine] && 27f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2800: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2810: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30  est_machine] > 0
2820: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2830: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2840: 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20  OTE: For native
2850: 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74  builds, return t
2860: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
2870: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
2880: 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
2890: 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 63 68     the test mach
28a0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ine architecture
28b0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74  ; otherwise, ret
28c0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20  urn an empty..
28d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
28e0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
28f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2900: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
2910: 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d      $native ? [m 2920: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 2930: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65$::test_machine
2940: 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20  ] : ""..
2950: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
2960: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2970: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
2980: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
2990: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
29a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
29b0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
29c0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
29d0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
29e0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
29f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2a00: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2a10: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
2a20: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2a30: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2a40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2a50: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  urn [expr {..
2a60: 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f         $native ? 2a70: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 2a80: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
2a90: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20  orm(machine)] :
2aa0: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  ""..        }]..
2ab0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2ac0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ad0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61     # NOTE: No ma
2ae0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2af0: 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  re is available,
2b00: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2b10: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2b20: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20    #       It is
2b30: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74  important to ret
2b40: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
2b50: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65  ing here because
2b60: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2b70: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20        result of
2b80: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  this procedure m
2b90: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ay be used with
2ba0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20  [file join]...
2bb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2bc0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
2bd0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2be0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2bf0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d  Configuration {}
2c00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2c10: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2c20: 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61  f the "configura
2c30: 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61  tion" setting ha
2c40: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2c50: 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  n by the..
2c60: 23 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e  #       user (e.
2c70: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2c80: 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68  d line).  This h
2c90: 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61  elps control exa
2ca0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ctly..      #
2cb0: 20 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66      which set of
2cc0: 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65   binaries we are
2cd0: 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74   testing (i.e. t
2ce0: 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68  hose built in th
2cf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
2d00: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
2d10: 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66  ease" build conf
2d20: 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f  igurations).  To
2d30: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a   override this..
2d40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
2d50: 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  lue via the comm
2d60: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20  and line, enter
2d70: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61  a command simila
2d80: 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20  r to one of..
2d90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
2da0: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e  ollowing (all on
2db0: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
2dc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2dd0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2de0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2df0: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e00: 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22  iguration Debug"
2e10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e20: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
2e30: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
2e40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2e50: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2e60: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e70: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e80: 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73  iguration Releas
2e90: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
2ea0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2eb0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2ec0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ed0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ee0: 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74  .exe -file .\pat
2ef0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d  h\to\all.eagle -
2f00: 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23  preTest..      #
2f10: 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20           "unset
2f20: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74  -nocomplain test
2f30: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d  _configuration".
2f40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2f60: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
2f70: 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  ation] && \..
2f80: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2f90: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f  ength $::test_co 2fa0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 nfiguration] > 0 2fb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fd0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 2fe0: 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 cified test conf 2ff0: 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 iguration. The 3000: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 default value us 3010: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 3020: 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 for this var 3030: 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c iable is typical 3040: 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 ly "Release", as 3050: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3060: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3070: 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d suite itself.. 3080: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3090: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
30a0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
30b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
30c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72       # NOTE: Nor
30e0: 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e  mally, we will n
30f0: 65 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61  ever hit this ca
3100: 73 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76  se because the v
3110: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..
3120: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
3130: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
3140: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61  variable is alwa
3150: 79 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  ys set by the te
3160: 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20  st suite..
3170: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66    #       itself
3180: 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61  ; however, it ca
3190: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden
31a0: 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20  using the unset
31b0: 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20  command..
31c0: 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68   #       from th
31d0: 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f  e -preTest optio
31e0: 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75  n to the test su
31f0: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
3200: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3210: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor 3220: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 m(configuration) 3230: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3240: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3250: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 3260: 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ions {} {.. 3270: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3280: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 : See if the lis 3290: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 32a0: 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 urations has bee 32b0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d n overridden by. 32c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 32d0: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e he user (e.g. on 32e0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 32f0: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e)... #.. 3300: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3310: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 ists ::test_conf 3320: 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c igurations] && \ 3330: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle 3340: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3350: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30  figurations] > 0
3360: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3370: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3380: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
3390: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74  cified list of t
33a0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
33b0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
33c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $33d0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 33e0: 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 tions.. } e 33f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 3400: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3410: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c : Use the defaul 3420: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 t list of test c 3430: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 3440: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3450: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 3460: 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a Debug Release].. 3470: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3480: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 3490: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 34a0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 34b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 34c0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 igure out the ba 34d0: 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 se directory whe 34e0: 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 re all the build 34f0: 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 s should be.. 3500: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 3510: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 3520: 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 e the directory 3530: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 that contains th 3540: 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 e actual.. 3550: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 # build ou 3560: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 tput directory ( 3570: 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 e.g. parent of " 3580: 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d bin")... #. 3590: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 35a0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 35b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 35c0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35d0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35e0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
35f0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
3600: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
3610: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3620: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
3630: 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 64  the build base d
3640: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
3650: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
3660: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3670: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
3680: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
3690: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
36a0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62  eturn $::build_b 36b0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ase_directory.. 36c0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 36d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 36e0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 36f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3700: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3710: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
3720: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
3730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74      # NOTE: Next
3750: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68  , fallback to th
3760: 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69  e grandparent di
3770: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
3780: 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ne..        #
3790: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74      containing t
37a0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
37b0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
37c0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
37d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
37e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
37f0: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
3800: 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  name $::common_d 3810: 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 irectory]].. 3820: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3830: 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d o exists ::path] 3840: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 3850: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 3860: 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68$::path] > 0} th
3870: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3880: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3890: 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61   Finally, fallba
38a0: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ck to the parent
38b0: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68   directory of th
38c0: 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20  e EagleTest..
38d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 74       #       pat
38e0: 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 73  h.  The EagleTes
38f0: 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e  t package guaran
3900: 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 76  tees that this v
3910: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
3920: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65   #       will be
3930: 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 65   set to the dire
3940: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
3950: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 20   the first file
3960: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
3970: 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 20      execute the
3980: 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65  [runTestPrologue
3990: 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  ] script library
39a0: 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
39b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
39c0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72  return [file dir
39d0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20  name $::path].. 39e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 39f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3a00: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 # NOTE: No pat 3a10: 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 h is available, 3a20: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3a30: 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f string. This po 3a40: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 int.. # 3a50: 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 should not 3a60: 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 be reached... 3a70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3a80: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 3a90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 3aa0: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 3ab0: 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 TestDataPath {} 3ac0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3ad0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 3ae0: 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74 6f out the directo 3af0: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 ry where all the 3b00: 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 test data files 3b10: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 should.. # 3b20: 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 be locate 3b30: 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 d. This should 3b40: 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64 69 be the "data" di 3b50: 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 rectory beneath 3b60: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 3b70: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e directory con 3b80: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 taining the actu 3b90: 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73 2e al test scripts. 3ba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3bb0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 3bc0: 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d in$::path data]
3bd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3be0: 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f  proc isRunningWo
3bf0: 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  W64 {} {..
3c00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3c10: 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75   For now, just u
3c20: 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  se the existing
3c30: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
3c40: 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20  for detecting..
3c50: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 57       #       a W
3c60: 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20  oW64 process...
3c70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3c80: 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72  turn [haveConstr
3c90: 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20  aint wow64]..
3ca0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3cb0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
3cc0: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
3cd0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
3ce0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3cf0: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d  # NOTE: First, m
3d00: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 73  ake sure the tes
3d10: 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 72  t suite infrastr
3d20: 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65  ucture is allowe
3d30: 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  d to..      #
3d40: 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 65      use the [exe
3d50: 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  c] command...
3d60: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
3d70: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
3d80: 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69  no(exec)] && ![i
3d90: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
3da0: 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e  corFlags)]} then
3db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3dc0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
3dd0: 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  f the location o
3de0: 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72  f CorFlags is pr
3df0: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76  esent in the env
3e00: 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20  ironment,..
3e10: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69     #       use i
3e20: 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 73  t; otherwise ass
3e30: 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 65  ume it is in the
3e40: 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20   PATH...
3e50: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
3e60: 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d  orFlags [expr {.
3e70: 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f  .          [info
3e80: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f   exists ::env(Co
3e90: 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e  rFlags)] ? $::en 3ea0: 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 v(CorFlags) : "C 3eb0: 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 orFlags".. 3ec0: 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }].... 3ed0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3ee0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 E: Attempt to ex 3ef0: 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f ecute CorFlags o 3f00: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 n the specified 3f10: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 file... # 3f20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 3f30: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 3f40: 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c exec --$corFl
3f50: 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ags [file native
3f60: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  name $fileName]. 3f70: 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d . } exec] 3f80: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 3f90: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 3fa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 3fb0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 3fc0: 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 r caller, attemp 3fd0: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 3fe0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 3ff0: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 platform f 4000: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 or the specified 4010: 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a file as well... 4020: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4030: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4040: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
4050: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
4060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
4080: 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c  TE: Store the pl
4090: 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61  atform in the na
40a0: 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20  med variable in
40b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
40c0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
40d0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
40e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
4100: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61  r 1 $varName pla 4110: 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 tform.... 4120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4130: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4140: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4150: 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 he PE line from 4160: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 the captured.. 4170: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4180: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 4190: 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 is value is "PE3 41a0: 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 2" or "PE32+", t 41b0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 41c0: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 41d0: 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 file is 32-bit 41e0: 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 or 64-bit, respe 41f0: 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 ctively;.. 4200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 4210: 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 herwise, its typ 4220: 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 e is unknown... 4230: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4240: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 4250: 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 ttern {^PE 4260: 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b : (PE32|PE32\+ 4270: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
4280: 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78        if {[regex
4290: 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74  p -line -- $patt 42a0: 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 ern$exec dummy
42b0: 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  pe32]} then {..
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
42e0: 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74  HACK: This [swit
42f0: 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74  ch] assumes that
4300: 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 62   32-bit executab
4310: 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  les are..
4320: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
4330: 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 68  lways x86 and th
4340: 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 74  at 64-bit execut
4350: 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73  ables are always
4360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4370: 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20  #       x64...
4380: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
43a0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70  tch -exact -- $p 43b0: 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e32 {.. 43c0: 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 PE32 {.. 43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43e0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 set platform Wi 43f0: 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n32.. 4400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4410: 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d PE32+ {. 4420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 4430: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4440: 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x64.. 4450: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4460: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default 4470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4480: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 4490: 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 m "".. 44a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 44b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 44c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 44e0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 t platform "".. 44f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 4500: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4510: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4520: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4530: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4540: 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 he ILONLY line f 4550: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 rom the captured 4560: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 4570: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4580: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 this value is ze 4590: 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 ro, the specifie 45a0: 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 d file must.. 45b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 45c0: 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 e a mixed-mode a 45d0: 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 ssembly; otherwi 45e0: 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 se, it contains 45f0: 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only.. 4600: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 4610: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 components... 4620: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4630: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4640: 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 {^ILONLY : (0 4650: 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 |1)\s+$}....
4660: 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65        if {![rege
4670: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74  xp -line -- $pat 4680: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 tern$exec dummy
4690: 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b   ilOnly]} then {
46a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
46b0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
46d0: 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c       if {!$ilOnl 46e0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 46f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 4700: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 4710: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 4720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 4730: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 4740: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 4750: 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 cannot use [exec 4760: 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f ] or execution o 4770: 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 f CorFlags.. 4780: 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 # failed 4790: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d , return false.. 47a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 47c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 47d0: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 47e0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 47f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4800: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4810: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4820: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 4830: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 4840: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 4850: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 4860: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 4870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4880: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 4890: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 48a0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 48b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 48c0: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
48d0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
48e0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
48f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4900: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4910: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
4920: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
4930: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4940: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
4950: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
4960: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
4970: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $4990: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 49a0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 49b0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 49c0: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 49d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 49e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 49f0: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f erwise, on Windo 4a00: 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 ws, always use t 4a10: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 he default file 4a20: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 name.. # 4a30: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 "sqlite3.d 4a40: 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ll"... #. 4a50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4a60: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 4a70: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 4a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4a90: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4aa0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 4ab0: 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 both the generi 4ac0: 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d c POSIX file nam 4ad0: 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 e and the.. 4ae0: 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f # Mac O 4af0: 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 S X file name, s 4b00: 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 ince we do not c 4b10: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e urrently have an 4b20: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 4b30: 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 way to de 4b40: 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 tect which of th 4b50: 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 ose platforms we 4b60: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e are running on. 4b70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4b80: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 4b90: 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c t libsqlite3.dyl 4ba0: 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f ib libsqlite3.so 4bb0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 4bc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4bd0: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 4be0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4bf0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4c00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4c10: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4c20: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 4c30: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 4c40: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4c50: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4c60: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4c70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4c80: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4c90: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 4ca0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 4cb0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 4cc0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
4cd0: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
4ce0: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
4cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4d00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4d10: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
4d20: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
4d30: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
4d40: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
4d50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4d60: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
4d70: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
4d80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4d90: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 4da0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 4db0: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4dc0: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4dd0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4de0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4df0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4e00: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4e10: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4e20: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4e40: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 4e50: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 4e60: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4e70: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 4e80: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 4e90: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 4ea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4eb0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ec0: 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 , return both th 4ed0: 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 e generic POSIX 4ee0: 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 file name and th 4ef0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 4f00: 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 Mac OS X file 4f10: 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 name, since we 4f20: 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 do not currently 4f30: 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 have an easy.. 4f40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 4f50: 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 ay to detect whi 4f60: 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 ch of those plat 4f70: 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e forms we are run 4f80: 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 ning on... 4f90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4fa0: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 4fb0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 4fc0: 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 b libSQLite.Inte 4fd0: 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d rop.so].. } 4fe0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 4ff0: 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 proc getCoreExte 5000: 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e nsionBinaryFileN 5010: 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 ame { {default " 5020: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 5030: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 t fileName [getC 5040: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d oreBinaryFileNam 5050: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5060: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5070: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
5080: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5090: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 50a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 50b0: 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 rn$default..
50c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
50d0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
50e0: 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74   { native direct
50f0: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
5100: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5110: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
5120: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
5130: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
5140: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
5150: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
5160: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
5170: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
5180: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
5190: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
51a0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
51b0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
51c0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
51d0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
51e0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
51f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5200: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
5210: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
5220: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
5230: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5240: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5250: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5260: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5270: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 5280: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 5290: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 52a0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 52b0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
52c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
52d0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
52e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
52f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5300: 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
5310: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69  tically detect i
5320: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  f the primary as
5330: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
5340: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61        contains a
5350: 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  ny native compon
5360: 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61  ents, if necessa
5370: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5380: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
5390: 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20  length $native] 53a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 53b0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 53c0: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
53d0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
53e0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
53f0: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5400: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ame..        }..
5410: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
5420: 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64  tive [isMixedMod
5430: 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 5440: 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 ame$varName]..
5450: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5460: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5470: 20 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   If the primary
5480: 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f  assembly also co
5490: 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76  ntains the nativ
54a0: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20  e components,..
54b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20       #       we
54c0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
54d0: 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20  we need...
54e0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 54f0: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5500: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 5510: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5520: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5530: 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 OTE: What is the 5540: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 5550: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5560: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5570: 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 5580: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 5590: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
55a0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75  orm(machine) tru
55b0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
55c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
55d0: 74 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72  t is the platfor
55e0: 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69  m for this machi
55f0: 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne?..      #..
5600: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
5610: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
5620: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf 5630: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d orm(machine)]... 5640: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5650: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 5660: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 5670: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 d file name for 5680: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 5690: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 56a0: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 containing t 56b0: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 56c0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d QLite native com 56d0: 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 ponents. If thi 56e0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 56f0: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 file exists, we 5700: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 should have eve 5710: 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e rything we need. 5720: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5730: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 5740: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f eOnly [getIntero 5750: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 5760: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 5770: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5780: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5790: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
57a0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
57b0: 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 57c0: 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ure$fileNameOnl
57d0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
57e0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
57f0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 5800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 5810: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5830: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5840: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5850: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5860: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5870: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69     $platform$fi
5880: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a  leNameOnly]]....
5890: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
58a0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 58b0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 58c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 58d0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 58e0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 58f0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 5900: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 5910: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a n$directory \..
5920: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 5930: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5940: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5950: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5960: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5980: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
5990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
59a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
59b0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
59c0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
59d0: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
59e0: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
59f0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
5a00: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
5a10: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
5a20: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
5a30: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
5a40: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
5a50: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
5a60: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
5a70: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
5a80: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
5a90: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5aa0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5ab0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5ac0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5ad0: 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
5ae0: 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61  itecture $fileNa 5af0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5b00: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5b10: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5b20: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5b30: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5b40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5b50: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5b60: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5b70: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5b80: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5b90: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
5ba0: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 5bb0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5bc0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5bd0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5bf0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5c00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5c10: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5c20: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5c30: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5c40: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5c50: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5c70: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5c80: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5c90: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 5ca0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 5cb0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 5cc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5cd0: 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 OTE: One or more 5ce0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5cf0: 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 ts needed by Sys 5d00: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. 5d10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 5d20: 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 re missing... 5d30: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5d40: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 5d50: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5d60: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 eleaseAvailable 5d70: 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 { directory {var 5d80: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 5d90: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 5da0: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
5db0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5dc0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 5dd0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d arName$varName.
5de0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5df0: 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c    return [isBuil
5e00: 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64  dAvailable "" $d 5e10: 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d irectory$varNam
5e20: 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  e]..    }.....
5e30: 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64    proc joinBuild
5e40: 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69  Directory { nati
5e50: 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61  ve path year pla
5e60: 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74  tform configurat
5e70: 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
5e80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5e90: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74  Figure out and t
5ea0: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66  hen return the f
5eb0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
5ec0: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ath to the build
5ed0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5ee0: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20  directory based
5ef0: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d  on all the argum
5f00: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79  ents provided by
5f10: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
5f20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
5f30: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b  {$native} then { 5f40: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 5f50: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 [file join$pat
5f60: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61  h bin $year$pla
5f70: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura 5f80: 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 tion].. } e 5f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 5fa0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 5fb0: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 5fc0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
5fd0: 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bin]..      }..
5fe0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
5ff0: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74  c getBuildDirect
6000: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
6010: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6020: 20 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74   See if the "nat
6030: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
6040: 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74  ion has been set
6050: 2e 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68  .  If so, use th
6060: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
6070: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
6080: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
6090: 73 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74  sembly (a.k.a. t
60a0: 68 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f  he native intero
60b0: 70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  p..      #
60c0: 20 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20   assembly).  To
60d0: 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69  enable this opti
60e0: 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  on via the comma
60f0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61  nd line, enter a
6100: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6110: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
6120: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  to one of the fo
6130: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20  llowing (all on
6140: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20  one line):..
6150: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
6160: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
6170: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72  e -initialize -r
6180: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
6190: 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ive..      #
61a0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
61b0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
61c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
61d0: 20 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65         To enable
61e0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61   this option via
61f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
6200: 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22  e prior to the "
6210: 62 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20  beta 16"..
6220: 23 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20  #       release
6230: 6f 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f  of Eagle, the fo
6240: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  llowing command
6250: 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73  must be used ins
6260: 74 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20  tead..      #
6270: 20 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e      (also all on
6280: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
6290: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
62a0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
62b0: 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d  xe -initialize -
62c0: 70 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a  postInitialize..
62d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
62e0: 22 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  "object invoke I
62f0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
6300: 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f  tive AddRuntimeO
6310: 70 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20  ption native"..
6320: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
6330: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
6340: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
6350: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
6360: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c  fo exists ::buil
6370: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  d_directory] &&
6380: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
6390: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62  ring length $::b 63a0: 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 uild_directory] 63b0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 63c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 63d0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 63e0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 63f0: 64 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 d directory has 6400: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 6410: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6420: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 6430: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 it verbatim... 6440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6450: 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c return$::buil
6460: 64 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  d_directory..
6470: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
6480: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6490: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22  # NOTE: If the "
64a0: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20  native" runtime
64b0: 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74  option is set, t
64c0: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
64d0: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..
64e0: 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67  #       is being
64f0: 20 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61   tested.  In tha
6500: 74 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68  t case, the path
6510: 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69   to the build di
6520: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..
6530: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f   #       will co
6540: 6e 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f  ntain the platfo
6550: 72 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20  rm name and all
6560: 74 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64  the binaries und
6570: 65 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20  er test..
6580: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
6590: 62 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  be present in th
65a0: 61 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49  at directory.  I
65b0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
65c0: 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20  untime..
65d0: 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69  #       option i
65e0: 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62  s not set, the b
65f0: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77  uild directory w
6600: 69 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65  ill be considere
6610: 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  d to be..
6620: 20 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f   #       "platfo
6630: 72 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74  rm-neutral", wit
6640: 68 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78  h the notable ex
6650: 63 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e  ception of any n
6660: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23  ative..        #
6670: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
6680: 28 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e  (e.g. "SQLite.In
6690: 74 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69  terop.dll") copi
66a0: 65 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20  ed there during
66b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
66c0: 20 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65       build proce
66d0: 73 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74  ss itself.  If t
66e0: 68 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73  he build process
66f0: 20 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f   somehow does no
6700: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
6710: 20 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69     copy the nati
6720: 76 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20  ve assembly for
6730: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d  this platform, m
6740: 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73  ost of the tests
6750: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6760: 20 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77    in the suite w
6770: 69 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b  ill simply be sk
6780: 69 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c  ipped.  Generall
6790: 79 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72  y speaking, ther
67a0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
67b0: 20 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20     are two ways
67c0: 74 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e  to build the bin
67d0: 61 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61  aries when prepa
67e0: 72 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d  ring to run the.
67f0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6800: 20 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20   test suite:..
6810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6820: 20 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c   #       1. Buil
6830: 64 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d  d the separate m
6840: 61 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76  anaged and nativ
6850: 65 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69  e assemblies usi
6860: 6e 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20  ng some..
6870: 20 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d   #          comm
6880: 61 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a  ands similar to:
6890: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
68a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
68b0: 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66  build.bat ${Conf 68c0: 69 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 iguration}Manage 68d0: 64 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d dOnly${Platform
68e0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  }..        #
68f0: 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20        build.bat
6900: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 6910: 4e 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 NativeOnly${Pla
6920: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20  tform}..
6930: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  #..        #
6940: 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f        Where ${Co 6950: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 nfiguration} is 6960: 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f either "Debug" o 6970: 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d r "Release" and. 6980: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6990: 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20${Platform}
69a0: 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32  is either "Win32
69b0: 22 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20  " or "x64"...
69c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69d0: 23 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64  #       2. Build
69e0: 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
69f0: 61 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61  assembly using a
6a00: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72   command similar
6a10: 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d   to:..        #.
6a20: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6a30: 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b      build.bat ${ 6a40: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 Configuration}$
6a50: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20  {Platform}..
6a60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6a70: 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20            Where
6a80: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 6a90: 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 is either "Debu 6aa0: 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 g" or "Release" 6ab0: 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 6ac0: 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f${Platfo
6ad0: 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57  rm} is either "W
6ae0: 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20  in32" or "x64".
6af0: 20 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   If this command
6b00: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20   is..        #
6b10: 20 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61          used, va
6b20: 72 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74  rious tests that
6b30: 20 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d   require supplem
6b40: 65 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a  entary managed..
6b50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6b60: 20 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65     assemblies (e
6b70: 2e 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65  .g. LINQ) may be
6b80: 20 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20   skipped unless
6b90: 74 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a  those binaries..
6ba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6bb0: 20 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e     are subsequen
6bc0: 74 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20  tly copied into
6bd0: 74 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65  the correct dire
6be0: 63 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a  ctory (i.e. by..
6bf0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c00: 20 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74     "test_all.bat
6c10: 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ")...        #..
6c20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c30: 4e 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66  Note that all of
6c40: 20 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61   the build comma
6c50: 6e 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64  nds above will d
6c60: 65 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d  efault to using.
6c70: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6c80: 20 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73   the latest vers
6c90: 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61  ion of MSBuild a
6ca0: 76 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65  vailable and the
6cb0: 20 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79   "test_year" may
6cc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6cd0: 20 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a    need to be adj
6ce0: 75 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c  usted accordingl
6cf0: 79 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75  y to actually ru
6d00: 6e 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  n the test suite
6d10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
6d20: 20 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20     Refer to the
6d30: 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74  comments in [get
6d40: 42 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d  BuildYear] for m
6d50: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ore information
6d60: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  on..        #
6d70: 20 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74      how to set t
6d80: 68 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20  his variable...
6d90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6da0: 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 61    set native [ha
6db0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
6dc0: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  ative]....
6dd0: 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75    return [joinBu
6de0: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61  ildDirectory $na 6df0: 74 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42 61 tive [getBuildBa 6e00: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a seDirectory] \.. 6e10: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 6e20: 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 BuildYear] [getB 6e30: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 uildPlatform$na
6e40: 74 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 43  tive] [getBuildC
6e50: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a  onfiguration]]..
6e60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
6e70: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52  ...    proc getR
6e80: 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d  eleaseVersion {}
6e90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6ea0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
6eb0: 65 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73  e out the releas
6ec0: 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73  e version for us
6ed0: 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64  e with the build
6ee0: 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   directory..
6ef0: 20 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63    #       when c
6f00: 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69  hecking for avai
6f10: 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d  lable releases..
6f20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6f30: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
6f40: 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69   ::release_versi
6f50: 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  on] && \..
6f60: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
6f70: 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65  th $::release_ve 6f80: 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e rsion] > 0} then 6f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6fa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 6fb0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 he release versi 6fc0: 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 on has been over 6fd0: 72 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 ridden; therefor 6fe0: 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 e, use it.. 6ff0: 20 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 # verba 7000: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 7010: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7020: 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69$::release_versi
7030: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
7040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
7050: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
7060: 6f 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f  o release versio
7070: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  n is available,
7080: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty
7090: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
70a0: 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69   #       It is i
70b0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75  mportant to retu
70c0: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  rn an empty stri
70d0: 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20  ng here because
70e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
70f0: 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74       result of t
7100: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61  his procedure ma
7110: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b  y be used with [
7120: 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20  file join]...
7130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7140: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20  return ""..
7150: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
7160: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46    proc getBuildF
7170: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61  ileName { fileNa
7180: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
7190: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
71a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
71b0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69  urns the specifi
71c0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  ed file name as
71d0: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74  if it were locat
71e0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
71f0: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64   #       build d
7200: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
7210: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
7220: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
7230: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
7240: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
7250: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
7260: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
7270: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7280: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69    set result [fi
7290: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
72a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
72b0: 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44   join [getBuildD
72c0: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf 72d0: 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 orm [file tail$
72e0: 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20  fileName]]]....
72f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7300: 48 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69  HACK: When runni
7310: 6e 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73  ng on WoW64, ass
7320: 75 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65  ume the test exe
7330: 63 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65  cutables are pre
7340: 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  sent..      #
7350: 20 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32      with the "32
7360: 22 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d  " suffix on them
7370: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7380: 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67    if {[isRunning
7390: 57 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20  WoW64] && [file
73a0: 65 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c  extension $resul 73b0: 74 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 t] eq ".exe"} th 73c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 73d0: 74 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 t result [append 73e0: 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e Args [file rootn 73f0: 61 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e ame$result] 32.
7400: 65 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  exe]..      }...
7410: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 7420: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 7430: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 . proc getExt 7440: 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b ernalDirectory { 7450: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 7460: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 7470: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 7480: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 7490: 20 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 where the exter 74a0: 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 nal binary.. 74b0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 # files 74c0: 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 are located... 74d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 74e0: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 74f0: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 7500: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 7510: 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d [info binary]]] 7520: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 7530: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 proc getBinaryD 7540: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 7550: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7560: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 7570: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 7580: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 7590: 20 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 the test applic 75a0: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 ation.. # 75b0: 20 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 itself (i.e 75c0: 2e 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c . the Eagle shel 75d0: 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 l) is located. 75e0: 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 This will be use 75f0: 64 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 d as.. # 7600: 20 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 the destinat 7610: 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 ion for the copi 7620: 65 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ed System.Data.S 7630: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 QLite native and 7640: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7650: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 managed assembli 7660: 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 es (i.e. because 7670: 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 this is one of 7680: 74 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a the few places.. 7690: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 76a0: 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c ere the CLR will 76b0: 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 actually find a 76c0: 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f nd load them pro 76d0: 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 perly)... # 76e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 76f0: 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 o exists ::binar 7700: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 y_directory] && 7710: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 7720: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 ring length$::b
7730: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d  inary_directory]
7740: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
7750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7760: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
7770: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e  ation of the bin
7780: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
7790: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
77a0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
77b0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
77c0: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d  se it verbatim..
77d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
77e0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69      return $::bi 77f0: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a nary_directory.. 7800: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 7810: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 7820: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 info binary].. 7830: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 7840: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 . proc getExt 7850: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 ernalFileName { 7860: 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 fileName } {.. 7870: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7880: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 OTE: Returns the 7890: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file 78a0: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 name as if it we 78b0: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 re located in th 78c0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 78d0: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 directory conta 78e0: 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e ining the extern 78f0: 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 al binaries... 7900: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 7910: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 7920: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 7930: 5b 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 [getExternalDire 7940: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 ctory]$fileName
7950: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
7960: 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79    proc getBinary
7970: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e  FileName { fileN
7980: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
7990: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
79a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
79b0: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66  turns the specif
79c0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  ied file name as
79d0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61   if it were loca
79e0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
79f0: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
7a00: 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63   directory, disc
7a10: 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63  arding any direc
7a20: 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tory information
7a30: 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20   present..
7a40: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66  #       in the f
7a50: 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76  ile name as prov
7a60: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
7a70: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
7a80: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
7a90: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
7aa0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
7ab0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69  oin [getBinaryDi
7ac0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f  rectory] $platfo 7ad0: 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 rm [file tail$f
7ae0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20  ileName]]]..
7af0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
7b00: 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65  etCoreBinaryFile
7b10: 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d  Name { {platform
7b20: 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 22   ""} {standard "
7b30: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
7b40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
7b50: 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20  eturns the full
7b60: 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c  path for the fil
7b70: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
7b80: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..
7b90: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
7ba0: 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20  ve library code
7bb0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
7bc0: 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b  m.  First, check
7bd0: 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20   and see if..
7be0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
7bf0: 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76  QLite core nativ
7c00: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
7c10: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65  ready been loade
7c20: 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20  d.  Next,..
7c30: 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63   #       fallbac
7c40: 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75  k to what the fu
7c50: 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62  ll path should b
7c60: 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  e, based on whet
7c70: 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23  her the..      #
7c80: 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64         mixed-mod
7c90: 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65  e assembly is be
7ca0: 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65  ing used and the
7cb0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72   name of the cur
7cc0: 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  rent..      #
7cd0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20      platform...
7ce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7cf0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
7d00: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
7d10: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
7d20: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
7d30: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
7d40: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
7d50: 76 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74  veMethods _SQLit
7d60: 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c  eNativeModuleFil
7d70: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66  eName..      } f
7d80: 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26  ileName] == 0 &&
7d90: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
7da0: 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  $fileName] > 0} 7db0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7dc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7dd0: 45 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f E: The SQLite co 7de0: 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 re native librar 7df0: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 y has already be 7e00: 65 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 en loaded via.. 7e10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7e20: 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 he native librar 7e30: 79 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 y pre-loader. R 7e40: 65 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 eturn that file 7e50: 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 name now... 7e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7e70: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
7e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7e90: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7ea0: 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65  : If the "native
7eb0: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
7ec0: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 61   has been set, a
7ed0: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65  lways return the
7ee0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7ef0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
7f00: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
7f10: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  embly...      #.
7f20: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52  .      if {[hasR
7f30: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
7f40: 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
7f50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7f60: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
7f70: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
7f80: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d  ssembly file nam
7f90: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
7fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
7fb0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
7fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
7fd0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
7fe0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 7ff0: 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 latform System.D 8000: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d ata.SQLite.dll]] 8010: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 8020: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8030: 54 45 3a 20 41 72 65 20 77 65 20 61 74 74 65 6d TE: Are we attem 8040: 70 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 pting to automat 8050: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77 68 ically detect wh 8060: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 ether or not the 8070: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8080: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly 8090: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3f should be used? 80a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 80b0: 20 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20 5b set automatic [ 80c0: 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 expr {[string le 80d0: 6e 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d 20 ngth$standard]
80e0: 3d 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20  == 0}]....
80f0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
8100: 20 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 65   First, in eithe
8110: 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72  r "automatic" or
8120: 20 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20   "non-standard"
8130: 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a  modes, attempt..
8140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
8150: 20 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 65   find the native
8160: 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73  -only interop as
8170: 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23  sembly...      #
8180: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74  ..      if {$aut 8190: 6f 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61 6e omatic || !$stan
81a0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  dard} then {..
81b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
81c0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
81d0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
81e0: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e  e native-only in
81f0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
8200: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ile..        #
8210: 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68       name for th
8220: 69 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20  is platform and
8230: 74 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d  then return it..
8240: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8250: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
8260: 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74  NameOnly [getInt
8270: 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65  eropAssemblyFile
8280: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20  NamesOnly] {..
8290: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
82a0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
82b0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
82c0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
82d0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
82e0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 82f0: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
8300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
8310: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $8320: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 8330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 8340: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d eturn$fileName.
8350: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
8360: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8370: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
8380: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c     # NOTE: Then,
8390: 20 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f   in either "auto
83a0: 6d 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e 64  matic" or "stand
83b0: 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65  ard" modes, atte
83c0: 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  mpt to..      #
83d0: 20 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 73        find the s
83e0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c  tandard SQLite l
83f0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 23  ibrary...      #
8400: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74  ..      if {$aut 8410: 6f 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 omatic ||$stand
8420: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ard} then {..
8430: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8440: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
8450: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
8460: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61   native-only sta
8470: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62  ndard SQLite lib
8480: 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  rary..        #
8490: 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20        file name
84a0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
84b0: 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  m and then retur
84c0: 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  n it...        #
84d0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
84e0: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
84f0: 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
8500: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
8510: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
8520: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
8530: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
8540: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
8550: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
8560: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 8570: 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e form$fileNameOn
8580: 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly]]....
8590: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
85a0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 85b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 85c0: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ame..          }
85e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
85f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
8600: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
8610: 61 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  as the managed a
8620: 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
8630: 20 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 65   expecting to de
8640: 61 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  al with the..
8650: 20 20 20 23 20 20 20 20 20 20 20 73 74 61 6e 64     #       stand
8660: 61 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ard core library
8670: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ?..      #..
8680: 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
8690: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
86a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 5d  SQLITE_STANDARD]
86b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
86c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
86d0: 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f  OTE: Fallback to
86e0: 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e   returning the n
86f0: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64  ative-only stand
8700: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61  ard SQLite libra
8710: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ry..        #
8720: 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f      file name fo
8730: 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d  r the platform..
8740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8750: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
8760: 73 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  sOnly [getNative
8770: 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
8780: 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Only]....
8790: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66   if {[llength $f 87a0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d ileNamesOnly] == 87b0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 87c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 87d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 87e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 87f0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 8800: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 8810: 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 8820: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
8830: 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24  atform [lindex $8840: 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d fileNamesOnly 0] 8850: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 8860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 8870: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 8880: 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 allback to retur 8890: 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d ning the native- 88a0: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 only interop ass 88b0: 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 embly file.. 88c0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name 88d0: 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 for the platfor 88e0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 88f0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 8900: 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 amesOnly [getInt 8910: 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 eropAssemblyFile 8920: 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 NamesOnly].... 8930: 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 8940: 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c th$fileNamesOnl
8950: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
8960: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8970: 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n ""..        }.
8980: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8990: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
89a0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
89b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
89c0: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
89d0: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e  ] $platform [lin 89e0: 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e dex$fileNamesOn
89f0: 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d  ly 0]]]..      }
8a00: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
8a10: 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69  proc getCommonDi
8a20: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
8a30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8a40: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
8a50: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
8a60: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
8a70: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73  the test scripts
8a80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
8a90: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
8aa0: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
8ab0: 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e  this just return
8ac0: 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  s the Eagle..
8ad0: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
8ae0: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
8af0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
8b00: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
8b10: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
8b20: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
8b30: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
8b40: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 8b50: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 8b60: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8b70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 8b80: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 8b90: 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f e common directo 8ba0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 8bb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 8bc0: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 8bd0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 8be0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 8bf0: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74$::common_direct
8c00: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
8c10: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
8c20: 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63  s ::vendor_direc
8c30: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
8c40: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
8c50: 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  ngth $::vendor_d 8c60: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 8c70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 8c80: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 8c90: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 8ca0: 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 f the vendor dir 8cb0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 8cc0: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 8cd0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 8ce0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 8cf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 8d00: 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 urn$::vendor_di
8d10: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
8d20: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
8d30: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72  xists ::tcl_libr
8d40: 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ary] && \..
8d50: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
8d60: 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  gth $::tcl_libra 8d70: 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ry] > 0 && \.. 8d80: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 [file is 8d90: 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c directory$::tcl
8da0: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then
8db0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
8dc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
8dd0: 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20  e variable with
8de0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
8df0: 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61  the script libra
8e00: 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  ry is..        #
8e10: 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61         set and a
8e20: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72  ppears to be a r
8e30: 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69  eal directory (i
8e40: 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64  .e. not embedded
8e50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8e60: 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29    within a file)
8e70: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
8e80: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
8e90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8ea0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a  $::tcl_library.. 8eb0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 8ec0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ed0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 8ee0: 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 ack to the direc 8ef0: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 tory containing 8f00: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d the executable.. 8f10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8f20: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 8f30: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 8f40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 8f50: 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 proc getDatabas 8f60: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 8f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8f80: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 8f90: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 8fa0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 8fb0: 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 re the test data 8fc0: 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 bases.. # 8fd0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 8fe0: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 8ff0: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 ult, this just u 9000: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 ses the temporar 9010: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 9020: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 directory confi 9030: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 gured for this s 9040: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d ystem... #. 9050: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 9060: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 exists ::databa 9070: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 9080: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 9090: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
90a0: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
90b0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
90c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
90d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
90e0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
90f0: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
9100: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
9110: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
9120: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
9130: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
9140: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9150: 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61  return $::databa 9160: 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 se_directory.. 9170: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 9180: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 9190: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 91a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 91b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
91c0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
91d0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
91e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
91f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
9200: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
9210: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
9220: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
9230: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
9240: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
9250: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
9260: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9270: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 9280: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 9290: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 92a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 92b0: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 92c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 92d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 92e0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 92f0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 9300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 9310: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 9320: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 9330: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 9340: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 mporary files.. 9350: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 9360: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 uld be located. 9370: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 By default, thi 9380: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 s just uses the 9390: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 temporary.. 93a0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 93b0: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f ry configured fo 93c0: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a r this system... 93d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 93e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 93f0: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9400: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 9410: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 9420: 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 ength$::tempora
9430: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
9440: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9450: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9460: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
9470: 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  on of the tempor
9480: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
9490: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
94a0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
94b0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
94c0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
94d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
94e0: 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  n $::temporary_d 94f0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 9500: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 9510: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 9520: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 9530: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 9540: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
9550: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
9560: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
9570: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9580: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9590: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
95a0: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
95b0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
95c0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
95d0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
95e0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
95f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
9600: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 9610: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 9620: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9630: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 9640: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 9650: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 9660: 20 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 proc getExecu 9670: 74 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a teOnSetup {} {.. 9680: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9690: 65 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 exists ::execute 96a0: 5f 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d _on_setup] && \. 96b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 96c0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 ng length$::exe
96d0: 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e  cute_on_setup] >
96e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
96f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
9700: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
9710: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c  e configured SQL
9720: 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69   to execute duri
9730: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
9740: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
9750: 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75     setup procedu
9760: 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65  re (i.e. for eve
9770: 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ry test database
9780: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
9790: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
97a0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63    return $::exec 97b0: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 ute_on_setup.. 97c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 97d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 97e0: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa 97f0: 75 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f ult, there is no 9800: 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 SQL to execute 9810: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 during the conne 9820: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 ction.. # 9830: 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f setup pro 9840: 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 cedure (i.e. for 9850: 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 every test data 9860: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 base connection) 9870: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 9880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 9890: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 98a0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 98b0: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 TestOverridesPre 98c0: 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 amble { {extraVa 98d0: 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a rNames ""} } {.. 98e0: 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d set varNam 98f0: 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 es [list].... 9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9910: 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 TE: If available 9920: 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 , start with the 9930: 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 master list of 9940: 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 test override.. 9950: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 9960: 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 iables... # 9970: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 9980: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 9990: 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d overrides] && \. 99a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e . [llen 99b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 gth$::test_over
99c0: 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e  rides] > 0} then
99d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
99e0: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65   lappend varName
99f0: 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69  s $::test_overri 9a00: 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a des.. }.... 9a10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9a20: 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 NOTE: If reques 9a30: 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ted by our calle 9a40: 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 r, add any addit 9a50: 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a ional variable.. 9a60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 9a70: 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e mes to copy now. 9a80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9a90: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 if {[llength$e
9aa0: 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20  xtraVarNames] >
9ab0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9ac0: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
9ad0: 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56  varNames $extraV 9ae0: 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d arNames.. } 9af0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9b00: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 9b10: 20 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 the script frag 9b20: 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 ment to be retur 9b30: 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e ned by processin 9b40: 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 g each.. # 9b50: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e variable n 9b60: 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 ame and adding t 9b70: 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 he nececessary s 9b80: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 cript fragments 9b90: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 for.. # 9ba0: 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 each one... 9bb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 9bc0: 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 result "".... 9bd0: 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e foreach varN 9be0: 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d ame$varNames {.
9bf0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9c00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
9c10: 64 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20  d the qualified
9c20: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable
9c30: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
9c40: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75  ..        set fu
9c50: 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e  llVarName [appen
9c60: 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d  dArgs :: $varNam 9c70: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 9c80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 9c90: 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 Does the variab 9ca0: 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 le exist in this 9cb0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e interpreter con 9cc0: 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 text?.. # 9cd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 9ce0: 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c nfo exists$full
9cf0: 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  VarName]} then {
9d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
9d10: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
9d20: 20 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74   Append a script
9d30: 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65   fragment to the
9d40: 20 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c   result that wil
9d50: 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20  l correctly..
9d60: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
9d70: 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65  opy any containe
9d80: 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68  d value to anoth
9d90: 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  er interpreter c
9da0: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20  ontext...
9db0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
9dc0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e  append result \n
9dd0: 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72   "set " $fullVar 9de0: 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 Name " \{" [set 9df0: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d$fullVarName] \}
9e00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
9e10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
9e20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
9e30: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  f the result con
9e40: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
9e50: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
9e60: 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20  ts, append a..
9e70: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c      #       newl
9e80: 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ine...      #..
9e90: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
9ea0: 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d   length $result] 9eb0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 9ec0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 append res 9ed0: 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d ult \n.. }. 9ee0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 9ef0: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
9f00: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65  ...    proc move
9f10: 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
9f20: 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73  DllConfig { {res
9f30: 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72  tore false} {ver
9f40: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
9f50: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63  .      set direc
9f60: 74 6f 72 79 20 5b 6f 62 6a 65 63 74 20 69 6e 76  tory [object inv
9f70: 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 20 43 75  oke AppDomain Cu
9f80: 72 72 65 6e 74 44 6f 6d 61 69 6e 2e 42 61 73 65  rrentDomain.Base
9f90: 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20  Directory]....
9fa0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
9fb0: 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72  length $director 9fc0: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 9fd0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
9fe0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
9ff0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $a000: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ a010: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. a020: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a030: 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 - skipped moving a040: 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S a050: 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 QLite.dll.config a060: 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 \", " \.. a070: 20 20 20 20 20 20 20 22 6e 6f 20 62 61 73 65 20 "no base a080: 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 directory\n"].. a090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. a0a0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. a0b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f a0c0: 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 ileName(1) [file a0d0: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 normalize \.. a0e0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo a0f0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 in$directory Sy
a100: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a110: 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d  .dll.config]]...
a120: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
a130: 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72  ame(2) [appendAr
a140: 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20  gs $fileName(1) a150: 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 .moved].... a160: 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 if {$restore} t
a170: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
a180: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
a190: 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74  $fileName(2)]} t a1a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a1b0: 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 file rename$fi
a1c0: 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e  leName(2) $fileN a1d0: 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 ame(1).... a1e0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a1f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a200: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a210: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a220: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a230: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a240: 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 moved \""$file
a250: 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c  Name(2) "\" to \
a260: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
a270: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28        $fileName( a280: 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 1) \"\n].. a290: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } a2a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a2b0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a2c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a2d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a2e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a2f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a300: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a310: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c skipped moving \ a320: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 ""$fileName(2)
a330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a340: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
a350: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
a360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
a370: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
a380: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  lse {..        i
a390: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
a3a0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74  $fileName(1)]} t a3b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a3c0: 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 file rename$fi
a3d0: 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e  leName(1) $fileN a3e0: 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 ame(2).... a3f0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a400: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a410: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a420: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a430: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a440: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a450: 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 moved \""$file
a460: 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c  Name(1) "\" to \
a470: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
a480: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28        $fileName( a490: 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 2) \"\n].. a4a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } a4b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a4c0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a4d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a4e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a4f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a500: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a510: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a520: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c skipped moving \ a530: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 ""$fileName(1)
a540: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a550: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
a560: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
a570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
a580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
a590: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
a5a0: 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50  oc getAppDomainP
a5b0: 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69  reamble { {prefi
a5c0: 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22  x ""} {suffix ""
a5d0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
a5e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
a5f0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
a600: 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75  urns a test setu
a610: 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  p script fragmen
a620: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a  t suitable for..
a630: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76        #       ev
a640: 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69  aluation by an i
a650: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74  nterpreter creat
a660: 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65  ed in an isolate
a670: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  d application..
a680: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d       #       dom
a690: 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74  ain.  The script
a6a0: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20   fragment being
a6b0: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
a6c0: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a   surrounded by..
a6d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
a6e0: 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66  e prefix and suf
a6f0: 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67  fix "script frag
a700: 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64  ments" specified
a710: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d   by our caller,.
a720: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
a730: 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69  f any.  The enti
a740: 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20  re script being
a750: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
a760: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61   substituted via
a770: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
a780: 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20  [subst], in the
a790: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63  context of our c
a7a0: 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65  aller, before be
a7b0: 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20  ing returned...
a7c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69       #       Thi
a7d0: 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73  s step is necess
a7e0: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65  ary so that some
a7f0: 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74   limited context
a800: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20   information,..
a810: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69       #       pri
a820: 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74  marily related t
a830: 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69  o the testing di
a840: 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62  rectories, can b
a850: 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20  e transferred..
a860: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
a870: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter
a880: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  in the isolated
a890: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
a8a0: 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20  in, making it..
a8b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c       #       abl
a8c0: 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c  e to successfull
a8d0: 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74  y run tests that
a8e0: 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20   require one or
a8f0: 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  more of the..
a900: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73     #       files
a910: 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74   in one of the t
a920: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  esting directori
a930: 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f  es.  Callers sho
a940: 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20  uld keep in..
a950: 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20     #       mind
a960: 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63  that the test sc
a970: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
a980: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e  ing returned can
a990: 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20  not rely on..
a9a0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73     #       any s
a9b0: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72  cript library pr
a9c0: 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72  ocedures that ar
a9d0: 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62  e not provided b
a9e0: 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  y the Eagle..
a9f0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
aa00: 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e  ry package (i.e.
aa10: 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20   "init.eagle"),
aa20: 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20  including those
aa30: 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20  provided by..
aa40: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45     #       the E
aa50: 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67  agle test packag
aa60: 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69  e, unless the fi
aa70: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
aa80: 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20  em is loaded..
aa90: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75      #       manu
aaa0: 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74  ally via some ot
aab0: 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65  her mechanism (e
aac0: 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  .g. by including
aad0: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20   appropriate..
aae0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63      #       [pac
aaf0: 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72  kage require] or
ab00: 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e   [source] comman
ab10: 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78  ds in the prefix
ab20: 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20   or suffix..
ab30: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74    #       script
ab40: 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c   fragments).  Al
ab50: 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65  so, all variable
ab60: 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20   references and
ab70: 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20  all nested..
ab80: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e    #       comman
ab90: 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69  ds (i.e. those i
aba0: 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
abb0: 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  s) contained in
abc0: 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20  the final..
abd0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
abe0: 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e  fragment will en
abf0: 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75  d up being evalu
ac00: 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74  ated in the cont
ac10: 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ext of the..
ac20: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e    #       callin
ac30: 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e  g interpreter an
ac40: 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74  d not the target
ac50: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
ac60: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
ac70: 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61     #       isola
ac80: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
ac90: 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68  domain unless th
aca0: 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61  e dollar signs a
acb0: 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20  nd/or square..
acc0: 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63      #       brac
acd0: 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c  kets are special
ace0: 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62  ly quoted with b
acf0: 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20  ackslashes...
ad00: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
ad10: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c  rn [uplevel 1 [l
ad20: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e  ist subst [appen
ad30: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d  dArgs $prefix {. ad40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ad50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The ad60: 5c 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 $object$ comma ad70: 6e 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e nd may be missin ad80: 67 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 g in some Eagle ad90: 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 core.. # ada0: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f library co adb0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 nfigurations. C adc0: 6c 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 loning and using add0: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a the procedure.. ade0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # adf0: 5c 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 $changeNativeRu ae00: 6e 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 ntimeOption$ ma ae10: 79 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 y help to mitiga ae20: 74 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 te this... ae30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f #.. pro ae40: 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 c changeNativeRu ae50: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 ntimeOption \.. ae60: 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 {[inf ae70: 6f 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 o args changeNat ae80: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption ae90: 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ]} \.. aea0: 20 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 {[info body ch aeb0: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim aec0: 65 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 eOption]}.... aed0: 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. aee0: 20 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 changeNa aef0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio af00: 6e 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 n [hasRuntimeOpt af10: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 ion native].. af20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } af30: 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 [getTestOverride af40: 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 sPreamble [list af50: 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 path test_channe af60: 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a l]]$suffix]]]..
af70: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
af80: 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e  oc tryCopyExtern
af90: 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20  alFile {..
afa0: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b        fileName {
afb0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65  platform ""} {ne
afc0: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76  wFileName ""} {v
afd0: 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20  erbose false} }
afe0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75  {..      set sou
aff0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  rceFileName [get
b000: 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  ExternalFileName
b010: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... b020: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b030: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 exists$sourceFi
b040: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
b050: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65  .        if {$ve b060: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. b070: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
b080: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b090: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
b0b0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e  - skipped copyin
b0c0: 67 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20  g external file
b0d0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN b0e0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. b0f0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe b100: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. b110: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. b120: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b140: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b150: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b160: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b170: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b180: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
b190: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil b1a0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
b1b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b1c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
b1d0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
b1e0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
b1f0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
b200: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  orm]..      }...
b210: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65  .      set targe
b220: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  tDirectory [file
b230: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74   dirname $target b240: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... b250: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. b260: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 . if {![f b270: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
b280: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
b290: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b2a0: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67  file mkdir $targ b2b0: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 etDirectory.. b2c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. b2d0: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 file copy -force b2e0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
b2f0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName b300: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} b310: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b320: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
b330: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
b340: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
b350: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65    "---- copied e
b360: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f  xternal file fro
b370: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil b380: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" b390: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b3a0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
b3b0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
b3c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
b3d0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha b3e0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs b3f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b400: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to b410: 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 copy external fi b420: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
b430: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
b440: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74             "\" t
b450: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c  o \"" $targetFil b460: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. b470: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... b480: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy b490: 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 BinaryFile {.. b4a0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa b4b0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} b4c0: 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 {newFileName "" b4d0: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 } {verbose false b4e0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set b4f0: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName b500: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa b510: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl b520: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... b530: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis b540: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
b550: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
b560: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos b570: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. b580: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
b590: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
b5a0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
b5b0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
b5c0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69  ipped copying bi
b5d0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73  nary file \"" $s b5e0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. b5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " b600: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not b610: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 exist\n"].. b620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 }.. re b630: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d turn.. }... b640: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri b650: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 ng length$newFi
b660: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
b670: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
b680: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
b690: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
b6a0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24  e $newFileName$
b6b0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
b6c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
b6d0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b6e0: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46  eName [getBuildF
b6f0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam b700: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 e$platform]..
b710: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
b720: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f  et targetDirecto
b730: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
b740: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName b750: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ b760: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. b770: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis b780: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ts$targetDirect
b790: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
b7a0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64          file mkd
b7b0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ir $targetDirect b7c0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ory.. }.. b7d0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 file cop b7e0: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 y -force$source
b7f0: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74  FileName $target b800: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 FileName.. b810: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. b820: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
b830: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b840: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b850: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b860: 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69  copied binary fi
b870: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou b880: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" b890: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. b8a0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
b8b0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
b8c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b8d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te b8e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe b8f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b900: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail b910: 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 ed to copy binar b920: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 y file from \"" b930: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
b940: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b950: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65  \" to \"" $targe b960: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. b970: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b980: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try b990: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d CopyBuildFile {. b9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil b9b0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform b9c0: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 ""} {newFileName b9d0: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 ""} {verbose fa b9e0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. b9f0: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 set sourceFileNa ba00: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 me [getBuildFile ba10: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $ba20: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 platform].... ba30: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex ba40: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
ba50: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
ba60: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb ba70: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. ba80: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
ba90: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
baa0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
bab0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
bac0: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
bad0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $bae0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bb00: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not bb10: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. bb20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 }.. r bb30: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. bb40: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str bb50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 ing length$newF
bb60: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
bb70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
bb80: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65  t targetFileName
bb90: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
bba0: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName bbb0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
bbc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
bbd0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
bbe0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
bbf0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file bc00: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
bc10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
bc20: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
bc30: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
bc40: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN bc50: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if bc60: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. bc70: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e bc80: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
bc90: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
bca0: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
bcb0: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir bcc0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. bcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 }.. file bce0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 copy -force$sou
bcf0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72  rceFileName $tar bd00: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 getFileName.. bd10: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then bd20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput bd30: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
bd40: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
bd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
bd60: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20  -- copied build
bd70: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s bd80: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ bd90: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. bda0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
bdb0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
bdc0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
bdd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: bde0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap bdf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. be00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa be10: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 iled to copy bui be20: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 ld file from \"" be30: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
be40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
be50: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67  "\" to \"" $targ be60: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] be70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } be80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr be90: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c yDeleteBinaryFil bea0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c e { fileName {pl beb0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb bec0: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ose false} } {.. bed0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa bee0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil bef0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
bf00: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... bf10: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e bf20: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
bf30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
bf40: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} bf50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. bf60: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
bf70: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
bf80: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
bf90: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
bfa0: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61  ed deleting bina
bfb0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ry file \"" $fil bfc0: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. bfd0: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 "\", it d bfe0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" bff0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. c000: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 return.. c010: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i c020: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 f {[catch {file c030: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
c040: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
c050: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $c060: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ c070: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. c080: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c090: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 deleted binary f c0a0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
c0b0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
c0c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c0d0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c c0e0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr c0f0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. c100: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t c110: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 o delete binary c120: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
c130: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
c140: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
c150: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42   proc tryDeleteB
c160: 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e  uildFile { fileN
c170: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
c180: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65  } {verbose false
c190: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
c1a0: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75   fileName [getBu
c1b0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  ildFileName $fil c1c0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
c1d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
c1e0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil c1f0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. c200: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
c210: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
c220: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c230: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c240: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c250: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- c260: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin c270: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" c280: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
c290: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
c2a0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
c2b0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
c2c0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
c2d0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
c2e0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
c2f0: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil c300: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 eName}] == 0} th c310: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp c320: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
c330: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c340: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
c350: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69  ---- deleted bui
c360: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil c370: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. c380: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. c390: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c3a0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c3b0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c3c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
c3d0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69  ed to delete bui
c3e0: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil c3f0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. c400: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... c410: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy c420: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 Assembly {.. c430: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c440: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { c450: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f pdb true} {verbo c460: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 se false} } {.. c470: 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c tryCopyBuil c480: 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 dFile$fileName
c490: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65  $platform ""$ve
c4a0: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69  rbose....      i
c4b0: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d  f {$pdb} then {. c4c0: 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 . tryCopy c4d0: 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e BuildFile [appen c4e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. c4f0: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e [file rootn c500: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e ame$fileName] .
c510: 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22  pdb] $platform " c520: 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 "$verbose..
c530: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
c540: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74     proc tryDelet
c550: 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20  eAssembly {..
c560: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
c570: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
c580: 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62  {pdb true} {verb
c590: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ose false} } {..
c5a0: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
c5b0: 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e  inaryFile $fileN c5c0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 ame$platform $v c5d0: 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 erbose.... c5e0: 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b if {$pdb} then {
c5f0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c  ..        tryDel
c600: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61  eteBinaryFile [a
c610: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c620: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72           [file r
c630: 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ootname $fileNam c640: 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f e] .pdb]$platfo
c650: 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20  rm $verbose.. c660: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... c670: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 proc tryLoad c680: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN c690: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" c6a0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set c6b0: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 fileName [getBi c6c0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
c6d0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform c6e0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ c6f0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. c700: 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f set assembly [o c710: 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 bject load -load c720: 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 type File -alias c730: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
c740: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
c750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
c760: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
c770: 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  ow, add the nece
c780: 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74  ssary test const
c790: 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  raint...
c7a0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
c7b0: 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72  nstraint [file r
c7c0: 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61  ootname [file ta
c7d0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. c7e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. c7f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 # NOTE: Gra c800: 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 b the image runt c810: 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d ime version from c820: 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 the assembly be c830: 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 cause.. # c840: 20 20 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 several t c850: 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 ests rely on it c860: 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e having a certain c870: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... c880: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC c890: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen c8a0: 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c dArgs [file tail c8b0: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d$fileName] _ \.
c8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 61  .            [$a c8d0: 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e ssembly ImageRun c8e0: 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d timeVersion]]... c8f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c900: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu c910: 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 rn the full path c920: 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 of the loaded f c930: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ile... #. c940: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return c950: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
c960: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
c970: 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
c980: 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69  .    proc isSQLi
c990: 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20  teReady {} {..
c9a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c9b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
c9c0: 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20  ure must return
c9d0: 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66  non-zero only if
c9e0: 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69   the SQLite nati
c9f0: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ve..      #
ca00: 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68    library and th
ca10: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
ca20: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
ca30: 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64  embly are loaded
ca40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ca50: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
ca60: 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
ca70: 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c  ite.  Currently,
ca80: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d   this procedure.
ca90: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
caa0: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20  hould be called
cab0: 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b  only after the [
cac0: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d  tryLoadAssembly]
cad0: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a   procedure has..
cae0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
caf0: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f  en called to pro
cb00: 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 65  be for the Syste
cb10: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61  m.Data.SQLite ma
cb20: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a  naged assembly..
cb30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
cb40: 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53  d the [checkForS
cb50: 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65  QLite] procedure
cb60: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
cb70: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20   to probe for..
cb80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
cb90: 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c   SQLite native l
cba0: 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73  ibrary; otherwis
cbb0: 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  e, this procedur
cbc0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20  e will simply..
cbd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77       #       alw
cbe0: 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e  ays return zero.
cbf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cc00: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d   return [expr {.
cc10: 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f  .        [haveCo
cc20: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e  nstraint System.
cc30: 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20  Data.SQLite] &&
cc40: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
cc50: 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d  SQLite]..      }
cc60: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
cc70: 20 70 72 6f 63 20 6d 61 74 63 68 50 6c 61 74 66   proc matchPlatf
cc80: 6f 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d  orm { platform }
cc90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
cca0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d     # NOTE: An em
ccb0: 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  pty string for t
ccc0: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e  he platform mean
ccd0: 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64  s that the build
cce0: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23   is not..      #
ccf0: 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c         [primaril
cd00: 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  y] a native buil
cd10: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74  d; therefore, it
cd20: 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e   always matches.
cd30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cd40: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
cd50: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = cd60: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. cd70: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true cd80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cd90: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cda0: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 TE: Does the spe cdb0: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform cdc0: 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 match up to the cdd0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f current process? cde0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cdf0: 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 if {$platform e
ce00: 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74  q [machineToPlat
ce10: 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  form $::tcl_plat ce20: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 form(machine)]} ce30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ce40: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. ce50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. ce60: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T ce70: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 he specified pla ce80: 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d tform does not m ce90: 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 atch up with the cea0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 platform.. ceb0: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 # for the cec0: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process ced0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. cee0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. cef0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr cf00: 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f 62 6a oc haveSQLiteObj cf10: 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d ectCommand {} {. cf20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cf30: 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 5b # NOTE: Is the [ cf40: 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 object] command cf50: 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 currently availa cf60: 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ble?.. #.. cf70: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp cf80: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 r {[llength [inf cf90: 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 o commands objec cfa0: 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d t]] > 0}].. } cfb0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch cfc0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 eckForSQLiteObje cfd0: 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e ctCommand { chan cfe0: 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 nel } {.. t cff0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
d000: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
d010: 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d   \"object\" comm
d020: 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a  and usage... "..
d030: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
d040: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
d050: 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  qliteObjectComma
d060: 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  nd)] && \..
d070: 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
d080: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
d090: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d0a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y d0b0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c es\n.. } el d0c0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. d0d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: d0e0: 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 20 66 Unless we are f d0f0: 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f orbidden from do d100: 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 ing so, add some d110: 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 constraints.. d120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th d130: 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f at will allow mo d140: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 20 73 st of the test s d150: 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 uite to run (i.e d160: 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 . those.. d170: 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 # tests t d180: 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 hat do not direc d190: 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 tly rely upon th d1a0: 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 e [object] comma d1b0: 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d nd)... #. d1c0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i d1d0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( d1e0: 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 shimSQLiteAssemb d1f0: 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d lyConstraints)]} d200: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. d210: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint d220: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 SQLite.. d230: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint d240: 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a SQLiteInterop.. d250: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon d260: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 straint System.D d270: 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 ata.SQLite.. d280: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra d290: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e int System.Data. d2a0: 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f SQLite.Encryptio d2b0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 n.. add d2c0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste d2d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li d2e0: 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 nq.... d2f0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a d300: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. d310: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste d320: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl d330: 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 l_v [getBuildClr d340: 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 Version]].. d350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... d360: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist d370: 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 s ::no(shimSQLit d380: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 eDefineConstantC d390: 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 onstraints)]} th d3a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. d3b0: 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo d3c0: 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e IN d3e0: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f TEROP_EXTENSION_ d3f0: 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f FUNCTIONS INTERO d400: 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e P_FTS5_EXTENSION d410: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d420: 20 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f INTEROP_JSON1_ d430: 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO d440: 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 P_PERCENTILE_EXT d450: 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 ENSION \.. d460: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ d470: 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e REGEXP_EXTENSION d480: 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 INTEROP_TEST_EX d490: 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. d4a0: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP d4b0: 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f _TOTYPE_EXTENSIO d4c0: 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 N INTEROP_VIRTUA d4d0: 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 L_TABLE \.. d4e0: 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 USE_INT d4f0: 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 EROP_DLL] {.. d500: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons d510: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr d520: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. d530: 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite d540: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 DefineConstantPr d550: 65 66 69 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e efix]$defineCon
d560: 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20  stant]..
d570: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
d580: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
d590: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
d5a0: 28 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61  (shimSQLiteVisua
d5b0: 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e  lStudioConstrain
d5c0: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
d5d0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
d5e0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
d5f0: 73 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b  s visualStudio [
d600: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a  getBuildYear]]..
d610: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
d620: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan d630: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. d640: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... d650: 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 proc changeNati d660: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption d670: 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 { native } {.. d680: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength d690: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands d6a0: 64 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c debug]] > 0 && \ d6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle d6c0: 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f ngth [info subco d6d0: 6d 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e mmands debug run d6e0: 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 timeoption]] > 0 d6f0: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. d700: 20 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 debug runt d710: 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 imeoption [expr d720: 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 {$native ? "add"
d730: 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61   : "remove"}] na
d740: 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  tive..      }] =
d750: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
d760: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
d770: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
d780: 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
d790: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
d7a0: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20   && [catch {..
d7b0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
d7c0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
d7d0: 47 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20  GetActive [expr
d7e0: 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20  {$native ? \.. d7f0: 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75 "AddRu d800: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 ntimeOption" : " d810: 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 RemoveRuntimeOpt d820: 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 ion"}] native.. d830: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th d840: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re d850: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. d860: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu d870: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. d880: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che d890: 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 ckForSQLiteBuild d8a0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c s { channel {sel d8b0: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ect false} } {.. d8c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # d8d0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for d8e0: 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 every possible d8f0: 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f valid combinatio d900: 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 n of values used d910: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 when.. # d920: 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 locating ou d930: 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 t the build outp d940: 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 ut directory, sh d950: 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c owing each avail d960: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # d970: 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 build variat d980: 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 ion along the wa d990: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. d9a0: 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 foreach nativ d9b0: 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 e [list false tr d9c0: 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 ue] {.. f d9d0: 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 oreach year [get d9e0: 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 BuildYears] {.. d9f0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach da00: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b configuration [ da10: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur da20: 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ations] {.. da30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. da40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi da50: 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 gure out the eff da60: 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 ective build pla da70: 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d tform. This is. da80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # da90: 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 based on wh daa0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b ether or not a [ dab0: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 primarily] nativ dac0: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 e build.. dad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is dae0: 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 being used. For daf0: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e [primarily] non db00: 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d -native builds,. db10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # db20: 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 this will b db30: 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e e an empty strin db40: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g... db50: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s db60: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get db70: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e BuildPlatform$n
db80: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  ative]....
db90: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha dba0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs dbb0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. dbc0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki dbd0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da dbe0: 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build dbf0: 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 \"" [expr \.. dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e {$n
dc10: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f  ative ? "native/
dc20: 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b  " : ""}] [expr {
dc30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c  [string length \
dc40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
dc50: 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30    $platform] > 0 dc60: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 ? [appendArgs$
dc70: 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22  platform /] : ""
dc80: 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20  }] $year \.. dc90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 /$c
dca0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22  onfiguration "\"
dcb0: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
dcc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
dcd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
dce0: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
dcf0: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79  lified directory
dd00: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73   where the neces
dd10: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  sary..
dd20: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e    #       compon
dd30: 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e  ents for System.
dd40: 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75  Data.SQLite shou
dd50: 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20  ld be found...
dd60: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
dd70: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
dd80: 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c  ectory [joinBuil
dd90: 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69  dDirectory $nati dda0: 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ve \.. ddb0: 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 [getBuildB ddc0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 aseDirectory]$y
ddd0: 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63  ear $platform$c
dde0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d  onfiguration]...
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
de10: 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73  TE: Do the neces
de20: 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74  sary files exist
de30: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f  ?  Currently, no
de40: 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20   other steps..
de50: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
de60: 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76    are taken to v
de70: 65 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64  erify this build
de80: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61   is actually via
de90: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ble...
dea0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
deb0: 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61   if {[isBuildAva
dec0: 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24  ilable $native$
ded0: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
dee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
def0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
df00: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20     # NOTE: When
df10: 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65  in "select" mode
df20: 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  , automatically
df30: 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74  select the first
df40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
df50: 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c  #       availabl
df60: 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65  e build of Syste
df70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e  m.Data.SQLite an
df80: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20  d then return..
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
dfa0: 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79       immediately
dfb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
dfc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
dfd0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && dfe0: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform dff0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
e000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e010: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e020: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
e030: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65  anually override
e040: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64   all the build d
e050: 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69  irectory selecti
e060: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
e070: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61      #       rela
e080: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67  ted test setting
e090: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f  s in order to fo
e0a0: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a  rce this build..
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0c0: 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65  #       of Syste
e0d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f  m.Data.SQLite to
e0e0: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20   be used...
e0f0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e110: 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65   {![changeNative
e120: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e  RuntimeOption $n e130: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a ative]} then {.. e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e150: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
e160: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e180: 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65        "no, faile
e190: 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e  d to " [expr {$n e1a0: 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 ative ? "add" : e1b0: 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 "remove"}] \.. e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1d0: 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 " the \"nati e1e0: 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ve\" runtime opt e1f0: 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ion\n"].... e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret e210: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. e220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e240: 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 set ::test_year e250: 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20$year..
e260: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
e270: 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74  t_platform $plat e280: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. e290: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test e2a0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 _configuration$
e2b0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d  configuration...
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e2d0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel e2e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e300: 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 "yes, selecte e310: 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 d (" [expr {$nat
e320: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20  ive ? "native/"
e330: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
e350: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  xpr {[string len
e360: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > e370: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 0 ? [appendArgs e380: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e390: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
e3a0: 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61  m /] : ""}] $yea e3b0: 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 r /$configurati
e3c0: 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  on ")\n"]....
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e3e0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
e3f0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
e400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e410: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel e420: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 yes\n.. e430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. e440: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu e460: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
e470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e480: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
e490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
e4a0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
e4b0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
e4c0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
e4d0: 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65  ForSQLiteRelease
e4e0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c  s { channel {sel
e4f0: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ect false} } {..
e500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e510: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
e520: 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f   past releases o
e530: 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  f System.Data.SQ
e540: 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65  Lite in the dire
e550: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ctory..      #
e560: 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69       contained i
e570: 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61  n the "System.Da
e580: 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72  ta.SQLite" envir
e590: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c  onment variable,
e5a0: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   if..      #
e5b0: 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20     present...
e5c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
e5d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
e5e0: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
e5f0: 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20  QLite)] && \..
e600: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
e610: 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79  length $::env(Sy e620: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite e630: 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a )] > 0} then {.. e640: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e650: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build e660: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali e670: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w e680: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa e690: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # e6a0: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 components f e6b0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S e6c0: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 QLite should be e6d0: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 found... e6e0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 #.. set d e6f0: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e irectory [file n e700: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file e710: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. e720: 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65$::env(Syste
e730: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b  m.Data.SQLite) [
e740: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f  getReleaseVersio
e750: 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n]]]....
e760: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ e770: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e780: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- e790: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys e7a0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite e7b0: 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 release \"" \.. e7c0: 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65$dire
e7d0: 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d  ctory "\"... "].
e7e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
e7f0: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
e800: 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c  le $directory pl e810: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. e820: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ e830: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
e840: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74  latform] == 0} t
e850: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
e860: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
e870: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
e880: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
e890: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && e8a0: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform e8b0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
e8c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e8d0: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65  set ::build_dire
e8e0: 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory e8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... e900: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
e910: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c  appendArgs "yes,
e920: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c   selected (" $pl e930: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d atform ")\n"]... e940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret e950: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. e960: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. e970: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs e980: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
e990: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c  Args "yes (" $pl e9a0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 atform ")\n"].. e9b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. e9c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. e9d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
e9e0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20  hannel no\n....
e9f0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
ea00: 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65   path [lsort -de
ea10: 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c  creasing [file l
ea20: 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a  ist $directory * ea30: 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ]] {.. ea40: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis ea50: 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 ts$path] && [fi
ea60: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $ea70: 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 path]} then {.. ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu ea90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
eaa0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
eac0: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
ead0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
eae0: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c  te release \"" \
eaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
eb00: 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e      $path "\"... eb10: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... eb20: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 if {[isRele eb30: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 aseAvailable$pa
eb40: 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  th platform]} th
eb50: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
eb60: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
eb70: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo eb80: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b rm] == 0} then { eb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. eba0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform ebb0: 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 unknown.. ebc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i ebe0: 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d f {$select && [m
ebf0: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c  atchPlatform $pl ec00: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. ec10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ec20: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d ec30: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a irectory$path..
ec40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ec50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ec60: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " ec70: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" ec80: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
ec90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
eca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ecb0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
ecc0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ece0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ ecf0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes ed00: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
ed10: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
ed20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
ed30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed50: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n ed60: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 o\n.. ed70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. ed80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } ed90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. eda0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. edb0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
edc0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
edd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
ede0: 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ---- environment
edf0: 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74   variable \"Syst
ee00: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22  em.Data.SQLite\"
ee10: 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20   is not " \..
ee20: 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73           "set, s
ee30: 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f  kipping check fo
ee40: 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22  r releases...\n"
ee50: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
ee60: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
ee70: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
ee80: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
ee90: 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61  iteLibrary { cha
eea0: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..
eeb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " eec0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo eed0: 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li eee0: 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... eef0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { ef00: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object ef10: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + ef20: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. ef30: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. ef40: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi ef50: 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f te3 SQLiteVersio ef60: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 n.. } versi ef70: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { ef80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. ef90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che efa0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return efb0: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e ed version was n efc0: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b ull. If so, mak efd0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 e it easy.. efe0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 # to sp eff0: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. f000: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str f010: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
f020: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
f030: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
f040: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20   version null..
f050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
f060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
f070: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
f080: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
f090: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
f0a0: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
f0b0: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
f0c0: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
f0d0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
f0e0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
f0f0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
f100: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
f110: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
f120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
f140: 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74  te.SQLite3 SQLit
f150: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  eSourceId..
f160: 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20     } sourceId]}
f170: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f180: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
f190: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64   NOTE: We failed
f1a0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
f1b0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
f1c0: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20  tifier...
f1d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f1e0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b  set sourceId unk
f1f0: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nown..        }.
f200: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
f210: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
f220: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
f230: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  ned Fossil sourc
f240: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73  e identifier was
f250: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20   null.  If..
f260: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
f270: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20  make it easy to
f280: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
f290: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
f2a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f  tring length $so f2b0: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 urceId] == 0} th f2c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. f2d0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul f2e0: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a l.. }.... f2f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f300: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, f310: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core f320: 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 library appears f330: 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e to be available. f340: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. f350: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai f360: 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 nt SQLite.... f370: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
f380: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
f390: 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e  "yes (" $version f3a0: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
f3b0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
f3c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
f3d0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no f3e0: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. f3f0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc f400: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e checkForSQLiteIn f410: 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 terop { channel f420: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs f430: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
f440: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c  checking for SQL
f450: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  ite interop asse
f460: 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  mbly... "....
f470: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f480: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
f490: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
f4a0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
f4b0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
f4c0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
f4d0: 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  e3 InteropVersio
f4e0: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69  n..      } versi
f4f0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
f500: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f510: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
f520: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
f530: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e  ed version was n
f540: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b  ull.  If so, mak
f550: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20  e it easy..
f560: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70     #       to sp
f570: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
f580: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
f590: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers f5a0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then f5b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set f5c0: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. f5d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... f5e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # f5f0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t f600: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss f610: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi f620: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c fier for the SQL f630: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # f640: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 core librar f650: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. f660: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc f670: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o f680: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl f690: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f6b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi f6c0: 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 te.SQLite3 Inter f6d0: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 opSourceId.. f6e0: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d } sourceId]} f6f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f700: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. f710: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 # NOTE: We faile f720: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 d to query the F f730: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide f740: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 ntifier... f750: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f760: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e set sourceId un f770: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d known.. } f780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. f790: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C f7a0: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu f7b0: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 rned Fossil sour f7c0: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 ce identifier wa f7d0: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 s null. If.. f7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c # so, f7f0: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f make it easy to f800: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 spot... f810: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ f820: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 string length$s
f830: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
f840: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f850: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75   set sourceId nu
f860: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ll..        }...
f870: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f880: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f      # NOTE: Befo
f890: 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69  re actually addi
f8a0: 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73  ng the test cons
f8b0: 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72  traint, make sur
f8c0: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  e the..        #
f8d0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69         version i
f8e0: 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f  s valid (i.e. no
f8f0: 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63  t just that we c
f900: 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d  ould query it)..
f910: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f920: 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e      if {$version f930: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e ne "null"} then f940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. f950: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT f960: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 E: Yes, the SQLi f970: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem f980: 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 bly appears to b f990: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... f9a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f9b0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai f9c0: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop f9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se f9e0: 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 t answer yes.. f9f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fa00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e set an fa10: 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 swer no.. fa20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 }.... tp fa30: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
fa40: 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72  pendArgs $answer fa50: 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 " ("$version "
fa60: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c   " $sourceId ")\ fa70: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 n"].. } els fa80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu fa90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
faa0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
fab0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
fac0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
fad0: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61  neConstant { cha
fae0: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nnel name } {..
faf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan fb00: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs fb10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d \.. "-- fb20: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for fb30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi fb40: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 te define consta fb50: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a nt \""$name \..
fb60: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e            "\"...
fb70: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20   "]....      if
fb80: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
fb90: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
fba0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
fbb0: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
fbc0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
fbd0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66  Lite.SQLite3 Def
fbe0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  ineConstants..
fbf0: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73      } defineCons
fc00: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tants] == 0} the
fc10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
fc20: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74  {[lsearch -exact
fc30: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65   -nocase $define fc40: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d Constants$name]
fc50: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a   != -1} then {..
fc60: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
fc70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
fc80: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20  es, this define
fc90: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61  constant was ena
fca0: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61  bled when the ma
fcb0: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..
fcc0: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
fcd0: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d  y was compiled..
fce0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
fcf0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
fd00: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
fd10: 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69  s [getSQLiteDefi
fd20: 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78  neConstantPrefix
fd30: 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ] $name].... fd40: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
fd50: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
fd60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
fd70: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c fd80: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. fd90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } fda0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. fdb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 tputs$channel e
fdc0: 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  rror\n..      }.
fdd0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
fde0: 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 46  roc getDateTimeF
fdf0: 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20  ormat {} {..
fe00: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
fe10: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
fe20: 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73  e simply returns
fe30: 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 44   the "default" D
fe40: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75  ateTime format u
fe50: 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  sed..      #
fe60: 20 20 20 62 79 20 74 68 65 20 74 65 73 74 20 73     by the test s
fe70: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
fe80: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
fe90: 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d  exists ::datetim
fea0: 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a  e_format] && \..
feb0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
fec0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65  g length $::date fed0: 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 time_format] > 0 fee0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. fef0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N ff00: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 OTE: Return the ff10: 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 manually overrid ff20: 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 den value for th ff30: 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 e DateTime forma ff40: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. ff50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
ff60: 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74  :datetime_format
ff70: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
ff80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
ff90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
ffa0: 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44  urn an ISO8601 D
ffb0: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63  ateTime format c
ffc0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
ffd0: 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  QLite,..
ffe0: 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  #       System.D
fff0: 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20  ata.SQLite, and
10000 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75  suitable for rou
10010 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68  nd-tripping with
10020 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
10030 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 63        DateTime c
10040 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d  lass of the fram
10050 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20  ework.  If this
10060 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64  value is changed
10070 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
10080 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 73     various tests
10090 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20   may fail...
100a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
100b0 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64  eturn "yyyy-MM-d
100c0 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46  d HH:mm:ss.FFFFF
100d0 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  FFK"..      }..
100e0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
100f0 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69  c enumerableToLi
10100 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20  st { enumerable
10110 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72  } {..      set r
10120 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
10130 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
10140 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72  g length $enumer 10150 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 able] == 0 ||$e
10160 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75  numerable eq "nu
10170 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ll"} then {..
10180 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 10190 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ult.. }.... 101a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 101b0 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d each -alias item 101c0 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a$enumerable {..
101d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
101e0 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d  ing length $item 101f0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 10200 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 10210 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 result [$item T
10220 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20  oString]..
10230 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
10240 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 10250 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 10260 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e proc catchAn 10270 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 dReturn { script 10280 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c {stackTrace fal 10290 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 se} {strict true 102a0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 102b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 # NOTE: Ev 102c0 61 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 aluate the scrip 102d0 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 t provided by ou 102e0 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 r caller in thei 102f0 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 r context,.. 10300 20 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 # captur 10310 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 ing both the res 10320 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 ult and the retu 10330 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 rn code... 10340 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 #.. set cod 10350 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 e [catch {upleve 10360 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 l 1$script} res
10370 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  ult]....      #.
10380 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44  .      # NOTE: D
10390 69 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72  id the script pr
103a0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
103b0 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61  ller NOT raise a
103c0 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20  n error?..
103d0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74  #..      if {$st 103e0 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d rict &&$code ==
103f0 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26   0 || !$strict & 10400 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 &$code != 1} th
10410 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
10420 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10430 20 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72   Success.  Retur
10440 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  n a list with th
10450 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  e return code an
10460 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20  d the result...
10470 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10480 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $10490 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
104a0 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24       } elseif {$104b0 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e stackTrace} then 104c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 104d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 104e0 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c ailure. Our cal 104f0 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c ler wants a full 10500 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 stack trace (if 10510 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 applicable),.. 10520 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 10530 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 eturn a list wit 10540 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 h the return cod 10550 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 e and the result 10560 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 10570 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 10580 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 eturn [list$cod
10590 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20  e $result].. 105a0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 105b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 105c0 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 NOTE: Failure. 105d0 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 Our caller does 105e0 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c not want a full 105f0 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 stack trace (if 10600 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 10610 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 applicable), r 10620 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 eturn a list wit 10630 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 h the return cod 10640 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 e, the error.. 10650 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 10660 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 de for the inter 10670 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 preter, and the 10680 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 error message up 10690 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 to the.. 106a0 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 # point w 106b0 68 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 here the stack t 106c0 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 race should star 106d0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 106e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 106f0 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 ist$code $::err 10700 6f 72 43 6f 64 65 20 5c 0d 0a 20 20 20 20 20 20 orCode \.. 10710 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 [extractSy 10720 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 stemDataSQLiteEx 10730 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 ceptionMessage$
10740 72 65 73 75 6c 74 5d 5d 0d 0a 20 20 20 20 20 20  result]]..
10750 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
10760 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68   proc compileCSh
10770 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20  arpWith {..
10780 20 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f         text memo
10790 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63  ry symbols stric
107a0 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65  t resultsVarName
107b0 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66   errorsVarName f
107c0 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20  ileNames..
107d0 20 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a        args } {..
107e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
107f0 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20   NOTE: Since we
10800 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65  are going to use
10810 20 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d   this method nam
10820 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20  e a lot, assign
10830 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23  it to a..      #
10840 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20         variable
10850 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d  first...      #.
10860 0a 20 20 20 20 20 20 73 65 74 20 61 64 64 20 52  .      set add R
10870 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c  eferencedAssembl
10880 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20  ies.Add....
10890 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
108a0 3a 20 43 72 65 61 74 65 20 74 68 65 20 62 61 73  : Create the bas
108b0 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61  e command to eva
108c0 6c 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 68  luate and add th
108d0 65 20 70 72 6f 70 65 72 74 79 20 73 65 74 74 69  e property setti
108e0 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ngs..      #
108f0 20 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f     that are almo
10900 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64  st always needed
10910 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73   by our unit tes
10920 74 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73  ts (i.e. the Sys
10930 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20  tem..      #
10940 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61     and System.Da
10950 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65  ta assembly refe
10960 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20  rences)...
10970 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d  #..      set com
10980 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  mand [list \..
10990 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 43          compileC
109a0 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d  Sharp $text$mem
109b0 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74  ory $symbols$st
109c0 72 69 63 74 20 72 65 73 75 6c 74 73 20 65 72 72  rict results err
109d0 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ors \..
109e0 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c   $add System.dll 109f0 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74$add System.Dat
10a00 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65  a.dll $add Syste 10a10 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64 m.Transactions.d 10a20 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ll \.. 10a30 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e$add System.Xml.
10a40 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  dll]....      #.
10a50 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
10a60 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69  dd all the provi
10a70 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61  ded file names a
10a80 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72  s assembly refer
10a90 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ences...      #.
10aa0 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66  .      foreach f
10ab0 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 10ac0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 es {.. la 10ad0 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
10ae0 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  dd [getBinaryFil
10af0 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] 10b00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 10b10 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 10b20 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72 TE: Add the extr 10b30 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 a arguments, if 10b40 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d any, to the comm 10b50 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e and to evaluate. 10b60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10b70 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f eval lappend co 10b80 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 mmand$args....
10b90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
10ba0 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20  NOTE: Alias the
10bb0 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72  compiler local r
10bc0 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72  esults and error
10bd0 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74  s variables to t
10be0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
10bf0 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73    variable names
10c00 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
10c10 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
10c20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
10c30 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73  ring length $res 10c40 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 ultsVarName] > 0 10c50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10c60 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c upvar 1$resul
10c70 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74  tsVarName result
10c80 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  s..      }....
10c90 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
10ca0 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 73 56 61  length $errorsVa 10cb0 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e rName] > 0} then 10cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 {.. upva 10cd0 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 r 1$errorsVarNa
10ce0 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 20  me errors..
10cf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
10d00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61       # NOTE: Eva
10d10 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 72  luate the constr
10d20 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53  ucted [compileCS
10d30 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e  harp] command an
10d40 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20  d return the..
10d50 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75      #       resu
10d60 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  lt...      #..
10d70 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e      eval $comman 10d80 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 d.. }..... 10d90 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 proc isMemoryDb 10da0 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d { fileName } {. 10db0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10dc0 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73 # NOTE: Is the s 10dd0 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 pecified databas 10de0 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c e file name real 10df0 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 ly an in-memory 10e00 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 database?.. 10e10 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 10e20 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d [expr {$fileNam
10e30 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  e eq ":memory:"
10e40 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
10e50 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66  [string range $f 10e60 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 ileName 0 12] eq 10e70 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 "file::memory:" 10e80 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }].. }..... 10e90 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e proc isTableIn 10ea0 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 Db { name {varNa 10eb0 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 me db} } {.. 10ec0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10ed0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 10ee0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 10ef0 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i 10f00 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 10f10 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # 10f20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 caller. It 10f30 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 contains the dat 10f40 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection 10f50 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c handle that wil 10f60 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 l be.. # 10f70 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 used to exec 10f80 75 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73 ute the query us 10f90 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 ed to determine 10fa0 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 if the named tab 10fb0 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 le is.. # 10fc0 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 present in 10fd0 74 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a that database... 10fe0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 10ff0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
11000 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
11010 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
11020 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
11030 65 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74 65  er table to dete
11040 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d  rmine if the nam
11050 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20  ed table is..
11060 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65     #       prese
11070 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
11080 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
11090 20 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a 20      set sql {..
110a0 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f         SELECT CO
110b0 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69  UNT(*) FROM sqli
110c0 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE
110d0 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41  type = 'table' A
110e0 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20  ND name = ?;..
110f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
11100 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
11110 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  Return non-zero
11120 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  if the named tab
11130 6c 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a  le is present...
11140 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
11150 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
11160 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63         [sql exec
11170 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
11180 6c 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c 69  lar $db$sql [li
11190 73 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67  st param1 String
111a0 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20   $name]] > 0.. 111b0 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c }].. }... 111c0 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 .. proc getDb 111d0 44 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 20 DefaultPageSize 111e0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 {} {.. try 111f0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 {.. set d 11200 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 b [sql open -typ 11210 65 20 53 51 4c 69 74 65 20 7b 44 61 74 61 20 53 e SQLite {Data S 11220 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d ource=:memory:;} 11230 5d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ].. retur 11240 6e 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d n [sql execute - 11250 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 execute scalar$
11260 64 62 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f  db "PRAGMA page_
11270 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 20 20 7d  size;"]..      }
11280 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
11290 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
112a0 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b  ists db]} then {
112b0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
112c0 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62  h {sql close $db 112d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 }.. uns 112e0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 et -nocomplain d 112f0 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 b.. }.. 11300 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 11310 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 . proc getDbD 11320 65 66 61 75 6c 74 43 61 63 68 65 53 69 7a 65 20 efaultCacheSize 11330 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 {} {.. try 11340 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 {.. set d 11350 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 b [sql open -typ 11360 65 20 53 51 4c 69 74 65 20 7b 44 61 74 61 20 53 e SQLite {Data S 11370 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d ource=:memory:;} 11380 5d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ].. retur 11390 6e 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d n [sql execute - 113a0 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 execute scalar$
113b0 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65  db "PRAGMA cache
113c0 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 20 20  _size;"]..
113d0 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20  } finally {..
113e0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
113f0 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20  xists db]} then
11400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  {..          cat
11410 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64  ch {sql close $d 11420 62 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e b}.. un 11430 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 11440 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 db.. }.. 11450 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 11460 0d 0a 20 20 20 20 70 72 6f 63 20 75 73 65 4c 65 .. proc useLe 11470 67 61 63 79 44 62 50 61 67 65 41 6e 64 43 61 63 gacyDbPageAndCac 11480 68 65 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d heSizes { varNam 11490 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a e } {.. #.. 114a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 114b0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci 114c0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e 114d0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the 114e0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. 114f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 11500 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 aller. It conta 11510 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 ins the database 11520 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 11530 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d le that will be. 11540 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u 11550 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 71 sed to execute q 11560 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 73 ueries used to s 11570 65 74 20 74 68 65 20 70 61 67 65 20 61 6e 64 20 et the page and 11580 63 61 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 cache sizes... 11590 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 115a0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
115b0 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78  ....      sql ex
115c0 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20  ecute $db {.. 115d0 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 PRAGMA page 115e0 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 _size = 1024;.. 115f0 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 PRAGMA ca 11600 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b che_size = 2000; 11610 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11620 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 11630 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 \.. [sq 11640 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 l execute -execu 11650 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 te scalar$db "P
11660 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b  RAGMA page_size;
11670 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "] \..
11680 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
11690 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db 116a0 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 "PRAGMA cache_s 116b0 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a ize;"]].. }.. 116c0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 74 72 ... proc extr 116d0 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c actSystemDataSQL 116e0 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 iteExceptionMess 116f0 61 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d age { value } {. 11700 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11710 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 73 # NOTE: If the s 11720 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74 tring conforms t 11730 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 o format of the 11740 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e normal exception 11750 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11760 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2c 20 65 error strings, e 11770 78 74 72 61 63 74 20 61 6e 64 20 72 65 74 75 72 xtract and retur 11780 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f 72 n only the error 11790 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 message.. 117a0 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 # portion 117b0 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23 itself... # 117c0 0d 0a 20 20 20 20 20 20 73 65 74 20 70 61 74 74 .. set patt 117d0 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 erns [list \.. 117e0 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 {System\.Dat 117f0 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 a\.SQLite\.SQLit 11800 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 eException $$0x8 11810 30 30 30 34 30 30 35 5c 29 3a 20 28 2e 2b 3f 29 0004005$$: (.+?) 11820 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 (?: )?at} \.. 11830 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 {System\.Da 11840 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 ta\.SQLite\.SQLi 11850 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b teException: (.+ 11860 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d 0a ?) (?: )?at}].. 11870 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 11880 70 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e pattern$pattern
11890 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  s {..        if
118a0 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74  {[regexp -- $pat 118b0 74 65 72 6e 20 24 76 61 6c 75 65 20 64 75 6d 6d tern$value dumm
118c0 79 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 6e  y message]} then
118d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
118e0 74 20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e  t message [strin
118f0 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e  g map [list \r\n
11900 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 69   \n] [string tri
11910 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 20  m $message]].. 11920 20 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65 set line 11930 73 20 5b 73 70 6c 69 74 20 24 6d 65 73 73 61 67 s [split$messag
11940 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  e \n]....
11950 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength
11960 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74 68  $lines] == 2} th 11970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 11980 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 6c if {[lindex$l
11990 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e 64  ines 0] eq [lind
119a0 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 68  ex $lines 1]} th 119b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 119c0 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 return [lind 119d0 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20 20 ex$lines 0]..
119e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
119f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11a00 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 6c  n [appendArgs [l
11a10 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20  index $lines 0] 11a20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20 24 " -- " [lindex$
11a30 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20 20  lines 1]]..
11a40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11a50 20 20 20 20 72 65 74 75 72 6e 20 24 6d 65 73 73      return $mess 11a60 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a age.. }.. 11a70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11a80 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a return$value..
11a90 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11aa0 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c  oc trimSql { sql
11ab0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75   } {..      retu
11ac0 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20  rn [regsub -all
11ad0 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67  -- {\s+} [string
11ae0 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d   trim $sql] " "] 11af0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 11b00 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20 proc executeSql 11b10 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e { sql {execute n 11b20 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e one} {format non 11b30 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d e} {fileName ""} 11b40 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 11b50 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11b60 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20  fileName] == 0}
11b70 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61  then {set fileNa
11b80 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20  me :memory:}..
11b90 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c      setupDb $fil 11ba0 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 eName "" "" "" " 11bb0 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 " "" false false 11bc0 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20 false false db 11bd0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72 true.... tr 11be0 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 y {.. ret 11bf0 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b urn [uplevel 1 [ 11c00 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 11c10 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 sql execute 11c20 2d 65 78 65 63 75 74 65 20 24 65 78 65 63 75 74 -execute$execut
11c30 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61  e -format $forma 11c40 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 t$db $sql]].. 11c50 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d } finally {. 11c60 0a 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 . cleanup 11c70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 Db$fileName db
11c80 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
11c90 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  e..      }..
11ca0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68  }.....    proc h
11cb0 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e  asNoFlags { varN
11cc0 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20  ame none } {..
11cd0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 11ce0 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 Name flags.... 11cf0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 11d00 78 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 xists flags]} th 11d10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 11d20 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 11d30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 11d40 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11d50 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65  flags] == 0} the
11d60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
11d70 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
11d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  }....      if {$11d90 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20 65 none &&$flags e
11da0 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b  q "None"} then {
11db0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11dc0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a   true..      }..
11dd0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
11de0 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
11df0 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e      proc getConn
11e00 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69  ectionFlags { fi
11e10 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 75  leName flags {qu
11e20 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
11e30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11e40 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
11e50 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73 65  t which database
11e60 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f   file name or co
11e70 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
11e80 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 20  these..      #
11e90 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20       connection
11ea0 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 61  flags will actua
11eb0 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 54  lly apply to.  T
11ec0 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73  his is not neces
11ed0 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  sary..      #
11ee0 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f 64      in quiet mod
11ef0 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  e because this i
11f00 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e  nformation is on
11f10 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67  ly used for logg
11f20 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ing..      #
11f30 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e 67     and reporting
11f40 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20   purposes...
11f50 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
11f60 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 11f70 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 11f80 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 ing length$file
11f90 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
11fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
11fb0 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e   database [appen
11fc0 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d 65  dArgs "file name
11fd0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 11fe0 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c "].. } el 11ff0 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 12000 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d ts ::dataSource] 12010 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 12020 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 74 ![array exist 12030 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d s ::dataSource]} 12040 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12050 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 set database 12060 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 74 [appendArgs "dat 12070 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a a source \""$::
12080 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a  dataSource \"]..
12090 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
120a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
120b0 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77  database <unknow
120c0 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n>..        }..
120d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
120e0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
120f0 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
12100 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63  the local connec
12110 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74  tion flags and t
12120 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  he associated..
12130 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
12140 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65  a source or file
12150 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d   name...      #.
12160 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui 12170 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 12180 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 12190 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c xists ::no(emitL 121a0 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c ocalFlags)] && \ 121b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 .. (! 121c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 121d0 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 o(emitLocalFlags 121e0 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 IfNone)] || \.. 121f0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 12200 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 sNoFlags flags f 12210 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a alse])} then {.. 12220 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 12230 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
12240 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
12260 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74  -- local connect
12270 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
12280 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. 12290 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are 122a0 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 : " [expr {![has 122b0 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 NoFlags flags fa 122c0 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 lse] ? \.. 122d0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA 122e0 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 rgs \"$flags \"
122f0 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c  ] : "<none>"}] \
12300 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
12310 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12320 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
12330 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
12340 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  the shared conne
12350 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20  ction flags...
12360 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
12370 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 12380 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 12390 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 123a0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 123b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 123c0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect 123d0 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d ion SharedFlags. 123e0 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 . } share 123f0 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 dFlags] == 0} th 12400 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12410 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 12420 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 s ::no(emitShare 12430 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 dFlags)] && \.. 12440 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b (![ 12450 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 12460 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 (emitSharedFlags 12470 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 IfNone)] || \.. 12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b ![ 12490 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 hasNoFlags share 124a0 64 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 dFlags true])} t 124b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 124c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
124d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
124e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
124f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68          "---- sh
12500 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ared connection
12510 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74  flags for " $dat 12520 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 abase \.. 12530 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 " are: 12540 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f " [expr {![hasNo 12550 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 Flags sharedFlag 12560 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 s true] ? \.. 12570 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap 12580 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 pendArgs \"$sha
12590 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22  redFlags \"] : "
125a0 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
125b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
125c0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
125d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
125e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
125f0 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d  mitSharedFlags)]
12600 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
12610 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73       ![info exis
12620 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72  ts ::no(emitShar
12630 65 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c  edFlagsIfUnavail
12640 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  able)]} then {..
12650 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12660 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 12670 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 12680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12690 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f "---- shared co 126a0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 nnection flags f 126b0 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c or "$database \
126c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
126d0 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69    " are: <unavai
126e0 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20  lable>\n"]..
126f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
12700 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
12710 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
12720 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20  NOTE: Show (and
12730 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 65  log) the detecte
12740 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74  d global connect
12750 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e  ion flags, if an
12760 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
12770 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 12780 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12790 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 127a0 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 s ::no(emitGloba 127b0 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 lFlags)] && \.. 127c0 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e (![in 127d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 127e0 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 mitGlobalFlagsIf 127f0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 12800 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e ![hasN 12810 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 oFlags ::connect 12820 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d ion_flags false] 12830 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 )} then {.. 12840 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
12850 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
12860 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
12870 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c          "---- gl
12880 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  obal connection
12890 66 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a  flags are: " \..
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
128b0 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67  xpr {![hasNoFlag
128c0 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
128d0 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d  lags false] ? \.
128e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
128f0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a  appendArgs \" $: 12900 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 12910 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" 12920 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. 12930 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 12940 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 12950 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 OTE: If there ar 12960 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 e any global (pe 12970 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e r test run) conn 12980 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 ection flags cur 12990 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 rently.. # 129a0 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 set, use t 129b0 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 hem now (i.e. by 129c0 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 combining them 129d0 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f with the ones fo 129e0 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 r this.. # 129f0 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 12a00 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 12a10 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 12a20 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e sts ::connection 12a30 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d _flags]} then {. 12a40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12a50 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 # NOTE: Comb 12a60 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 ine and/or repla 12a70 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f ce the connectio 12a80 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e n flags and then 12a90 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 show the.. 12aa0 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 # new v 12ab0 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 alue... # 12ac0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 6c .. set fl 12ad0 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 ags [combineFlag 12ae0 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e s$flags $::conn 12af0 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d ection_flags]... 12b00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12b10 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 12b20 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e (and log) the n 12b30 65 77 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e ew effective con 12b40 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a nection flags... 12b50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12b60 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12b70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12b80 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
12b90 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d  sts ::no(emitCom
12ba0 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20  binedFlags)] &&
12bb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
12bc0 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   (![info exists
12bd0 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65  ::no(emitCombine
12be0 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c  dFlagsIfNone)] |
12bf0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
12c00 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73      ![hasNoFlags
12c10 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20   flags false])}
12c20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12c30 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 12c40 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 12c50 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 12c60 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 12c70 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 ombined connecti 12c80 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
12c90 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
12cb0 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61  e: " [expr {![ha
12cc0 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66  sNoFlags flags f
12cd0 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20  alse] ? \..
12ce0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65             [appe
12cf0 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73  ndArgs \" $flags 12d00 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 12d10 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 12d20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 12d30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12d40 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 return$flags..
12d50 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
12d60 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  c getFlagsProper
12d70 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20  ty { {flags ""}
12d80 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
12d90 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
12da0 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d    # NOTE: Determ
12db0 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d  ine what the com
12dc0 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e  bined (global an
12dd0 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74  d local) connect
12de0 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
12df0 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20     flags should
12e00 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69  be, possibly qui
12e10 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  etly...      #..
12e20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
12e30 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  [getConnectionFl
12e40 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71  ags "" $flags$q
12e50 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  uiet]....      #
12e60 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12e70 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20  If no global or
12e80 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  local connection
12e90 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63   flags were spec
12ea0 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20  ified, the..
12eb0 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c    #       defaul
12ec0 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  t connection fla
12ed0 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  gs should be use
12ee0 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65  d; therefore, re
12ef0 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  turn..      #
12f00 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72      an empty str
12f10 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65  ing in that case
12f20 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
12f30 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
12f40 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20  ngth $flags] == 12f50 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 12f60 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 12f70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 12f80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12f90 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 In order to chec 12fa0 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 k if the default 12fb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 12fc0 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 s are being used 12fd0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12fe0 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 it is necessary 12ff0 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e to attempt a con 13000 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 version to the a 13010 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 ctual enumerated 13020 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13030 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 type. Failing t 13040 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 hat, the check a 13050 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 gainst the defau 13060 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 lt value will be 13070 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13080 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 skipped... 13090 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 #.. if {[ca 130a0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 tch {.. s 130b0 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 et error null; # 130c0 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 IGNORED.... 130d0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 130e0 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 e Utility TryPar 130f0 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c seFlagsEnum "" \ 13100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 13110 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 13120 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 13130 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 nFlags ""$flags
13140 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20   null true \..
13150 20 20 20 20 20 20 20 20 20 20 74 72 75 65 20 65            true e
13160 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76 61  rror..      } va
13170 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
13180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13190 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
131a0 69 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68 65  ing to parse the
131b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
131c0 73 20 63 61 75 73 65 64 20 61 20 73 63 72 69 70  s caused a scrip
131d0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
131e0 20 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74 20     error.  Emit
131f0 61 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68 65  a warning to the
13200 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 61   test log file a
13210 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20  nd continue..
13220 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69       #       usi
13230 6e 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72 69  ng an emtpy stri
13240 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20  ng instead...
13250 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13260 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67 73  tlog [appendArgs
13270 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13280 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
13290 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20 63  ailed to parse c
132a0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c  onnection flags,
132b0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
132c0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 76           \n\t $v 132d0 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 alue \n].... 132e0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 22 set value "" 132f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 13300 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13310 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69 TE: If the combi 13320 6e 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67 ned flags string 13330 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 could not actua 13340 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64 lly be converted 13350 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13360 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 to the enumerate 13370 64 20 74 79 70 65 20 69 74 20 69 73 20 74 68 65 d type it is the 13380 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 default value, 13390 74 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 then just use.. 133a0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20 # it 133b0 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 verbatim; otherw 133c0 69 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e ise, just return 133d0 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 133e0 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 . In that.. 133f0 20 20 23 20 20 20 20 20 20 20 63 61 73 65 2c 20 # case, 13400 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e the default conn 13410 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c ection flags wil 13420 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 l be used... 13430 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 13440 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
13450 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76  alue] == 0 || $v 13460 61 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74 alue ne "Default 13470 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 13480 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 13490 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 WARNING: This re 134a0 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 turns the string 134b0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f value of the co 134c0 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f mbined flags, no 134d0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 134e0 20 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72 the enumer 134f0 61 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69 ated value. Thi 13500 73 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 61 s is by design a 13510 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 nd should not.. 13520 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 13530 20 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 74 be changed wit 13540 68 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e hout careful con 13550 73 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e sideration (e.g. 13560 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 it would.. 13570 20 20 20 23 20 20 20 20 20 20 20 20 20 20 70 72 # pr 13580 65 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 event the SQLite 13590 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 Connection class 135a0 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 from allowing i 135b0 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 nvalid.. 135c0 23 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67 # ["mag 135d0 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 ical"] meta-flag 135e0 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a s)... #.. 135f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 13600 61 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67 appendArgs "Flag 13610 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a s="$flags \;]..
13620 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
13630 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
13640 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
13650 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65  nableSharedCache
13660 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c   { channel enabl
13670 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  e {quiet false}
13680 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
13690 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
136a0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
136b0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
136c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
136d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
136e0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
136f0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..
13700 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e        sqlite3_en
13710 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
13720 65 20 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61  e [expr int($ena 13730 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 ble)].. } r 13740 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 13750 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 13760 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
13770 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
13780 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 13790 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 137a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 137b0 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c ll sqlite3_enabl 137c0 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 e_shared_cache(" 137d0 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20$enable \..
137e0 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20            ")...
137f0 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e  ok: " $result \n 13800 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 13810 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 13820 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
13830 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
13840 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 13850 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 13860 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13870 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 13880 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 te3_enable_share 13890 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c d_cache("$enabl
138a0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
138b0 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20     ")... error:
138c0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 138d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 138e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 138f0 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 .. proc setup 13900 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 Db {.. 13910 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 fileName {mode 13920 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f ""} {dateTimeFo 13930 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 rmat ""} {dateTi 13940 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 meKind ""} {flag 13950 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 s ""}.. 13960 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 {extra ""} {q 13970 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 ualify true} {de 13980 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 lete true} {uri 13990 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 false}.. 139a0 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 {temporary t 139b0 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 rue} {varName db 139c0 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 139d0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 139e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 139f0 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 t, see if our ca 13a00 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 ller has request 13a10 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 ed an in-memory 13a20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 database... 13a30 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 #.. set is 13a40 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 Memory [isMemory 13a50 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d Db$fileName]...
13a60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13a70 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c  # NOTE: For now,
13a80 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61   all test databa
13a90 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20  ses used by the
13aa0 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70  test suite are p
13ab0 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20  laced..      #
13ac0 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61       into the da
13ad0 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79  tabase directory
13ae0 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65  .  Each database
13af0 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c   and related fil
13b00 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  es..      #
13b10 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74    used by a test
13b20 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e   should be clean
13b30 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65  ed up by that te
13b40 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20  st using the..
13b50 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65      #       "cle
13b60 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72  anupDb" procedur
13b70 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20  e, below...
13b80 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$13b90 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 isMemory &&$qua
13ba0 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lify} then {..
13bb0 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
13bc0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  me [file join [g
13bd0 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
13be0 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20  ory] [file tail
13bf0 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20  $fileName]].. 13c00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 13c10 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 13c20 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 y default, delet 13c30 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 e any pre-existi 13c40 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68 ng database with 13c50 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a the same file.. 13c60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 13c70 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74 me if it current 13c80 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 ly exists... 13c90 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 13ca0 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65$isMemory && $de 13cb0 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 lete && [file ex 13cc0 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
13cd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13ce0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13cf0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  TE: Attempt to d
13d00 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78  elete any pre-ex
13d10 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database
13d20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69  with the same fi
13d30 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
13d40 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20      name...
13d50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
13d60 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64   {[catch {file d
13d70 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 13d80 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 13d90 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 13da0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 13db0 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile 13dc0 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 d to delete the 13dd0 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 file, report why 13de0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 13df0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
13e00 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
13e10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
13e20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 13e30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13e50 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 13e60 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 13e70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" 13e80 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13ea0 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c  \" during setup,
13eb0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $13ec0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 13ed0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 13ee0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13ef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 13f00 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 13f10 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 13f20 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") 13f30 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 13f40 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 of our.. # 13f50 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 caller. T 13f60 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 he handle to the 13f70 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 opened database 13f80 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 will be stored 13f90 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. 13fa0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
13fb0 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
13fc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13fd0 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64  OTE: Start build
13fe0 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
13ff0 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20  on string.  The
14000 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f  only required po
14010 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
14020 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
14030 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73  ection string is
14040 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65   the data source
14050 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  , which contains
14060 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
14070 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c      database fil
14080 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20  e name itself.
14090 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61  If our caller wa
140a0 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49  nts to use a URI
140b0 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   as..      #
140c0 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72     the data sour
140d0 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c  ce, use the Full
140e0 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  Uri connection s
140f0 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74  tring property t
14100 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
14110 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74   prevent the dat
14120 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  a source string
14130 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c  from being mangl
14140 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
14150 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68      if {$uri} th 14160 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 14170 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 t connection {Fu 14180 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 llUri=${fileName
14190 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }}..      } else
141a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
141b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61  connection {Data
141c0 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61   Source=${fileNa 141d0 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me}}.. }... 141e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 141f0 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 # NOTE: Since th 14200 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 is procedure has 14210 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 no special know 14220 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 ledge of what th 14230 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 e default.. 14240 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 # setting 14250 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 is for the ToFu 14260 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f llPath connectio 14270 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 n string propery 14280 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 , always.. 14290 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 # add the 142a0 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 value we know ab 142b0 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 out to the conne 142c0 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 ction string... 142d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 #.. ap 142e0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 142f0 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 {;ToFullPath=${q
14300 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20  ualify}}....
14310 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
14320 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  E: If our caller
14330 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75   specified a jou
14340 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74  rnal mode, add t
14350 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72  he necessary por
14360 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
14370 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
14380 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
14390 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
143a0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
143b0 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d  ngth $mode] > 0} 143c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 143d0 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 143e0 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 on {;Journal Mod 143f0 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 e=${mode}}..
14400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
14410 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
14420 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63   our caller spec
14430 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65  ified a DateTime
14440 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65   format, add the
14450 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20   necessary..
14460 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f    #       portio
14470 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  n of the connect
14480 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
14490 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
144a0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
144b0 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d  th $dateTimeForm 144c0 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d at] > 0} then {. 144d0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 144e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 connection {;Dat 144f0 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 eTimeFormat=${da
14500 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a  teTimeFormat}}..
14510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14520 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14530 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
14540 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65  specified a Date
14550 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68  TimeKind, add th
14560 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
14570 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
14580 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
14590 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
145a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
145b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
145c0 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e  gth $dateTimeKin 145d0 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a d] > 0} then {.. 145e0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 145f0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date 14600 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 TimeKind=${dateT
14610 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20  imeKind}}..
14620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
14630 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
14640 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65  ure out what the
14650 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72   final flags for
14660 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
14670 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20   need to be...
14680 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
14690 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65   flags [getConne
146a0 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65  ctionFlags $file 146b0 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69 Name$flags $qui 146c0 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a et].... #.. 146d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 146e0 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec 146f0 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 ified some SQLit 14700 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 eConnectionFlags 14710 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 , add the.. 14720 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 # necessa 14730 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 ry portion of th 14740 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 14750 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 14760 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 14770 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 ring length$fla
14780 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  gs] > 0} then {.
14790 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
147a0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61  connection {;Fla
147b0 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20  gs=${flags}}.. 147c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 147d0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 147e0 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp 147f0 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 ecified an extra 14800 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 payload to the 14810 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 connection.. 14820 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 # string 14830 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e , append it now. 14840 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14850 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 14860 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d gth$extra] > 0}
14870 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14880 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
14890 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20  on \; $extra.. 148a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 148b0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 148c0 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 Open the databas 148d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 e connection now 148e0 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 , placing the op 148f0 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 aque handle valu 14900 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 14910 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 into the variab 14920 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 le specified by 14930 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 14940 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 14950 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 db [sql open -ty 14960 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 pe SQLite [subst 14970 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a$connection]]..
14980 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
14990 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75   # NOTE: Configu
149a0 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  re the temporary
149b0 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
149c0 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20  he newly opened
149d0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..
149e0 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
149f0 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75  on now unless ou
14a00 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73  r caller forbids
14a10 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20   it...      #..
14a20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72       if {$tempor 14a30 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 ary && ![info ex 14a40 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d ists ::no(setTem 14a50 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 poraryDirectory) 14a60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14a70 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 sql execute$
14a80 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  db [appendArgs \
14a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50  ..            "P
14aa0 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
14ab0 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22  _directory = \""
14ac0 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69   [getTemporaryDi
14ad0 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a  rectory] \"\;]..
14ae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14af0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14b00 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65 78  : Perform any ex
14b10 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  tra per-connecti
14b20 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68 65  on setup for the
14b30 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20   newly opened..
14b40 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
14b50 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73  abase now unless
14b60 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
14b70 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
14b80 0d 0a 20 20 20 20 20 20 73 65 74 20 65 78 65 63  ..      set exec
14b90 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74 45  uteOnSetup [getE
14ba0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a  xecuteOnSetup]..
14bb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
14bc0 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65 63  ing length $exec 14bd0 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 uteOnSetup] > 0 14be0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 14bf0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 14c00 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 75 no(executeOnSetu 14c10 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 p)]} then {.. 14c20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14c30 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d # NOTE: This com 14c40 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 61 mand may raise a 14c50 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 n error; if so, 14c60 74 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 73 that is fine, as 14c70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14c80 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 the enclosing 14c90 74 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 test will then f 14ca0 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 74 ail. The [subst 14cb0 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 ] command is.. 14cc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 14cd0 65 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e ed on the SQL in 14ce0 20 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 74 case it needs t 14cf0 6f 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 65 o refer to state 14d00 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 in our.. 14d10 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 # context 14d20 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14d30 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut 14d40 65 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 78 e$db [subst $ex 14d50 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 ecuteOnSetup].. 14d60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14d70 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 14d80 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 Always return t 14d90 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 he connection ha 14da0 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 ndle upon succes 14db0 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 14dc0 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 return$db..
14dd0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
14de0 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f  c getDbConnectio
14df0 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d  n { {varName db}
14e00 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
14e10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
14e20 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
14e30 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
14e40 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
14e50 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
14e60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
14e70 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
14e80 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
14e90 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
14ea0 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20  ned via the..
14eb0 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75     #       [setu
14ec0 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73  pDb] procedure s
14ed0 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20  hould be stored
14ee0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
14ef0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $14f00 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 14f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 14f20 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e OTE: This return 14f30 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 s the ADO.NET ID 14f40 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 bConnection obje 14f50 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 ct instance for 14f60 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 14f70 20 20 20 73 70 65 63 69 66 69 65 64 20 64 61 74 specified dat 14f80 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 abse handle. Si 14f90 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 nce getting this 14fa0 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 object relies u 14fb0 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 pon.. # 14fc0 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 Eagle interna 14fd0 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 ls, great care s 14fe0 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 hould be taken t 14ff0 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e o avoid disposin 15000 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 g of.. # 15010 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 this object 15020 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 or otherwise put 15030 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 ting it into an 15040 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a invalid state... 15050 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15060 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 15070 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 db]} then {.. 15080 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 15090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 150a0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 150b0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 s +NonPublic -ob 150c0 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 jectflags +NoDis 150d0 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 pose -alias \.. 150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 Int 150f0 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 15100 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 ve.connections I 15110 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 tem$db..
15120 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
15130 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15140 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
15150 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c  # NOTE: Success,
15160 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71   return the opaq
15170 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
15180 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
15190 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
151a0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20   $result.. 151b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 151c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 151d0 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu 151e0 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d re, report why.. 151f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15200 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
15210 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
15220 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
15230 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
15240 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
15250 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69   to get connecti
15260 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61  on handle for da
15270 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  tabase \"" \..
15280 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db 15290 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 152a0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
152b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
152c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
152d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
152e0 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  lure, return an
152f0 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c 69  obviously invali
15300 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  d opaque object
15310 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23  handle...      #
15320 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  ..      return "
15330 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  "..    }.....
15340 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e   proc freeDbConn
15350 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d  ection { {varNam
15360 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20  e connection} }
15370 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
15380 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20    # NOTE: Refer
15390 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
153a0 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20   variable (e.g.
153b0 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e  "connection") in
153c0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
153d0 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f      context of o
153e0 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20  ur caller.  The
153f0 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61  opaque object ha
15400 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e  ndle for an ADO.
15410 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20  NET..      #
15420 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72     connection pr
15430 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65  eviously returne
15440 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65  d by [getDbConne
15450 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65  ction] should be
15460 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15470 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
15480 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
15490 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 154a0 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 onnection.... 154b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 154c0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 TE: Attempt to r 154d0 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 emove the opaque 154e0 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 object handle f 154f0 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 rom the interpre 15500 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ter.. # 15510 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f now. This [o 15520 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 bject dispose] c 15530 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 all will not act 15540 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 ually dispose of 15550 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 15560 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f underlying o 15570 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 bject because th 15580 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 e +NoDispose fla 15590 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d g was set on it. 155a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 155b0 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f uring creation o 155c0 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a f the opaque obj 155d0 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 155e0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 155f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e [info exists con 15600 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 nection] && \.. 15610 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 [catch 15620 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 {object dispose 15630 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72$connection} err
15640 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
15650 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15660 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
15670 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d  ow failed to rem
15680 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20  ove the handle,
15690 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
156a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
156b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 156c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 156d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 156e0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 156f0 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 failed to remove 15700 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 15710 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 le \""$connecti
15720 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
15730 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20    "\", error: "
15740 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 15750 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 15760 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 .... proc add 15770 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 DbConnection { c 15780 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 onnection {varNa 15790 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 me db} } {.. 157a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 157b0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 157c0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 157d0 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i 157e0 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 157f0 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # 15800 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 caller... 15810 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 #.. upva 15820 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d r 1$varName db.
15830 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15840 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65    # NOTE: Create
15850 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72   a correctly for
15860 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20  matted name for
15870 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
15880 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20  nection to..
15890 20 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64    #       be add
158a0 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d  ed to the list m
158b0 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61  anaged by the Ea
158c0 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
158d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
158e0 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20   set db [object
158f0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
15900 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
15910 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d        Eagle._Com
15920 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e  ponents.Private.
15930 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61  FormatOps Databa
15940 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f  seObjectName $co 15950 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 nnection \.. 15960 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e SQLiteConn 15970 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 ection [object i 15980 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 nvoke Interprete 15990 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 r.GetActive Next 159a0 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d Id]].... #. 159b0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 159c0 64 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 dd the database 159d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 connection provi 159e0 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 159f0 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 r to the list.. 15a00 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 15a10 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 those known to t 15a20 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 he Eagle interpr 15a30 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eter... #.. 15a40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 15a50 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 15a60 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 ublic Interprete 15a70 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e r.GetActive.conn 15a80 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 ections Add \.. 15a90 20 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f$db $co 15aa0 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d nnection.. }. 15ab0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 15ac0 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c RowsFromDataTabl 15ad0 65 20 7b 20 64 61 74 61 54 61 62 6c 65 20 7d 20 e { dataTable } 15ae0 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 {.. set row 15af0 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 s [list].. 15b00 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 set count [$data
15b10 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f  Table Columns.Co
15b20 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  unt]....      fo
15b30 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20  r {set index 0}
15b40 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74  {$index <$count
15b50 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
15b60 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61  ..        set da
15b70 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54  taColumn [$dataT 15b80 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 able -alias Colu 15b90 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e mns.get_Item$in
15ba0 64 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  dex]..        se
15bb0 74 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20  t names($index) 15bc0 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c [$dataColumn Col
15bd0 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  umnName]..
15be0 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63  }....      objec
15bf0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
15c00 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61   dataRow [set da
15c10 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62  taRows [$dataTab 15c20 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 le Rows]] {.. 15c30 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 set row [li 15c40 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 st].... f 15c50 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d or {set index 0} 15c60 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e {$index < $coun 15c70 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 t} {incr index} 15c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 15c90 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 value [$dataRow
15ca0 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20   -create -alias
15cb0 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d  get_Item $index] 15cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 15cd0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 15ce0 20 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20$value] > 0 &&
15cf0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
15d00 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65   ![object invoke
15d10 20 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c   Convert IsDBNul
15d20 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20  l $value]} then 15d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c {.. l 15d40 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 15d50 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20$names($index) 15d60 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 [$value ToString
15d70 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  ]]..          }
15d80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
15d90 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20      lappend row
15da0 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e  [list $names($in
15db0 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  dex)]..
15dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
15dd0 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
15de0 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20   rows $row.. 15df0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 15e00 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d urn$rows..    }
15e10 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75  .....    proc du
15e20 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61  mpRowsFromDataTa
15e30 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f  ble { channel ro
15e40 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  ws } {..      se
15e50 74 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a  t sequence 1....
15e60 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f        foreach ro
15e70 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20  w $rows {.. 15e80 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
15e90 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
15ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78  .            [ex
15eb0 70 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20  pr {$sequence > 15ec0 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 1 ? "\n" : ""}] 15ed0 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 "---- ROW #"$se
15ee0 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20  quence :\n]....
15ef0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70         foreach p
15f00 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20  air $row {.. 15f10 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 15f20 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 th$pair] >= 2}
15f30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15f40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 15f50 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 15f60 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 15f70 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 [list [lind 15f80 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 ex$pair 0]] ":
15f90 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20  " [list [lindex
15fa0 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20  $pair 1]] \n].. 15fb0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei 15fc0 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 f {[llength$pai
15fd0 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d  r] == 1} then {.
15fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
15ff0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 16000 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 endArgs \t \.. 16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c [l 16020 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 ist [lindex$pai
16030 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c  r 0]] ": <null>\
16040 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
16050 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
16060 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 16070 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b nel \t<empty>\n; 16080 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 # NOTE: No data 16090 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ?.. }.. 160a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 160b0 20 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e incr sequen 160c0 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 ce.. }.. 160d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 160e0 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 cleanupDb { file 160f0 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 Name {varName db 16100 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d } {collect true} 16110 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d {qualify true}. 16120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16130 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 {delete tr 16140 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # 16150 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 16160 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 Attempt to force 16170 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 all pending "ga 16180 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 rbage" objects t 16190 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d o be collected,. 161a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 161b0 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 ncluding SQLite 161c0 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 statements and b 161d0 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 ackup objects; t 161e0 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 his should allow 161f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16200 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 the underlying d 16210 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 atabase file to 16220 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 be deleted... 16230 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 16240 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b$collect} then {
16250 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63  ..        collec
16260 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74  tGarbage $::test 16270 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 _channel.. 16280 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 16290 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 162a0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 162b0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 162c0 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 . "db") in the c 162d0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 ontext of our.. 162e0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 162f0 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 ler. The handle 16300 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 to the database 16310 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e previously open 16320 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 ed via the.. 16330 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 # [setup 16340 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 Db] procedure sh 16350 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 ould be stored t 16360 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. 16370 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
16380 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
16390 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
163a0 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f  TE: Close the co
163b0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  nnection to the
163c0 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54  database now.  T
163d0 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77  his should allow
163e0 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   us..      #
163f0 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65     to delete the
16400 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
16410 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20  base file...
16420 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
16430 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20  info exists db]
16440 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63  && [catch {sql c
16450 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d  lose $db} error] 16460 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16470 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 16480 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 16490 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 failed to close 164a0 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 the database, re 164b0 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 port why... 164c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 164d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
164e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
164f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
16500 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
16510 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61  iled to close da
16520 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22  tabase \"" $db " 16530 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a \", error: " \.. 16540 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 16550 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
16560 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
16570 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
16580 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72  irst, see if our
16590 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75   caller has requ
165a0 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f  ested an in-memo
165b0 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  ry database...
165c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
165d0 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d   isMemory [isMem
165e0 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d  oryDb $fileName] 165f0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 16600 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 16610 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 the full path t 16620 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 o the database f 16630 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e ile name. For n 16640 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 ow, all test.. 16650 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data 16660 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 base files are s 16670 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d tored in the tem 16680 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 porary directory 16690 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 166a0 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
166b0 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68   && $qualify} th 166c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 166d0 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file 166e0 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 join [getDataba 166f0 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 seDirectory] [fi 16700 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
16710 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e]]..      }....
16720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16730 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
16740 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65  the file still e
16750 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d  xists...      #.
16760 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 16770 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 emory &&$delete
16780 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73   && [file exists
16790 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 167a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 167b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 167c0 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 Skip deleting da 167d0 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 tabase files if 167e0 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 somebody sets th 167f0 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 e global.. 16800 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 16810 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 le to prevent it 16820 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 16830 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 16840 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 exists ::no(cle 16850 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 anupDbFile)]} th 16860 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16870 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 16880 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 16890 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 delete the test 168a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f database file no 168b0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d w... #. 168c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 168d0 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 168e0 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
168f0 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d  leName} error]]}
16900 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16910 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16920 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
16930 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
16940 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65   delete the file
16950 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
16960 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
16970 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
16980 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 16990 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 169b0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 169c0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 iled to delete d 169d0 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 169e0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
16a00 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70  " during cleanup
16a10 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
16a20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 16a30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16a40 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 16a50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16a60 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t 16a70 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 hat we skipped d 16a80 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 eleting the file 16a90 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 16aa0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co 16ab0 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 de 0.... 16ac0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
16ad0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
16ae0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
16af0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
16b00 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65  NG: skipped dele
16b10 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ting database fi
16b20 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 16b30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16b40 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 16b50 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 anup\n"].. 16b60 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 16b70 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 16b80 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 16b90 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f The file does no 16ba0 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 t exist, success 16bb0 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 !.. #.. 16bc0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 16bd0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 16be0 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d return$code.
16bf0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
16c00 72 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d  roc saveEnvironm
16c10 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e  entVariables { n
16c20 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22  ames {varName ""
16c30 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
16c40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
16c50 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65  r each name, doe
16c60 73 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72  s the live envir
16c70 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable
16c80 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20  exist?  If..
16c90 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61    #       so, sa
16ca0 76 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72  ve the value for
16cb0 20 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73   later; otherwis
16cc0 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  e, make sure the
16cd0 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20   saved..      #
16ce0 20 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73        value does
16cf0 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65   not exist eithe
16d00 72 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76  r.  The live env
16d10 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
16d20 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  es..      #
16d30 20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65    ARE NOT change
16d40 64 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64  d by this proced
16d50 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ure...      #..
16d60 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
16d70 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 16d80 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 16d90 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e set varN 16da0 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 ame savedEnv.. 16db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 }.... u 16dc0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
16dd0 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
16de0 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24    foreach name $16df0 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 names {.. 16e00 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 16e10 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d s ::env($name)]}
16e20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16e30 20 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28     set savedEnv(
16e40 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e  $name)$::env($n 16e50 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 ame).. } 16e60 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 16e70 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 16e80 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 ain savedEnv($na
16e90 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me)..        }..
16ea0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16eb0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16ec0 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63  : This is self-c
16ed0 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20  leaning.  If no
16ee0 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e  saved environmen
16ef0 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d  t variables now.
16f00 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
16f10 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65  xist, remove the
16f20 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23   array...      #
16f30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72  ..      if {[arr
16f40 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76  ay size savedEnv
16f50 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
16f60 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
16f70 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
16f80 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  nv..      }..
16f90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
16fa0 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
16fb0 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61  ntVariables { na
16fc0 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  mes {varName ""}
16fd0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
16fe0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72       # NOTE: For
16ff0 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73   each name, does
17000 20 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72   the saved envir
17010 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable
17020 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20  exist?  If..
17030 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65    #       so, re
17040 73 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20  store the saved
17050 76 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20  value and unset
17060 69 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d  it; otherwise, m
17070 61 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20  ake sure..
17080 23 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65  #       the live
17090 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
170a0 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65  iable does not e
170b0 78 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65  xist either (i.e
170c0 2e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20  . it..      #
170d0 20 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20      was not set
170e0 74 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20  to begin with).
170f0 20 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20   Both saved and
17100 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  live environment
17110 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
17120 76 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68  variables ARE ch
17130 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72  anged by this pr
17140 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20  ocedure...
17150 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
17160 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72  ring length $var 17170 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e Name] == 0} then 17180 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 17190 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 varName savedEnv 171a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 171b0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
171c0 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a  ame savedEnv....
171d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
171e0 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20  me $names {.. 171f0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 17200 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 xists savedEnv($
17210 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  name)]} then {..
17220 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
17230 65 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65  env($name)$save
17240 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20  dEnv($name).. 17250 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 17260 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 17270 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 v($name)..
17280 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
17290 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
172a0 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e  omplain ::env($n 172b0 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d ame).. }. 172c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 172d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 172e0 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d E: This is self- 172f0 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f cleaning. If no 17300 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 saved environme 17310 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 nt variables now 17320 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17330 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 exist, remove th 17340 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 e array... 17350 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 #.. if {[ar 17360 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e ray size savedEn 17370 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d v] == 0} then {. 17380 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d . unset - 17390 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 nocomplain saved 173a0 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 Env.. }.. 173b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 173c0 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 6e 65 saveSQLiteConne 173d0 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 ctionEnvironment 173e0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 {} {.. upv 173f0 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 ar 1 savedEnv sa 17400 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 vedEnv.... 17410 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 saveEnvironmentV 17420 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 17430 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 61 .. Defa 17440 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 ultFlags_SQLiteC 17450 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c onnection No_SQL 17460 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 iteConnectionNew 17470 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 Parser] \.. 17480 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 17490 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 174a0 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 c restoreSQLiteC 174b0 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e onnectionEnviron 174c0 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 174d0 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 174e0 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 174f0 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 restoreEnvir 17500 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 17510 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 17520 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5f DefaultFlags_ 17530 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 17540 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 No_SQLiteConnec 17550 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c tionNewParser] \ 17560 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 .. save 17570 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 17580 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c proc saveSQL 17590 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f iteConvertEnviro 175a0 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 nment {} {.. 175b0 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 upvar 1 savedE 175c0 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 nv savedEnv.... 175d0 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e saveEnviron 175e0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c mentVariables [l 175f0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 17600 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 Use_SQLiteConve 17610 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 rt_DefaultDbType 17620 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 Use_SQLiteConve 17630 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 rt_DefaultTypeNa 17640 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 me] \.. 17650 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d savedEnv.. } 17660 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 ..... proc re 17670 73 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e 76 65 storeSQLiteConve 17680 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d rtEnvironment {} 17690 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 176a0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 1 savedEnv saved 176b0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 Env.... res 176c0 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 toreEnvironmentV 176d0 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 176e0 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73 65 5f .. Use_ 176f0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 SQLiteConvert_De 17700 66 61 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f faultDbType Use_ 17710 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 SQLiteConvert_De 17720 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c faultTypeName] \ 17730 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 .. save 17740 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 17750 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 proc setupDb 17760 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 17770 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 k { channel log 17780 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs 17790 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
177a0 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 75 67  setting up debug
177b0 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 63 61  ger interrupt ca
177c0 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20  llback... "....
177d0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
177e0 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 76 65 45  {..        saveE
177f0 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62  nvironmentVariab
17800 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  les [list \..
17810 20 20 20 20 20 20 20 20 20 71 75 69 65 74 46 69           quietFi
17820 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 73  ndInterpreterTes
17830 74 50 61 74 68 20 71 75 69 65 74 53 65 74 75 70  tPath quietSetup
17840 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50  InterpreterTestP
17850 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ath]....
17860 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  try {..
17870 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
17880 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 74 68  NOTE: Prevent th
17890 65 20 76 65 6e 64 6f 72 20 73 63 72 69 70 74 20  e vendor script
178a0 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69 73 79  from being noisy
178b0 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 0d 0a   when creating..
178c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
178d0 20 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69    the isolated i
178e0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
178f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17900 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75      set ::env(qu
17910 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74  ietFindInterpret
17920 65 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 20  erTestPath) 1..
17930 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65           set ::e
17940 6e 76 28 71 75 69 65 74 53 65 74 75 70 49 6e 74  nv(quietSetupInt
17950 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68  erpreterTestPath
17960 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ) 1....
17970 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
17980 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure
17990 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
179a0 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c  ger and the isol
179b0 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72  ated interpreter
179c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
179d0 20 20 20 20 61 72 65 20 73 65 74 75 70 20 61 6e      are setup an
179e0 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e  d ready for use.
179f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
17a00 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73           debug s
17a10 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a  etup true true..
17a20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
17a30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
17a40 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73   Load the necess
17a50 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74  ary packages int
17a60 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69  o the isolated i
17a70 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
17a80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17a90 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b      debug eval {
17aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
17ab0 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
17ac0 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gle..
17ad0 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65   package require
17ae0 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a   Eagle.Library..
17af0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
17b00 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
17b10 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e.Test..
17b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
17b30 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
17b40 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e  NOTE: Copy the n
17b50 65 63 65 73 73 61 72 79 20 76 61 72 69 61 62 6c  ecessary variabl
17b60 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c  es into the isol
17b70 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72  ated interpreter
17b80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
17b90 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20            debug
17ba0 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74  invoke 0 set ::t
17bb0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61  est_channel $cha 17bc0 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f nnel; # NOTE: Fo 17bd0 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 r [tputs]... 17be0 20 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f debug invo 17bf0 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f ke 0 set ::test_ 17c00 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 log$log; # NOTE
17c10 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d  : For [tlog]....
17c20 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17c30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17c40 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c  Install the call
17c50 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62  back script to b
17c60 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74  e evaluated in t
17c70 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20  he isolated..
17c80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
17c90 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20  nterpreter when
17ca0 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
17cb0 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20   is interrupted
17cc0 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20  by script..
17cd0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e       #       can
17ce0 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d  cellation, etc..
17cf0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17d00 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61          debug ca
17d10 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73  llback apply {{s
17d20 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20  ender e} {..
17d30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17d40 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
17d50 68 65 63 6b 20 69 66 20 74 68 69 73 20 64 65 62  heck if this deb
17d60 75 67 67 65 72 20 63 61 6c 6c 62 61 63 6b 20 69  ugger callback i
17d70 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61  s one that we ca
17d80 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20  re about...
17d90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17da0 20 20 20 20 20 20 73 65 74 20 69 6e 74 65 72 72        set interr
17db0 75 70 74 54 79 70 65 73 20 5b 73 70 6c 69 74 20  uptTypes [split
17dc0 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70  [$e InterruptTyp 17dd0 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20 20 20 e] ", "].... 17de0 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e if {"Can 17df0 63 65 6c 65 64 22 20 69 6e 20 24 69 6e 74 65 72 celed" in$inter
17e00 72 75 70 74 54 79 70 65 73 20 7c 7c 20 5c 0d 0a  ruptTypes || \..
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24 69 6e  "Unwound" in $in 17e30 74 65 72 72 75 70 74 54 79 70 65 73 7d 20 74 68 terruptTypes} th 17e40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17e50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 17e60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 17e70 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62 6a 65 e sure the [obje 17e80 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 ct] command is a 17e90 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e 63 65 vailable. Since 17ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17eb0 23 20 20 20 20 20 20 20 74 68 69 73 20 69 73 20 # this is 17ec0 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 an isolated inte 17ed0 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b 20 66 rpreter, check f 17ee0 6f 72 20 69 74 20 74 68 65 20 68 61 72 64 0d 0a or it the hard.. 17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 17f00 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20 20 20 way... 17f10 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 17f20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 17f30 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f llength [info co 17f40 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 mmands object]] 17f50 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17f80 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65 20 # NOTE: Iterate 17f90 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 through all data 17fa0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 base connections 17fb0 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 known to the.. 17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 17fd0 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e parent in 17fe0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 terpreter... 17ff0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o 18010 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 18020 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a 65 63 lias pair [objec 18030 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 18040 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18060 20 20 24 65 20 49 6e 74 65 72 70 72 65 74 65 72$e Interpreter
18070 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d  .connections] {.
18080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18090 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
180a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
180b0 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 65  Attempt to cance
180c0 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 65  l any SQL querie
180d0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e  s in progress on
180e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
180f0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73      #       this
18100 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
18110 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...
18120 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18140 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20   {[catch {$pair 18150 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 Value.Cancel} er 18160 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18180 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
18190 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
181a0 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20  rgs \n \..
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
181c0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
181d0 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65   failed to cance
181e0 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20 5c 0d  l query for " \.
181f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18200 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e 65 63           "connec
18210 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 72 20  tion \"" [$pair 18220 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a Key] "\", error: 18230 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20 " \n\t \.. 18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18250 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20$error \n]..
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18270 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
18280 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
18290 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
182b0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 182c0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 182d0 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \n \.. 182e0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 182f0 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e 6f 74 WARNING: cannot 18300 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75 65 72 cancel any quer 18310 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ies: " \.. 18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 "t 18330 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f he \"object\" co 18340 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 76 61 mmand is not ava 18350 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 ilable\n"].. 18360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 18370 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 18380 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 }}.. 18390 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 } finally {.. 183a0 20 20 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 restore 183b0 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 EnvironmentVaria 183c0 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 bles [list \.. 183d0 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 quie 183e0 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 tFindInterpreter 183f0 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 TestPath quietSe 18400 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 tupInterpreterTe 18410 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 20 stPath].. 18420 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f }.. } erro 18430 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 18440 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 18450 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70 74 traint interrupt 18460 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 Callback.sqlite3 18470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 18480 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
18490 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
184a0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
184b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 184c0 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a Args "no, error: 184d0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
184e0 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
184f0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
18500 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 69  cleanupFile { fi
18510 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20  leName {collect
18520 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c  true} {force fal
18530 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
18540 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18550 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65  Attempt to force
18560 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61   all pending "ga
18570 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74  rbage" objects t
18580 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d  o be collected,.
18590 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
185a0 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20  ncluding SQLite
185b0 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62  statements and b
185c0 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74  ackup objects; t
185d0 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77  his should allow
185e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
185f0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
18600 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to
18610 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20  be deleted...
18620 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
18630 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 18640 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 18650 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 tGarbage$::test
18660 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
18670 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
18680 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
18690 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74  k if the file st
186a0 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  ill exists...
186b0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
186c0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 186d0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 186e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 186f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 18700 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f 18710 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 iles if somebody 18720 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c sets the global 18730 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 18740 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 # to pr 18750 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 event it... 18760 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 18770 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e {$force || ![in
18780 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
18790 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68  leanupFile)]} th
187a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
187b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
187c0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
187d0 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20  delete the test
187e0 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  file now...
187f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18800 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20    if {[set code
18810 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
18820 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65  ete $fileName} e 18830 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a rror]]} then {.. 18840 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18850 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 18860 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 18870 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 18880 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 18890 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 188a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 188b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
188c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
188d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
188e0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
188f0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
18900 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 20  elete test file
18910 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 18920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18930 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 18940 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e nup, error: " \n 18950 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
18960 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18970 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
18980 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18990 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
189a0 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65  w that we skippe
189b0 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66  d deleting the f
189c0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
189d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
189e0 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20   code 0....
189f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 18a00 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 18a10 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 18a20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 18a30 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 RNING: skipped d 18a40 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c eleting test fil 18a50 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
18a60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18a70 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
18a80 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  nup\n"]..
18a90 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
18aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
18ab0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
18ac0 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
18ad0 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21   exist, success!
18ae0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18af0 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
18b00 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
18b10 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a    return $code.. 18b20 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 18b30 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f 72 79 oc cleanupMemory 18b40 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75 69 65 { varName {quie 18b50 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 18b60 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 18b70 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 18b80 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 18b90 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 18ba0 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20$varName] > 0}
18bb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
18bc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
18bd0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20  E: Refer to the
18be0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62  specified variab
18bf0 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63  le (e.g. "connec
18c00 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20  tion") in the..
18c10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
18c20 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
18c30 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75  ller.  The opaqu
18c40 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20  e object handle
18c50 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  for an..
18c60 23 20 20 20 20 20 20 20 41 44 4f 2e 4e 45 54 20  #       ADO.NET
18c70 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69  connection previ
18c80 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62  ously returned b
18c90 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  y [getDbConnecti
18ca0 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20  on]..        #
18cb0 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 73       should be s
18cc0 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
18cd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18ce0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 18cf0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a e connection.... 18d00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 18d10 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 18d20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
18d30 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 73  onnection Releas
18d40 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20  eMemory..
18d50 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e   } result]} then
18d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
18d70 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 18d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 18d90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
18da0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
18db0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18dc0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
18dd0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6c  G: failed to rel
18de0 65 61 73 65 20 64 61 74 61 62 61 73 65 20 6d 65  ease database me
18df0 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22 20 5c  mory, error: " \
18e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18e10 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c    \n\t $result \ 18e20 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 18e30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 18e40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 18e50 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 {[llength [info 18e60 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d 5d commands debug]] 18e70 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 18e80 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 18e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 {.. up 18ea0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 level 1 [list de 18eb0 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 20 20 20 bug purge].. 18ec0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 18ed0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18ee0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
18ef0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
18f00 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 18f10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18f20 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 18f30 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 18f40 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 18f50 70 75 72 67 65 20 63 61 6c 6c 20 66 72 61 6d 65 purge call frame 18f60 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e \n 18f80 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
18f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
18fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
18fb0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
18fc0 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65            upleve
18fd0 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20  l 1 [list debug
18fe0 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20 20 20  cleanup]..
18ff0 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65    } result]} the
19000 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
19010 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 19020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19030 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19040 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19050 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19060 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
19070 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c  NG: failed to cl
19080 65 61 6e 75 70 20 69 6e 74 65 72 70 72 65 74 65  eanup interprete
19090 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  r, error: " \..
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
190b0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 190c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 190d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 190e0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 190f0 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 . uplev 19100 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 el 1 [list debug 19110 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20 20 20 collect].. 19120 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 } result]} th 19130 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19140 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
19150 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19160 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19170 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19180 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 19190 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 191a0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 ING: failed to c 191b0 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 2c 20 ollect garbage, 191c0 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 191d0 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 191e0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
191f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19200 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
19210 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
19220 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 43 6f 75  c setupMemoryCou
19230 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 6d 65 20  nters { varName
19240 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
19250 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
19260 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
19270 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
19280 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 6e 74  1 $varName count 19290 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 er.... se 192a0 74 20 63 6f 75 6e 74 65 72 28 31 29 20 5b 6f 62 t counter(1) [ob 192b0 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 ject create -ali 192c0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 192d0 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 System.Diagnos 192e0 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 tics.Performance 192f0 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 Counter Process 19300 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 19310 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b 66 69 Working Set" [fi 19320 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil 19330 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 e tail$::bin_fi
19340 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  le]]]....
19350 20 73 65 74 20 63 6f 75 6e 74 65 72 28 32 29 20   set counter(2)
19360 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
19370 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
19380 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67       System.Diag
19390 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61  nostics.Performa
193a0 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65  nceCounter Proce
193b0 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..
193c0 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 20 50    "Working Set P
193d0 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e  eak" [file rootn
193e0 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ame [file tail $193f0 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d ::bin_file]]]... 19400 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 . set cou 19410 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 63 74 20 nter(3) [object 19420 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d create -alias \. 19430 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 19440 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e tem.Diagnostics. 19450 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 PerformanceCount 19460 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 er Process \.. 19470 20 20 20 20 20 20 20 20 20 20 22 50 72 69 76 61 "Priva 19480 74 65 20 42 79 74 65 73 22 20 5b 66 69 6c 65 20 te Bytes" [file 19490 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 rootname [file t 194a0 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d ail$::bin_file]
194b0 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
194c0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
194d0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
194e0 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72 79 43  oc reportMemoryC
194f0 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 6e 6e 65  ounters { channe
19500 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 66 69 78  l varName prefix
19510 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
19520 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
19530 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
19540 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
19550 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 6e   1 $varName coun 19560 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ter.... t 19570 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
19580 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19590 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 22           "---- "
195a0 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e 74   $prefix " count 195b0 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 er \"" \.. 195c0 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in 195d0 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 voke$counter(1)
195e0 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22 5c   CounterName] "\
195f0 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d 0a  " value is " \..
19600 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a              [obj
19610 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e  ect invoke $coun 19620 74 65 72 28 31 29 20 52 61 77 56 61 6c 75 65 5d ter(1) RawValue] 19630 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 19640 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19650 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
19660 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19670 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e  " $prefix " coun 19680 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ter \"" \.. 19690 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 [object i 196a0 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 nvoke$counter(2
196b0 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22  ) CounterName] "
196c0 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d  \" value is " \.
196d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62  .            [ob
196e0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75  ject invoke $cou 196f0 6e 74 65 72 28 32 29 20 52 61 77 56 61 6c 75 65 nter(2) RawValue 19700 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 19710 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
19720 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
19730 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
19740 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75   " $prefix " cou 19750 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 nter \"" \.. 19760 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 [object 19770 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 invoke$counter(
19780 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20  3) CounterName]
19790 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c  "\" value is " \
197a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f  ..            [o
197b0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co 197c0 75 6e 74 65 72 28 33 29 20 52 61 77 56 61 6c 75 unter(3) RawValu 197d0 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d e] \n].. }. 197e0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 197f0 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 roc collectGarba 19800 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 ge { channel {mi 19810 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d lliseconds 1000} 19820 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20 {quiet true} } 19830 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 {.. if {[ha 19840 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 19850 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 19860 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 19870 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 19880 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 object invoke GC 19890 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 GetTotalMemory 198a0 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d false.. } 198b0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 result] == 0} t 198c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 198d0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
198e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
198f0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 19900 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19920 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 "---- memory in 19930 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 use by the CLR b 19940 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e efore collection 19950 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ... " \.. 19960 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74$result
19970 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
19980 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19990 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
199a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 199b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 199c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 199d0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 199e0 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 : failed to get 199f0 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 CLR memory usage 19a00 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 19a10 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 19a20 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
19a30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
19a40 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23  ....      ######
19a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a90 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  ###....      #..
19aa0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
19ab0 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74  peatedly attempt
19ac0 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62   to collect garb
19ad0 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c  age until the al
19ae0 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20  lotted number..
19af0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
19b00 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73  milliseconds has
19b10 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79   elapsed.  Alway
19b20 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  s attempt to col
19b30 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20  lect garbage..
19b40 20 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c      #       at l
19b50 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20  east once...
19b60 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
19b70 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
19b80 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
19b90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74  ..        set st
19ba0 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  art [clock secon
19bb0 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ds]..        set
19bc0 20 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74   stop [expr {$st 19bd0 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 art + ($millisec
19be0 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a  onds / 1000)}]..
19bf0 0d 0a 20 20 20 20 20 20 20 20 64 6f 20 7b 0d 0a  ..        do {..
19c00 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
19c10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
19c20 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20  ttempt to force
19c30 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63  a full garbage c
19c40 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20  ollection now.
19c50 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20  Report any..
19c60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72        #       er
19c70 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f  ror that is enco
19c80 75 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61  untered if we fa
19c90 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  il...          #
19ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
19cb0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
19cc0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
19cd0 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
19ce0 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20 20 20 20  emory true..
19cf0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20        } error]}
19d00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
19d10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 19d20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 19d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19d40 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 19d50 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 failed full gar 19d60 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c bage collection, 19d70 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c \n\ 19d90 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
19da0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
19db0 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b         set now [
19dc0 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a  clock seconds]..
19dd0 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20          } while
19de0 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20  {$start <=$now
19df0 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d  && $now <$stop}
19e00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
19e10 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
19e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e50 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
19e60 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
19e70 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
19e80 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
19e90 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
19ea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
19eb0 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65  ect invoke GC Ge
19ec0 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c  tTotalMemory fal
19ed0 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  se..        } re
19ee0 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
19ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
19f00 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 19f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 19f20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
19f30 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
19f50 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  -- memory in use
19f60 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65   by the CLR afte
19f70 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20  r collection...
19f80 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
19f90 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62       $result " b 19fa0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 19fb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 19fc0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 19fd0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
19fe0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
19ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1a000 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1a010 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20  iled to get CLR
1a020 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72  memory usage, er
1a030 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
1a040 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1a050 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1a060 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1a070 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1a080 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 getSQLiteHandle 1a090 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c Counts { channel 1a0a0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 1a0b0 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 {.. set re 1a0c0 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 sult [list].... 1a0d0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1a0e0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1a0f0 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 d] && \.. 1a100 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 [haveSQLiteDe 1a110 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 fineConstant COU 1a120 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e NT_HANDLE]} then 1a130 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 1a140 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 1a150 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c dd each critical 1a160 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f handle count to 1a170 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c the resulting l 1a180 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ist... #. 1a190 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 1a1a0 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e name [list conn 1a1b0 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 ectionCount stat 1a1c0 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 ementCount backu 1a1d0 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 pCount] {.. 1a1e0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1a1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 1a200 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1a210 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1a220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a230 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1a240 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 24 Lite.DebugData$
1a250 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..
1a260 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74  } value] == 0} t
1a270 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1a280 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1a290 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a2a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1a2b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1a2c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a2d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74        "---- crit
1a2e0 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
1a2f0 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20  t \"" $name "\" 1a300 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d is "$value \n].
1a310 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61  ..            la
1a330 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61  ppend result $va 1a340 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lue.. } 1a350 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1a360 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1a370 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1a380 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1a390 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1a3a0 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20  : failed to get
1a3b0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
1a3c0 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20  count \"" \..
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61               $na 1a3e0 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 me "\", error: " 1a3f0 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d \n\t$value \n]
1a400 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1a410 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1a420 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65  } elseif {!$quie 1a430 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1a440 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1a450 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c NOTE: The actual 1a460 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 handle counts a 1a470 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 re not available 1a480 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 ; therefore, jus 1a490 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 1a4a0 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 return an emp 1a4b0 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ty list... 1a4c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1a4d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
1a4e0 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
1a4f0 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c  e counts unavail
1a500 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d  able\n"..      }
1a510 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1a520 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 1a530 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 .... proc shu 1a540 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 tdownSQLite { ch 1a550 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c annel {force fal 1a560 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 se} {quiet false 1a570 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1a580 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 1a590 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c ke sure that SQL 1a5a0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 1a5b0 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 is completely s 1a5c0 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a hutdown. This.. 1a5d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 1a5e0 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 used by tests t 1a5f0 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 hat change confi 1a600 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 guration options 1a610 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 and/or those.. 1a620 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 1a630 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 t need to make s 1a640 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 ure logging is i 1a650 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e nitialized (i.e. 1a660 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 just in case.. 1a670 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1a680 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 1a690 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c rary was initial 1a6a0 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 ized in the proc 1a6b0 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 ess prior to.. 1a6c0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1a6d0 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 SQLiteLog class 1a6e0 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 being able to se 1a6f0 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 tup its logging 1a700 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 callback)... 1a710 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c # Normal 1a720 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 ly, this should 1a730 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 only be performe 1a740 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c d if SQLite is l 1a750 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 oaded and.. 1a760 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 # ready f 1a770 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 1a780 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 1a790 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 #.. if {$f
1a7a0 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74  orce || [isSQLit
1a7b0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
1a7c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a7d0 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61      # BUGFIX: Ma
1a7e0 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79  ke sure that any
1a7f0 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61   "leaked" transa
1a800 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
1a810 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20  nnections..
1a820 20 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65     #         are
1a830 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f   cleaned up befo
1a840 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e  re calling the n
1a850 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66  ative shutdown f
1a860 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...
1a870 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
1a880 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  each transaction
1a890 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69   [info transacti
1a8a0 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ons] {..
1a8b0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61    if {[string ma
1a8c0 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  tch \..
1a8d0 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61       System#Data
1a8e0 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72  #SQLite#SQLiteTr
1a8f0 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61  ansaction#* $tra 1a900 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 nsaction]} then 1a910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1a920 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1a930 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74 sql t 1a940 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 ransaction rollb 1a950 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e ack$transaction
1a960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
1a970 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65  error] == 0} the
1a980 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1a990 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1a9a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a9b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1a9c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1a9d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1a9e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1a9f0 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b  rolled back leak
1aa00 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c  ed transaction \
1aa10 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1aa20 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73            $trans 1aa30 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 action \"\n].. 1aa40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1aa50 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1aa60 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1aa70 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1aa80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1aa90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1aaa0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1aab0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1aac0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1aad0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1aae0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b to rollback leak 1aaf0 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c ed transaction \ 1ab00 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1ab10 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73$trans
1ab20 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f  action "\", erro
1ab30 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1ab40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1ab50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1ab60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1ab70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1ab80 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1ab90 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 db [info connect 1aba0 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ions] {.. 1abb0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d if {[string m 1abc0 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 atch \.. 1abd0 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 System#Dat 1abe0 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 a#SQLite#SQLiteC 1abf0 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d onnection#*$db]
1ac00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ac10 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1ac20 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d   {sql close $db} 1ac30 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 error] == 0} th 1ac40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ac50 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1ac60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ac70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1ac80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1ac90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1aca0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1acb0 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 closed leaked d 1acc0 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 atabase \""$db
1acd0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
1ace0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1acf0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1ad10 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ad30 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1ad40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad60 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1ad70 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73  : failed to clos
1ad80 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73  e leaked databas
1ad90 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62               $db 1adb0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 1adc0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ade0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1adf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1ae00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ae10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42    #..        # B
1ae20 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61  UGFIX: Before ca
1ae30 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  lling the native
1ae40 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69   shutdown functi
1ae50 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f  on, make sure bo
1ae60 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  th..        #
1ae70 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41        of the PRA
1ae80 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65  GMA related dire
1ae90 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20  ctory names are
1aea0 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  freed...
1aeb0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
1aec0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
1aed0 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72  ries $channel tr 1aee0 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ue.... if 1aef0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1af00 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1af10 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1af20 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 1af30 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 1af40 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 1af50 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 NativeMethods sq 1af60 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a lite3_shutdown.. 1af70 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1af80 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1af90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1afa0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1afb0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1afc0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1afd0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1afe0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 1aff0 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 all sqlite3_shut 1b000 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 down()... ok: " 1b010 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1b020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b030 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1b040 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1b050 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1b060 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1b070 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1b080 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1b090 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
1b0a0 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
1b0b0 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c  ()... error: " \
1b0c0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1b0d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b0e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1b0f0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1b100 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 proc reportSQLit 1b110 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20 20 eResources {.. 1b120 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65 channe 1b130 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 l {quiet false} 1b140 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63 6f {reset true} {co 1b150 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d llect true} } {. 1b160 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1b170 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c # NOTE: If avail 1b180 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 able, report on 1b190 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 (and possibly re 1b1a0 73 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 set) the runtime 1b1b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1b1c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 configuration st 1b1d0 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 atistics... 1b1e0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 #.. if {[h 1b1f0 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 1b200 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 ommand] && \.. 1b210 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon 1b220 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e straint buildCon 1b230 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 figuration.Debug 1b240 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 ] && [catch {.. 1b250 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1b260 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1b270 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d Public -alias \. 1b280 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 1b290 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1b2a0 44 65 62 75 67 44 61 74 61 20 73 65 74 74 69 6e DebugData settin 1b2b0 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 20 gReadCounts.. 1b2c0 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 } settingRead 1b2d0 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 Counts] == 0} th 1b2e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 1b2f0 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 t nameCount [$se
1b300 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20  ttingReadCounts
1b310 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20  Count]..
1b320 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30  set valueCount 0
1b330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65  ....        obje
1b340 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
1b350 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52  s pair $settingR 1b360 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 eadCounts {.. 1b370 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 incr valu 1b380 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 eCount [$pair Va
1b390 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue]....
1b3a0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1b3b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b3c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1b3d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1b3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b3f0 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c   "---- setting \
1b400 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22  "" [$pair Key] " 1b410 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d \" was read " \. 1b420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b430 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 [$pair Value] "
1b440 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   times\n"]..
1b450 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1b460 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1b470 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 1b480 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1b490 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69 6e 67 [catch {$setting
1b4a0 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 72  ReadCounts Clear
1b4b0 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74  } error] == 0} t
1b4c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b4d0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1b4e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b4f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b500 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b520 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65        "---- rese
1b530 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
1b540 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 65  tics for the pre
1b550 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20  vious " \..
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61               $na 1b570 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 meCount " names 1b580 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e and "$valueCoun
1b590 74 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c  t " values read\
1b5a0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
1b5b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   }..          }
1b5c0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1b5d0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1b5e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1b5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b600 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1b610 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 failed to reset 1b620 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 setting statist 1b630 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 ics for " \.. 1b640 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 "th 1b650 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 e previous "$na
1b660 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20  meCount " names
1b670 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e  and " $valueCoun 1b680 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 1b690 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 " values re 1b6a0 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ad, error: " \n\ 1b6b0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
1b6c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1b6d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1b6e0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1b6f0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
1b700 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  and] && \..
1b710 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
1b720 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49  DefineConstant I
1b730 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1b740 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ABLE] && \..
1b750 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74        [haveSQLit
1b760 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
1b770 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
1b780 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ES]} then {..
1b790 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1b7a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b7b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1b7c0 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74  el "---- current
1b7d0 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
1b7e0 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
1b7f0 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
1b800 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1b810 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1b820 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1b830 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1b840 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1b850 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1b860 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
1b870 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65  ry bytesAllocate
1b880 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  d..        } mem
1b890 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
1b8a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1b8b0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1b8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b8d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1b8e0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 1b8f0 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 1b900 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1b910 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1b920 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1b930 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 1b940 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1b950 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1b960 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1b970 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1b980 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1b990 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1b9a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1b9b0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1b9c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b9d0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1b9e0 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
1b9f0 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
1ba00 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22  QLiteMemory... "
1ba10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
1ba20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1ba30 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
1ba40 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
1ba50 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
1ba60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ba70 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1ba80 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20  te.SQLiteMemory
1ba90 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
1baa0 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
1bab0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
1bac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1bad0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1bae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1baf0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1bb00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 1bb10 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 1bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1bb30 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1bb40 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 1bb50 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 1bb60 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1bb70 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1bb90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1bba0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
1bbb0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1bbc0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1bbd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
1bbe0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1bbf0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1bc00 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
1bc10 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
1bc20 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e   use by SQLite..
1bc30 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
1bc40 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1bc50 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1bc60 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
1bc70 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1bc80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1bc90 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1bca0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1bcc0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1bcd0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
1bce0 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d  hods sqlite3_mem
1bcf0 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20  ory_used..
1bd00 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
1bd10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1bd20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1bd30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bd40 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1bd50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1bd60 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ 1bd70 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 1bd80 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1bd90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 1bda0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1bdb0 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c E: Maybe the SQL 1bdc0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 1bdd0 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f is unavailable? 1bde0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1bdf0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 1be00 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 1be10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1be20 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1be30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1be40 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1be50 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
1be60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1be70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1be80 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1be90 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61    set memory una
1bea0 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20  vailable....
1beb0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1bec0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bed0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1bee0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 1bef0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 1bf00 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1bf10 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 1bf20 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 t$memory; # NOT
1bf30 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79  E: Return memory
1bf40 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63   in-use to our c
1bf50 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20  aller.....
1bf60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1bf70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 1bf80 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
1bf90 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79  - maximum memory
1bfa0 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74   in use by SQLit
1bfb0 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  e... "..      }.
1bfc0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1bfd0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1bfe0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1bff0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1c000 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1c010 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1c020 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1c030 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1c040 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1c050 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
1c060 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
1c070 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1c080 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
1c090 72 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  r 0..        } m
1c0a0 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
1c0b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1c0c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1c0d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c0e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1c0f0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 1c100 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 1c110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c120 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1c130 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1c140 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 1c150 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 ybe the SQLite c 1c160 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ore library is u 1c170 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 1c180 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1c190 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 1c1a0 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 1c1b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1c1c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c1d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1c1e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1c1f0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
1c200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c210 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1c220 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1c230 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61   memory unavaila
1c240 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ble....        i
1c250 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1c260 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 1c270 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1c280 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 1c290 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1c2a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1c2b0 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 if {$collect}
1c2c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1c2d0 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24  collectGarbage $1c2e0 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 1c2f0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 .... if {!$
1c300 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1c310 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1c320 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 annel "---- curr 1c330 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 ent memory in us 1c340 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 e by the CLR... 1c350 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 1c360 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 1c370 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 1c380 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1c390 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1c3a0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1c3b0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 1c3c0 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 1c3d0 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 1c3e0 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 1c3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1c400 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 [string is integ 1c410 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f er -strict$memo
1c420 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
1c430 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1c440 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1c450 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1c460 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1c470 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 1c480 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 1c490 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1c4a0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1c4b0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d set m 1c4c0 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d emory invalid... 1c4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1c4e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1c4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c500 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1c510 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
1c520 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
1c530 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1c540 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
1c550 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1c560 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
1c570 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
1c580 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1c590 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1c5a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1c5b0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1c5c0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 1c5d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1c5e0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 1c5f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 1c600 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d ory unavailable. 1c610 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 1c620 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1c630 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1c640 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1c650 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
1c660 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1c670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
1c680 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 1c690 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1c6a0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 1c6b0 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 irectories { cha 1c6c0 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 nnel {reset fals 1c6d0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 1c6e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 1c6f0 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 heck if the sqli 1c700 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 1c710 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 1c720 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a is available... 1c730 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 #.. t 1c740 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d puts$channel \.
1c750 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
1c760 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75   checking for fu
1c770 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77  nction sqlite3_w
1c780 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
1c790 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
1c7a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1c7b0 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74  : This call to t
1c7c0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
1c7d0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
1c7e0 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65  unction uses the
1c7f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1c800 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20  invalid value 0
1c810 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72  for the first ar
1c820 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  gument.  This co
1c830 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a  de is designed..
1c840 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
1c850 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e   check if callin
1c860 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77  g the function w
1c870 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63  ill raise an exc
1c880 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20  eption (i.e...
1c890 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1c8a0 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66  actual result of
1c8b0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f   the function do
1c8c0 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73  es not matter as
1c8d0 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20   long as no..
1c8e0 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
1c8f0 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29  tory is changed)
1c900 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1c910 20 20 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73    if {[isWindows
1c920 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20  ] && [catch {..
1c930 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1c940 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1c950 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
1c960 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1c970 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
1c980 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
1c990 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1c9a0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1c9b0 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a  rectory 0 null..
1c9c0 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
1c9d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1c9e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1c9f0 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71  : Calling the sq
1ca00 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
1ca10 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
1ca20 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20  on does not..
1ca30 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75       #       cau
1ca40 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b  se an exception;
1ca50 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d   therefore, it m
1ca60 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ust be available
1ca70 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20   (i.e...
1ca80 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f  #       even tho
1ca90 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65  ugh it should re
1caa0 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72  turn a failure r
1cab0 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68  eturn code in th
1cac0 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
1cad0 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20      case)...
1cae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
1caf0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c  ddConstraint sql
1cb00 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
1cb10 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20  irectory....
1cb20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1cb30 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 el yes\n.... 1cb40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1cb50 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 NOTE: Does our 1cb60 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 caller want to r 1cb70 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f eset the directo 1cb80 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 ries?.. # 1cb90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
1cba0 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
1cbb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1cbc0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
1cbd0 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
1cbe0 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
1cbf0 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65  orary directorie
1cc00 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20  s are..
1cc10 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74   #       reset t
1cc20 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
1cc30 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
1cc40 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
1cc50 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  th...          #
1cc60 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65         Since the
1cc70 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1cc80 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
1cc90 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ction is availab
1cca0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le,..          #
1ccb0 20 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a         use it...
1ccc0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1ccd0 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20         for {set
1cce0 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78  index 1} {$index 1ccf0 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 < 3} {incr inde 1cd00 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 x} {.. 1cd10 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 1cd30 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1cd40 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cd60 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1cd70 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 1cd80 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 1cda0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1cdb0 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 _directory$inde
1cdc0 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  x null..
1cdd0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
1cde0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1cdf0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1ce00 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1ce10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ce20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ce30 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e call sqlite3_win 1ce40 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 1ce50 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 ("$index \..
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ce70 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22  , null)... ok: "
1ce80 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1ce90 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1cea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ceb0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1cec0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cee0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
1cef0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
1cf00 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65  irectory(" $inde 1cf10 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x \.. 1cf20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e ", null). 1cf30 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 .. error: " \n\t 1cf40 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
1cf50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1cf60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1cf70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1cf80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
1cf90 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 1cfa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1cfb0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 1cfc0 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 oes our caller w 1cfd0 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 ant to reset the 1cfe0 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 directories? T 1cff0 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 his can only.. 1d000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 1d010 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 performed if SQ 1d020 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 Lite is loaded a 1d030 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 1d040 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 by the test.. 1d050 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 # su 1d060 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ite... #. 1d070 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 . if {$re
1d080 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65  set && [isSQLite
1d090 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
1d0a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d0b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
1d0c0 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  ow make sure the
1d0d0 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
1d0e0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
1d0f0 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  ies are..
1d100 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74     #       reset
1d110 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
1d120 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f  alues, which sho
1d130 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20  uld be null for
1d140 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  both...
1d150 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74   #       Since t
1d160 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
1d170 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
1d180 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
1d190 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
1d1a0 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65      appear to be
1d1b0 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20   available, use
1d1c0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50  the associated P
1d1d0 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a  RAGMA commands..
1d1e0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1d1f0 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20    instead...
1d200 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d210 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63     foreach direc
1d220 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f  tory [list data_
1d230 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
1d240 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
1d250 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  tory] {..
1d260 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70       set sql [ap
1d270 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41  pendArgs "PRAGMA
1d280 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20   " $directory " 1d290 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 = \"\";"].... 1d2a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1d2b0 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 1d2c0 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d$sql} result] ==
1d2d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1d2e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d2f0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1d300 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d310 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1d320 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 execute PRAGMA " 1d330 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
1d340 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20   ok: \"" \..
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 1d360 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 1d370 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1d380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d390 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1d3a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d3c0 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50   "---- execute P
1d3d0 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 1d3e0 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 ry "... error: " 1d3f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d400 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 \n\t$resu
1d410 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1d420 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1d430 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1d440 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d450 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1d460 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74   Finally, show t
1d470 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
1d480 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1d490 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a   and temporary..
1d4a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
1d4b0 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73  rectories.  This
1d4c0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72   can only be per
1d4d0 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65  formed if SQLite
1d4e0 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20   is loaded..
1d4f0 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
1d500 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74  ady for use by t
1d510 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
1d520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1d530 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64  f {[isSQLiteRead
1d540 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
1d550 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65      foreach dire
1d560 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61  ctory [list data
1d570 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
1d580 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1d590 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20  ctory] {..
1d5a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1d5b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 1d5c0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 ---- checking " 1d5d0 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
1d5e0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
1d5f0 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41  set sql [appendA
1d600 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64  rgs "PRAGMA " $d 1d610 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a irectory \;].... 1d620 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 1d630 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql 1d640 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65$sql scalar} re
1d650 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
1d660 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d670 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1d680 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 appendArgs "ok: 1d690 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e \""$result \"\n
1d6a0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
1d6b0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d6c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d6d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 l [appendArgs "e 1d6e0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 rror: " \n\t$re
1d6f0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1d700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1d710 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1d720 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f  .....    proc lo
1d730 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
1d740 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ings { channel {
1d750 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65  suffix ""} {quie
1d760 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
1d770 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1d780 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e  OTE: Skip loadin
1d790 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69  g the settings i
1d7a0 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61  f their usage ha
1d7b0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e  s been disabled.
1d7c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1d7d0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1d7e0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65  ts ::no(sqliteTe
1d7f0 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68  stSettings)]} th
1d800 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1d810 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1d820 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72   Load custom per
1d830 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
1d840 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69  -host test setti
1d850 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ngs now...
1d860 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
1d870 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1d880 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65  tcl_platform(use
1d890 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r)]} then {..
1d8a0 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53         set userS
1d8b0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
1d8c0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43  [file join [getC
1d8d0 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20  ommonDirectory]
1d8e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d8f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74   [appendArgs set
1d900 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20  tings $suffix . 1d910 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
1d920 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a  user) .eagle]]..
1d930 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1d940 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73  [file exists $us 1d950 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 1d960 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 1d970 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1d980 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1d990 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1d9a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1d9b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1d9d0 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 - loading per-us 1d9e0 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 er test settings 1d9f0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1da10 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
1da20 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20  Name \"...\n]..
1da30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1da40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1da50 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1da60 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1da70 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24  1 [list source $1da80 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 1da90 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 1daa0 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 } error]} the 1dab0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1dac0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1dad0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1dae0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1daf0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1db00 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1db10 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1db20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1db30 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 to load per-user 1db40 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 1db50 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1db60 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53$userS
1db70 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
1db80 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
1db90 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1dbc0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1dbd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1dbe0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1dbf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1dc00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1dc10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dc30 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped 1dc40 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 loading per-user 1dc50 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 test settings f 1dc60 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73$us
1dc80 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
1dc90 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20  me "\", it does
1dca0 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
1dcb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1dcc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1dcd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1dce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd20 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
1dd30 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1dd40 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  sts ::tcl_platfo
1dd50 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20  rm(host)]} then
1dd60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
1dd70 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c   hostSettingsFil
1dd80 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
1dd90 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63   [getCommonDirec
1dda0 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
1ddb0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
1ddc0 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66  gs settings $suf 1ddd0 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 fix .$::tcl_pla
1dde0 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67  tform(host) .eag
1ddf0 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le]]....
1de00 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
1de10 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73  ts $hostSettings 1de20 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 FileName]} then 1de30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1de40 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1de50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1de60 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1de70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1de90 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 "---- loading 1dea0 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 per-host test se 1deb0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 1dec0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ded0 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e$hostSettin
1dee0 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e  gsFileName \"...
1def0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
1df00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1df10 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70                up
1df30 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f  level 1 [list so
1df40 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e  urce $hostSettin 1df50 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 gsFileName].. 1df60 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 1df70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1df80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1df90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1dfb0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1dfc0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dfe0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1dff0 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 ailed to load pe 1e000 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 r-host settings 1e010 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e030 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
1e040 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  eName "\", error
1e050 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1e060 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 1e070 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e080 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e090 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1e0a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e0b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e0c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1e0d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1e0e0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1e0f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 1e100 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 ipped loading pe 1e110 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett 1e120 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 1e130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e140 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
1e150 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74  FileName "\", it
1e160 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
1e170 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
1e180 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1e190 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1e1a0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1e1b0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74     proc runSQLit
1e1c0 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d  eTestPrologue {}
1e1d0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
1e1e0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1e1f0 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74  running our cust
1e200 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74  om prologue if t
1e210 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20  he main one has
1e220 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  been..      #
1e230 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20      skipped...
1e240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1e250 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1e260 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67  :no(prologue.eag
1e270 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
1e280 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e290 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
1e2a0 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72  e "before-constr
1e2b0 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65  aints" custom pe
1e2c0 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
1e2d0 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20  r-host..
1e2e0 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74  #       test set
1e2f0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
1e300 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75      #..        u
1e310 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c  plevel 1 [list l
1e320 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
1e330 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68  tings $::test_ch 1e340 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a annel .before].. 1e350 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1e360 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1e370 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 ck if the [objec 1e380 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 t] command is av 1e390 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c ailable; if not, 1e3a0 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 add some.. 1e3b0 20 20 20 23 20 20 20 20 20 20 20 73 68 69 6d 73 # shims 1e3c0 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73 to make the tes 1e3d0 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f t suite run smoo 1e3e0 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 ther... # 1e3f0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 1e400 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f orSQLiteObjectCo 1e410 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 mmand$::test_ch
1e420 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
1e430 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1e440 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68  TE: Determine th
1e450 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e  e names of the n
1e460 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61  ative platform a
1e470 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e  nd architecture.
1e480 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1e490 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
1e4a0 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  m [getBuildPlatf
1e4b0 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20  orm true]..
1e4c0 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74     set architect
1e4d0 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72  ure [architectur
1e4e0 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c  eForPlatform $pl 1e4f0 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... 1e500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1e510 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 NOTE: Show the p 1e520 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 latform and arch 1e530 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f itecture used to 1e540 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 help locate the 1e550 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1e560 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 native build f 1e570 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 iles... # 1e580 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1e590 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1e5a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1e5b0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1e5c0 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f   platform for lo
1e5d0 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75  cating native bu
1e5e0 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22  ild files is \""
1e5f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1e600 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d  $platform \"\n]. 1e610 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 1e620 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1e630 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1e640 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1e650 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66  - architecture f
1e660 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69  or locating nati
1e670 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69  ve build files i
1e680 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  s \"" \..
1e690 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 1e6a0 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 re \"\n].... 1e6b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1e6c0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c NOTE: Build a l 1e6d0 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 ist of configura 1e6e0 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 tion files that 1e6f0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 we handle... 1e700 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1e710 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d et configFileNam 1e720 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 1e730 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1e740 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 ata.SQLite.dll.c 1e750 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 onfig].... 1e760 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1e770 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 OTE: Build a lis 1e780 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d t of auxiliary M 1e790 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 anaged Debugging 1e7a0 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 Assistants (MDA 1e7b0 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ).. # 1e7c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration 1e7d0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 1e7e0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 1e7f0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 1e800 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 1e810 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1e820 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 1e830 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 l32.exe.mda.conf 1e840 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 ig Installer.exe 1e850 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 .mda.config \.. 1e860 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e test. 1e870 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 exe.mda.config t 1e880 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e estlinq.exe.mda. 1e890 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 config \.. 1e8a0 20 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 testef6.ex 1e8b0 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d e.mda.config]... 1e8c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1e8d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 1e8e0 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 d the list of ex 1e8f0 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 ternal files tha 1e900 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f t we handle. So 1e910 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 me of.. # 1e920 20 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c these fil 1e930 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 es may be native 1e940 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 and/or managed 1e950 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 assemblies that 1e960 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 1e970 20 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f required to 1e980 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 perform various 1e990 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 1e9a0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 1e9b0 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 externalFileName 1e9c0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1e9d0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 1e9e0 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 n EntityFramewor 1e9f0 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 k lib [string ma 1ea00 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5b p [list Fx ""] [ 1ea10 73 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 string \.. 1ea20 20 20 20 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 map [list 1ea30 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 netFx451 netFx45 1ea40 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 34 netFx452 netFx4 1ea50 35 20 6e 65 74 46 78 34 36 20 6e 65 74 46 78 34 5 netFx46 netFx4 1ea60 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 \.. 1ea70 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 34 netFx461 netFx4 1ea80 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 5] [getBuildNetF 1ea90 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 x]]] EntityFrame 1eaa0 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 work.dll]].... 1eab0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1eac0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 1ead0 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 he list of nativ 1eae0 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 e assembly files 1eaf0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e that we handle. 1eb00 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23 The.. # 1eb10 20 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74 68 reason th 1eb20 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 e "System.Data.S 1eb30 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 QLite.dll" file 1eb40 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 is included here 1eb50 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 is.. # 1eb60 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 because it 1eb70 63 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69 78 could be the mix 1eb80 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 1eb90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1eba0 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 1ebb0 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d FileNames [list] 1ebc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c .... eval 1ebd0 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 lappend nativeF 1ebe0 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 ileNames [getNat 1ebf0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 1ec00 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 mesOnly].. 1ec10 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e eval lappend n 1ec20 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b ativeFileNames [ 1ec30 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 1ec40 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d lyFileNamesOnly] 1ec50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 .... lapp 1ec60 65 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 end nativeFileNa 1ec70 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e mes System.Data. 1ec80 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 SQLite.dll.... 1ec90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1eca0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 1ecb0 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 he list of manag 1ecc0 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ed assembly file 1ecd0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 1ece0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ecf0 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67 65 set manage 1ed00 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 dFileNames [list 1ed10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ed20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1ed30 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 te.dll System.Da 1ed40 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d 1ed50 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ll \.. 1ed60 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1ed70 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d Lite.EF6.dll]... 1ed80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ed90 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f # NOTE: Remo 1eda0 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 ve any test cons 1edb0 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 traints that ref 1edc0 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 er to the native 1edd0 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 and/or.. 1ede0 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 # managed 1edf0 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 assembly files 1ee00 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 that we handle u 1ee10 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 nless forbidden 1ee20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 from.. # 1ee30 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d doing so.. 1ee40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ee50 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1ee60 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit 1ee70 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e eRemoveConstrain 1ee80 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ts)]} then {.. 1ee90 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1eea0 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 fileName$config
1eeb0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1eec0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43           removeC
1eed0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
1eee0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c  dArgs file_ $fil 1eef0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 1ef00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1ef10 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1ef20 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
1ef30 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1ef40 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
1ef50 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1ef60 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d  s file_ $fileNam 1ef70 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d e].. }. 1ef80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 1ef90 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 each fileName$e
1efa0 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
1efb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1efc0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
1efd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1efe0 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  e_ [file tail $f 1eff0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. 1f000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1f010 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 1f020 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
1f030 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1f040 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
1f050 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1f060 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d  s file_ $fileNam 1f070 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d e].. }. 1f080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 1f090 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
1f0a0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
1f0b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1f0c0 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
1f0d0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
1f0e0 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  _ $fileName].. 1f0f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f110 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1f120 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 E: Skip all Syst 1f130 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 em.Data.SQLite r 1f140 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e 64 elated file hand 1f150 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d ling (deleting,. 1f160 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1f170 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f copying, and lo 1f180 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72 75 ading) if instru 1f190 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 cted... # 1f1a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1f1b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1f1c0 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 (sqliteFiles)]} 1f1d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f1e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1f1f0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 NOTE: Skip tryi 1f200 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 ng to delete any 1f210 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 1f220 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 1f230 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 1f240 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1f250 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1f260 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 1f270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1f280 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1f290 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1f2a0 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 eConfigFiles)]} 1f2b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f2c0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 1f2d0 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 leName$configFi
1f2e0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
1f2f0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
1f300 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24  leteBinaryFile $1f310 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 1f320 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f340 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f350 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f360 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65 72 eleteSqliteExter 1f370 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e nalFiles)]} then 1f380 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f390 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1f3a0 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c me$mdaConfigFil
1f3b0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
1f3c0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
1f3d0 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69  eteBuildFile $fi 1f3e0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 1f3f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f400 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1f410 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 fileName$exter
1f420 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  nalFileNames {..
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f440 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
1f450 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1f470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 1f480 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1f490 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1f4a0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 1f4b0 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 NativeFiles)]} t 1f4c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f4d0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1f4e0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 1f4f0 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 teSqliteImplicit 1f500 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1f510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f520 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1f530 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
1f540 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1f550 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
1f560 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 1f570 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 1f580 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f590 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f5a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 1f5b0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1f5c0 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 deleteSqliteNonI 1f5d0 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 1f5e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f5f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f600 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f610 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 eleteSqlitePlatf 1f620 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ormFiles)] && \. 1f630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f640 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 1f650 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
1f660 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1f680 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $1f690 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 1f6a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f6b0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 1f6c0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
1f6d0 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f6f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1f700 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f710 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f720 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f730 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 1f740 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 1f750 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 1f760 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 1f770 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
1f780 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
1f790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f7a0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
1f7b0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 1f7c0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1f7e0 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 1f7f0 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68$fileName $arch 1f800 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 1f810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1f830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1f850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1f860 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1f870 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 1f880 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 iteManagedFiles) 1f890 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f8a0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1f8b0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 fileName$manag
1f8c0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f8e0 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
1f8f0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 1f900 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f910 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f930 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f940 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1f950 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c for the "autoSel 1f960 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ect" runtime opt 1f970 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 ion. If present 1f980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ,.. # 1f990 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 attempt to 1f9a0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 1f9b0 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 lect the first a 1f9c0 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. 1f9d0 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 1f9e0 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 d (or "release") 1f9f0 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 of SQLite and S 1fa00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fa10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 1fa20 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 for use wit 1fa30 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 h the test suite 1fa40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1fa50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 if {[h 1fa60 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 1fa70 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 autoSelect]} the 1fa80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1fa90 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 if {![checkForS 1faa0 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
1fab0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
1fac0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1fad0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
1fae0 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20  rSQLiteReleases
1faf0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1fb00 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. 1fb10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1fb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 1fb30 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1fb40 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 1fb50 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 o verify the bui 1fb60 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 ld directory if 1fb70 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 instructed;.. 1fb80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f # o 1fb90 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 therwise, make s 1fba0 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 ure it actually 1fbb0 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 exists or halt t 1fbc0 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 he entire.. 1fbd0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 1fbe0 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 ting process if 1fbf0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 1fc00 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 1fc10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1fc20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1fc30 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 o(verifyBuildDir 1fc40 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b ectory)]} then { 1fc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1fc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1fc70 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 OTE: At this poi 1fc80 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 nt, the build di 1fc90 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 rectory MUST exi 1fca0 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 st as a.. 1fcb0 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c # val 1fcc0 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 id directory for 1fcd0 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1fce0 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 cess to continue 1fcf0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 1fd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 1fd10 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get 1fd20 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d BuildDirectory]. 1fd30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 1fd40 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 1fd50 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20$directory] ||
1fd60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fd70 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65     ![file isdire
1fd80 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory 1fd90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1fda0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1fdb0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1fdc0 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 : Just prior to 1fdd0 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 actually halting 1fde0 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1fdf0 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 cess,.. 1fe00 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 # add 1fe10 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 an error to the 1fe20 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d test log file.. 1fe30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1fe40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1fe50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1fe60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1fe70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1fe80 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75         "---- cou
1fe90 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75  ld not verify bu
1fea0 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22  ild directory \"
1feb0 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  " $directory \.. 1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1fed0 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 "\", all testi 1fee0 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d ng halted\n"]... 1fef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ff10 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 # NOTE: Raising 1ff20 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 a script error f 1ff30 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 rom this point s 1ff40 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 hould halt.. 1ff50 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1ff60 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 the testing pr 1ff70 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ocess... 1ff80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ff90 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 error [ap 1ffa0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 "c 1ffc0 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 ould not verify 1ffd0 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 1ffe0 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c \""$directory \
1fff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20000 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73      "\", all tes
20010 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20  ting halted"]..
20020 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
20030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20040 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
20050 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
20060 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20   trying to copy
20070 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73  any files if ins
20080 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
20090 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
200a0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
200b0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
200c0 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
200d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
200e0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
200f0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
20100 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74  ConfigFiles)]} t
20110 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20120 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
20130 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c  eName $configFil 20140 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 20150 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 20160 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 yBuildFile$file
20170 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
20180 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
20190 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
201a0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
201b0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
201c0 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c  qliteExternalFil
201d0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
201e0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
20200 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61  OTE: Copy the Ma
20210 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20  naged Debugging
20220 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29  Assistants (MDA)
20230 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a   configuration..
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
20250 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 74        file for t
20260 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74  he Eagle shell t
20270 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70  o the build outp
20280 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ut directory,..
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
202a0 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e 67       while using
202b0 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d   each of the nam
202c0 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  es of the variou
202d0 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a 20  s legacy test..
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
202f0 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 73       executables
20300 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 6c  .  This will hel
20310 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  p to make sure t
20320 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20  hat all the..
20330 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
20340 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20     legacy tests
20350 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79  run with exactly
20360 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66   the same set of
20370 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   Managed..
20380 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20390 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74  Debugging Assist
203a0 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e  ants configured.
203b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
203c0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
203d0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
203e0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65  e $mdaConfigFile 203f0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 20400 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 20410 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 BinaryFile Eagle 20420 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f Shell.exe.mda.co 20430 6e 66 69 67 20 22 22 20 24 66 69 6c 65 4e 61 6d nfig ""$fileNam
20440 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
20450 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20460 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
20470 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70       # NOTE: Cop
20480 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62  y the external b
20490 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c  inaries, if any,
204a0 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72   to the director
204b0 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  y that..
204c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
204d0 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65  ntains the Eagle
204e0 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73   shell.  This is
204f0 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20   typically used
20500 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20  to make..
20510 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
20520 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72  ure assemblies r
20530 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
20540 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74   ones being test
20550 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  ed are..
20560 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76        #       av
20570 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74  ailable during t
20580 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
20590 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...
205a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
205b0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
205c0 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69  Name $externalFi 205d0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 205e0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 205f0 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24 pyExternalFile$
20600 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
20610 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
20630 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
20640 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
20650 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46  opySqliteNativeF
20660 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
20680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
20690 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65   NOTE: If the te
206a0 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c  st platform is l
206b0 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c  ikely the defaul
206c0 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..
206d0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
206e0 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20    machine, also
206f0 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20  try to copy the
20700 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20  native files to
20710 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
20720 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
20730 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...
20740 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
20750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
20760 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
20770 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70  no(copySqliteImp
20780 6c 69 63 69 74 46 69 6c 65 73 29 5d 20 26 26 20  licitFiles)] &&
20790 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
207a0 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42       [isDefaultB
207b0 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75  uildPlatform tru
207c0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
207d0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
207e0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 207f0 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 20800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20810 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 20820 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ly$fileName..
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
20850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
20860 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
20870 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
20880 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
20890 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
208b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
208c0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
208d0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
208e0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
208f0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
20900 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 20910 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 20920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20930 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 20940 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
20950 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
20960 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
20970 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 20980 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d eName$platform.
20990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
209a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
209b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
209c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
209d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
209e0 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
209f0 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
20a00 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
20a10 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
20a20 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 20a30 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 20a40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20a50 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 20a60 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
20a70 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20a90 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
20aa0 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69  $fileName$archi
20ab0 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
20ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
20af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
20b10 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20b20 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
20b30 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20  ManagedFiles)]}
20b40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20b50 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
20b60 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46  leName $managedF 20b70 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 20b80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 20b90 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
20ba0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
20bb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
20bc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
20bd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20be0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
20bf0 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67  OTE: Skip trying
20c00 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c   to load any fil
20c10 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  es if instructed
20c20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
20c30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
20c40 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
20c50 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73  (loadSqliteFiles
20c60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
20c70 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
20c80 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
20c90 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69  oadSqliteImplici
20ca0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
20cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20cc0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20  tryLoadAssembly
20cd0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20ce0 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te.dll..
20cf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
20d00 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
20d10 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
20d20 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 73 29  SqliteLinqFiles)
20d30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20d40 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
20d50 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
20d60 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
20d70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
20d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
20d90 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
20da0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
20db0 6c 69 74 65 45 66 36 46 69 6c 65 73 29 5d 7d 20  liteEf6Files)]}
20dc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20dd0 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
20de0 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
20df0 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
20e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
20e20 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20e30 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
20e40 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
20e50 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
20e60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
20e70 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
20e80 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 66  (loadSqlitePlatf
20e90 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
20ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20eb0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
20ec0 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 20ed0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20ee0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 20ef0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 20f00 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 20f10 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
20f20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
20f40 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
20f50 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72  :no(loadSqliteAr
20f60 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29  chitectureFiles)
20f70 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
20f80 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
20f90 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 20fa0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 20fb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20fc0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 20fd0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 20fe0 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 .SQLite.dll$arc
20ff0 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20  hitecture..
21000 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
21020 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
21030 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  }....        for
21040 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
21050 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72  y [getNativeLibr
21060 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  aryFileNamesOnly
21070 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  ] {..          c
21080 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
21090 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 210a0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 210b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 210c0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 210d0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 210e0 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 ""$fileNameOnly
210f0 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20   "\"... \"" \..
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
21110 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
21120 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
21130 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20  $fileNameOnly]] 21140 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 21150 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 21160 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 21170 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 fileNameOnly [g 21180 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 21190 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 211a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 211b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 211c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
211d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
211e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
211f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
21200 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
21210 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22   $fileNameOnly " 21220 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 \"... \"" \.. 21230 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 21240 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 21250 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
21260 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22  ileNameOnly]] \"
21270 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
21280 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21290 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
212a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
212b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 212c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 212e0 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 212f0 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 21300 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 21310 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 21320 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 [file vers 21330 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ion [getBinaryFi 21340 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 21350 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 ta.SQLite.dll]] 21360 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d \"\n].. } 21370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 21380 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 21390 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
213a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
213b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
213c0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
213d0 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d  sion of \"System
213e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
213f0 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5c  q.dll\"... \"" \
21400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21410 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
21420 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
21430 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
21440 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c  ite.Linq.dll]] \
21450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21460 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  \"\n]..        }
21470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
21480 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
21490 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 214a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 214b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 214c0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 214d0 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System 214e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 214f0 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d .dll\"... \"" \. 21500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 21510 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 file version [ge 21520 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 21530 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 21540 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 0d 0a te.EF6.dll]] \.. 21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 22 \" 21560 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 21570 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 21580 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
21590 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
215a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
215b0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
215c0 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69  nly [getNativeLi
215d0 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e  braryFileNamesOn
215e0 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ly] {..
215f0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
21600 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21610 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 21620 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21640 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 21650 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 ion of \""$plat
21660 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20  form \..
21670 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c            / $fil 21680 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e eNameOnly "\"... 21690 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 216a0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 216b0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 216c0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
216d0 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66 6f  NameOnly $platfo 216e0 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 rm]] \"\n].. 216f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21700 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21710 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 21720 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 NameOnly [getInt 21730 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 eropAssemblyFile 21740 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 NamesOnly] {.. 21750 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 21760 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21770 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
21780 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
21790 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
217a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
217b0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
217c0 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20  " $platform \.. 217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 217e0 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 /$fileNameOnly
217f0 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c   "\"... \"" [fil
21800 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
21820 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
21830 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  e $fileNameOnly 21840 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e$platform]] \"\n
21850 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
21860 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
21870 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
21880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21890 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 218a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 218b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 218c0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 218d0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
218e0 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20  platform \..
218f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79              "/Sy
21900 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
21910 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66  .dll\"... \"" [f
21920 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20  ile version \..
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
21940 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
21950 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
21960 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f  Lite.dll $platfo 21970 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 rm]] \"\n].. 21980 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 21990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 219a0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 219b0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
219c0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
219d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
219e0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
219f0 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
21a00 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20  eNamesOnly] {..
21a10 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
21a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21a30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 21a40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21a50 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 21a60 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 21a70 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 21a80 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ""$architecture
21a90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21aa0 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d        / $fileNam 21ab0 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 eOnly "\"... \"" 21ac0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c [file version \ 21ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21ae0 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 21af0 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
21b00 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74 75  Only $architectu 21b10 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 re]] \"\n].. 21b20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21b40 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 21b50 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
21b60 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
21b70 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
21b90 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
21ba0 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65   of \"" $archite 21bb0 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 cture \.. 21bc0 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 /$file
21bd0 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20  NameOnly "\"...
21be0 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  \"" [file versio
21bf0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
21c00 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46       [getBinaryF
21c10 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 21c20 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74 eOnly$architect
21c30 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20  ure]] \"\n]..
21c40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21c50 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
21c60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
21c70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 21c80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21ca0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 21cb0 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
21cc0 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
21cd0 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 73             "/Sys
21ce0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
21cf0 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69  dll\"... \"" [fi
21d00 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20  le version \..
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
21d20 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
21d30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
21d40 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65  ite.dll $archite 21d50 63 74 75 72 65 5d 5d 20 5c 0d 0a 20 20 20 20 20 cture]] \.. 21d60 20 20 20 20 20 20 20 20 20 20 20 5c 22 5c 6e 5d \"\n] 21d70 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 21d80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 21d90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 21da0 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the 21db0 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 list of managed 21dc0 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 assemblies for t 21dd0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce 21de0 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ss.. # 21df0 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f and report o 21e00 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 n the System.Dat 21e10 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 21e20 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ones... 21e30 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 21e40 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 21e50 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 21e60 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 21e70 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 assemblies [obje 21e80 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d ct invoke AppDom 21e90 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 ain.CurrentDomai 21ea0 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d n GetAssemblies] 21eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 21ec0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 ject foreach ass 21ed0 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 embly$assemblie
21ee0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
21ef0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
21f00 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61  ch \{System.Data
21f10 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62  .SQLite* $assemb 21f20 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ly]} then {.. 21f30 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 21f40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
21f50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f70 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
21f80 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22  aded assembly: "
21f90 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a   $assembly \n].. 21fa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 21fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 21fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 21fd0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 21fe0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
21ff0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
22000 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
22010 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
22020 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44  s for \"System.D
22030 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20  ata.SQLite\"...
22040 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
22050 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
22060 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
22070 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
22080 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
22090 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
220a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
220b0 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
220c0 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..
220d0 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61    } defineConsta
220e0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
220f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
22100 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22110 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22120 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 22130 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 22140 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f$defineCo
22150 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d  nstants] <none>]
22160 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
22170 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
22180 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22190 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 221a0 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 221b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 221c0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 221d0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 221e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
221f0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
22200 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
22210 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
22220 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
22230 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
22240 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
22250 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
22260 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
22270 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
22280 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
22290 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
222a0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
222b0 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
222c0 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  rVersion..
222d0 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
222e0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
222f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
22300 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver 22310 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 22320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22330 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 set version nu 22340 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 22350 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 22360 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
22370 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22380 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20   $version \n].. 22390 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 223a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 223b0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
223c0 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
223d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
223e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
223f0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
22400 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 22410 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 22420 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 22430 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 - source checkou 22440 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 t of \"System.Da 22450 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 22460 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 22470 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 22480 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 22490 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 224a0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 224c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 224d0 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 224e0 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 on ProviderSourc 224f0 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d eId.. } 22500 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d sourceId] == 0} 22510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22520 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 22530 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
22540 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
22550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
22560 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
22570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22580 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
22590 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 225a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
225b0 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20  sourceId \n]..
225c0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
225d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
225e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 225f0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 22600 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22610 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22620 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22630 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 TE: Check the av 22640 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 ailable builds ( 22650 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 and "releases") 22660 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 of SQLite and.. 22670 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 22680 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 22690 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 226a0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 226b0 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
226c0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
226d0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
226e0 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 226f0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 22700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22710 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 # NOTE: Now, w 22720 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 e need to know i 22730 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 f the SQLite cor 22740 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 e library is ava 22750 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 ilable.. 22760 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 # (i.e. be 22770 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 cause the manage 22780 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 d-only System.Da 22790 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 ta.SQLite assemb 227a0 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 ly can.. 227b0 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 # load wit 227c0 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 hout it; however 227d0 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 , it cannot do a 227e0 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 nything useful w 227f0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 ithout.. 22800 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 # it). If 22810 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 we are using th 22820 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 22830 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 embly and we alr 22840 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 eady.. # 22850 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 found it ( 22860 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f above), this sho 22870 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 uld always succe 22880 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 22890 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 228a0 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a SQLiteLibrary$:
228b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
228c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
228d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
228e0 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
228f0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
22900 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
22910 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22920 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
22930 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74  eInterop $::test 22940 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 22950 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 22960 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 22970 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 SQLite database 22980 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 22990 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 irectories... 229a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 229b0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 229c0 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
229d0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
229e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
229f0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
22a00 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
22a10 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d  various compile-
22a20 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65  time options nee
22a30 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..
22a40 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f   #       test co
22a50 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65  nstraints were e
22a60 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
22a70 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
22a80 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20    There..
22a90 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d   #       are som
22aa0 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
22ab0 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74  ptions that must
22ac0 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20   also have been
22ad0 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20  enabled..
22ae0 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
22af0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
22b00 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
22b10 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72   effective.  For
22b20 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20   those..
22b30 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c  #       options,
22b40 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75   it will be assu
22b50 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20  med that it was
22b60 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
22b70 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  interop..
22b80 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
22b90 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62  y if it was enab
22ba0 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
22bb0 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
22bc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22bd0 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65    foreach define
22be0 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c  Constant [list \
22bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48  ..            CH
22c00 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f  ECK_STATE COUNT_
22c10 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54  HANDLE DEBUG INT
22c20 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52  EROP_CODEC INTER
22c30 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20  OP_DEBUG \..
22c40 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
22c50 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
22c60 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35  ONS INTEROP_FTS5
22c70 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
22c80 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
22c90 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20  P_INCLUDE_CEROD
22ca0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
22cb0 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e  EXTRA INTEROP_IN
22cc0 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20  CLUDE_SEE \..
22cd0 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
22ce0 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20  _INCLUDE_ZIPVFS
22cf0 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
22d00 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
22d10 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c         INTEROP_L
22d20 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45  EGACY_CLOSE INTE
22d30 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f  ROP_LOG INTEROP_
22d40 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
22d50 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
22d60 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
22d70 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
22d80 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
22d90 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
22da0 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50     INTEROP_TOTYP
22db0 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45  E_EXTENSION INTE
22dc0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
22dd0 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20  E NET_20 NET_35
22de0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e  \..            N
22df0 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54  ET_40 NET_45 NET
22e00 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54  _451 NET_452 NET
22e10 5f 34 36 20 4e 45 54 5f 34 36 31 20 4e 45 54 5f  _46 NET_461 NET_
22e20 43 4f 4d 50 41 43 54 5f 32 30 20 5c 0d 0a 20 20  COMPACT_20 \..
22e30 20 20 20 20 20 20 20 20 20 20 50 4c 41 54 46 4f            PLATFO
22e40 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
22e50 4f 52 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49  ORK PRELOAD_NATI
22e60 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52  VE_LIBRARY RETAR
22e70 47 45 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20  GETABLE \..
22e80 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54         SQLITE_ST
22e90 41 4e 44 41 52 44 20 54 48 52 4f 57 5f 4f 4e 5f  ANDARD THROW_ON_
22ea0 44 49 53 50 4f 53 45 44 20 54 52 41 43 45 20 54  DISPOSED TRACE T
22eb0 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20  RACE_CONNECTION
22ec0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  \..            T
22ed0 52 41 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 54  RACE_DETECTION T
22ee0 52 41 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43  RACE_HANDLE TRAC
22ef0 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f  E_PRELOAD TRACE_
22f00 53 48 41 52 45 44 20 5c 0d 0a 20 20 20 20 20 20  SHARED \..
22f10 20 20 20 20 20 20 54 52 41 43 45 5f 53 54 41 54        TRACE_STAT
22f20 45 4d 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e  EMENT TRACE_WARN
22f30 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  ING TRACK_MEMORY
22f40 5f 42 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20  _BYTES \..
22f50 20 20 20 20 20 20 55 53 45 5f 45 4e 54 49 54 59        USE_ENTITY
22f60 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45  _FRAMEWORK_6 USE
22f70 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45  _INTEROP_DLL USE
22f80 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44  _PREPARE_V2 WIND
22f90 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  OWS] {..
22fa0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
22fb0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
22fc0 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
22fd0 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65   option is liste
22fe0 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  d in the list of
22ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
23000 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73      "define cons
23010 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63  tants" kept trac
23020 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61  k of by the mana
23030 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
23040 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
23050 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
23060 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
23070 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  nt $::test_chann 23080 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 el$defineConsta
23090 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  nt..        }...
230a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
230b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
230c0 6b 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  k if the System.
230d0 44 61 74 61 2e 53 51 4c 69 74 65 20 70 72 6f 76  Data.SQLite prov
230e0 69 64 65 72 20 77 61 73 20 63 6f 6d 70 69 6c 65  ider was compile
230f0 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..
23100 23 20 20 20 20 20 20 20 73 75 70 70 6f 72 74 20  #       support
23110 66 6f 72 20 61 6e 79 20 65 6e 63 72 79 70 74 65  for any encrypte
23120 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a 20 20  d databases...
23130 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23140 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
23150 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49  DefineConstant I
23160 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c  NTEROP_CODEC] ||
23170 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23180 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e  [haveSQLiteDefin
23190 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f  eConstant INTERO
231a0 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20  P_INCLUDE_SEE]}
231b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
231c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
231d0 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20   NOTE: Yes, add
231e0 67 65 6e 65 72 69 63 20 63 6f 6e 73 74 72 61 69  generic constrai
231f0 6e 74 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  nt for use by th
23200 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
23210 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
23220 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
23230 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
23240 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
23250 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  n..        }....
23260 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23270 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
23280 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69   the current bui
23290 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 61  ld year.  Basica
232a0 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61  lly, this indica
232b0 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  tes..        #
232c0 20 20 20 20 20 77 68 69 63 68 20 76 65 72 73 69       which versi
232d0 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e  on of MSBuild an
232e0 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64  d/or Visual Stud
232f0 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a  io was used to..
23300 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23310 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65  compile the asse
23320 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e  mbly binaries un
23330 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20  der test...
23340 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
23350 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 23360 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 23370 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 23380 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat 23390 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 a.SQLite build y 233a0 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ear... ".... 233b0 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 set year [ge 233c0 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 tBuildYear].. 233d0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 233e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 nt [appendArgs b 233f0 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d uildYear.$year]
23400 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
23410 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 23420 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
23430 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  year \"\n]....
23440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23450 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
23460 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
23470 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e   .NET Framework.
23480 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69    Basically, thi
23490 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
234a0 20 20 20 69 6e 64 69 63 61 74 65 73 20 77 68 69     indicates whi
234b0 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ch version of th
234c0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
234d0 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20   is being..
234e0 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20     #       used
234f0 62 79 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20  by the assembly
23500 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74  binaries under t
23510 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  est...        #.
23520 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $23530 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 23540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 23550 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 23560 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 23570 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 ite build .NET F 23580 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d ramework... "... 23590 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 . set net 235a0 46 78 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 Fx [getBuildNetF 235b0 78 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 x].. addC 235c0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 235d0 64 41 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 dArgs buildFrame 235e0 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 work.$netFx]..
235f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 23600 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 23610 70 65 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 pendArgs \"$net
23620 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  Fx \"\n]....
23630 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
23640 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
23650 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63   current build c
23660 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54  onfiguration.  T
23670 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61  his should norma
23680 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  lly..        #
23690 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22       be either "
236a0 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61  Debug" or "Relea
236b0 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  se"...        #.
236c0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $236d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 236e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 236f0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 23700 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 23710 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 ite build config 23720 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a uration... ".... 23730 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 set conf 23740 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 iguration [getBu 23750 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 23760 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f ].. addCo 23770 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 23780 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 Args buildConfig 23790 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 uration.$config
237a0 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20  uration]..
237b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 237c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 237d0 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 rgs \"$configur
237e0 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20  ation \"\n]....
237f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23800 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f    # NOTE: Try to
23810 20 73 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72   setup an interr
23820 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  upt callback usi
23830 6e 67 20 74 68 65 20 73 63 72 69 70 74 20 64 65  ng the script de
23840 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20  bugger..
23850 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c  #       that wil
23860 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c  l cancel all SQL
23870 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67   queries in prog
23880 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74  ress for all dat
23890 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23  abase..        #
238a0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
238b0 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73  ns known to this
238c0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
238d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
238e0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
238f0 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49  sts ::no(sqliteI
23900 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b  nterruptCallback
23910 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
23920 20 20 20 20 20 20 73 65 74 75 70 44 62 49 6e 74        setupDbInt
23930 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24  erruptCallback $23940 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
23950 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20  ::test_log..
23960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
23970 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
23980 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
23990 65 20 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65  e native runtime
239a0 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77   option, which w
239b0 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65  ould mean we are
239c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
239d0 20 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65    using the mixe
239e0 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e  d-mode assembly.
239f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23a00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
23a10 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 23a20 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 st_channel nativ 23a30 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 23a40 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 23a50 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 Check if the tes 23a60 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 t suite should c 23a70 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 ount the number 23a80 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a of connections.. 23a90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 23aa0 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c "opened" and "cl 23ab0 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 osed" from the p 23ac0 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 ool when determi 23ad0 6e 69 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a ning if a test.. 23ae0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 23af0 70 61 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 passed. Disabli 23b00 6e 67 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 ng this behavior 23b10 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 is sometimes ne 23b20 63 65 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 cessary (e.g... 23b30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 # d 23b40 75 72 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 uring the releas 23b50 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 e testing proces 23b60 73 29 20 62 65 63 61 75 73 65 20 74 68 65 72 65 s) because there 23b70 20 61 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 are several.. 23b80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 23b90 73 74 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e sts that rely on 23ba0 20 74 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f the "opened fro 23bb0 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 m pool" count be 23bc0 69 6e 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 ing greater.. 23bd0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 23be0 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 n zero. These t 23bf0 65 73 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 ests may fail du 23c00 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 e to the non-det 23c10 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 erministic.. 23c20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 68 61 # beha 23c30 76 69 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 vior of the CLR 23c40 47 43 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 GC, even when th 23c50 65 72 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e ere is no bug in 23c60 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 the code.. 23c70 20 20 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 # being 23c80 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 tested... 23c90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 23ca0 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 ckForRuntimeOpti 23cb0 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e on$::test_chann
23cc0 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d  el noPoolCounts.
23cd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23ce0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
23cf0 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20  eck if the test
23d00 73 75 69 74 65 20 73 68 6f 75 6c 64 20 75 73 65  suite should use
23d10 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
23d20 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  de...        #..
23d30 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
23d40 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a  RuntimeOption $: 23d50 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 :test_channel sh 23d60 61 72 65 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 aredCache.... 23d70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 23d80 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 # NOTE: Report t 23d90 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 23da0 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 e prior to runni 23db0 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 ng any tests... 23dc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 23dd0 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 reportSQLiteRe 23de0 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f sources$::test_
23df0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
23e00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
23e10 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c  NOTE: Grab the l
23e20 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f  ist of native mo
23e30 64 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75  dules for the cu
23e40 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e  rrent process an
23e50 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
23e60 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65     report on the
23e70 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
23e80 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73  ite related ones
23e90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23ea0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
23eb0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
23ec0 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
23ed0 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c         set modul
23ee0 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  es [object invok
23ef0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
23f00 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f     System.Diagno
23f10 73 74 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65  stics.Process.Ge
23f20 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20  tCurrentProcess
23f30 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20  Modules]....
23f40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
23f50 65 61 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75  each -alias modu
23f60 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20  le $modules {.. 23f70 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 23f80 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 23f90 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c : The module fil 23fa0 65 20 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 e name here must 23fb0 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d be normalized.. 23fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 23fd0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 23fe0 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 23ff0 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c ormalize [$modul
24000 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20  e FileName]]..
24010 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69            set fi
24020 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65  leNameOnly [file
24030 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 24040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 24050 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 if {[lsearch -ex 24060 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c act -nocase -- \ 24070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24080 20 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 [getNativeLibr 24090 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 aryFileNamesOnly 240a0 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d ]$fileNameOnly]
240b0 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a   != -1} then {..
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
240d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 240e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 240f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24100 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 "---- found 24110 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 6e loaded SQLite n 24120 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 6d 6f ative library mo 24130 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 dule: " \.. 24140 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69$fi
24150 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20  leName \n]..
24160 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66          } elseif
24170 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63   {[lsearch -exac
24180 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a  t -nocase -- \..
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
241a0 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
241b0 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
241c0 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  ] $fileNameOnly] 241d0 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a != -1} then {.. 241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 241f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
24200 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
24210 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
24220 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64       "---- found
24230 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69   loaded SQLite i
24240 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
24250 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20  module: " \..
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $24270 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 fileName \n].. 24280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 24290 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 242a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 242b0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 242c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
242d0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
242e0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
242f0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
24300 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63  ons for SQLite c
24310 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22  ore library... "
24320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
24330 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
24340 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
24350 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
24360 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
24370 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
24380 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
24390 4c 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70  Lite3 SQLiteComp
243a0 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20  ileOptions..
243b0 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f        } compileO
243c0 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68  ptions] == 0} th
243d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
243e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 243f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 24400 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 rgs [formatList 24410 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 [lsort \.. 24420 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69$compi
24430 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65  leOptions] <none
24440 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  >] \n]..
24450 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
24460 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 24470 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e :test_channel un 24480 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 known\n.. 24490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 244a0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 244b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 244c0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
244d0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
244e0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69       "---- compi
244f0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options
24500 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72  for SQLite inter
24510 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22  op assembly... "
24520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
24530 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
24540 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
24550 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
24560 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
24570 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
24580 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
24590 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d  Lite3 InteropCom
245a0 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20  pileOptions..
245b0 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65         } compile
245c0 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74  Options] == 0} t
245d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
245e0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 245f0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 24600 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 Args [formatList 24610 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 [lsort \.. 24620 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70$comp
24630 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e  ileOptions] <non
24640 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  e>] \n]..
24650 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
24660 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $24670 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 24680 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 24690 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 246a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 246b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 246c0 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74 how the active t 246d0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e est constraints. 246e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 246f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
24700 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
24710 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e  ndArgs "---- con
24720 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20  straints: " \..
24730 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d             [form
24740 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67  atList [lsort [g
24750 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20  etConstraints]]
24760 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20  <none>] \n]....
24770 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24780 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
24790 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  he test constrai
247a0 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74  nts for use by t
247b0 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69  hreads created i
247c0 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  n this..
247d0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74  #       applicat
247e0 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69  ion domain.  Thi
247f0 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62  s is necessary b
24800 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45  ecause all the E
24810 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  agle..        #
24820 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74        "test cont
24830 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ext" information
24840 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d   is per-thread..
24850 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24860 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
24870 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e  xists ::test_con
24880 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20  straints]} then
24890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
248a0 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69   ::test_constrai
248b0 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73  nts $::eagle_tes 248c0 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d ts(constraints). 248d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 248e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 248f0 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 24900 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 e "after-constra 24910 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 ints" custom per 24920 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 -user and/or per 24930 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 -host.. # 24940 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 test sett 24950 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ings now... 24960 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 #.. up 24970 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f level 1 [list lo 24980 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 adSQLiteTestSett 24990 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ings$::test_cha
249a0 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a  nnel .after]....
249b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
249c0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65     # NOTE: If ne
249d0 63 65 73 73 61 72 79 2c 20 65 6e 61 62 6c 65 20  cessary, enable
249e0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
249f0 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  e now...
24a00 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
24a10 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  hasRuntimeOption
24a20 20 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74   sharedCache]} t
24a30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24a40 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63   enableSharedCac
24a50 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  he $::test_chann 24a60 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 el true.. 24a70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 24a80 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 24a90 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 Show when our t 24aa0 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 ests actually be 24ab0 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 gan (now)... 24ac0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 24ad0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
24ae0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
24af0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24b00 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74  "---- System.Dat
24b10 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 62  a.SQLite tests b
24b20 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20  egan at " \..
24b30 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20           [clock
24b40 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
24b50 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  conds]] \n]..
24b60 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
24b70 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
24b80 74 65 54 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f  teTestFilesProlo
24b90 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
24ba0 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20  uplevel 1 {..
24bb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24bc0 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68  # NOTE: Setup th
24bd0 65 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74  e variables that
24be0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61   refer to the va
24bf0 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74 61 20 66  rious non-data f
24c00 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20  iles..        #
24c10 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 62        required b
24c20 79 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74  y the tests in t
24c30 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  his file...
24c40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
24c50 74 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  t entityFramewor
24c60 6b 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  kDllFile \..
24c70 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
24c80 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74 79  dFileName Entity
24c90 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a  Framework.dll]..
24ca0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e  ..        set in
24cb0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5b  stallerExeFile [
24cc0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
24cd0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 5d 0d   Installer.exe].
24ce0 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c  .        set sql
24cf0 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69  iteDesignerDllFi
24d00 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
24d10 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 69  Name SQLite.Desi
24d20 67 6e 65 72 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  gner.dll]....
24d30 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44       set systemD
24d40 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65  ataSQLiteDllFile
24d50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24d60 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
24d70 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
24d80 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  Lite.dll]....
24d90 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44       set systemD
24da0 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c  ataSQLiteLinqDll
24db0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
24dc0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
24dd0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
24de0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
24df0 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  l]....        se
24e00 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69  t systemDataSQLi
24e10 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a  teEf6DllFile \..
24e20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
24e30 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79  BuildFileName Sy
24e40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
24e50 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .EF6.dll]....
24e60 20 20 20 20 20 73 65 74 20 74 65 73 74 45 78 65       set testExe
24e70 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69  File [getBuildFi
24e80 6c 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 5d  leName test.exe]
24e90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
24ea0 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67  stLinqExeFile [g
24eb0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
24ec0 74 65 73 74 6c 69 6e 71 2e 65 78 65 5d 0d 0a 20  testlinq.exe]..
24ed0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 45         set testE
24ee0 66 36 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75  f6ExeFile [getBu
24ef0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74  ildFileName test
24f00 65 66 36 2e 65 78 65 5d 0d 0a 0d 0a 20 20 20 20  ef6.exe]....
24f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
24f20 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65   NOTE: Setup the
24f30 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20   variables that
24f40 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72  refer to the var
24f50 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d  ious data files.
24f60 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
24f70 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
24f80 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66   tests in this f
24f90 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ile...        #.
24fa0 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
24fb0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69  tLinqOutFile [fi
24fc0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
24fd0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
24fe0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
24ff0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
25000 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a  testlinq.out]]..
25010 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f  ..        set no
25020 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20  rthwindEfDbFile
25030 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
25040 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
25050 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
25060 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64   dirname [file d
25070 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74  irname [getSQLit
25080 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d  eTestDataPath]]]
25090 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
250a0 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69  testlinq northwi
250b0 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20  ndEF.db]]....
250c0 20 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44       set nonWalD
250d0 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  bFile [file nati
250e0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
250f0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
25100 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
25110 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e  ataPath] nonWal.
25120 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
25130 73 65 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66  set walDbFile [f
25140 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
25150 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
25160 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
25170 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
25180 20 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20   wal.db]]....
25190 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
251a0 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69  # NOTE: The vari
251b0 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e  ous install/unin
251c0 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20  stall log files
251d0 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
251e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
251f0 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f    design-time co
25200 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65  mponent installe
25210 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  r...        #..
25220 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
25230 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
25240 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
25250 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
25260 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
25270 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
25280 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72  aPath] Installer
25290 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67  _Test_Vs2005.log
252a0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
252b0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
252c0 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  008LogFile [file
252d0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
252e0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
252f0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
25300 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e  TestDataPath] In
25310 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
25320 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  008.log]]....
25330 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73       set testIns
25340 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
25350 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
25360 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
25370 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
25380 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
25390 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
253a0 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d  est_Vs2010.log]]
253b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
253c0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
253d0 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  2LogFile [file n
253e0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
253f0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
25400 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
25410 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74  stDataPath] Inst
25420 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
25430 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  2.log]]....
25440 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
25450 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20  llVs2013LogFile
25460 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
25470 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
25480 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
25490 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
254a0 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73  h] Installer_Tes
254b0 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2013.log]]..
254c0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
254d0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c  stInstallVs2015L
254e0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
254f0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
25500 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
25510 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
25520 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
25530 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e  ler_Test_Vs2015.
25540 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
25550 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61   set testUninsta
25560 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20  llVs2005LogFile
25570 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
25580 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
25590 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
255a0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
255b0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54  h] Uninstaller_T
255c0 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d  est_Vs2005.log]]
255d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
255e0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
255f0 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  008LogFile [file
25600 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
25610 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
25620 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
25630 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e  TestDataPath] Un
25640 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  installer_Test_V
25650 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2008.log]]....
25660 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
25670 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
25680 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
25690 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
256a0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
256b0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
256c0 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
256d0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30  ller_Test_Vs2010
256e0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
256f0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74    set testUninst
25700 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
25710 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
25720 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
25730 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
25740 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
25750 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f  th] Uninstaller_
25760 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d  Test_Vs2012.log]
25770 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
25780 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
25790 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2013LogFile [fil
257a0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
257b0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
257c0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
257d0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55  eTestDataPath] U
257e0 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f  ninstaller_Test_
257f0 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2013.log]]....
25800 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
25810 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c  UninstallVs2015L
25820 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
25830 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
25840 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
25850 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
25860 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
25870 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
25880 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  5.log]]....
25890 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
258a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
258d0 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....
258e0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
258f0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
25900 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
25910 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
25920 65 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72  e tail $entityFr 25930 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d ameworkDllFile]] 25940 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 25950 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 25960 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
25970 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b  $entityFramework 25980 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 25990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 259a0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 259b0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 259c0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 259d0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
259e0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
259f0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
25a00 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
25a10 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 25a20 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 l$installerExeF
25a30 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78  ile Installer.ex
25a40 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
25a50 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
25a60 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
25a70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
25a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
25a90 69 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65  ile tail $sqlite 25aa0 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d DesignerDllFile] 25ab0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 25ac0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 25ad0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
25ae0 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72   $sqliteDesigner 25af0 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 25b00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 25b10 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 25b20 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 25b30 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 25b40 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
25b50 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
25b60 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
25b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
25b80 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 25b90 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d _channel$system
25ba0 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c  DataSQLiteDllFil
25bb0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
25bc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
25bd0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
25be0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
25bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
25c00 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d  ile tail $system 25c10 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c DataSQLiteLinqDl 25c20 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 25c30 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 25c40 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
25c50 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61  hannel $systemDa 25c60 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 25c70 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 25c80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 25c90 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 25ca0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 25cb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25cc0 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 [file tail$syst
25cd0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44  emDataSQLiteEf6D
25ce0 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
25cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
25d00 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 25d10 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 channel$systemD
25d20 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46  ataSQLiteEf6DllF
25d30 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
25d40 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
25d50 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
25d60 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
25d70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25d80 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 25d90 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e ExeFile]]]} then 25da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 25db0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
25dc0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78  _channel $testEx 25dd0 65 46 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a eFile test.exe.. 25de0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 25df0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 25e00 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 25e10 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 25e20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 25e30 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 tail$testLinqE
25e40 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
25e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
25e60 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 25e70 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e channel$testLin
25e80 71 45 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e  qExeFile testlin
25e90 71 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d  q.exe..        }
25ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
25eb0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
25ec0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
25ed0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
25ee0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 25ef0 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d stEf6ExeFile]]]} 25f00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 25f10 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 25f20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 25f30 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 estEf6ExeFile te 25f40 73 74 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 stef6.exe.. 25f50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 25f60 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 25f70 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 25f80 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 25f90 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 25fa0 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c$testLinqOutFil
25fb0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
25fc0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
25fd0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 25fe0 65 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 el$testLinqOutF
25ff0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
26000 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
26010 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
26020 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
26030 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26040 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74  [file tail $nort 26050 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d hwindEfDbFile]]] 26060 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26070 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 26080 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $26090 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 260a0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 260b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 260c0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 260d0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 260e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 260f0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c ile tail$nonWal
26100 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  DbFile]]]} then
26110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
26120 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 26130 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 channel$nonWalD
26140 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  bFile..        }
26150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
26160 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
26170 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
26180 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
26190 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61    [file tail $wa 261a0 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e lDbFile]]]} then 261b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 261c0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
261d0 5f 63 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46  _channel $walDbF 261e0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 261f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 26200 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 26210 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 26220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26230 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
26240 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  InstallVs2005Log
26250 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
26260 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
26270 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 26280 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
26290 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d  llVs2005LogFile.
262a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
262b0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
262c0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
262d0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
262e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
262f0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 26300 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 26310 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 26320 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 26330 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
26340 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 26350 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2008LogFile.. 26360 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26370 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 26380 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 26390 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 263a0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 263b0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
263c0 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2010LogFile]]]}
263d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
263e0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
263f0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
26400 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30  estInstallVs2010
26410 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
26420 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
26430 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
26440 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
26450 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
26460 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $26470 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 26480 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 2LogFile]]]} the 26490 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 264a0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
264b0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 264c0 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 264d0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 264e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 264f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 26500 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 26510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26520 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
26530 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  InstallVs2013Log
26540 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
26550 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
26560 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 26570 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
26580 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d  llVs2013LogFile.
26590 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
265a0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
265b0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
265c0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
265d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
265e0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 265f0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 26600 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 26610 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 26620 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
26630 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 26640 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2015LogFile.. 26650 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26660 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 26670 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 26680 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 26690 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 266a0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
266b0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d  lVs2005LogFile]]
266c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
266d0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
266e0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 266f0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
26700 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2005LogFile..
26710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
26720 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
26730 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
26740 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
26750 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
26760 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 26770 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d lVs2008LogFile]] 26780 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26790 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 267a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
267b0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 267c0 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2008LogFile.. 267d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 267e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 267f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 26800 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 26810 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 26820 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
26830 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d  lVs2010LogFile]]
26840 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26850 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
26860 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 26870 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
26880 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2010LogFile..
26890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
268a0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
268b0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
268c0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
268d0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
268e0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 268f0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d lVs2012LogFile]] 26900 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26910 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 26920 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
26930 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 26940 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2012LogFile.. 26950 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26960 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 26970 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 26980 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 26990 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 269a0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
269b0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d  lVs2013LogFile]]
269c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
269d0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
269e0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 269f0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
26a00 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2013LogFile..
26a10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
26a20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
26a30 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
26a40 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
26a50 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
26a60 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 26a70 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d lVs2015LogFile]] 26a80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26a90 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 26aa0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
26ab0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 26ac0 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2015LogFile.. 26ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 26ae0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 26af0 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 roc runSQLiteTes 26b00 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b tFilesEpilogue { 26b10 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 } {.. uplev 26b20 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 el 1 {.. 26b30 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 26b40 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 26b50 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 26b60 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 2015LogFile test 26b70 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c UninstallVs2013L 26b80 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 26b90 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 26ba0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 26bb0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 26bc0 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2010LogFile \.. 26bd0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 testU 26be0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f ninstallVs2008Lo 26bf0 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 gFile testUninst 26c00 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 26c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26c20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 26c30 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 5LogFile testIns 26c40 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 26c50 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 26c60 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 26c70 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 12LogFile testIn 26c80 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 stallVs2010LogFi 26c90 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 26ca0 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 testInstallVs2 26cb0 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 008LogFile testI 26cc0 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 26cd0 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 ile.... u 26ce0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 26cf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26d00 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 26d10 65 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c e testLinqOutFil 26d20 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 26d30 20 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 walDbFile nonWa 26d40 6c 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 lDbFile.... 26d50 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 unset -nocomp 26d60 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 lain \.. 26d70 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69 testEf6ExeFi 26d80 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 le testLinqExeFi 26d90 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 26da0 20 20 74 65 73 74 45 78 65 46 69 6c 65 20 73 79 testExeFile sy 26db0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 stemDataSQLiteEf 26dc0 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 6DllFile \.. 26dd0 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 systemDa 26de0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 26df0 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 ile systemDataSQ 26e00 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 LiteDllFile \.. 26e10 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit 26e20 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 eDesignerDllFile 26e30 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c installerExeFil 26e40 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 26e50 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b entityFramework 26e60 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d DllFile.. } 26e70 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 26e80 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 proc runSQLiteTe 26e90 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d stEpilogue {} {. 26ea0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 26eb0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e # NOTE: Skip run 26ec0 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 ning our custom 26ed0 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 epilogue if the 26ee0 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 main one has bee 26ef0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 26f00 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 skipped... 26f10 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 26f20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 26f30 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 (epilogue.eagle) 26f40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26f50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 26f60 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 NOTE: Show when 26f70 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c our tests actual 26f80 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d ly ended (now).. 26f90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 26fa0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
26fb0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
26fc0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
26fd0 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65       "---- Syste
26fe0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65  m.Data.SQLite te
26ff0 73 74 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c  sts ended at " \
27000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63  ..            [c
27010 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f  lock format [clo
27020 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d  ck seconds]] \n]
27030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
27040 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
27050 6f 61 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75  oad the "epilogu
27060 65 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73  e" custom per-us
27070 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f  er and/or per-ho
27080 73 74 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20  st test..
27090 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67   #       setting
270a0 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  s now...
270b0 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76  #..        uplev
270c0 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53  el 1 [list loadS
270d0 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67  QLiteTestSetting
270e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 270f0 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a l .epilogue].... 27100 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 27110 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 # BUGFIX: Bef 27120 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 ore checking the 27130 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 final resources 27140 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 27150 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 e, make.. 27160 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20 # sure 27170 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 both of the PRAG 27180 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 MA related direc 27190 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 tory names are f 271a0 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 reed... # 271b0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 271c0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 271d0 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ies$::test_chan
271e0 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  nel true....
271f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
27200 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f   NOTE: Also repo
27210 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20  rt the resource
27220 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e  usage after runn
27230 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a  ing the tests...
27240 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
27250 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52     reportSQLiteR
27260 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74  esources $::test 27270 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 27280 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 27290 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 NOTE: Report th 272a0 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c e critical handl 272b0 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 e counts after r 272c0 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 unning the tests 272d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 272e0 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 getSQLiteH 272f0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 andleCounts$::t
27300 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
27310 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
27320 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63    # NOTE: If nec
27330 65 73 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20  essary, disable
27340 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
27350 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  e now...
27360 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
27370 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  hasRuntimeOption
27380 20 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74   sharedCache]} t
27390 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
273a0 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63   enableSharedCac
273b0 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  he \$::test_chann
273c0 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  el false..
273d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
273e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23    }.....    ####
273f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27430 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
27440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27450 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45  ########## END E
27460 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23  agle ONLY ######
27470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27480 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
27490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274d0 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a  #########..  }..
274e0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
274f0 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f   Save the name o
27500 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  f the directory
27510 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this
27520 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66  file...  #..  if
27530 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
27540 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
27550 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73  ]} then {..    s
27560 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  et common_direct
27570 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
27580 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d  e [info script]]
27590 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20  ..  }....  #..
275a0 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20  # NOTE: Provide
275b0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
275c0 53 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b  SQLite test pack
275d0 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72  age to the inter
275e0 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20  preter...  #..
275f0 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide
27600 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
27610 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a  te.Test 1.0..}..