System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 1c23c889fab154154ae4aca6e2bf2fd4c7022705:

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 20 7b 74 69 6d 65 5a 6f 6e  ormat { {timeZon
fe00: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
fe10: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
fe20: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
fe30: 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e  re simply return
fe40: 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 20  s the "default"
fe50: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format
fe60: 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  used..      #
fe70: 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74 20      by the test
fe80: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d  suite...      #.
fe90: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
fea0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69   exists ::dateti
feb0: 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d  me_format] && \.
fec0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
fed0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74  ng length $::dat fee0: 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 etime_format] > fef0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. ff00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # ff10: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the ff20: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 manually overri ff30: 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 dden value for t ff40: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d he DateTime form ff50: 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a at... #.. ff60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
ff70: 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61  ::datetime_forma
ff80: 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  t..      } else
ff90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
ffa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
ffb0: 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20  turn an ISO8601
ffc0: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format
ffd0: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with
ffe0: 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20  SQLite,..
fff0: 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e   #       System.
10000 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64  Data.SQLite, and
10010 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f   suitable for ro
10020 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74  und-tripping wit
10030 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  h the..        #
10040 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20         DateTime
10050 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 61  class of the fra
10060 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73  mework.  If this
10070 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65   value is change
10080 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  d,..        #
10090 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 74      various test
100a0 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20  s may fail...
100b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
100c0 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72  return [appendAr
100d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
100e0 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48    "yyyy-MM-dd HH
100f0 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 20  :mm:ss.FFFFFFF"
10100 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f 6e 65  [expr {$timeZone 10110 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d 0d 0a ? "K" : ""}]].. 10120 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 10130 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 10140 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b 20 76 ateTimeTicks { v 10150 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22 7d 20 alue {local ""} 10160 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b {default ""} } { 10170 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 10180 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 ing length$valu
10190 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
101a0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
101b0 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20  $default.. 101c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 101d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 101e0 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b 6f set dateTime [o 101f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 bject invoke -cr 10200 65 61 74 65 20 44 61 74 65 54 69 6d 65 20 50 61 eate DateTime Pa 10210 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 20 20 20 rseExact \.. 10220 20 20 20 20 20 20 20 20 24 76 61 6c 75 65 20 5b$value [
10230 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
10240 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73 74 54 6f  t] null AdjustTo
10250 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20 20 20 20  Universal]..
10260 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20    }]} then {..
10270 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65        return $de 10280 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a fault.. }.. 10290 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 102a0 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e 20 2d ing is boolean - 102b0 73 74 72 69 63 74 20 24 6c 6f 63 61 6c 5d 7d 20 strict$local]}
102c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
102d0 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b 6f 62  set dateTime [ob
102e0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65  ject invoke -cre
102f0 61 74 65 20 44 61 74 65 54 69 6d 65 20 53 70 65  ate DateTime Spe
10300 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20 20 20 20  cifyKind \..
10310 20 20 20 20 20 20 20 20 24 64 61 74 65 54 69 6d          $dateTim 10320 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 20 7d 20 e Utc].. } 10330 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 10340 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 return [object i 10350 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 nvoke$dateTime
10360 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 0d  Ticks]..      }.
10370 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6c 6f  ...      if {$lo 10380 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 cal} then {.. 10390 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a return [obj 103a0 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 ect invoke$date
103b0 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54 69 6d 65  Time ToLocalTime
103c0 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d  .Ticks]..      }
103d0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
103e0 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20   return [object
103f0 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65  invoke $dateTime 10400 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 ToUniversalTime 10410 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d .Ticks].. } 10420 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10430 70 72 6f 63 20 67 65 74 50 72 6f 70 65 72 74 69 proc getProperti 10440 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72 4e es { object varN 10450 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 ame } {.. u 10460 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
10470 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20  properties....
10480 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20 30 0d      set count 0.
10490 0a 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73  .      set names
104a0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
104b0 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61   if {[isObjectHa
104c0 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d 20 26 26  ndle $object] && 104d0 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 6e 75 6c$object ne "nul
104e0 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l"} then {..
104f0 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
10500 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d   names [object m
10510 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20  embers \..
10520 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70        -membertyp
10530 65 73 20 50 72 6f 70 65 72 74 79 20 2d 6e 61 6d  es Property -nam
10540 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d 0d 0a  eonly $object].. 10550 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c .. eval l 10560 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 append names [ob 10570 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 5c 0d 0a ject members \.. 10580 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d 65 6d -mem 10590 62 65 72 74 79 70 65 73 20 46 69 65 6c 64 20 2d bertypes Field - 105a0 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 nameonly$object
105b0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
105c0 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
105d0 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20   $names {.. 105e0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 105f0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 10600 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a 65 63 74 t invoke -object 10610 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 flags +NoDispose 10620 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d 65 0d 0a$object $name.. 10630 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d } value] 10640 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 10650 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 if {[is 10660 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 ObjectHandle$va
10670 6c 75 65 5d 20 26 26 20 24 76 61 6c 75 65 20 6e  lue] && $value n 10680 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b e "null"} then { 10690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 106a0 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 6f 62 t error null; ob 106b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 106c0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 106e0 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73 20 2b -marshalflags + 106f0 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 72 70 72 NoHandle Interpr 10700 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5c eter.GetActive \ 10710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10720 20 20 41 64 64 4f 62 6a 65 63 74 52 65 66 65 72 AddObjectRefer 10730 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 65 20 65 ence Ok$value e
10740 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rror....
10750 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70      lappend prop
10760 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20  erties(objects)
10770 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 6c  [list $name$val
10780 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue]..          }
10790 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
107a0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f       lappend pro
107b0 70 65 72 74 69 65 73 28 76 61 6c 75 65 73 29 20  perties(values)
107c0 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 6c  [list $name$val
107d0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue]..          }
107e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
107f0 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20 20 20 20  cr count..
10800 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10810 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72        lappend pr
10820 6f 70 65 72 74 69 65 73 28 65 72 72 6f 72 73 29  operties(errors)
10830 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 3a 3a   [list $name$::
10840 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20 20 20 20  errorCode]..
10850 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
10860 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $10870 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d count.. }.... 10880 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 6c 6c . proc getAll 10890 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62 6a Properties { obj 108a0 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d ect varName } {. 108b0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
108c0 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74 69  varName properti
108d0 65 73 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61  es..      set va
108e0 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a 0d 0a 20  lue $object.... 108f0 20 20 20 20 20 77 68 69 6c 65 20 7b 74 72 75 65 while {true 10900 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 } {.. if 10910 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 {![info exists p 10920 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 roperties(seenOb 10930 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d 0a 20 20 jects)] || \.. 10940 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65$value
10950 20 6e 69 20 24 70 72 6f 70 65 72 74 69 65 73 28   ni $properties( 10960 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d 20 74 68 seenObjects)} th 10970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 10980 67 65 74 50 72 6f 70 65 72 74 69 65 73 20 24 76 getProperties$v
10990 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d  alue properties.
109a0 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
109b0 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 73 65  nd properties(se
109c0 65 6e 4f 62 6a 65 63 74 73 29 20 24 76 61 6c 75  enObjects) $valu 109d0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 109e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 109f0 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 fo exists proper 10a00 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d 7d 20 ties(objects)]} 10a10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10a20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 break.. 10a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 10a40 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 72 6f 70 {[llength$prop
10a50 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d  erties(objects)]
10a60 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
10a70 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 70           unset p
10a80 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
10a90 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20 20 20 20  s); break..
10aa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10ab0 73 65 74 20 76 61 6c 75 65 20 5b 6c 69 6e 64 65  set value [linde
10ac0 78 20 5b 6c 69 6e 64 65 78 20 24 70 72 6f 70 65  x [lindex $prope 10ad0 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 30 rties(objects) 0 10ae0 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 20 20 ] end].. 10af0 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28 6f set properties(o 10b00 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e 67 65 20 bjects) [lrange 10b10 24 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65$properties(obje
10b20 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a 20 20 20  cts) 1 end]..
10b30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
10b40 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70   {[info exists p
10b50 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62  roperties(seenOb
10b60 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  jects)]} then {.
10b70 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
10b80 20 76 61 6c 75 65 20 24 70 72 6f 70 65 72 74 69   value $properti 10b90 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 es(seenObjects) 10ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 10bb0 7b 24 76 61 6c 75 65 20 65 71 20 24 6f 62 6a 65 {$value eq $obje 10bc0 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 ct} continue.. 10bd0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 6f catch {o 10be0 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 76 bject dispose$v
10bf0 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 7d  alue}..        }
10c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65  ....        unse
10c10 74 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65  t properties(see
10c20 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20 20 20 20  nObjects)..
10c30 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
10c40 20 20 70 72 6f 63 20 67 65 74 56 61 72 69 61 62    proc getVariab
10c50 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65 73 20 7b  les { varNames {
10c60 6f 62 6a 65 63 74 73 20 66 61 6c 73 65 7d 20 7d  objects false} }
10c70 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
10c80 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
10c90 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72       foreach var
10ca0 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b  Name $varNames { 10cb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 75 .. if {[u 10cc0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 plevel 1 [list a 10cd0 72 72 61 79 20 65 78 69 73 74 73 20 24 76 61 72 rray exists$var
10ce0 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Name]]} then {..
10cf0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 72            set ar
10d00 72 61 79 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65  rayName $varName 10d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f .... fo 10d20 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 4e 61 6d reach elementNam 10d30 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 e [uplevel 1 [li 10d40 73 74 20 61 72 72 61 79 20 6e 61 6d 65 73 20 24 st array names$
10d50 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b 0d 0a 20  arrayName]] {..
10d60 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
10d70 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs
10d80 24 61 72 72 61 79 4e 61 6d 65 20 28 20 24 65 6c  $arrayName ($el
10d90 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d 0a 20 20  ementName )]..
10da0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
10db0 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20  rValue [uplevel
10dc0 31 20 5b 6c 69 73 74 20 73 65 74 20 24 6e 61 6d  1 [list set $nam 10dd0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 10de0 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 if {$objects
10df0 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64  && [isObjectHand
10e00 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74  le $varValue]} t 10e10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10e20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 10e30 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74 69 65 mplain propertie 10e40 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.. 10e50 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 69 65 getAllPropertie 10e60 73 20 24 76 61 72 56 61 6c 75 65 20 70 72 6f 70 s$varValue prop
10e70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20  erties....
10e80 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
10e90 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na 10ea0 6d 65 20 5b 61 72 72 61 79 20 67 65 74 20 70 72 me [array get pr 10eb0 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20 20 20 operties]].. 10ec0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 10ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10ee0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [ 10ef0 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 72 56 list$name $varV 10f00 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 alue].. 10f10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 10f20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 10f30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s 10f40 65 74 20 76 61 72 56 61 6c 75 65 20 5b 75 70 6c et varValue [upl 10f50 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 evel 1 [list set 10f60 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20$varName]]....
10f70 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 6f 62           if {$ob 10f80 6a 65 63 74 73 20 26 26 20 5b 69 73 4f 62 6a 65 jects && [isObje 10f90 63 74 48 61 6e 64 6c 65 20 24 76 61 72 56 61 6c ctHandle$varVal
10fa0 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
10fb0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
10fc0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65  nocomplain prope
10fd0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..
10fe0 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74     getAllPropert
10ff0 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 72  ies $varValue pr 11000 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 operties.... 11010 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 11020 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 result [list$va
11030 72 4e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74  rName [array get
11040 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20   properties]]..
11050 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
11060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
11070 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c  append result [l
11080 69 73 74 20 24 76 61 72 4e 61 6d 65 20 24 76 61  ist $varName$va
11090 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20  rValue]..
110a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
110b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
110c0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 110d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 110e0 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 proc enumerableT 110f0 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 oList { enumerab 11100 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 le } {.. se 11110 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. 11120 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 11130 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 ring length$enu
11140 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c  merable] == 0 ||
11150 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20   $enumerable eq 11160 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. 11170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
11180 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d  result..      }.
11190 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  ...      object
111a0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
111b0 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20  tem $enumerable 111c0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 111d0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 string length$i
111e0 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
111f0 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
11200 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65  end result [$ite 11210 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 m ToString].. 11220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 11230 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 11240 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
11250 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63  ...    proc catc
11260 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72  hAndReturn { scr
11270 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20  ipt {stackTrace
11280 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74  false} {strict t
11290 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
112a0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
112b0 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63   Evaluate the sc
112c0 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
112d0 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74   our caller in t
112e0 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20  heir context,..
112f0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70       #       cap
11300 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20  turing both the
11310 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72  result and the r
11320 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...
11330 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
11340 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c  code [catch {upl
11350 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20  evel 1 $script} 11360 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 result].... 11370 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11380 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 : Did the script 11390 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 113a0 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 caller NOT rais 113b0 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 e an error?.. 113c0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 113d0 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65$strict && $code 113e0 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 == 0 || !$stric
113f0 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d  t && $code != 1} 11400 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11410 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11420 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 TE: Success. Re 11430 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 11440 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 11450 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e and the result. 11460 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11470 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 11480 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] 11490 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 114a0 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 {$stackTrace} t
114b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
114c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
114d0 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
114e0 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66  caller wants a f
114f0 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
11500 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c  (if applicable),
11510 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
11520 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20    return a list
11530 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
11540 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
11550 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20  ult verbatim...
11560 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
11570 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $11580 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
11590 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
115a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
115b0 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
115c0 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64  e.  Our caller d
115d0 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66  oes not want a f
115e0 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
115f0 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20  (if..        #
11600 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29       applicable)
11610 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  , return a list
11620 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
11630 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d  code, the error.
11640 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
11650 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e   code for the in
11660 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74  terpreter, and t
11670 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
11680 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20   up to the..
11690 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
116a0 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63  t where the stac
116b0 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73  k trace should s
116c0 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  tart...        #
116d0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
116e0 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a   [list $code$::
116f0 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a 20 20 20  errorCode \..
11700 20 20 20 20 20 20 20 20 20 5b 65 78 74 72 61 63           [extrac
11710 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
11720 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
11730 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a 20 20 20  e $result]].. 11740 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 11750 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 proc compile 11760 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 CSharpWith {.. 11770 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d text m 11780 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 emory symbols st 11790 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e rict resultsVarN 117a0 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d ame errorsVarNam 117b0 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 e fileNames.. 117c0 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 args } 117d0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 117e0 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 # NOTE: Since 117f0 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 we are going to 11800 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 use this method 11810 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 name a lot, assi 11820 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 gn it to a.. 11830 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 11840 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 le first... 11850 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 #.. set ad 11860 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 d ReferencedAsse 11870 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 mblies.Add.... 11880 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11890 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 OTE: Create the 118a0 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 base command to 118b0 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 evaluate and add 118c0 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 the property se 118d0 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 ttings.. # 118e0 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61 that are a 118f0 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 lmost always nee 11900 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 ded by our unit 11910 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 tests (i.e. the 11920 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 System.. # 11930 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d and System 11940 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 .Data assembly r 11950 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 eferences)... 11960 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 11970 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d command [list \. 11980 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 . compi 11990 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 24 leCSharp$text $119a0 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 memory$symbols
119b0 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 20  $strict results 119c0 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 errors \.. 119d0 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e$add System.
119e0 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e  dll $add System. 119f0 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 Data.dll$add Sy
11a00 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e  stem.Transaction
11a10 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20  s.dll \..
11a20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58     $add System.X 11a30 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 ml.dll].... 11a40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11a50 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 : Add all the pr 11a60 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 ovided file name 11a70 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 s as assembly re 11a80 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 ferences... 11a90 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 #.. foreac 11aa0 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 h fileName$file
11ab0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
11ac0 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64   lappend command
11ad0 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79   $add [getBinary 11ae0 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
11af0 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
11b00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11b10 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65   NOTE: Add the e
11b20 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20  xtra arguments,
11b30 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63  if any, to the c
11b40 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61  ommand to evalua
11b50 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
11b60 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
11b70 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a   command $args.. 11b80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11b90 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 # NOTE: Alias t 11ba0 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 he compiler loca 11bb0 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 l results and er 11bc0 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 rors variables t 11bd0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 o the.. # 11be0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na 11bf0 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 mes provided by 11c00 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 11c10 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 11c20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11c30 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20  resultsVarName]
11c40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
11c50 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65       upvar 1 $re 11c60 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 sultsVarName res 11c70 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ults.. }... 11c80 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 11c90 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 ng length$error
11ca0 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  sVarName] > 0} t
11cb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
11cc0 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61  pvar 1 $errorsVa 11cd0 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 rName errors.. 11ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 11cf0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 11d00 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e Evaluate the con 11d10 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c structed [compil 11d20 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 eCSharp] command 11d30 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d and return the. 11d40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r 11d50 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d esult... #. 11d60 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d . eval$com
11d70 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  mand..    }.....
11d80 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72      proc isMemor
11d90 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  yDb { fileName }
11da0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
11db0 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68     # NOTE: Is th
11dc0 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
11dd0 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72  base file name r
11de0 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f  eally an in-memo
11df0 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20  ry database?..
11e00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
11e10 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65  urn [expr {$file 11e20 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 Name eq ":memory 11e30 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 :" || \.. 11e40 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 [string range 11e50 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d$fileName 0 12]
11e60 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72   eq "file::memor
11e70 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  y:"}]..    }....
11e80 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c  .    proc isTabl
11e90 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61  eInDb { name {va
11ea0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
11eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11ec0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
11ed0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
11ee0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
11ef0 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
11f00 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
11f10 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
11f20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  It contains the
11f30 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11f40 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ion handle that
11f50 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23  will be..      #
11f60 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65         used to e
11f70 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79  xecute the query
11f80 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
11f90 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ne if the named
11fa0 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20  table is..
11fb0 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20  #       present
11fc0 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65  in that database
11fd0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11fe0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 11ff0 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 12000 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12010 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d Use the sqlite_m 12020 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 aster table to d 12030 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 etermine if the 12040 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a named table is.. 12050 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr 12060 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 esent in the dat 12070 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 12080 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b . set sql { 12090 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 .. SELECT 120a0 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 COUNT(*) FROM s 120b0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 qlite_master WHE 120c0 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 RE type = 'table 120d0 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d ' AND name = ?;. 120e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 120f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12100 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 E: Return non-ze 12110 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ro if the named 12120 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 table is present 12130 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12140 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 12150 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 .. [sql e 12160 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 xecute -execute 12170 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 scalar$db $sql 12180 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 [list param1 Str 12190 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d ing$name]] > 0.
121a0 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d  .      }]..    }
121b0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
121c0 74 44 62 44 65 66 61 75 6c 74 50 61 67 65 53 69  tDbDefaultPageSi
121d0 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ze {} {..      t
121e0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ry {..        se
121f0 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d  t db [sql open -
12200 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74  type SQLite {Dat
12210 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79  a Source=:memory
12220 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65  :;}]..        re
12230 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74  turn [sql execut
12240 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
12250 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61  r $db "PRAGMA pa 12260 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 ge_size;"].. 12270 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 } finally {.. 12280 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 12290 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 exists db]} the 122a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 122b0 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 122c0 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20 20$db}..
122d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
122e0 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n db..        }.
122f0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
12300 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
12310 44 62 44 65 66 61 75 6c 74 43 61 63 68 65 53 69  DbDefaultCacheSi
12320 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ze {} {..      t
12330 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ry {..        se
12340 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d  t db [sql open -
12350 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74  type SQLite {Dat
12360 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79  a Source=:memory
12370 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65  :;}]..        re
12380 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74  turn [sql execut
12390 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
123a0 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61  r $db "PRAGMA ca 123b0 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 che_size;"].. 123c0 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a } finally {.. 123d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 123e0 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 o exists db]} th 123f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12400 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 catch {sql close 12410 20 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20$db}..
12420 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
12430 69 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d  in db..        }
12440 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
12450 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 75 73  .....    proc us
12460 65 4c 65 67 61 63 79 44 62 50 61 67 65 41 6e 64  eLegacyDbPageAnd
12470 43 61 63 68 65 53 69 7a 65 73 20 7b 20 76 61 72  CacheSizes { var
12480 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
12490 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
124a0 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70   Refer to the sp
124b0 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65  ecified variable
124c0 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20   (e.g. "db") in
124d0 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
124e0 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ur..      #
124f0 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f    caller.  It co
12500 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 62  ntains the datab
12510 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
12520 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20  andle that will
12530 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  be..      #
12540 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74    used to execut
12550 65 20 71 75 65 72 69 65 73 20 75 73 65 64 20 74  e queries used t
12560 6f 20 73 65 74 20 74 68 65 20 70 61 67 65 20 61  o set the page a
12570 6e 64 20 63 61 63 68 65 20 73 69 7a 65 73 2e 0d  nd cache sizes..
12580 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12590 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 125a0 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c db.... sql 125b0 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a execute$db {..
125c0 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 70          PRAGMA p
125d0 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b  age_size = 1024;
125e0 0d 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  ..        PRAGMA
125f0 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30   cache_size = 20
12600 30 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  00;..      }....
12610 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
12620 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
12630 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
12640 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db 12650 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 "PRAGMA page_si 12660 7a 65 3b 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ze;"] \.. 12670 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 [sql execute 12680 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 -execute scalar 12690 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68$db "PRAGMA cach
126a0 65 5f 73 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20  e_size;"]]..
126b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
126c0 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
126d0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
126e0 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d  essage { value }
126f0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
12700 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
12710 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d  e string conform
12720 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74  s to format of t
12730 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74  he normal except
12740 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
12750 20 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73     error strings
12760 2c 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65  , extract and re
12770 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72  turn only the er
12780 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20  ror message..
12790 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
127a0 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20  on itself...
127b0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70    #..      set p
127c0 61 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d  atterns [list \.
127d0 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e  .      {System\.
127e0 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51  Data\.SQLite\.SQ
127f0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28  LiteException $$12800 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20 28 2e 0x80004005$$: (.
12810 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c  +?)  (?: )?at} \
12820 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c  ..      {System\
12830 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53  .Data\.SQLite\.S
12840 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20  QLiteException:
12850 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d  (.+?)  (?: )?at}
12860 20 5c 0d 0a 20 20 20 20 20 20 7b 45 61 67 6c 65   \..      {Eagle
12870 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50  \._Components\.P
12880 75 62 6c 69 63 5c 2e 53 63 72 69 70 74 45 78 63  ublic\.ScriptExc
12890 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28  eption: (.+?)  (
128a0 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20  ?: )?at}]....
128b0 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 74 65     foreach patte
128c0 72 6e 20 24 70 61 74 74 65 72 6e 73 20 7b 0d 0a  rn $patterns {.. 128d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 if {[reg 128e0 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 exp --$pattern
128f0 24 76 61 6c 75 65 20 64 75 6d 6d 79 20 6d 65 73  $value dummy mes 12900 73 61 67 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 sage]} then {.. 12910 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 73 set mes 12920 73 61 67 65 20 5b 73 74 72 69 6e 67 20 6d 61 70 sage [string map 12930 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 [list \r\n \n] 12940 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65 [string trim$me
12950 73 73 61 67 65 5d 5d 0d 0a 20 20 20 20 20 20 20  ssage]]..
12960 20 20 20 73 65 74 20 6c 69 6e 65 73 20 5b 73 70     set lines [sp
12970 6c 69 74 20 24 6d 65 73 73 61 67 65 20 5c 6e 5d  lit $message \n] 12980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 12990 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 {[llength$line
129a0 73 5d 20 3d 3d 20 32 7d 20 74 68 65 6e 20 7b 0d  s] == 2} then {.
129b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
129c0 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20  {[lindex $lines 129d0 30 5d 20 65 71 20 5b 6c 69 6e 64 65 78 20 24 6c 0] eq [lindex$l
129e0 69 6e 65 73 20 31 5d 7d 20 74 68 65 6e 20 7b 0d  ines 1]} then {.
129f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
12a00 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c  eturn [lindex $l 12a10 69 6e 65 73 20 30 5d 0d 0a 20 20 20 20 20 20 20 ines 0].. 12a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 return [ap 12a40 70 65 6e 64 41 72 67 73 20 5b 6c 69 6e 64 65 78 pendArgs [lindex 12a50 20 24 6c 69 6e 65 73 20 30 5d 20 22 20 2d 2d 20$lines 0] " --
12a60 22 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  " [lindex $lines 12a70 20 31 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 1]].. 12a80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 }.... r 12a90 65 74 75 72 6e 20 24 6d 65 73 73 61 67 65 0d 0a eturn$message..
12aa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12ab0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
12ac0 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 7d  rn $value.. } 12ad0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr 12ae0 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. 12af0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r 12b00 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ 12b10 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim 12b20 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
12b30 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
12b40 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
12b50 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
12b60 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66  {format none} {f
12b70 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
12b80 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
12b90 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e  ng length $fileN 12ba0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 12bb0 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d {set fileName :m 12bc0 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 emory:}.. s 12bd0 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 etupDb$fileName
12be0 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" ""
12bf0 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
12c00 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d  e false db true.
12c10 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
12c20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
12c30 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
12c40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
12c50 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
12c60 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f  ute $execute -fo 12c70 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 rmat$format $db 12c80 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d$sql]]..      }
12c90 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
12ca0 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f 12cb0 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false 12cc0 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. 12cd0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 12ce0 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 . proc hasNoF 12cf0 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e lags { varName n 12d00 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 one } {.. u 12d10 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
12d20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69  flags....      i
12d30 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
12d40 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d   flags]} then {.
12d50 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
12d60 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
12d70 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
12d80 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73  ng length $flags 12d90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 12da0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 12db0 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 12dc0 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 if {$none
12dd0 26 26 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f  && $flags eq "No 12de0 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ne"} then {.. 12df0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 12e00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 12e10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 12e20 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 12e30 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f roc getConnectio 12e40 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d nFlags { fileNam 12e50 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 e flags {quiet f 12e60 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 12e70 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 12e80 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 : Figure out whi 12e90 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ch database file 12ea0 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 name or connect 12eb0 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 ion string these 12ec0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12ed0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 12ee0 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 will actually a 12ef0 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 pply to. This i 12f00 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d s not necessary. 12f10 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 12f20 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 n quiet mode bec 12f30 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d ause this inform 12f40 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 ation is only us 12f50 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a ed for logging.. 12f60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 12f70 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 d reporting purp 12f80 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a oses... #.. 12f90 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
12fa0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
12fb0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
12fc0 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] 12fd0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 12fe0 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 12ff0 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 base [appendArgs 13000 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 "file name \"" 13010 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20$fileName \"]..
13020 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif
13030 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
13040 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c  dataSource] && \
13050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 21 5b  ..            ![
13060 61 72 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64  array exists ::d
13070 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e  ataSource]} then
13080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
13090 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
130a0 6e 64 41 72 67 73 20 22 64 61 74 61 20 73 6f 75  ndArgs "data sou
130b0 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53  rce \"" $::dataS 130c0 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 ource \"].. 130d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 130e0 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 set datab 130f0 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 ase <unknown>.. 13100 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13110 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 13120 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 65 6e # NOTE: Even 13130 20 74 68 6f 75 67 68 20 74 68 65 72 65 20 69 73 though there is 13140 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f 75 72 63 65 only one source 13150 20 6f 66 20 66 6c 61 67 73 20 73 6f 20 66 61 72 of flags so far 13160 2c 20 74 68 65 79 0d 0a 20 20 20 20 20 20 23 20 , they.. # 13170 20 20 20 20 20 20 6d 75 73 74 20 62 65 20 63 6f must be co 13180 6d 62 69 6e 65 64 20 75 73 69 6e 67 20 74 68 65 mbined using the 13190 20 63 6f 72 72 65 63 74 20 73 79 6e 74 61 78 20 correct syntax 131a0 66 6f 72 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a for enumerated.. 131b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c # fl 131c0 61 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 ag values for th 131d0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework 131e0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 131f0 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d set flags [com 13200 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 bineFlags$flags
13210 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d   ""]....      #.
13220 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13230 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
13240 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69  e local connecti
13250 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65  on flags and the
13260 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..
13270 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 20     #       data
13280 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65 20 6e  source or file n
13290 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ame...      #..
132a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 132b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 132c0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 132d0 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 sts ::no(emitLoc 132e0 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a alFlags)] && \.. 132f0 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 13300 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 13310 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 emitLocalFlagsIf 13320 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 13330 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e ![hasN 13340 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c oFlags flags fal 13350 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 se])} then {.. 13360 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
13370 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
13380 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13390 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
133a0 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f   local connectio
133b0 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64  n flags for " $d 133c0 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 atabase \.. 133d0 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 " are: 133e0 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f " [expr {![hasNo 133f0 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 Flags flags fals 13400 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 e] ? \.. 13410 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 13420 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 s \"$flags \"]
13430 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
13440 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
13450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
13460 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13470 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
13480 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74  e shared connect
13490 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20  ion flags...
134a0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
134b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 134c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 134d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 134e0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 object invoke Sy 134f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 13500 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 13510 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 n SharedFlags.. 13520 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 64 46 } sharedF 13530 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e lags] == 0} then 13540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 13550 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 13560 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 ::no(emitSharedF 13570 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. 13580 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e (![in 13590 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 135a0 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 66 mitSharedFlagsIf 135b0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 135c0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 135d0 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 sNoFlags sharedF 135e0 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 68 65 lags true])} the 135f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 13600 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
13610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
13620 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
13630 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72        "---- shar
13640 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ed connection fl
13650 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab 13660 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. 13670 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 " are: " 13680 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 13690 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 ags sharedFlags 136a0 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 true] ? \.. 136b0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 136c0 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72 65 ndArgs \"$share
136d0 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e  dFlags \"] : "<n
136e0 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20  one>"}] \n]..
136f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
13700 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13710 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
13720 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
13730 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20 26  tSharedFlags)] &
13740 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
13750 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73     ![info exists
13760 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64   ::no(emitShared
13770 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c 61 62  FlagsIfUnavailab
13780 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
13790 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
137a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 137b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 137d0 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e ---- shared conn 137e0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 ection flags for 137f0 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a "$database \..
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13810 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61  " are: <unavaila
13820 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ble>\n"]..
13830 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
13840 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
13850 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
13860 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
13870 67 29 20 74 68 65 20 64 65 74 65 63 74 65 64 20  g) the detected
13880 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f  global connectio
13890 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e  n flags, if any.
138a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
138b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 138c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 138d0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 138e0 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 ::no(emitGlobalF 138f0 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. 13900 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 13910 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 13920 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f tGlobalFlagsIfNo 13930 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ne)] || \.. 13940 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 ![hasNoF 13950 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f lags ::connectio 13960 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d n_flags false])} 13970 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13980 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
13990 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
139a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
139b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62        "---- glob
139c0 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
139d0 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20  ags are: " \..
139e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
139f0 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20  r {![hasNoFlags
13a00 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
13a10 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20  gs false] ? \..
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70               [ap
13a30 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a 3a 63  pendArgs \" $::c 13a40 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 onnection_flags 13a50 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d \"] : "<none>"}] 13a60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 13a70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13a80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13a90 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 E: If there are 13aa0 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 any global (per 13ab0 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 test run) connec 13ac0 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65 tion flags curre 13ad0 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 ntly.. # 13ae0 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65 set, use the 13af0 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 m now (i.e. by c 13b00 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 ombining them wi 13b10 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 th the ones for 13b20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # 13b30 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e connection). 13b40 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13b50 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 13b60 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 s ::connection_f 13b70 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 lags]} then {.. 13b80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13b90 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e # NOTE: Combin 13ba0 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 e and/or replace 13bb0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 13bc0 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73 flags and then s 13bd0 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20 how the.. 13be0 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c # new val 13bf0 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ue... #.. 13c00 20 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 set flag 13c10 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 s [combineFlags 13c20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63$flags $::connec 13c30 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 tion_flags].... 13c40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13c50 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( 13c60 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 and log) the new 13c70 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 effective conne 13c80 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 ction flags... 13c90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13ca0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
13cb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13cc0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
13cd0 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69  s ::no(emitCombi
13ce0 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d  nedFlags)] && \.
13cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
13d00 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
13d10 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46  no(emitCombinedF
13d20 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20  lagsIfNone)] ||
13d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13d40 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66    ![hasNoFlags f
13d50 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68  lags false])} th
13d60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13d70 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 13d80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13d90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13da0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com 13db0 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e bined connection 13dc0 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 flags for "$da
13dd0 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20  tabase \..
13de0 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
13df0 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e   " [expr {![hasN
13e00 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c  oFlags flags fal
13e10 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  se] ? \..
13e20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
13e30 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c  Args \" $flags \ 13e40 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 "] : "<none>"}] 13e50 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 13e60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 13e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 13e80 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 turn$flags..
13e90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13ea0 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
13eb0 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71   { {flags ""} {q
13ec0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
13ed0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13ee0 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e  # NOTE: Determin
13ef0 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d 62 69  e what the combi
13f00 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20  ned (global and
13f10 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f  local) connectio
13f20 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
13f30 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
13f40 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 65 74  , possibly quiet
13f50 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ly...      #..
13f60 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67      set flags [g
13f70 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  etConnectionFlag
13f80 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 75 69  s "" $flags$qui
13f90 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  et]....      #..
13fa0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
13fb0 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f   no global or lo
13fc0 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  cal connection f
13fd0 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 69 66  lags were specif
13fe0 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 20 20  ied, the..
13ff0 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20  #       default
14000 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14010 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3b   should be used;
14020 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 74 75   therefore, retu
14030 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  rn..      #
14040 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e    an empty strin
14050 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 2e 0d  g in that case..
14060 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14070 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
14080 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d  th $flags] == 0} 14090 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 140a0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 140b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 140c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e # NOTE: In 140d0 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 order to check 140e0 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 if the default c 140f0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 14100 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 0d 0a are being used.. 14110 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 14120 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f is necessary to 14130 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 attempt a conve 14140 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 rsion to the act 14150 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a ual enumerated.. 14160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 79 # ty 14170 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 68 61 pe. Failing tha 14180 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 67 61 t, the check aga 14190 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 6c 74 inst the default 141a0 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a value will be.. 141b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 141c0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 141d0 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 141e0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 h {.. set 141f0 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 error null; # I 14200 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 GNORED.... 14210 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 14220 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 73 65 Utility TryParse 14230 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a FlagsEnum "" \.. 14240 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 14250 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 14260 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 QLiteConnectionF 14270 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 6e lags ""$flags n
14280 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 20  ull true \..
14290 20 20 20 20 20 20 20 20 74 72 75 65 20 74 72 75          true tru
142a0 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d  e error..      }
142b0 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d   value]} then {.
142c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
142d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
142e0 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 73 65 20  mpting to parse
142f0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
14300 6c 61 67 73 20 63 61 75 73 65 64 20 61 20 73 63  lags caused a sc
14310 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20  ript..        #
14320 20 20 20 20 20 20 65 72 72 6f 72 2e 20 20 45 6d        error.  Em
14330 69 74 20 61 20 77 61 72 6e 69 6e 67 20 74 6f 20  it a warning to
14340 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  the test log fil
14350 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a  e and continue..
14360 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14370 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 73  using an emtpy s
14380 74 72 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a  tring instead...
14390 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
143a0 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41     tlog [appendA
143b0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
143c0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
143d0 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73  : failed to pars
143e0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
143f0 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  gs, error: " \..
14400 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
14410 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20   $value \n].... 14420 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 14430 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a "".. }.... 14440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 14450 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f NOTE: If the co 14460 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 74 72 mbined flags str 14470 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 ing could not ac 14480 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 tually be conver 14490 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ted.. # 144a0 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 to the enumer 144b0 61 74 65 64 20 74 79 70 65 20 69 74 20 69 73 20 ated type it is 144c0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 144d0 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 e, then just use 144e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 144f0 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 it verbatim; oth 14500 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 65 74 erwise, just ret 14510 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 14520 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 ing. In that.. 14530 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas 14540 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 e, the default c 14550 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 14560 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 will be used... 14570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 14580 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 14590 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c$value] == 0 ||
145a0 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 66 61   $value ne "Defa 145b0 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ult"} then {.. 145c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 145d0 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 # WARNING: This 145e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 returns the str 145f0 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 68 65 ing value of the 14600 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c combined flags, 14610 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 14620 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e 75 the enu 14630 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e 20 20 merated value. 14640 54 68 69 73 20 69 73 20 62 79 20 64 65 73 69 67 This is by desig 14650 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 n and should not 14660 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14670 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 64 20 be changed 14680 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 6c 20 without careful 14690 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 65 consideration (e 146a0 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 .g. it would.. 146b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 146c0 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 51 4c prevent the SQL 146d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c iteConnection cl 146e0 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e ass from allowin 146f0 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 g invalid.. 14700 20 20 20 23 20 20 20 20 20 20 20 20 20 20 5b 22 # [" 14710 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 magical"] meta-f 14720 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 lags)... 14730 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 14740 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 46 n [appendArgs "F 14750 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b lags="$flags \;
14760 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
14770 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
14780 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
14790 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61  c enableSharedCa
147a0 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e  che { channel en
147b0 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73  able {quiet fals
147c0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
147d0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
147e0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
147f0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
14800 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
14810 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14820 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
14830 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
14840 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14850 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
14860 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24  ache [expr int($14870 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 enable)].. 14880 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 14890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 148a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
148b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
148c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 148d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 148e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 148f0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e call sqlite3_en 14900 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 able_shared_cach 14910 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 e("$enable \..
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e               ").
14930 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 14940 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 14950 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 14960 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
14970 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
14980 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 14990 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 149a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 149b0 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 149c0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 149d0 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e ared_cache("$en
149e0 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..
149f0 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f        ")... erro
14a00 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 14a10 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d t \n].. } 14a20 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 14a30 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 ..... proc se 14a40 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 tupDb {.. 14a50 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d fileName {m 14a60 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d ode ""} {dateTim 14a70 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 eFormat ""} {dat 14a80 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 eTimeKind ""} {f 14a90 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 lags ""}.. 14aa0 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d {extra ""} 14ab0 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 {qualify true} 14ac0 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 {delete true} {u 14ad0 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 ri false}.. 14ae0 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 {temporar 14af0 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 y true} {varName 14b00 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 db} {quiet fals 14b10 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 14b20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 14b30 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 irst, see if our 14b40 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 caller has requ 14b50 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f ested an in-memo 14b60 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 ry database... 14b70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 14b80 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d isMemory [isMem 14b90 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d oryDb$fileName]
14ba0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
14bb0 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
14bc0 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74  ow, all test dat
14bd0 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74  abases used by t
14be0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72  he test suite ar
14bf0 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20  e placed..
14c00 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65  #       into the
14c10 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74   database direct
14c20 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62  ory.  Each datab
14c30 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20  ase and related
14c40 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  files..      #
14c50 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74       used by a t
14c60 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c  est should be cl
14c70 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74  eaned up by that
14c80 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d   test using the.
14c90 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22  .      #       "
14ca0 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65  cleanupDb" proce
14cb0 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20  dure, below...
14cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
14cd0 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
14ce0 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
14cf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
14d00 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
14d10 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
14d20 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
14d30 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 14d40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14d50 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 14d60 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 : By default, de 14d70 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 lete any pre-exi 14d80 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 sting database w 14d90 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c ith the same fil 14da0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 14db0 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 name if it curr 14dc0 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 ently exists... 14dd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 14de0 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
14df0 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65  $delete && [file 14e00 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
14e10 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
14e20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14e30 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
14e40 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  o delete any pre
14e50 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
14e60 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
14e70 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23   file..        #
14e80 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20         name...
14e90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14ea0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
14eb0 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa 14ec0 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e me} error]} then 14ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 14ee0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 14ef0 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 14f00 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 14f10 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 14f20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 14f30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 14f40 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
14f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
14f60 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 14f70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14f80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14f90 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 14fa0 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 14fb0 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file 14fc0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
14fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14fe0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74    "\" during set
14ff0 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
15000 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 15010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15020 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 15030 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15040 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 15050 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 15060 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 15070 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 15080 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 15090 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 150a0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 150b0 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 the opened datab 150c0 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 ase will be stor 150d0 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 150e0 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 150f0 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
15100 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15110 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75  # NOTE: Start bu
15120 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  ilding the conne
15130 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54  ction string.  T
15140 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64  he only required
15150 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20   portion..
15160 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63  #       of the c
15170 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
15180 20 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75   is the data sou
15190 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61  rce, which conta
151a0 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ins the..      #
151b0 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
151c0 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66  file name itself
151d0 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  .  If our caller
151e0 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20   wants to use a
151f0 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20  URI as..      #
15200 20 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73        the data s
15210 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46  ource, use the F
15220 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f  ullUri connectio
15230 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74  n string propert
15240 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  y to..      #
15250 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
15260 64 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69  data source stri
15270 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61  ng from being ma
15280 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ngled...      #.
15290 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d  .      if {$uri} 152a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 152b0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 set connection 152c0 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e {FullUri=${fileN
152d0 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65  ame}}..      } e
152e0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  lse {..        s
152f0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44  et connection {D
15300 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c  ata Source=${fil 15310 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d eName}}.. } 15320 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15330 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since 15340 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 15350 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b has no special k 15360 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 nowledge of what 15370 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 the default.. 15380 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 # sett 15390 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 ing is for the T 153a0 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 oFullPath connec 153b0 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 153c0 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 ery, always.. 153d0 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 # add t 153e0 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 he value we know 153f0 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f about to the co 15400 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 15410 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15420 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 15430 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d on {;ToFullPath= 15440 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20${qualify}}....
15450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15460 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
15470 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20  ler specified a
15480 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64  journal mode, ad
15490 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
154a0 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  portion..      #
154b0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
154c0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
154d0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
154e0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
154f0 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e   length $mode] > 15500 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 15510 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 15520 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 ction {;Journal 15530 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 Mode=${mode}}..
15540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15550 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
15560 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
15570 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
15580 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20  ime format, add
15590 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  the necessary..
155a0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72       #       por
155b0 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
155c0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
155d0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
155e0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
155f0 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46  ength $dateTimeF 15600 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e ormat] > 0} then 15610 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 15620 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 15630 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 DateTimeFormat=$
15640 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d  {dateTimeFormat}
15650 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
15660 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15670 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
15680 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44  er specified a D
15690 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64  ateTimeKind, add
156a0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
156b0 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
156c0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
156d0 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
156e0 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
156f0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
15700 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65  length $dateTime 15710 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Kind] > 0} then 15720 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 15730 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 d connection {;D 15740 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 ateTimeKind=${da
15750 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20  teTimeKind}}..
15760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
15770 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15780 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20  Figure out what
15790 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20  the final flags
157a0 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
157b0 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d  ion need to be..
157c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
157d0 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f  set flags [getCo
157e0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66  nnectionFlags $f 157f0 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 ileName$flags $15800 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 15810 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15820 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s 15830 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ 15840 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl 15850 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. 15860 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece 15870 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of 15880 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 15890 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... 158a0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 158b0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
158c0 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
158d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
158e0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
158f0 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. 15900 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 15910 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15920 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 15930 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex 15940 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t 15950 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. 15960 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str 15970 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n 15980 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 15990 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 159a0 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
159b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
159c0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
159d0 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. 159e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 159f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15a00 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 E: Open the data 15a10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 15a20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 now, placing the 15a30 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 opaque handle v 15a40 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 alue.. # 15a50 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 into the var 15a60 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 iable specified 15a70 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 15a80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 15a90 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 et db [sql open 15aa0 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 -type SQLite [su 15ab0 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d bst$connection]
15ac0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
15ad0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66      # NOTE: Conf
15ae0 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72  igure the tempor
15af0 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ary directory fo
15b00 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
15b10 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ed database..
15b20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
15b30 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73  ction now unless
15b40 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
15b50 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
15b60 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d  ..      if {$tem 15b70 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f porary && ![info 15b80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 exists ::no(set 15b90 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto 15ba0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. 15bb0 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut 15bc0 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 e$db [appendArg
15bd0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
15be0 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   "PRAGMA temp_st
15bf0 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory =
15c00 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  \"" [getTemporar
15c10 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b  yDirectory] \"\;
15c20 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
15c30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15c40 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79  OTE: Perform any
15c50 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65   extra per-conne
15c60 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20  ction setup for
15c70 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
15c80 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15c90 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c  database now unl
15ca0 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66  ess our caller f
15cb0 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20  orbids it...
15cc0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65    #..      set e
15cd0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67  xecuteOnSetup [g
15ce0 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70  etExecuteOnSetup
15cf0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
15d00 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e 15d10 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e xecuteOnSetup] > 15d20 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 0 && \.. 15d30 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 ![info exists 15d40 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 ::no(executeOnS 15d50 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a etup)]} then {.. 15d60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15d70 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 15d80 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 command may rais 15d90 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 e an error; if s 15da0 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c o, that is fine, 15db0 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 as.. # 15dc0 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 the enclosi 15dd0 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 ng test will the 15de0 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 n fail. The [su 15df0 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d bst] command is. 15e00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 15e10 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c used on the SQL 15e20 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 in case it need 15e30 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 s to refer to st 15e40 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 ate in our.. 15e50 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 15e60 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ext... #. 15e70 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 . sql exe 15e80 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 cute$db [subst
15e90 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d  $executeOnSetup] 15ea0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15eb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15ec0 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 TE: Always retur 15ed0 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e n the connection 15ee0 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 handle upon suc 15ef0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a cess... #.. 15f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 return$db
15f10 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
15f20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63  proc getDbConnec
15f30 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20  tion { {varName
15f40 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  db} } {..      #
15f50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15f60 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
15f70 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
15f80 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
15f90 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
15fa0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
15fb0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61   caller.  The ha
15fc0 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61  ndle to the data
15fd0 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20  base previously
15fe0 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a  opened via the..
15ff0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
16000 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72  etupDb] procedur
16010 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72  e should be stor
16020 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20  ed there...
16030 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
16040 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... 16050 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16060 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 # NOTE: This ret 16070 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 urns the ADO.NET 16080 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f IDbConnection o 16090 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 bject instance f 160a0 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 or the.. # 160b0 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 specified 160c0 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 databse handle. 160d0 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 Since getting t 160e0 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 his object relie 160f0 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 s upon.. # 16100 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 Eagle inte 16110 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 rnals, great car 16120 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 e should be take 16130 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f n to avoid dispo 16140 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 sing of.. # 16150 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 this obje 16160 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 ct or otherwise 16170 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 putting it into 16180 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 an invalid state 16190 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 161a0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 161b0 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a ts db]} then {.. 161c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 161d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 161e0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 161f0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 16200 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f -objectflags +No 16210 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c Dispose -alias \ 16220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16230 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 16240 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 16250 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 s Item$db..
16260 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
16270 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
16280 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16290 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65     # NOTE: Succe
162a0 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f  ss, return the o
162b0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
162c0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  dle...
162d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  #..          ret
162e0 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 162f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 16300 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 16310 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 16320 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 ilure, report wh 16330 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. 16340 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 16350 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16360 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
16380 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
16390 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65  led to get conne
163a0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72  ction handle for
163b0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d   database \"" \.
163c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24  .              $163d0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " 163e0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
163f0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
16400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
16410 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16420 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20  Failure, return
16430 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76  an obviously inv
16440 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65  alid opaque obje
16450 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  ct handle...
16460 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
16470 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
16480 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 43      proc freeDbC
16490 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72  onnection { {var
164a0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d  Name connection}
164b0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
164c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
164d0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
164e0 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
164f0 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29  g. "connection")
16500 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
16510 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f         context o
16520 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54  f our caller.  T
16530 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
16540 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41   handle for an A
16550 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20  DO.NET..      #
16560 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
16570 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75   previously retu
16580 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f  rned by [getDbCo
16590 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64  nnection] should
165a0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
165b0 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e     stored there.
165c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
165d0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 165e0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a e connection.... 165f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16600 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 16610 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 o remove the opa 16620 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 16630 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 e from the inter 16640 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 preter.. # 16650 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 now. This 16660 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 [object dispose 16670 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 ] call will not 16680 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 actually dispose 16690 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 of the.. # 166a0 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e underlyin 166b0 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 g object because 166c0 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 the +NoDispose 166d0 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 flag was set on 166e0 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 it.. # 166f0 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f during creatio 16700 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 n of the opaque 16710 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a object handle... 16720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 16730 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 16740 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c connection] && \ 16750 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 .. [cat 16760 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f ch {object dispo 16770 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 se$connection}
16780 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
16790 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
167a0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
167b0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
167c0 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c  remove the handl
167d0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
167e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
167f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 16800 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 16810 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 16820 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 16830 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d G: failed to rem 16840 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 ove connection h 16850 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 andle \""$conne
16860 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  ction \..
16870 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a       "\", error:
16880 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 16890 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 168a0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 168b0 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 addDbConnection 168c0 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 { connection {va 168d0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 168e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 168f0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 16900 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 16910 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 16920 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 16930 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 16940 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a caller... 16950 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 16960 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
16970 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
16980 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65       # NOTE: Cre
16990 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20  ate a correctly
169a0 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66  formatted name f
169b0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database
169c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20  connection to..
169d0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
169e0 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
169f0 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65  t managed by the
16a00 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74   Eagle interpret
16a10 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
16a20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65      set db [obje
16a30 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
16a40 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
16a50 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f           Eagle._
16a60 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61  Components.Priva
16a70 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74  te.FormatOps Dat
16a80 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20  abaseObjectName
16a90 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. 16aa0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 SQLiteC 16ab0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 onnection [objec 16ac0 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 16ad0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e eter.GetActive N 16ae0 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 extId]].... 16af0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16b00 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62 61 : Add the databa 16b10 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 se connection pr 16b20 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 16b30 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 ller to the list 16b40 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16b50 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 of those known t 16b60 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 o the Eagle inte 16b70 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 16b80 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 #.. object 16b90 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 16ba0 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 onPublic Interpr 16bb0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 eter.GetActive.c 16bc0 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c onnections Add \ 16bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 20 ..$db
16be0 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20  $connection.. 16bf0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 16c00 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 getRowsFromDataT 16c10 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65 able { dataTable 16c20 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 16c30 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 rows [list].. 16c40 20 20 20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 set count [$d
16c50 61 74 61 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73  ataTable Columns
16c60 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20  .Count]....
16c70 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index
16c80 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f  0} {$index <$co
16c90 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  unt} {incr index
16ca0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  } {..        set
16cb0 20 64 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61   dataColumn [$da 16cc0 74 61 54 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 taTable -alias C 16cd0 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 olumns.get_Item 16ce0 24 69 6e 64 65 78 5d 0d 0a 20 20 20 20 20 20 20$index]..
16cf0 20 73 65 74 20 6e 61 6d 65 73 28 24 69 6e 64 65   set names($inde 16d00 78 29 20 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 x) [$dataColumn
16d10 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20  ColumnName]..
16d20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62     }....      ob
16d30 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
16d40 69 61 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74  ias dataRow [set
16d50 20 64 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61   dataRows [$data 16d60 54 61 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a Table Rows]] {.. 16d70 20 20 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 set row 16d80 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 16d90 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 for {set index 16da0 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 0} {$index < $c 16db0 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 ount} {incr inde 16dc0 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 x} {.. 16dd0 73 65 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 set value [$data
16de0 52 6f 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69  Row -create -ali
16df0 61 73 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64  as get_Item $ind 16e00 65 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ex].... 16e10 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 16e20 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20 30 20 gth$value] > 0
16e30 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
16e40 20 20 20 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76      ![object inv
16e50 6f 6b 65 20 43 6f 6e 76 65 72 74 20 49 73 44 42  oke Convert IsDB
16e60 4e 75 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68  Null $value]} th 16e70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16e80 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c lappend row [l 16e90 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 ist$names($inde 16ea0 78 29 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 x) [$value ToStr
16eb0 69 6e 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing]]..
16ec0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16ed0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
16ee0 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28  ow [list $names( 16ef0 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20$index)]..
16f00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70  ....        lapp
16f20 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20  end rows $row.. 16f30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16f40 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 return$rows..
16f50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
16f60 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74   dumpRowsFromDat
16f70 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c  aTable { channel
16f80 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20   rows } {..
16f90 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d   set sequence 1.
16fa0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
16fb0 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20   row $rows {.. 16fc0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16fd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16fe0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16ff0 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65  [expr {$sequence 17000 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 > 1 ? "\n" : "" 17010 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 }] "---- ROW #" 17020 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a$sequence :\n]..
17030 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
17040 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20  h pair $row {.. 17050 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c if {[ll 17060 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 ength$pair] >=
17070 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..
17080 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 17090 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 170a0 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 s \t \.. 170b0 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c [list [l 170c0 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 index$pair 0]]
170d0 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64  ": " [list [lind
170e0 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d  ex $pair 1]] \n] 170f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 17100 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 seif {[llength$
17110 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e  pair] == 1} then
17120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17130 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 17140 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d appendArgs \t \. 17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 17160 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 [list [lindex$
17170 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c  pair 0]] ": <nul
17180 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  l>\n"]..
17190 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
171a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 171b0 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e hannel \t<empty> 171c0 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 \n; # NOTE: No d 171d0 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ata?.. 171e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 171f0 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 71 incr seq 17200 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a uence.. }.. 17210 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 17220 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 oc cleanupDb { f 17230 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 ileName {varName 17240 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 db} {collect tr 17250 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ue} {qualify tru 17260 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e}.. 17270 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 {delete 17280 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 17290 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 172a0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 172b0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 172c0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 172d0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 172e0 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 172f0 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 17300 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 17310 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 17320 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 17330 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 17340 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 17350 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 17360 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 17370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 17380 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
17390 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
173a0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 173b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 173c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 173d0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 173e0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 173f0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 17400 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 17410 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 17420 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17430 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han 17440 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab 17450 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o 17460 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. 17470 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se 17480 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure 17490 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store 174a0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 174b0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 174c0 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
174d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
174e0 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65   NOTE: Close the
174f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
17500 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e  he database now.
17510 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c    This should al
17520 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20  low us..      #
17530 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20        to delete
17540 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
17550 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20  atabase file...
17560 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
17570 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64   {[info exists d
17580 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71  b] && [catch {sq
17590 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72  l close $db} err 175a0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 175b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 175c0 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 # NOTE: We someh 175d0 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f ow failed to clo 175e0 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c se the database, 175f0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 17600 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17610 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
17620 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
17630 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
17640 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
17650 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
17660 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64   database \"" $d 17670 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 b "\", error: " 17680 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ 17690 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
176a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
176b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
176c0 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
176d0 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
176e0 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
176f0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
17700 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17710 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
17720 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 17730 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 17740 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 17750 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 ild the full pat 17760 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 h to the databas 17770 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f e file name. Fo 17780 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d r now, all test. 17790 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 177a0 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 atabase files ar 177b0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 e stored in the 177c0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 177d0 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ory... #.. 177e0 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
177f0 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d  ory && $qualify} 17800 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17810 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 17820 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 ile join [getDat 17830 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 abaseDirectory] 17840 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
17850 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  Name]]..      }.
17860 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17870 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
17880 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c  if the file stil
17890 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20  l exists...
178a0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$178b0 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c isMemory &&$del
178c0 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69  ete && [file exi
178d0 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 178e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 178f0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17900 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 17910 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 database files 17920 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 if somebody sets 17930 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 the global.. 17940 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 17950 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 iable to prevent 17960 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 17970 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 17980 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 17990 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d cleanupDbFile)]} 179a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 179b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 179c0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 179d0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 179e0 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 st database file 179f0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 now... 17a00 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 17a10 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 {[set code [cat 17a20 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 17a30 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72$fileName} error
17a40 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
17a50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17a60 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
17a70 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
17a80 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66   to delete the f
17a90 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e  ile, report why.
17aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
17ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
17ac0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17ad0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 17ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17af0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 17b00 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 17b10 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file 17b20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
17b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17b40 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
17b50 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  nup, error: " \n
17b60 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 17b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 17b80 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 17b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17ba0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 17bb0 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 w that we skippe 17bc0 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 d deleting the f 17bd0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 17be0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 17bf0 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 code 0.... 17c00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17c10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17c20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17c30 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
17c40 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64  RNING: skipped d
17c50 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65  eleting database
17c60 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 17c70 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 17c80 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 17c90 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 cleanup\n"].. 17ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 17cb0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 17cc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17cd0 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 E: The file does 17ce0 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 not exist, succ 17cf0 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d ess!.. #. 17d00 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 . set cod 17d10 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e 0.. }.... 17d20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f return$co
17d30 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  de..    }.....
17d40 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69 72    proc saveEnvir
17d50 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
17d60 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65  { names {varName
17d70 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
17d80 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17d90 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20   For each name,
17da0 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65 6e  does the live en
17db0 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
17dc0 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
17dd0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
17de0 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 20   save the value
17df0 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 72  for later; other
17e00 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
17e10 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20 20  the saved..
17e20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 64   #       value d
17e30 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69  oes not exist ei
17e40 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65 20  ther.  The live
17e50 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
17e60 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  ables..      #
17e70 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68 61       ARE NOT cha
17e80 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f  nged by this pro
17e90 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23  cedure...      #
17ea0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
17eb0 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 17ec0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 17ed0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 {.. set v 17ee0 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d arName savedEnv. 17ef0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 17f00 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
17f10 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  me savedEnv....
17f20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d       foreach nam
17f30 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  e $names {.. 17f40 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 17f50 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 ists ::env($name
17f60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
17f70 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64 45        set savedE
17f80 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76  nv($name)$::env
17f90 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 17fa0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 17fb0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 17fc0 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 mplain savedEnv( 17fd0 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20$name)..
17fe0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
17ff0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
18000 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c  OTE: This is sel
18010 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20  f-cleaning.  If
18020 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e  no saved environ
18030 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e  ment variables n
18040 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
18050 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20    exist, remove
18060 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  the array...
18070 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18080 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64  array size saved
18090 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  Env] == 0} then
180a0 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74  {..        unset
180b0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76   -nocomplain sav
180c0 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a  edEnv..      }..
180d0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
180e0 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f  oc restoreEnviro
180f0 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b  nmentVariables {
18100 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20   names {varName
18110 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
18120 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18130 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64  For each name, d
18140 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 65 6e  oes the saved en
18150 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
18160 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
18170 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
18180 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 61 76   restore the sav
18190 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e 73  ed value and uns
181a0 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65  et it; otherwise
181b0 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 20  , make sure..
181c0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c     #       the l
181d0 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ive environment
181e0 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f  variable does no
181f0 74 20 65 78 69 73 74 20 65 69 74 68 65 72 20 28  t exist either (
18200 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 23  i.e. it..      #
18210 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20 73         was not s
18220 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68  et to begin with
18230 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20 61  ).  Both saved a
18240 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d  nd live environm
18250 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
18260 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 52 45     variables ARE
18270 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
18280 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
18290 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
182a0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $182b0 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 varName] == 0} t 182c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 182d0 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 et varName saved 182e0 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a Env.. }.... 182f0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
18300 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d  arName savedEnv.
18310 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
18320 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a   name $names {.. 18330 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 18340 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 45 6e o exists savedEn 18350 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 v($name)]} then
18360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
18370 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 73   ::env($name)$s
18380 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a  avedEnv($name).. 18390 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 unset 183a0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 -nocomplain save 183b0 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 dEnv($name)..
183c0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
183d0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
183e0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76  nocomplain ::env
183f0 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 18400 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 18410 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 18420 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 NOTE: This is se 18430 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 lf-cleaning. If 18440 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f no saved enviro 18450 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 nment variables 18460 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 now.. # 18470 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 exist, remove 18480 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 the array... 18490 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 184a0 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 [array size save 184b0 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e dEnv] == 0} then 184c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 {.. unse 184d0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 t -nocomplain sa 184e0 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d vedEnv.. }. 184f0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18500 72 6f 63 20 73 61 76 65 47 65 74 53 65 74 74 69 roc saveGetSetti 18510 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 ngValueEnvironme 18520 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 nt {} {.. u 18530 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 pvar 1 savedEnv 18540 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 savedEnv.... 18550 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e saveEnvironmen 18560 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 18570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f \.. No 18580 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 _Expand No_SQLit 18590 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 eGetSettingValue 185a0 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e No_SQLiteXmlCon 185b0 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 figFile] \.. 185c0 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a savedEnv.. 185d0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 185e0 6f 63 20 72 65 73 74 6f 72 65 47 65 74 53 65 74 oc restoreGetSet 185f0 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e tingValueEnviron 18600 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 18610 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 18620 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 18630 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 restoreEnvir 18640 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 18650 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 18660 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f No_Expand No_ 18670 53 51 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67 SQLiteGetSetting 18680 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 Value No_SQLiteX 18690 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d mlConfigFile] \. 186a0 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 . saved 186b0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 186c0 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c 69 proc saveSQLi 186d0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 teConnectionEnvi 186e0 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 186f0 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 18700 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 18710 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 . saveEnvir 18720 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 18730 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 18740 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5f DefaultFlags_ 18750 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 18760 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 No_SQLiteConnec 18770 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c tionNewParser] \ 18780 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 .. save 18790 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 187a0 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 proc restore 187b0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 187c0 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b Environment {} { 187d0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 187e0 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e savedEnv savedEn 187f0 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 6f v.... resto 18800 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 reEnvironmentVar 18810 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 18820 20 20 20 20 20 20 20 20 20 20 44 65 66 61 75 6c Defaul 18830 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e tFlags_SQLiteCon 18840 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 nection No_SQLit 18850 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61 eConnectionNewPa 18860 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 rser] \.. 18870 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 savedEnv.. 18880 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 18890 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 65 72 saveSQLiteConver 188a0 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 tEnvironment {} 188b0 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 188c0 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 savedEnv savedE 188d0 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 nv.... save 188e0 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 EnvironmentVaria 188f0 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 bles [list \.. 18900 20 20 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69 Use_SQLi 18910 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c teConvert_Defaul 18920 74 44 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69 tDbType Use_SQLi 18930 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c teConvert_Defaul 18940 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 tTypeName] \.. 18950 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 18960 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 18970 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 proc restoreSQLi 18980 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e teConvertEnviron 18990 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 189a0 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 189b0 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 189c0 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 restoreEnvir 189d0 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 189e0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 189f0 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e Use_SQLiteCon 18a00 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79 vert_DefaultDbTy 18a10 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e pe Use_SQLiteCon 18a20 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65 vert_DefaultType 18a30 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 Name] \.. 18a40 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 savedEnv.. 18a50 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 18a60 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 setupDbInterrupt 18a70 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e Callback { chann 18a80 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 el log } {.. 18a90 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
18aa0 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75   "---- setting u
18ab0 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72  p debugger inter
18ac0 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e  rupt callback...
18ad0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   "....      if {
18ae0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
18af0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
18b00 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
18b10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18b20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72  quietFindInterpr
18b30 65 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69  eterTestPath qui
18b40 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74  etSetupInterpret
18b50 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d 0a 20  erTestPath]....
18b60 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20         try {..
18b70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18b80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 72 65       # NOTE: Pre
18b90 76 65 6e 74 20 74 68 65 20 76 65 6e 64 6f 72 20  vent the vendor
18ba0 73 63 72 69 70 74 20 66 72 6f 6d 20 62 65 69 6e  script from bein
18bb0 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 63 72 65  g noisy when cre
18bc0 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ating..
18bd0 20 23 20 20 20 20 20 20 20 74 68 65 20 69 73 6f   #       the iso
18be0 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65  lated interprete
18bf0 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  r...          #.
18c00 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a  .          set :
18c10 3a 65 6e 76 28 71 75 69 65 74 46 69 6e 64 49 6e  :env(quietFindIn
18c20 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74  terpreterTestPat
18c30 68 29 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20  h) 1..
18c40 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 53  set ::env(quietS
18c50 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54  etupInterpreterT
18c60 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a 20 20  estPath) 1....
18c70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18c80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b       # NOTE: Mak
18c90 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70  e sure the scrip
18ca0 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74  t debugger and t
18cb0 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65  he isolated inte
18cc0 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 20  rpreter..
18cd0 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73     #       are s
18ce0 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66  etup and ready f
18cf0 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  or use...
18d00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
18d10 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65  debug setup true
18d20 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
18d30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
18d40 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65  # NOTE: Load the
18d50 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b 61   necessary packa
18d60 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f  ges into the iso
18d70 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65  lated interprete
18d80 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  r...          #.
18d90 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67  .          debug
18da0 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20   eval {..
18db0 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
18dc0 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20  uire Eagle..
18dd0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20          package
18de0 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69  require Eagle.Li
18df0 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20  brary..
18e00 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
18e10 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20  re Eagle.Test..
18e20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
18e30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18e40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70       # NOTE: Cop
18e50 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  y the necessary
18e60 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74  variables into t
18e70 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65  he isolated inte
18e80 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20  rpreter...
18e90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
18ea0 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20   debug invoke 0
18eb0 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  set ::test_chann
18ec0 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e  el $channel; # N 18ed0 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d OTE: For [tputs] 18ee0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 ... deb 18ef0 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 ug invoke 0 set 18f00 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b ::test_log$log;
18f10 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c   # NOTE: For [tl
18f20 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og].....
18f30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
18f40 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74   NOTE: Install t
18f50 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69  he callback scri
18f60 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74  pt to be evaluat
18f70 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74  ed in the isolat
18f80 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ed..          #
18f90 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65        interprete
18fa0 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65  r when this inte
18fb0 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72  rpreter is inter
18fc0 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74  rupted by script
18fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
18fe0 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e      cancellation
18ff0 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...
19000 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64    #..          d
19010 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70  ebug callback ap
19020 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20  ply {{sender e}
19030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
19040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
19050 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
19060 68 69 73 20 64 65 62 75 67 67 65 72 20 63 61 6c  his debugger cal
19070 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61  lback is one tha
19080 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e  t we care about.
19090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
190a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
190b0 20 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 20   interruptTypes
190c0 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72  [split [$e Inter 190d0 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 0d ruptType] ", "]. 190e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 190f0 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e f {"Canceled" in 19100 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73$interruptTypes
19110 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
19120 20 20 20 20 20 20 20 22 55 6e 77 6f 75 6e 64 22         "Unwound"
19130 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79   in $interruptTy 19140 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 pes} then {.. 19150 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 19160 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 19170 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 TE: Make sure th 19180 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 e [object] comma 19190 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e nd is available. 191a0 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 Since.. 191b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 191c0 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 his is an isolat 191d0 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 ed interpreter, 191e0 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74 68 65 check for it the 191f0 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20 20 20 hard.. 19200 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61 79 # way 19210 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 19220 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19230 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b if {[llength [ 19240 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 info commands ob 19250 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 65 6e ject]] > 0} then 19260 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19270 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19280 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 19290 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 terate through a 192a0 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e ll database conn 192b0 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f ections known to 192c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 192d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 192e0 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 rent interpreter 192f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 19300 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19310 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 19320 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 19330 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 19340 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 19350 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 19360 20 20 20 20 20 20 20 20 20 24 65 20 49 6e 74 65$e Inte
19370 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69  rpreter.connecti
19380 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ons] {..
19390 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
193b0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
193c0 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c  o cancel any SQL
193d0 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67   queries in prog
193e0 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20 20 20  ress on..
193f0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
19400 20 20 20 74 68 69 73 20 64 61 74 61 62 61 73 65     this database
19410 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19430 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
19440 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
19450 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e  {$pair Value.Can 19460 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 cel} error]} the 19470 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 19480 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
19490 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
194a0 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d  appendArgs \n \.
194b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
194c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
194d0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
194e0 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66  o cancel query f
194f0 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  or " \..
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19510 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20  "connection \""
19520 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c  [$pair Key] "\", 19530 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c error: " \n\t \ 19540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19550 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72$error
19560 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
19570 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
19590 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
195a0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
195b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 195c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 195d0 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 endArgs \n \.. 195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 195f0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 19600 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c 20 61 cannot cancel a 19610 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20 5c 0d ny queries: " \. 19620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19630 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62 6a 65 "the \"obje 19640 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 ct\" command is 19650 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c 6e 22 not available\n" 19660 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 19670 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 19680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 7d 0d }.. }}. 19690 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c . } final 196a0 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ly {.. 196b0 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 restoreEnvironme 196c0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 196d0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 196e0 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 quietFindInte 196f0 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20 rpreterTestPath 19700 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 quietSetupInterp 19710 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a reterTestPath].. 19720 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19730 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 19740 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19750 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e addConstraint in 19760 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e terruptCallback. 19770 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 sqlite3.... 19780 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
19790 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d  l yes\n..      }
197a0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
197b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 197c0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c [appendArgs "no, 197d0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
197e0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
197f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
19800 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69    proc cleanupFi
19810 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63  le { fileName {c
19820 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f  ollect true} {fo
19830 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  rce false} } {..
19840 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
19850 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
19860 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64  o force all pend
19870 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62  ing "garbage" ob
19880 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c  jects to be coll
19890 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20  ected,..      #
198a0 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20        including
198b0 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74  SQLite statement
198c0 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a  s and backup obj
198d0 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c  ects; this shoul
198e0 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23  d allow..      #
198f0 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72         the under
19900 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  lying database f
19910 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65  ile to be delete
19920 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
19930 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 19940 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 19950 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 19960 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
19970 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
19980 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
19990 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
199a0 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74  file still exist
199b0 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
199c0 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
199d0 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 199e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 199f0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 19a00 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 19a10 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73 test files if s 19a20 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 19a30 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 global variable 19a40 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 19a50 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e to prevent it. 19a60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 19a70 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 if {$force
19a80 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  || ![info exists
19a90 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c   ::no(cleanupFil
19aa0 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
19ab0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19ac0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
19ad0 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68  mpt to delete th
19ae0 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e  e test file now.
19af0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
19b00 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65           if {[se
19b10 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66  t code [catch {f
19b20 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65  ile delete $file 19b30 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 Name} error]]} t 19b40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19b50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19b60 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 19b70 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d 19b80 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, 19b90 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 19ba0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 19bb0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
19bc0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
19bd0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
19bf0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
19c00 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73  ed to delete tes
19c10 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  t file \"" $file 19c20 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 19c30 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 19c40 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f ng cleanup, erro 19c50 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
19c60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
19c70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
19c80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
19c90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
19ca0 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65  TE: Show that we
19cb0 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
19cc0 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20  g the file...
19cd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19ce0 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
19cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
19d00 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 19d10 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 19d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 19d30 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b ==== WARNING: sk 19d40 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 ipped deleting t 19d50 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
19d60 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
19d70 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
19d80 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a  ng cleanup\n"]..
19d90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19da0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19db0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
19dc0 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64  NOTE: The file d
19dd0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73  oes not exist, s
19de0 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20  uccess!..
19df0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
19e00 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d  code 0..      }.
19e10 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
19e20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $code.. }.... 19e30 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 . proc cleanu 19e40 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e 61 6d pMemory { varNam 19e50 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 e {quiet false} 19e60 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 19e70 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 19e80 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 Command] && \.. 19e90 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 19ea0 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
19eb0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
19ec0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19ed0 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20    # NOTE: Refer
19ee0 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
19ef0 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20   variable (e.g.
19f00 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e  "connection") in
19f10 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
19f20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66        context of
19f30 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68   our caller.  Th
19f40 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
19f50 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d 0a 20  handle for an..
19f60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 41         #       A
19f70 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74 69 6f  DO.NET connectio
19f80 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74  n previously ret
19f90 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43  urned by [getDbC
19fa0 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 20  onnection]..
19fb0 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
19fc0 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65  ld be stored the
19fd0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
19fe0 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20          upvar 1
19ff0 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74  $varName connect 1a000 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ion.... i 1a010 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1a020 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1a030 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e voke$connection
1a040 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 0d 0a   ReleaseMemory..
1a050 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
1a060 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1a070 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1a080 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a090 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1a0a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1a0b0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1a0c0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1a0d0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1a0e0 20 74 6f 20 72 65 6c 65 61 73 65 20 64 61 74 61   to release data
1a0f0 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65 72 72  base memory, err
1a100 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
1a110 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72           \n\t $r 1a120 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 1a130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1a140 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 1a150 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength 1a160 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands 1a170 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 68 65 debug]] > 0} the 1a180 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1a190 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1a1a0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 1a1b0 6c 69 73 74 20 64 65 62 75 67 20 70 75 72 67 65 list debug purge 1a1c0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 ].. } res 1a1d0 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ult]} then {.. 1a1e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1a1f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1a200 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a210 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a220 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1a240 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1a250 6c 65 64 20 74 6f 20 70 75 72 67 65 20 63 61 6c led to purge cal 1a260 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 3a 20 l frame, error: 1a270 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1a280 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1a290 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1a2a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1a2b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1a2c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1a2d0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
1a2e0 20 64 65 62 75 67 20 63 6c 65 61 6e 75 70 5d 0d   debug cleanup].
1a2f0 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c  .        } resul
1a300 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  t]} then {..
1a310 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1a320 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1a330 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1a340 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1a350 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1a360 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1a370 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1a380 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 69 6e 74  d to cleanup int
1a390 65 72 70 72 65 74 65 72 2c 20 65 72 72 6f 72 3a  erpreter, error:
1a3a0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1a3b0 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 1a3c0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1a3d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1a3e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1a3f0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a400 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 1a410 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 74 5d t debug collect] 1a420 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 1a430 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 lt]} then {.. 1a440 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1a450 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1a460 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1a470 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1a480 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1a4a0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1a4b0 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 ed to collect ga 1a4c0 72 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 rbage, error: " 1a4d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a4e0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
1a4f0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1a500 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1a510 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
1a520 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 4d 65      proc setupMe
1a530 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 76  moryCounters { v
1a540 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20  arName } {..
1a550 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1a560 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
1a570 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a580 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 1a590 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 e counter.... 1a5a0 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 set counter 1a5b0 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 (1) [object crea 1a5c0 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 te -alias \.. 1a5d0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 1a5e0 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 Diagnostics.Perf 1a5f0 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 ormanceCounter P 1a600 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 rocess \.. 1a610 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 "Working S 1a620 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 et" [file rootna 1a630 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a me [file tail$:
1a640 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a  :bin_file]]]....
1a650 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e          set coun
1a660 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 74 20 63  ter(2) [object c
1a670 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a  reate -alias \..
1a680 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1a690 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50  em.Diagnostics.P
1a6a0 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65  erformanceCounte
1a6b0 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20  r Process \..
1a6c0 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e           "Workin
1a6d0 67 20 53 65 74 20 50 65 61 6b 22 20 5b 66 69 6c  g Set Peak" [fil
1a6e0 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
1a6f0 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c   tail $::bin_fil 1a700 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e]]].... 1a710 73 65 74 20 63 6f 75 6e 74 65 72 28 33 29 20 5b set counter(3) [ 1a720 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 object create -a 1a730 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 lias \.. 1a740 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e System.Diagn 1a750 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e ostics.Performan 1a760 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 ceCounter Proces 1a770 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1a780 20 22 50 72 69 76 61 74 65 20 42 79 74 65 73 22 "Private Bytes" 1a790 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname 1a7a0 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 [file tail$::bi
1a7b0 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20  n_file]]]..
1a7c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
1a7d0 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
1a7e0 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74  .    proc report
1a7f0 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b  MemoryCounters {
1a800 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61 6d 65   channel varName
1a810 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20 20 20   prefix } {..
1a820 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
1a830 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
1a840 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a850 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 1a860 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 me counter.... 1a870 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1a880 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1a890 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a8a0 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20  "---- " $prefix 1a8b0 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d " counter \"" \. 1a8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 . [ob 1a8d0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 ject invoke$cou
1a8e0 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 65 72 4e  nter(1) CounterN
1a8f0 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69  ame] "\" value i
1a900 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  s " \..
1a910 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b     [object invok
1a920 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20 52 61  e $counter(1) Ra 1a930 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 wValue] \n].... 1a940 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1a950 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1a960 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1a970 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78   "---- " $prefix 1a980 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c " counter \"" \ 1a990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f .. [o 1a9a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
1a9b0 75 6e 74 65 72 28 32 29 20 43 6f 75 6e 74 65 72  unter(2) Counter
1a9c0 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20  Name] "\" value
1a9d0 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  is " \..
1a9e0 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f      [object invo
1a9f0 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29 20 52  ke $counter(2) R 1aa00 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a awValue] \n].... 1aa10 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1aa20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1aa30 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1aa40 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69    "---- " $prefi 1aa50 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 x " counter \"" 1aa60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1aa70 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
1aa80 6f 75 6e 74 65 72 28 33 29 20 43 6f 75 6e 74 65  ounter(3) Counte
1aa90 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65  rName] "\" value
1aaa0 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20   is " \..
1aab0 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76       [object inv
1aac0 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33 29 20  oke $counter(3) 1aad0 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 RawValue] \n].. 1aae0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 1aaf0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 .. proc colle 1ab00 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e ctGarbage { chan 1ab10 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 nel {millisecond 1ab20 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 s 1000} {quiet t 1ab30 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. 1ab40 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 1ab50 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 1ab60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1ab70 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1ab80 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1ab90 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c voke GC GetTotal 1aba0 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 Memory false.. 1abb0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 1abc0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1abd0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1abe0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1abf0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1ac00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1ac10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1ac20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d "---- mem 1ac30 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 ory in use by th 1ac40 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c e CLR before col 1ac50 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a lection... " \.. 1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ac70 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c$result " bytes\
1ac80 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
1ac90 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1aca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
1acb0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1acc0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1acd0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1ace0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1acf0 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 to get CLR memor 1ad00 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 y usage, error: 1ad10 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1ad20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
1ad30 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1ad40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1ad50 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
1ad60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ad70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ad80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ad90 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....
1ada0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1adb0 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20  OTE: Repeatedly
1adc0 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65  attempt to colle
1add0 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c  ct garbage until
1ade0 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75   the allotted nu
1adf0 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20  mber..      #
1ae00 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f      of milliseco
1ae10 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e  nds has elapsed.
1ae20 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74    Always attempt
1ae30 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62   to collect garb
1ae40 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  age..      #
1ae50 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65     at least once
1ae60 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1ae70 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1ae80 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
1ae90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1aea0 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63   set start [cloc
1aeb0 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20  k seconds]..
1aec0 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78      set stop [ex
1aed0 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d  pr {$start + ($m
1aee0 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30  illiseconds / 10
1aef0 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  00)}]....
1af00 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 20   do {..
1af10 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1af20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
1af30 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61   force a full ga
1af40 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  rbage collection
1af50 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e   now.  Report an
1af60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
1af70 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20       error that
1af80 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69  is encountered i
1af90 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20  f we fail...
1afa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1afb0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1afc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
1afd0 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65  ect invoke GC Ge
1afe0 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75  tTotalMemory tru
1aff0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  e..          } e
1b000 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
1b010 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1b020 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1b030 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1b040 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1b050 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 ARNING: failed f 1b060 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c ull garbage coll 1b070 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 ection, error: " 1b080 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b090 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 \n\t$error
1b0a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1b0b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
1b0c0 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63  t now [clock sec
1b0d0 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 7d  onds]..        }
1b0e0 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c   while {$start < 1b0f0 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c =$now && $now < 1b100 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20 20 20 7d$stop}..      }
1b110 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23  ....      ######
1b120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b160 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ###....      if
1b170 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
1b180 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
1b190 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
1b1a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1b1b0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
1b1c0 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d  e GC GetTotalMem
1b1d0 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  ory false..
1b1e0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
1b1f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1b200 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1b210 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b220 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b230 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b240 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b250 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79      "---- memory
1b260 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43   in use by the C
1b270 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74  LR after collect
1b280 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  ion... " \..
1b290 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 1b2a0 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 1b2b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b2c0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1b2d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1b2e0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1b2f0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1b300 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1b310 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
1b320 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73  et CLR memory us
1b330 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  age, error: " \.
1b340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c  .              \
1b350 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1b360 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1b370 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b380 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 proc getSQLit 1b390 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 eHandleCounts { 1b3a0 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 channel {quiet f 1b3b0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 1b3c0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 set result [lis 1b3d0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b t].... if { 1b3e0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1b3f0 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a tCommand] && \.. 1b400 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 [haveS 1b410 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 QLiteDefineConst 1b420 61 6e 74 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 ant COUNT_HANDLE 1b430 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b440 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b450 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 NOTE: Add each c 1b460 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 1b470 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 ount to the resu 1b480 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 lting list... 1b490 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b4a0 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 foreach name [li 1b4b0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 1b4c0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e connectionCoun 1b4d0 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 t statementCount 1b4e0 20 62 61 63 6b 75 70 43 6f 75 6e 74 20 62 6c 6f backupCount blo 1b4f0 62 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 bCount] {.. 1b500 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1b510 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 1b520 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1b530 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1b540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b550 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1b560 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 24 Lite.DebugData$
1b570 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..
1b580 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74  } value] == 0} t
1b590 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b5a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1b5b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b5c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b5d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b5e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b5f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74        "---- crit
1b600 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
1b610 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20  t \"" $name "\" 1b620 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d is "$value \n].
1b630 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61  ..            la
1b650 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61  ppend result $va 1b660 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lue.. } 1b670 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1b680 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b690 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b6a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b6b0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1b6c0 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20  : failed to get
1b6d0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
1b6e0 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20  count \"" \..
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61               $na 1b700 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 me "\", error: " 1b710 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d \n\t$value \n]
1b720 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1b730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b740 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65  } elseif {!$quie 1b750 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1b760 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b770 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c NOTE: The actual 1b780 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 handle counts a 1b790 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 re not available 1b7a0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 ; therefore, jus 1b7b0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 1b7c0 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 return an emp 1b7d0 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ty list... 1b7e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1b7f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
1b800 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
1b810 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c  e counts unavail
1b820 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d  able\n"..      }
1b830 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1b840 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 1b850 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 .... proc shu 1b860 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 tdownSQLite { ch 1b870 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c annel {force fal 1b880 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 se} {quiet false 1b890 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1b8a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 1b8b0 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c ke sure that SQL 1b8c0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 1b8d0 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 is completely s 1b8e0 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a hutdown. This.. 1b8f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 1b900 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 used by tests t 1b910 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 hat change confi 1b920 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 guration options 1b930 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 and/or those.. 1b940 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 1b950 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 t need to make s 1b960 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 ure logging is i 1b970 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e nitialized (i.e. 1b980 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 just in case.. 1b990 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1b9a0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 1b9b0 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c rary was initial 1b9c0 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 ized in the proc 1b9d0 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 ess prior to.. 1b9e0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1b9f0 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 SQLiteLog class 1ba00 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 being able to se 1ba10 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 tup its logging 1ba20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 callback)... 1ba30 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c # Normal 1ba40 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 ly, this should 1ba50 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 only be performe 1ba60 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c d if SQLite is l 1ba70 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 oaded and.. 1ba80 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 # ready f 1ba90 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 1baa0 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 1bab0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 #.. if {$f
1bac0 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74  orce || [isSQLit
1bad0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
1bae0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1baf0 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61      # BUGFIX: Ma
1bb00 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79  ke sure that any
1bb10 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61   "leaked" transa
1bb20 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f  ctions and/or co
1bb30 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20  nnections..
1bb40 20 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65     #         are
1bb50 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f   cleaned up befo
1bb60 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e  re calling the n
1bb70 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66  ative shutdown f
1bb80 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...
1bb90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
1bba0 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  each transaction
1bbb0 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69   [info transacti
1bbc0 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ons] {..
1bbd0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61    if {[string ma
1bbe0 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  tch \..
1bbf0 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61       System#Data
1bc00 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72  #SQLite#SQLiteTr
1bc10 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61  ansaction#* $tra 1bc20 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 nsaction]} then 1bc30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1bc40 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1bc50 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74 sql t 1bc60 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 ransaction rollb 1bc70 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e ack$transaction
1bc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
1bc90 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65  error] == 0} the
1bca0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1bcb0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1bcc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bcd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1bce0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1bcf0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1bd00 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1bd10 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b  rolled back leak
1bd20 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c  ed transaction \
1bd30 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1bd40 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73            $trans 1bd50 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 action \"\n].. 1bd60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1bd70 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1bd80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1bd90 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1bda0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1bdb0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1bdc0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1bdd0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1bde0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1bdf0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1be00 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b to rollback leak 1be10 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c ed transaction \ 1be20 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1be30 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73$trans
1be40 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f  action "\", erro
1be50 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1be60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1be70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1be80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1be90 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1bea0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1beb0 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 db [info connect 1bec0 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ions] {.. 1bed0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d if {[string m 1bee0 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 atch \.. 1bef0 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 System#Dat 1bf00 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 a#SQLite#SQLiteC 1bf10 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d onnection#*$db]
1bf20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1bf30 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1bf40 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d   {sql close $db} 1bf50 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 error] == 0} th 1bf60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1bf70 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1bf80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bf90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1bfa0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bfb0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1bfc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1bfd0 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 closed leaked d 1bfe0 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 atabase \""$db
1bff0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
1c000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1c010 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1c020 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1c030 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c050 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1c060 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c080 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1c090 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73  : failed to clos
1c0a0 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73  e leaked databas
1c0b0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62               $db 1c0d0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 1c0e0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c120 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1c130 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42    #..        # B
1c140 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61  UGFIX: Before ca
1c150 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  lling the native
1c160 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69   shutdown functi
1c170 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f  on, make sure bo
1c180 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  th..        #
1c190 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41        of the PRA
1c1a0 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65  GMA related dire
1c1b0 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20  ctory names are
1c1c0 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  freed...
1c1d0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
1c1e0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
1c1f0 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72  ries $channel tr 1c200 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ue.... if 1c210 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1c220 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1c230 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1c240 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 1c250 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 1c260 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 1c270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 NativeMethods sq 1c280 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a lite3_shutdown.. 1c290 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1c2a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1c2b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1c2c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1c2d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1c2e0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1c2f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1c300 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 1c310 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 all sqlite3_shut 1c320 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 down()... ok: " 1c330 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1c340 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c350 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1c360 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1c370 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1c380 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c390 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1c3a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1c3b0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
1c3c0 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
1c3d0 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c  ()... error: " \
1c3e0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1c3f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1c400 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1c410 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1c420 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 proc reportSQLit 1c430 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20 20 eResources {.. 1c440 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65 channe 1c450 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 l {quiet false} 1c460 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63 6f {reset true} {co 1c470 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d llect true} } {. 1c480 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1c490 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c # NOTE: If avail 1c4a0 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 able, report on 1c4b0 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 (and possibly re 1c4c0 73 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 set) the runtime 1c4d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1c4e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 configuration st 1c4f0 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 atistics... 1c500 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 #.. if {[h 1c510 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 1c520 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 ommand] && \.. 1c530 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon 1c540 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e straint buildCon 1c550 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 figuration.Debug 1c560 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1c570 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1c580 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1c590 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1c5a0 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 1c5b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1c5c0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1c5d0 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 QLite.DebugData 1c5e0 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 1c5f0 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 65 74 s.. } set 1c600 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 tingReadCounts] 1c610 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1c620 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 set name 1c630 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 Count [$settingR
1c640 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d  eadCounts Count]
1c650 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1c660 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a  valueCount 0....
1c670 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1c680 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
1c690 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65 61  pair $settingRea 1c6a0 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 dCounts {.. 1c6b0 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 incr valu 1c6c0 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 eCount [$pair Va
1c6d0 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue]....
1c6e0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1c6f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c700 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c710 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1c720 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1c730 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74         "---- set
1c740 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20  ting \"" [$pair 1c750 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 Key] "\" was rea 1c760 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 d " \.. 1c770 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
1c780 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 5c 6e  Value] " times\n
1c790 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
1c7a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1c7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1c7c0 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $reset} then {.. 1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1c7e0 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69 6e 67 [catch {$setting
1c7f0 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 72  ReadCounts Clear
1c800 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74  } error] == 0} t
1c810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c820 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1c830 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c840 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c850 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1c860 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1c870 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1c880 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20  - reset setting
1c890 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 74  statistics for t
1c8a0 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d  he previous " \.
1c8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c8c0 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20       $nameCount 1c8d0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
1c8e0 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75  alueCount " valu
1c8f0 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20  es read\n"]..
1c900 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1c910 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1c920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1c930 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1c940 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c960 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1c970 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 failed to reset 1c980 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 setting statist 1c990 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 ics for " \.. 1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1c9b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 the previous "$
1c9c0 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65  nameCount " name
1c9d0 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f  s and " $valueCo 1c9e0 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 unt \.. 1c9f0 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 " value 1ca00 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 s read, error: " 1ca10 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1ca20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ca30 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1ca40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1ca50 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1ca60 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1ca70 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
1ca80 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61  +NonPublic -alia
1ca90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1caa0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1cab0 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20  QLite.DebugData
1cac0 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43  settingFileReadC
1cad0 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7d  ounts..        }
1cae0 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64   settingFileRead
1caf0 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68  Counts] == 0} th
1cb00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1cb10 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24  set nameCount [$1cb20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 settingFileReadC 1cb30 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 ounts Count].. 1cb40 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 1cb50 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 eCount 0.... 1cb60 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 1cb70 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 1cb80 20 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61$settingFileRea
1cb90 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20  dCounts {..
1cba0 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75         incr valu
1cbb0 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61  eCount [$pair Va 1cbc0 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lue].... 1cbd0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1cbe0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1cbf0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1cc00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1cc10 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1cc20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 "---- set 1cc30 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 ting \"" [$pair
1cc40 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61  Key] "\" was rea
1cc50 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  d " \..
1cc60 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20           [$pair 1cc70 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 20 66 Value] " times f 1cc80 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 rom the configur 1cc90 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a ation file\n"].. 1cca0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1ccb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1ccc0 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
1ccd0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1cce0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1ccf0 63 68 20 7b 24 73 65 74 74 69 6e 67 46 69 6c 65  ch {$settingFile 1cd00 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 72 ReadCounts Clear 1cd10 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 } error] == 0} t 1cd20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1cd30 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1cd40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1cd50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1cd60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1cd70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1cd80 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1cd90 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 - reset setting 1cda0 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 74 statistics for t 1cdb0 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d he previous " \. 1cdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cdd0 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20$nameCount
1cde0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76  " names and " $v 1cdf0 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 alueCount " valu 1ce00 65 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 es read " \.. 1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ce20 20 22 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 "from the confi 1ce30 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 guration file\n" 1ce40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 1ce50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1ce60 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1ce70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1ce80 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1ce90 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1cea0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1ceb0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1cec0 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73   reset setting s
1ced0 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20  tatistics for "
1cee0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1cef0 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f       "the previo
1cf00 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20  us " $nameCount 1cf10 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
1cf20 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20  alueCount \..
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cf40 20 76 61 6c 75 65 73 20 72 65 61 64 20 66 72 6f   values read fro
1cf50 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  m the configurat
1cf60 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 3a  ion file, error:
1cf70 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20   " \n\t \..
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72               $er 1cf90 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1cfa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1cfb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1cfc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1cfd0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1cfe0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 ObjectCommand] & 1cff0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 1d000 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 1d010 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 Constant INTEROP 1d020 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 _VIRTUAL_TABLE] 1d030 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1d040 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e [haveSQLiteDefin 1d050 65 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f eConstant TRACK_ 1d060 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 MEMORY_BYTES]} t 1d070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1d080 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1d090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
1d0a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 1d0b0 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor 1d0c0 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 1d0d0 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 teMemory... ".. 1d0e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1d0f0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1d100 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1d110 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1d120 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1d140 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1d150 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 SQLiteMemory byt 1d160 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 esAllocated.. 1d170 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 1d180 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1d190 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1d1a0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1d1b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1d1c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1d1d0 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
1d1e0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
1d1f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1d200 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d210 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
1d220 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
1d230 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1d240 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1d250 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1d260 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 1d270 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 1d280 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1d290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1d2a0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1d2b0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
1d2c0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 1d2d0 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 maximum memory i 1d2e0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 1d2f0 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 1d300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1d310 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1d320 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1d330 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1d340 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1d350 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1d360 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1d370 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 iteMemory maximu 1d380 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d mBytesAllocated. 1d390 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 1d3a0 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 1d3b0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1d3c0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1d3e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1d3f0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 ndArgs$memory "
1d400 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
1d410 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d420 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1d430 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1d440 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
1d450 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1d460 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d470 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1d480 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1d490 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1d4a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1d4b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1d4c0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
1d4d0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1d4e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1d4f0 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 el "---- current 1d500 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 1d510 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. 1d520 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1d530 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 1d540 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 1d550 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1d560 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1d570 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1d580 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1d590 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1d5a0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1d5b0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 1d5c0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 eNativeMethods s 1d5d0 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 qlite3_memory_us 1d5e0 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 ed.. } me 1d5f0 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e mory] == 0} then 1d600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1d610 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1d620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1d630 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1d640 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
1d650 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
1d660 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1d670 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1d680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1d690 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79       # NOTE: May
1d6a0 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  be the SQLite co
1d6b0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e  re library is un
1d6c0 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20  available?..
1d6d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d6e0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
1d6f0 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
1d700 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1d710 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d720 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1d730 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1d740 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 1d750 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1d760 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 1d770 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1d780 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 memory unavailab 1d790 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 le.... if 1d7a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1d7b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1d7c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1d7d0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1d7e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1d7f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d800 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d   set result $mem 1d810 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 ory; # NOTE: Ret 1d820 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 urn memory in-us 1d830 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e e to our caller. 1d840 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 .... if {!$
1d850 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1d860 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1d870 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 annel "---- maxi 1d880 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 mum memory in us 1d890 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 e by SQLite... " 1d8a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1d8b0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1d8c0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1d8d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d8e0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1d8f0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1d900 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 1d910 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 1d920 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1d930 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 1d940 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 1d950 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1d960 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 sqlite3_memor 1d970 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 y_highwater 0.. 1d980 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 1d990 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1d9a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1d9b0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1d9c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d9d0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1d9e0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
1d9f0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
1da00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1da10 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1da20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1da30 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68  # NOTE: Maybe th
1da40 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1da50 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c  brary is unavail
1da60 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20  able?..
1da70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
1da80 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
1da90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1daa0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1dab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1dac0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1dad0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1dae0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 1daf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1db00 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1db10 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1db20 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d y unavailable... 1db30 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
1db40 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1db50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1db60 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1db70 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1db80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1db90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1dba0 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 1dbb0 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 1dbc0 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 tGarbage$channe
1dbd0 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
1dbe0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1dbf0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1dc00 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1dc10 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65  "---- current me
1dc20 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74  mory in use by t
1dc30 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20  he CLR... "..
1dc40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
1dc50 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1dc60 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1dc70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
1dc80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1dc90 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1dca0 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
1dcb0 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20  mory false..
1dcc0 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d      } memory] ==
1dcd0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1dce0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
1dcf0 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74  g is integer -st
1dd00 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74  rict $memory]} t 1dd10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1dd20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1dd30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1dd40 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1dd50 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1dd60 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
1dd70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
1dd80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1dd90 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1dda0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1ddb0 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20  invalid....
1ddc0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1ddd0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1dde0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1ddf0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1de00 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 1de10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1de20 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1de30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1de40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 1de50 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 1de60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1de70 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1de80 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1de90 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1dea0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
1deb0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1dec0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ded0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1dee0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
1def0 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20  available....
1df00 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1df10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1df20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1df30 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1df40 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 1df50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1df60 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
1df70 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
1df80 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
1df90 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
1dfa0 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ries { channel {
1dfb0 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  reset false} } {
1dfc0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1dfd0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
1dfe0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  f the sqlite3_wi
1dff0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1e000 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
1e010 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
1e020 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  #..      tputs $1e030 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 1e040 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 1e050 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e ing for function 1e060 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 1e070 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 et_directory... 1e080 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ".... #.. 1e090 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 1e0a0 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c call to the sql 1e0b0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 1e0c0 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 1e0d0 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 n uses the.. 1e0e0 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 # invali 1e0f0 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 d value 0 for th 1e100 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 e first argument 1e110 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 . This code is 1e120 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 designed.. 1e130 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b # to check 1e140 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 if calling the 1e150 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 function will ra 1e160 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e ise an exception 1e170 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 (i.e... # 1e180 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c the actual 1e190 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 result of the f 1e1a0 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 unction does not 1e1b0 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 matter as long 1e1c0 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 as no.. # 1e1d0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 directory i 1e1e0 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 s changed)... 1e1f0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1e200 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 20 5b [isWindows] && [ 1e210 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1e220 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 1e230 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1e240 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e250 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1e260 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 1e270 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. 1e280 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 sqlite3_wi 1e290 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 1e2a0 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 y 0 null.. 1e2b0 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. 1e2c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1e2d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c # NOTE: Call 1e2e0 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f ing the sqlite3_ 1e2f0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1e300 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 ory function doe 1e310 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 s not.. # 1e320 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 cause an 1e330 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 exception; there 1e340 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 fore, it must be 1e350 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e available (i.e. 1e360 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1e370 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 even though it 1e380 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 should return a 1e390 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 failure return 1e3a0 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 code in this.. 1e3b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 1e3c0 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d se)... #. 1e3d0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 1e3e0 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 traint sqlite3_w 1e3f0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 1e400 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 ry.... tp 1e410 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
1e420 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  \n....        #.
1e430 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1e440 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72   Does our caller
1e450 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74   want to reset t
1e460 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d  he directories?.
1e470 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e480 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20      if {$reset} 1e490 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e4a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1e4b0 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 NOTE: Now make 1e4c0 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 sure the databas 1e4d0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 1e4e0 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d directories are. 1e4f0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1e500 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 reset their d 1e510 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 efault values, w 1e520 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e hich should be n 1e530 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 ull for both... 1e540 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1e550 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 Since the sqlit 1e560 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 1e570 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 1e580 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 is available,.. 1e590 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1e5a0 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 1e5b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e5c0 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 for {set index 1e5d0 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 1} {$index < 3}
1e5e0 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1e600 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1e610 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1e620 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1e630 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
1e650 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1e660 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1e670 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
1e680 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1e690 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
1e6a0 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c  tory $index null 1e6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1e6c0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 1e6d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1e6e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1e6f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1e700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e710 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
1e720 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
1e730 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e  _directory(" $in 1e740 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dex \.. 1e750 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c ", null 1e760 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 )... ok: "$resu
1e770 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1e780 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1e790 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1e7a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1e7b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1e7d0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 - call sqlite3_w 1e7e0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 1e7f0 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 ry("$index \..
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e810 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72   ", null)... err
1e820 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu 1e830 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1e840 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1e850 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1e860 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1e870 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1e880 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20  annel no\n....
1e890 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e8a0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
1e8b0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
1e8c0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
1e8d0 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61  tories?  This ca
1e8e0 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  n only..
1e8f0 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f  #       be perfo
1e900 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
1e910 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61  s loaded and rea
1e920 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
1e930 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e test..
1e940 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a  #       suite...
1e950 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1e960 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26     if {$reset && 1e970 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d [isSQLiteReady] 1e980 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e990 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e9a0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b # NOTE: Now mak 1e9b0 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 e sure the datab 1e9c0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 1e9d0 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 y directories ar 1e9e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 1e9f0 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 reset their 1ea00 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c default values, 1ea10 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 which should be 1ea20 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d null for both.. 1ea30 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1ea40 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c Since the sql 1ea50 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 1ea60 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 1ea70 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 n does not.. 1ea80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 1ea90 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c pear to be avail 1eaa0 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 able, use the as 1eab0 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 sociated PRAGMA 1eac0 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 commands.. 1ead0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 # inst 1eae0 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ead... 1eaf0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 #.. for 1eb00 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b each directory [ 1eb10 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f list data_store_ 1eb20 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 directory temp_s 1eb30 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 tore_directory] 1eb40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s 1eb50 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 et sql [appendAr 1eb60 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 gs "PRAGMA "$di
1eb70 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22  rectory " = \"\"
1eb80 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ;"]....
1eb90 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
1eba0 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20  xecuteSql $sql} 1ebb0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 1ebc0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ebd0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1ebe0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1ebf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ec00 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74      "---- execut
1ec10 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65  e PRAGMA " $dire 1ec20 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c ctory "... ok: \ 1ec30 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1ec40 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
1ec50 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
1ec60 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1ec70 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1ec80 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1ec90 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1eca0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1ecb0 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA 1ecc0 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
1ecd0 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  . error: " \..
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ecf0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 1ed00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1ed10 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1ed20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1ed30 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 1ed40 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c # NOTE: Final 1ed50 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 ly, show the cur 1ed60 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 rent value of th 1ed70 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 1ed80 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 1ed90 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 1eda0 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f ies. This can o 1edb0 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 1edc0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 1edd0 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 aded.. # 1ede0 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f and ready fo 1edf0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 1ee00 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 1ee10 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 1ee20 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 SQLiteReady]} th 1ee30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f en {.. fo 1ee40 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 reach directory 1ee50 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 [list data_store 1ee60 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f _directory temp_ 1ee70 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d store_directory] 1ee80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 1ee90 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1eea0 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
1eeb0 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63  hecking " $direc 1eec0 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a tory "... "].... 1eed0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 1eee0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 1eef0 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
1ef00 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20  ry \;]....
1ef10 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1ef20 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20  executeSql $sql 1ef30 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 scalar} result] 1ef40 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1ef50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1ef60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1ef70 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72  Args "ok: \"" $r 1ef80 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 1ef90 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1efa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1efb0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1efc0 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20  endArgs "error:
1efd0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 1efe0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1eff0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1f000 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1f010 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 proc loadSQLi 1f020 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b teTestSettings { 1f030 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 channel {suffix 1f040 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 ""} {quiet fals 1f050 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 1f060 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 1f070 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 kip loading the 1f080 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 settings if thei 1f090 72 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e r usage has been 1f0a0 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 disabled... 1f0b0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 1f0c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1f0d0 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 o(sqliteTestSett 1f0e0 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ings)]} then {.. 1f0f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1f100 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 1f110 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 1f120 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 and/or per-host 1f130 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f test settings no 1f140 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 1f150 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1f160 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c exists ::tcl_pl 1f170 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 atform(user)]} t 1f180 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f190 20 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 set userSetting 1f1a0 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 sFileName [file 1f1b0 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 join [getCommonD 1f1c0 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 irectory] \.. 1f1d0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 1f1e0 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 ndArgs settings 1f1f0 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c$suffix . $::tcl 1f200 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 _platform(user) 1f210 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 .eagle]].... 1f220 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 1f230 65 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 exists$userSett
1f240 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  ingsFileName]} t
1f250 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f260 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1f270 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f280 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1f290 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f2a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f2b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64        "---- load
1f2c0 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73  ing per-user tes
1f2d0 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20  t settings file
1f2e0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
1f2f0 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 1f300 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c ttingsFileName \ 1f310 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 "...\n].. 1f320 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1f330 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1f340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f350 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 1f360 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 t source$userSe
1f370 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d  ttingsFileName].
1f380 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1f390 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
1f3b0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1f3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f3d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1f3e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f400 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
1f410 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61  G: failed to loa
1f420 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69  d per-user setti
1f430 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f450 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting 1f460 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 sFileName "\", e 1f470 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1f480 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1f490 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f4a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1f4b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1f4c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1f4d0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f4f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f500 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1f510 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1f520 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e  - skipped loadin
1f530 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
1f540 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
1f550 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1f560 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett 1f570 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" 1f580 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 1f590 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. 1f5a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f5b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1f5c0 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 .. ###### 1f5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f5f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f610 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.... if 1f620 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1f630 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 tcl_platform(hos 1f640 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 t)]} then {.. 1f650 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 set hostS 1f660 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 1f670 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC 1f680 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] 1f690 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f6a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set 1f6b0 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
1f6c0 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 1f6d0 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a host) .eagle]].. 1f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1f6f0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f [file exists$ho
1f700 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
1f710 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
1f720 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1f730 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1f740 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f750 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f760 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1f770 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1f780 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  - loading per-ho
1f790 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
1f7a0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1f7c0 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 1f7d0 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. 1f7e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1f800 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1f810 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 1f820 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
1f830 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
1f840 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
1f850 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65     } error]} the
1f860 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1f870 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1f880 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f890 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1f8a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1f8b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1f8c0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1f8d0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1f8e0 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74  to load per-host
1f8f0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
1f900 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1f910 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53            $hostS 1f920 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 1f930 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 1f940 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f960 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1f970 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
1f980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1f990 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1f9a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f9b0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1f9c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f9e0 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
1f9f0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74  loading per-host
1fa00 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
1fa10 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f               $ho 1fa30 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 1fa40 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 me "\", it does 1fa50 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 1fa60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1fa70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1fa80 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1fa90 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1faa0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 c runSQLiteTestP 1fab0 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 rologue {} {.. 1fac0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 1fad0 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 1fae0 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f g our custom pro 1faf0 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 1fb00 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 1fb10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 1fb20 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 1fb30 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 1fb40 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 o exists ::no(pr 1fb50 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ologue.eagle)]} 1fb60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1fb70 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1fb80 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 E: Load the "bef 1fb90 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 ore-constraints" 1fba0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 custom per-user 1fbb0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 and/or per-host 1fbc0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1fbd0 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 test settings 1fbe0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 1fbf0 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 1fc00 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 1 [list loadSQL 1fc10 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 iteTestSettings 1fc20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1fc30 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20  .before]....
1fc40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1fc50 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1fc60 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d  the [object] com
1fc70 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c  mand is availabl
1fc80 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73  e; if not, add s
1fc90 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ome..        #
1fca0 20 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61       shims to ma
1fcb0 6b 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74  ke the test suit
1fcc0 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d  e run smoother..
1fcd0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1fce0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1fcf0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20  teObjectCommand
1fd00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 1fd10 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1fd20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 1fd30 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 termine the name 1fd40 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 s of the native 1fd50 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 1fd60 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 1fd70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1fd80 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get 1fd90 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 BuildPlatform tr 1fda0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ue].. set 1fdb0 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 architecture [a 1fdc0 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c rchitectureForPl 1fdd0 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d atform$platform
1fde0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1fdf0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1fe00 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72  Show the platfor
1fe10 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
1fe20 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help
1fe30 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20  locate the..
1fe40 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
1fe50 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d  ve build files..
1fe60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1fe70 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1fe80 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1fe90 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1fea0 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 "---- platf 1feb0 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 orm for locating 1fec0 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 1fed0 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 les is \"" \.. 1fee0 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
1fef0 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  orm \"\n]....
1ff00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1ff10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1ff20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1ff30 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 "---- arch 1ff40 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 itecture for loc 1ff50 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 1ff60 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 1ff70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
1ff80 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c  architecture \"\
1ff90 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
1ffa0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1ffb0 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
1ffc0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1ffd0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
1ffe0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
1fff0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
20000 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
20010 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
20020 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
20030 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
20040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
20050 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
20060 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
20070 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
20080 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
20090 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
200a0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
200b0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
200c0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
200d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
200e0 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
200f0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
20100 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
20110 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78   EagleShell32.ex
20120 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73  e.mda.config Ins
20130 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63  taller.exe.mda.c
20140 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
20150 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64       test.exe.md
20160 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e  a.config testlin
20170 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  q.exe.mda.config
20180 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20190 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e  testef6.exe.mda.
201a0 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20  config]....
201b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
201c0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
201d0 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c  list of external
201e0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
201f0 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d  andle.  Some of.
20200 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
20210 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79   these files may
20220 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f   be native and/o
20230 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  r managed assemb
20240 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20  lies that are..
20250 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
20260 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f  equired to perfo
20270 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  rm various tests
20280 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20290 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e        set extern
202a0 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  alFileNames [lis
202b0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
202c0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69   [file join Enti
202d0 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20  tyFramework lib
202e0 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
202f0 74 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e 67  t Fx ""] [string
20300 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20310 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34  map [list netFx4
20320 35 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  51 netFx45 netFx
20330 34 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46  452 netFx45 netF
20340 78 34 36 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20  x46 netFx45 \..
20350 20 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78             netFx
20360 34 36 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65  461 netFx45] [ge
20370 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45  tBuildNetFx]]] E
20380 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64  ntityFramework.d
20390 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll]]....
203a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
203b0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73  E: Build the lis
203c0 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65  t of native asse
203d0 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
203e0 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d  we handle.  The.
203f0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
20400 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73   reason the "Sys
20410 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20420 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63  dll" file is inc
20430 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20  luded here is..
20440 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
20450 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20  ecause it could
20460 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64  be the mixed-mod
20470 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20  e assembly...
20480 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20490 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61  set nativeFileNa
204a0 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  mes [list]....
204b0 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
204c0 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  nd nativeFileNam
204d0 65 73 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  es [getNativeLib
204e0 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
204f0 79 5d 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c  y]..        eval
20500 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46   lappend nativeF
20510 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 49 6e 74  ileNames [getInt
20520 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65  eropAssemblyFile
20530 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20  NamesOnly]....
20540 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6e 61        lappend na
20550 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 53 79  tiveFileNames Sy
20560 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
20570 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .dll....
20580 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
20590 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73  E: Build the lis
205a0 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73  t of managed ass
205b0 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
205c0 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
205d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
205e0 73 65 74 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e  set managedFileN
205f0 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
20600 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
20610 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
20620 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
20630 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 5c 0d 0a  ite.Linq.dll \..
20640 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
20650 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
20660 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  F6.dll]....
20670 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
20680 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79  NOTE: Remove any
20690 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
206a0 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to
206b0 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f  the native and/o
206c0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
206d0 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d     managed assem
206e0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
206f0 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20  e handle unless
20700 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a  forbidden from..
20710 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20720 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20  doing so...
20730 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
20740 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
20750 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76  ::no(sqliteRemov
20760 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20  eConstraints)]}
20770 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20780 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
20790 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61  me $configFileNa 207a0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 207b0 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 207c0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 207d0 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
207e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
207f0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
20800 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61  ch fileName $mda 20810 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 ConfigFileNames 20820 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 20830 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 20840 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 20850 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 _$fileName]..
20860 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20870 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
20880 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 20890 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 208a0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 208b0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 208c0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 ndArgs file_ [fi 208d0 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
208e0 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  e]]..          }
208f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
20900 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $20910 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 20920 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 20930 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 20940 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 20950 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 _$fileName]..
20960 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20970 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
20980 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed 20990 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 209a0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 209b0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 209c0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
209d0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
209e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
209f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
20a00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
20a10 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74  p all System.Dat
20a20 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64  a.SQLite related
20a30 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28   file handling (
20a40 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20  deleting,..
20a50 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69     #       copyi
20a60 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29  ng, and loading)
20a70 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d   if instructed..
20a80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
20a90 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
20aa0 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74  xists ::no(sqlit
20ab0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
20ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
20ad0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
20ae0 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
20af0 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73  delete any files
20b00 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d   if instructed..
20b10 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
20b20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
20b30 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
20b40 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73  eleteSqliteFiles
20b50 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
20b60 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
20b70 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
20b80 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69  eleteSqliteConfi
20b90 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  gFiles)]} then {
20ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20bb0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
20bc0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65   $configFileName 20bd0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 20be0 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 tryDeleteBi 20bf0 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 naryFile$fileNa
20c00 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
20c10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
20c20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20c30 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
20c40 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
20c50 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c  qliteExternalFil
20c60 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
20c70 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
20c80 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64  ach fileName $md 20c90 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 aConfigFileNames 20ca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20cb0 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 tryDeleteBui 20cc0 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ldFile$fileName
20cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20ce0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
20cf0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
20d00 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c  ame $externalFil 20d10 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 20d20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 20d30 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 eteBinaryFile$f
20d40 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
20d50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
20d60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
20d70 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
20d80 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
20d90 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65  leteSqliteNative
20da0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
20dc0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20dd0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
20de0 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  teImplicitFiles)
20df0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20e00 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
20e10 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 20e20 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20e40 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 20e50 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 bly$fileName..
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20e80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
20e90 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
20ea0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
20eb0 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
20ec0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
20ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20ee0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
20ef0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
20f00 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
20f10 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
20f30 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 20f40 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 20f50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20f60 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 20f70 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
20f80 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20fa0 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
20fb0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  ly $fileName$pl
20fc0 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
20fd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21000 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
21010 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
21020 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72  qliteArchitectur
21030 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20  eFiles)] && \..
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21050 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
21060 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  h $architecture] 21070 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 21080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21090 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 210a0 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
210b0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
210c0 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
210d0 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 210e0 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 Name$architectu
210f0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..
21100 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
21130 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
21140 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
21150 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
21160 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e  (deleteSqliteMan
21170 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65  agedFiles)]} the
21180 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21190 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
211a0 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65  ame $managedFile 211b0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 211c0 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 211d0 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
211e0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
211f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
21200 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
21210 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
21220 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
21230 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
21240 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72  e "autoSelect" r
21250 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  untime option.
21260 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20  If present,..
21270 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
21280 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
21290 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74  tically select t
212a0 68 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62  he first availab
212b0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  le..          #
212c0 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20        build (or
212d0 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51  "release") of SQ
212e0 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e  Lite and System.
212f0 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20  Data.SQLite..
21300 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
21310 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
21320 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
21330 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21340 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
21350 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65  imeOption autoSe
21360 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lect]} then {..
21370 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
21380 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42  [checkForSQLiteB
21390 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68  uilds $::test_ch 213a0 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 annel true]} the 213b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 213c0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 213d0 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
213e0 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a  t_channel true..
213f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
21400 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
21410 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21420 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
21430 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69  p trying to veri
21440 66 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  fy the build dir
21450 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75  ectory if instru
21460 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  cted;..
21470 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69   #       otherwi
21480 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74  se, make sure it
21490 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73   actually exists
214a0 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74   or halt the ent
214b0 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ire..          #
214c0 20 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 70         testing p
214d0 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65  rocess if it doe
214e0 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20  s not exist...
214f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21500 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
21510 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69  exists ::no(veri
21520 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  fyBuildDirectory
21530 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
21540 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21550 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
21560 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  t this point, th
21570 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
21580 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20  y MUST exist as
21590 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  a..            #
215a0 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72         valid dir
215b0 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74  ectory for the t
215c0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74  esting process t
215d0 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20  o continue...
215e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
215f0 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
21600 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44  ctory [getBuildD
21610 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20  irectory]....
21620 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66           if {![f
21630 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65  ile exists $dire 21640 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 ctory] || \.. 21650 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 ![f 21660 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory 21670 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65$directory]} the
21680 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21690 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
216a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74      # NOTE: Just
216b0 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c   prior to actual
216c0 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74  ly halting the t
216d0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d  esting process,.
216e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
216f0 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72         add an er
21700 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20  ror to the test
21710 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  log file...
21720 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
21730 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21740 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 21750 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21770 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 "---- could not 21780 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 verify build di 21790 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 rectory \""$dir
217a0 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
217b0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
217c0 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c   all testing hal
217d0 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ted\n"]....
217e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
217f0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
21800 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69  : Raising a scri
21810 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68  pt error from th
21820 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20  is point should
21830 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20  halt..
21840 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
21850 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e  testing process.
21860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21870 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
21880 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
21890 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
218a0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
218b0 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20  ot verify build
218c0 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64  directory \"" $d 218d0 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 218f0 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 21900 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 alted"].. 21910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 21920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 21930 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 21940 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 21950 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 g to copy any fi 21960 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 les if instructe 21970 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 21980 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 21990 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 219a0 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 o(copySqliteFile 219b0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 219c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 219d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 219e0 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 copySqliteConfig 219f0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 21a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 21a10 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 21a20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73$configFileNames
21a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21a40 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64      tryCopyBuild
21a50 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  File $fileName.. 21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 21a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 21a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 21a90 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 21aa0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 ::no(copySqliteE 21ab0 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 21ac0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 21ae0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 21af0 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 opy the Managed 21b00 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 21b10 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 ants (MDA) confi 21b20 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 21b30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 21b40 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 file for the Eag 21b50 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 le shell to the 21b60 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 build output dir 21b70 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 ectory,.. 21b80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 21b90 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 hile using each 21ba0 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 of the names of 21bb0 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 the various lega 21bc0 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 cy test.. 21bd0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e 21be0 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 xecutables. Thi 21bf0 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d s will help to m 21c00 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c ake sure that al 21c10 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 l the.. 21c20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 # leg 21c30 61 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 acy tests run wi 21c40 74 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 th exactly the s 21c50 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 ame set of Manag 21c60 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed.. 21c70 20 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 # Debugg 21c80 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 ing Assistants c 21c90 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 onfigured... 21ca0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 21cb0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 21cc0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 ch fileName$mda
21cd0 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  ConfigFileNames
21ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
21cf0 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79     tryCopyBinary
21d00 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e  File EagleShell.
21d10 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22  exe.mda.config "
21d20 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  " $fileName.. 21d30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 21d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 21d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 21d60 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 NOTE: Copy the 21d70 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 external binarie 21d80 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 s, if any, to th 21d90 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 e directory that 21da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21db0 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 # contains 21dc0 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 21dd0 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69 63 . This is typic 21de0 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61 6b ally used to mak 21df0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 21e00 20 23 20 20 20 20 20 20 20 73 75 72 65 20 61 73 # sure as 21e10 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65 6e semblies referen 21e20 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73 20 ced by the ones 21e30 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 72 65 being tested are 21e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21e50 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c # availabl 21e60 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 65 73 e during the tes 21e70 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 ting process... 21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 21ea0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
21eb0 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
21ec0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
21ed0 20 20 20 20 20 74 72 79 43 6f 70 79 45 78 74 65       tryCopyExte
21ee0 72 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61  rnalFile $fileNa 21ef0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 21f00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 21f10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 21f20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 21f30 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 21f40 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d iteNativeFiles)] 21f50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21f60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 21f70 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 21f80 20 49 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 If the test pla 21f90 74 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 tform is likely 21fa0 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 the default for 21fb0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 this.. 21fc0 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 # mach 21fd0 69 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f ine, also try to 21fe0 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 copy the native 21ff0 20 66 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 files to the.. 22000 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 22010 20 20 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 binary loca 22020 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 tion... 22030 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22040 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 22050 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 22060 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 ySqliteImplicitF 22070 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 22090 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c isDefaultBuildPl 220a0 61 74 66 6f 72 6d 20 74 72 75 65 5d 7d 20 74 68 atform true]} th 220b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 220c0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 220d0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
220e0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
22100 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 22110 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 22120 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 22130 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 22140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 22150 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 22160 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e no(copySqliteNon 22170 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d ImplicitFiles)]} 22180 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22190 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 221a0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 221b0 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f copySqlitePlatfo 221c0 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a rmFiles)] && \.. 221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 221e0 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 221f0 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
22200 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
22220 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 22230 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 22240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22250 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 tryCopyAss 22260 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
22270 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20  $platform.. 22280 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 222a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 222b0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 222c0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 222d0 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 222e0 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22300 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 22310 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
22320 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22340 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
22350 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 22360 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 22370 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 22380 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e yAssembly$fileN
22390 61 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72  ame $architectur 223a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 223b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 223c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 223d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 223e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 223f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 22400 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 22410 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 copySqliteManage 22420 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b dFiles)]} then { 22430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22440 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 22450 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d$managedFileNam
22460 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
22470 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
22480 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d  embly $fileName. 22490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 224a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 224b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 224c0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 224d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 224e0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f kip trying to lo 224f0 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 ad any files if 22500 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 22510 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22520 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 22530 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 22540 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 22550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22560 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 22570 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 22580 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 iteImplicitFiles 22590 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 225a0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 225b0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 225c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 225d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 225e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 225f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 22600 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 22610 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 LinqFiles)]} the 22620 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 22630 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 22640 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 22650 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a QLite.Linq.dll.. 22660 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 22670 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 22680 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 22690 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 :no(loadSqliteEf 226a0 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 6Files)]} then { 226b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 226c0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 226d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 226e0 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 te.EF6.dll.. 226f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 22700 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 22710 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 22720 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 loadSqliteNonImp 22730 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 22740 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22750 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 22760 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 22770 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 22780 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 22790 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 227a0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
227b0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
227c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
227d0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
227e0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
227f0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74  SQLite.dll $plat 22800 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. 22810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22820 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 22830 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 22840 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 adSqliteArchitec 22850 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 22860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22870 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 22880 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
22890 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
228b0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
228c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
228d0 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74  e.dll $architect 228e0 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 228f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 22900 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 22910 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 22920 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 22930 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 ileNameOnly [get 22940 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c NativeLibraryFil 22950 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 eNamesOnly] {.. 22960 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 22970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 22980 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
22990 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
229a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
229b0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
229c0 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69  rsion of \"" $fi 229d0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e leNameOnly "\".. 229e0 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 . \"" \.. 229f0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v 22a00 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 22a10 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
22a20 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d  ameOnly]] \"\n].
22a30 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
22a40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
22a50 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
22a60 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65  ameOnly [getInte
22a70 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
22a80 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20  amesOnly] {..
22a90 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
22ab0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 22ac0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 22ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22ae0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 22af0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 ion of \""$file
22b00 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20  NameOnly "\"...
22b10 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
22b20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
22b30 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
22b40 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 22b50 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 eOnly]] \"\n].. 22b60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22b70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22b80 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 22b90 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
22ba0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
22bb0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
22bc0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
22bd0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
22be0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22bf0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5c  e.dll\"... \"" \
22c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22c10 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
22c20 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
22c30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
22c40 69 74 65 2e 64 6c 6c 5d 5d 20 5c 22 5c 6e 5d 0d  ite.dll]] \"\n].
22c50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
22c60 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
22c70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $22c80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 22c90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 22ca0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 22cb0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 22cc0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 22cd0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c SQLite.Linq.dll\ 22ce0 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 "... \"" \.. 22cf0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 22d00 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina 22d10 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 ryFileName Syste 22d20 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li 22d30 6e 71 2e 64 6c 6c 5d 5d 20 5c 0d 0a 20 20 20 20 nq.dll]] \.. 22d40 20 20 20 20 20 20 20 20 20 20 5c 22 5c 6e 5d 0d \"\n]. 22d50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 22d60 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 22d70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
22d80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
22d90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
22da0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
22db0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
22dc0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
22dd0 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5c 22  SQLite.EF6.dll\"
22de0 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ... \"" \..
22df0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76           [file v
22e00 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
22e10 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  yFileName System
22e20 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
22e30 2e 64 6c 6c 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  .dll]] \..
22e40 20 20 20 20 20 20 20 20 5c 22 5c 6e 5d 0d 0a 20          \"\n]..
22e50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
22e60 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
22e70 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 22e80 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 22e90 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 22ea0 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 fileNameOnly [g 22eb0 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 etNativeLibraryF 22ec0 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d ileNamesOnly] {. 22ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 . cat 22ee0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 22ef0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
22f00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
22f10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
22f20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
22f30 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
22f40 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 22f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22f60 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f /$fileNameO
22f70 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
22f80 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22fa0 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
22fb0 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 22fc0 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ly$platform]] \
22fd0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
22fe0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
22ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
23000 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
23010 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73  ly [getInteropAs
23020 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f  semblyFileNamesO
23030 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  nly] {..
23040 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
23050 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
23060 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 23070 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23090 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 230a0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 sion of \""$pla
230b0 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20  tform \..
230c0 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69             / $fi 230d0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e leNameOnly "\".. 230e0 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 . \"" [file vers 230f0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 23100 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 23110 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
23120 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66  eNameOnly $platf 23130 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 orm]] \"\n].. 23140 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 23150 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 23160 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 23170 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 23180 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
23190 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
231b0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
231c0 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f  n of \"" $platfo 231d0 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rm \.. 231e0 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 "/System.D 231f0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 ata.SQLite.dll\" 23200 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 ... \"" [file ve 23210 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 23220 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 23230 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 aryFileName Syst 23240 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 23250 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ll$platform]] \
23260 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
23270 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
23280 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
23290 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 232a0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 232b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 232c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 232d0 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 eOnly [getNative 232e0 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 LibraryFileNames 232f0 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 Only] {.. 23300 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 23310 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 23320 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
23330 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
23340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23350 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
23360 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72  rsion of \"" $ar 23370 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 chitecture \.. 23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23390 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 /$fileNameOnly
233a0 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65  "\"... \"" [file
233b0 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20   version \..
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
233d0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
233e0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24   $fileNameOnly$
233f0 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c  architecture]] \
23400 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
23410 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
23420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
23430 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
23440 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 23450 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 23460 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 23470 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 23480 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 23490 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 "$architecture
234a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
234b0 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e     / $fileNameOn 234c0 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 ly "\"... \"" [f 234d0 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 ile version \.. 234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 234f0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 23500 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 e$fileNameOnly
23510 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20  $architecture]] 23520 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 23530 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 23540 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 23550 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
23560 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
23570 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
23580 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
23590 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
235a0 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72  \"" $architectur 235b0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 235c0 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 "/System.Da 235d0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 235e0 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 .. \"" [file ver 235f0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 23600 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 23610 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 ryFileName Syste 23620 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 23630 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d l$architecture]
23640 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
23650 20 20 20 20 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20       \"\n]..
23660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
23670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
23680 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
23690 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f   Grab the list o
236a0 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  f managed assemb
236b0 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72  lies for the cur
236c0 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20 20  rent process..
236d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
236e0 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20  d report on the
236f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
23700 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e  te related ones.
23710 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23720 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
23730 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
23740 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
23750 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62        set assemb
23760 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76  lies [object inv
23770 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75  oke AppDomain.Cu
23780 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41  rrentDomain GetA
23790 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20  ssemblies]....
237a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
237b0 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20  oreach assembly
237c0 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20  $assemblies {.. 237d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 237e0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 string match \{S 237f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 23800 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 e*$assembly]} t
23810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
23820 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 23830 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 23840 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 23850 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 23860 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61 - found loaded a 23870 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 ssembly: "$asse
23880 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mbly \n]..
23890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
238a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
238b0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
238c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
238d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 238e0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 238f0 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e "---- defin 23900 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 e constants for 23910 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 23920 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 Lite\"... ".... 23930 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 23940 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 23950 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 23960 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 23970 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 23980 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 23990 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 239a0 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 DefineConstants 239b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 64 65 .. } de 239c0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d fineConstants] = 239d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 239e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
239f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
23a00 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d  appendArgs [form
23a10 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d  atList [lsort \.
23a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23a30 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant 23a40 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a s] <none>] \n].. 23a50 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 23a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23a70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
23a80 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
23a90 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
23aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
23ab0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
23ac0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 23ad0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 23af0 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 73 69 6f -- source versio 23b00 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 n of \"System.Da 23b10 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 23b20 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 23b30 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 23b40 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 23b50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 23b60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 23b80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 23b90 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 23ba0 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 on ProviderVersi 23bb0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 on.. } 23bc0 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 23bd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23be0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 23bf0 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
23c00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
23c10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
23c20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
23c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23c40 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $23c50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 23c60 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72 73 appendArgs$vers
23c70 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ion \n]..
23c80 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
23c90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $23ca0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 23cb0 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 23cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 23cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 23ce0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 23cf0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
23d00 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
23d10 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72        "---- sour
23d20 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c  ce checkout of \
23d30 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
23d40 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a  ite.dll\"... "..
23d50 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
23d60 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
23d70 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
23d80 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
23d90 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
23da0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
23db0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
23dc0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f  teConnection Pro
23dd0 76 69 64 65 72 53 6f 75 72 63 65 49 64 0d 0a 20  viderSourceId..
23de0 20 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63           } sourc
23df0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
23e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
23e10 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
23e20 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20  h $sourceId] == 23e30 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 23e40 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou 23e50 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 rceId null.. 23e60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23e70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
23e80 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
23e90 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65  pendArgs $source 23ea0 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 Id \n].. 23eb0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 23ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
23ed0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
23ee0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
23ef0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
23f00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23f10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
23f20 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c  eck the availabl
23f30 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 72  e builds (and "r
23f40 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 4c  eleases") of SQL
23f50 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ite and..
23f60 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e   #       System.
23f70 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
23f80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23f90 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42   checkForSQLiteB
23fa0 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68  uilds $::test_ch 23fb0 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 annel.. c 23fc0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c heckForSQLiteRel 23fd0 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 eases$::test_ch
23fe0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
23ff0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
24000 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64  TE: Now, we need
24010 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20   to know if the
24020 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
24030 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ary is available
24040 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
24050 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20    (i.e. because
24060 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79  the managed-only
24070 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
24080 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e  ite assembly can
24090 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
240a0 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69    load without i
240b0 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63  t; however, it c
240c0 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e  annot do anythin
240d0 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74  g useful without
240e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
240f0 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 72    it).  If we ar
24100 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65  e using the mixe
24110 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
24120 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a  and we already..
24130 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24140 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29  found it (above)
24150 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  , this should al
24160 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20  ways succeed...
24170 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24180 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
24190 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f  Library $::test_ 241a0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 241b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 241c0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 241d0 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f he SQLite intero 241e0 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76 p assembly is av 241f0 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ailable... 24200 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 24210 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 ckForSQLiteInter 24220 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e op$::test_chann
24230 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
24240 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
24250 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74   Check the SQLit
24260 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
24270 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
24280 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ries...        #
24290 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
242a0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
242b0 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ies $::test_chan 242c0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 242d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 242e0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 : Attempt to det 242f0 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 ermine if variou 24300 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f s compile-time o 24310 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f ptions needed fo 24320 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 24330 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 test constrai 24340 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 nts were enabled 24350 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 for the managed 24360 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 assembly. Ther 24370 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 24380 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 are some comp 24390 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 ile-time options 243a0 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 that must also 243b0 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 have been enable 243c0 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 243d0 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 for the inter 243e0 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f op assembly in o 243f0 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65 63 rder to be effec 24400 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 tive. For those 24410 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 24420 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 options, it wi 24430 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74 68 ll be assumed th 24440 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 at it was enable 24450 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f d for the intero 24460 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 p.. # 24470 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69 assembly if i 24480 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f t was enabled fo 24490 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 r the managed as 244a0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 244b0 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 #.. fore 244c0 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 ach defineConsta 244d0 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 nt [list \.. 244e0 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54 CHECK_ST 244f0 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 ATE COUNT_HANDLE 24500 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 DEBUG INTEROP_C 24510 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 ODEC INTEROP_DEB 24520 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 UG \.. 24530 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 INTEROP_EXTENS 24540 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e ION_FUNCTIONS IN 24550 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e TEROP_FTS5_EXTEN 24560 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 24570 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c INTEROP_INCL 24580 55 44 45 5f 43 45 52 4f 44 20 49 4e 54 45 52 4f UDE_CEROD INTERO 24590 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 20 P_INCLUDE_EXTRA 245a0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f INTEROP_INCLUDE_ 245b0 53 45 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 SEE \.. 245c0 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 INTEROP_INCLU 245d0 44 45 5f 5a 49 50 56 46 53 20 49 4e 54 45 52 4f DE_ZIPVFS INTERO 245e0 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f P_JSON1_EXTENSIO 245f0 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. 24600 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f INTEROP_LEGACY_ 24610 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f CLOSE INTEROP_LO 24620 47 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e G INTEROP_PERCEN 24630 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c TILE_EXTENSION \ 24640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 24650 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 TEROP_REGEXP_EXT 24660 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 ENSION INTEROP_T 24670 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d EST_EXTENSION \. 24680 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 . INT 24690 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 EROP_TOTYPE_EXTE 246a0 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 NSION INTEROP_VI 246b0 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f RTUAL_TABLE NET_ 246c0 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 NET_35 \.. 246d0 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34 30 20 NET_40 246e0 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e NET_45 NET_451 N 246f0 45 54 5f 34 35 32 20 4e 45 54 5f 34 36 20 4e 45 ET_452 NET_46 NE 24700 54 5f 34 36 31 20 4e 45 54 5f 43 4f 4d 50 41 43 T_461 NET_COMPAC 24710 54 5f 32 30 20 5c 0d 0a 20 20 20 20 20 20 20 20 T_20 \.. 24720 20 20 20 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d PLATFORM_COM 24730 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 50 52 PACTFRAMEWORK PR 24740 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 ELOAD_NATIVE_LIB 24750 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 4c RARY RETARGETABL 24760 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 E \.. 24770 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 SQLITE_STANDARD 24780 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 THROW_ON_DISPOS 24790 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 ED TRACE TRACE_C 247a0 4f 4e 4e 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 ONNECTION \.. 247b0 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 44 TRACE_D 247c0 45 54 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 ETECTION TRACE_H 247d0 41 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c ANDLE TRACE_PREL 247e0 4f 41 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 OAD TRACE_SHARED 247f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24800 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 TRACE_STATEMENT 24810 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 TRACE_WARNING TR 24820 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 ACK_MEMORY_BYTES 24830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24840 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 USE_ENTITY_FRAME 24850 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52 WORK_6 USE_INTER 24860 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 OP_DLL USE_PREPA 24870 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b RE_V2 WINDOWS] { 24880 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 24890 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 248a0 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f Check if the co 248b0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 248c0 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 n is listed in t 248d0 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 he list of.. 248e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 # "d 248f0 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 efine constants" 24900 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 kept track of b 24910 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 y the managed as 24920 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 24930 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 24940 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 24950 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a fineConstant$::
24960 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65  test_channel $de 24970 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 fineConstant.. 24980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 24990 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 249a0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 249b0 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 249c0 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20 77 QLite provider w 249d0 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 as compiled with 249e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 249f0 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e support for an 24a00 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 y encrypted data 24a10 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 bases... 24a20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 24a30 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 24a40 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 Constant INTEROP 24a50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 _CODEC] || \.. 24a60 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 [haveS 24a70 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 QLiteDefineConst 24a80 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c ant INTEROP_INCL 24a90 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b UDE_SEE]} then { 24aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 24ab0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 24ac0 20 59 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69 Yes, add generi 24ad0 63 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 c constraint for 24ae0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 24af0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 24b00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 24b10 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 addConstraint Sy 24b20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 24b30 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 .Encryption.. 24b40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 24b50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 24b60 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 OTE: Check the c 24b70 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 urrent build yea 24b80 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 r. Basically, t 24b90 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 his indicates.. 24ba0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 24bb0 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 hich version of 24bc0 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 MSBuild and/or V 24bd0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 isual Studio was 24be0 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 used to.. 24bf0 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c # compil 24c00 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 e the assembly b 24c10 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 24c20 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 24c30 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
24c40 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
24c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
24c60 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
24c70 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
24c80 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e  te build year...
24c90 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   "....        se
24ca0 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64  t year [getBuild
24cb0 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61  Year]..        a
24cc0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  ddConstraint [ap
24cd0 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65  pendArgs buildYe
24ce0 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20  ar. $year].. 24cf0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
24d00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
24d10 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c  dArgs \" $year \ 24d20 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "\n].... 24d30 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 24d40 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 E: Check the cur 24d50 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 rent build .NET 24d60 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 Framework. Basi 24d70 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 cally, this.. 24d80 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 # ind 24d90 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65 72 icates which ver 24da0 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 sion of the .NET 24db0 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 Framework is be 24dc0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ing.. # 24dd0 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68 65 used by the 24de0 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 assembly binari 24df0 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a es under test... 24e00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24e10 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
24e20 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
24e30 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
24e40 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
24e50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
24e60 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ild .NET Framewo
24e70 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  rk... "....
24e80 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65     set netFx [ge
24e90 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20  tBuildNetFx]..
24ea0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
24eb0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
24ec0 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20  buildFramework.
24ed0 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20  $netFx].. 24ee0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
24ef0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24f00 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c  gs \" $netFx \"\ 24f10 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 24f20 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 24f30 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 Check the curre 24f40 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 nt build configu 24f50 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 ration. This sh 24f60 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 ould normally.. 24f70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 24f80 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 e either "Debug" 24f90 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a or "Release"... 24fa0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24fb0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
24fc0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
24fd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
24fe0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
24ff0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
25000 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
25010 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  n... "....
25020 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74    set configurat
25030 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e  ion [getBuildCon
25040 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20  figuration]..
25050 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
25060 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
25070 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
25080 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  n. $configuratio 25090 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 n].. tput 250a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
250b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
250c0 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 250d0 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 250e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 250f0 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 TE: Try to setup 25100 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 an interrupt ca 25110 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 llback using the 25120 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 script debugger 25130 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 25140 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 that will canc 25150 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 el all SQL queri 25160 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 es in progress f 25170 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d or all database. 25180 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25190 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f connections kno 251a0 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 wn to this inter 251b0 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 preter... 251c0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 251d0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 251e0 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 no(sqliteInterru 251f0 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 ptCallback)]} th 25200 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25210 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 setupDbInterrupt 25220 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 Callback$::test
25230 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74  _channel $::test 25240 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d _log.. }. 25250 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 25260 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 25270 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 eck for the nati 25280 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f ve runtime optio 25290 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d n, which would m 252a0 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 ean we are.. 252b0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e # usin 252c0 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 g the mixed-mode 252d0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 252e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 252f0 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 heckForRuntimeOp 25300 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 tion$::test_cha
25310 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  nnel native....
25320 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25330 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
25340 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  if the test suit
25350 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74  e should count t
25360 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e  he number of con
25370 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
25380 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65    #       "opene
25390 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20  d" and "closed"
253a0 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68  from the pool wh
253b0 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
253c0 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20  f a test..
253d0 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64    #       passed
253e0 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69  .  Disabling thi
253f0 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f  s behavior is so
25400 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72  metimes necessar
25410 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20  y (e.g...
25420 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20   #       during
25430 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74  the release test
25440 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63  ing process) bec
25450 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73  ause there are s
25460 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20  everal..
25470 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68  #       tests th
25480 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22  at rely on the "
25490 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c  opened from pool
254a0 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72  " count being gr
254b0 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23  eater..        #
254c0 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f         than zero
254d0 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d  .  These tests m
254e0 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74  ay fail due to t
254f0 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69  he non-determini
25500 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20  stic..        #
25510 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f        behavior o
25520 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76  f the CLR GC, ev
25530 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73  en when there is
25540 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63   no bug in the c
25550 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ode..        #
25560 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65       being teste
25570 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
25580 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52         checkForR
25590 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a  untimeOption $:: 255a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 test_channel noP 255b0 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 oolCounts.... 255c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 255d0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 255e0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 255f0 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 should use share 25600 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 d-cache mode... 25610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25620 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d checkForRuntim 25630 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f eOption$::test_
25640 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61  channel sharedCa
25650 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  che....        #
25660 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
25670 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73  : Report the res
25680 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f  ource usage prio
25690 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79  r to running any
256a0 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
256b0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f   #..        repo
256c0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
256d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 256e0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 256f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 25700 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 Grab the list of 25710 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 native modules 25720 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current 25730 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 process and.. 25740 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 70 # rep 25750 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 ort on the Syste 25760 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re 25770 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 lated ones... 25780 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25790 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 257a0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 257b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 257c0 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 set modules [ob 257d0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 ject invoke \.. 257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 257f0 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e tem.Diagnostics. 25800 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 Process.GetCurre 25810 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 ntProcess Module 25820 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 s].... 25830 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d object foreach - 25840 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f alias module$mo
25850 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  dules {..
25860 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25870 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
25880 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65  module file name
25890 20 68 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f   here must be no
258a0 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  rmalized...
258b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
258c0 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
258d0 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69  me [file normali
258e0 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65  ze [$module File 258f0 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 Name]].. 25900 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 25910 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61 69 6c 20 Only [file tail 25920 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
25930 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c            if {[l
25940 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e  search -exact -n
25950 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20  ocase -- \..
25960 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
25970 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
25980 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c  eNamesOnly] $fil 25990 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 eNameOnly] != -1 259a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 259b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
259c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
259d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
259f0 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65  ---- found loade
25a00 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20  d SQLite native
25a10 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20  library module:
25a20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
25a30 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName 25a40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 25a50 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 } elseif {[lse 25a60 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 arch -exact -noc 25a70 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 ase -- \.. 25a80 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 49 6e [getIn 25a90 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c teropAssemblyFil 25aa0 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c eNamesOnly]$fil
25ab0 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31  eNameOnly] != -1
25ac0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25ad0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 25ae0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 25af0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 25b10 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 25b20 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 d SQLite interop 25b30 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 assembly module 25b40 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 25b50 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
25b60 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  me \n]..
25b70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
25b80 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
25b90 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
25ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
25bb0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 25bc0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 25bd0 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 "---- compile 25be0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f -time options fo 25bf0 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li 25c00 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... 25c10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 25c20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 25c30 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 25c40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 25c50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 25c60 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 25c70 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 25c80 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 SQLiteCompileOpt 25c90 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ions.. 25ca0 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 } compileOptions 25cb0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 25cc0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 25cd0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
25ce0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
25cf0 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
25d00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25d10 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69      $compileOpti 25d20 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ons] <none>] \n] 25d30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 25d40 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 25d50 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
25d60 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
25d70 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
25d80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25d90 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
25da0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 25db0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 25dd0 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 25de0 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 25df0 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 25e00 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 embly... ".... 25e10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 25e20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 25e30 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 25e40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 25e50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 25e60 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 25e70 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 25e80 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 InteropCompileOp 25e90 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 tions.. 25ea0 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e } compileOption 25eb0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 25ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 25ed0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
25ee0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
25ef0 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
25f00 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
25f10 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74       $compileOpt 25f20 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ions] <none>] \n 25f30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 25f40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 25f50 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
25f60 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
25f70 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
25f80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
25f90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25fa0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68   # NOTE: Show th
25fb0 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f  e active test co
25fc0 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20  nstraints...
25fd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
25fe0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 25ff0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26000 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e "---- constrain 26010 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ts: " \.. 26020 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 [formatList 26030 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 [lsort [getCons 26040 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e traints]] <none> 26050 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 26060 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 26070 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 TE: Save the tes 26080 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f t constraints fo 26090 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73 r use by threads 260a0 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 created in this 260b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 260c0 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f application do 260d0 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e main. This is n 260e0 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65 ecessary because 260f0 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a all the Eagle.. 26100 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26110 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 "test context" i 26120 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 nformation is pe 26130 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 r-thread... 26140 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 26150 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 26160 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e ::test_constrain 26170 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ts]} then {.. 26180 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 set ::tes 26190 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a t_constraints$:
261a0 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e  :eagle_tests(con
261b0 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20  straints)..
261c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
261d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
261e0 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74  E: Load the "aft
261f0 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  er-constraints"
26200 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
26210 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d  and/or per-host.
26220 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
26230 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
26240 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
26250 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
26260 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
26270 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $26280 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 26290 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 after].... 262a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 262b0 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 OTE: If necessar 262c0 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 y, enable shared 262d0 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e -cache mode now. 262e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 262f0 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 26300 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 timeOption share 26310 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d dCache]} then {. 26320 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c . enabl 26330 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a eSharedCache$::
26340 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75  test_channel tru
26350 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
26360 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26370 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
26380 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61  when our tests a
26390 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e  ctually began (n
263a0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ow)...        #.
263b0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $263c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 263d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 263e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 263f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 26400 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 te tests began a 26410 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 t " \.. 26420 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 [clock format 26430 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 26440 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ] \n].. }.. 26450 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 26460 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 26470 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d FilesPrologue {} 26480 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 {.. upleve 26490 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 l 1 {.. # 264a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 264b0 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 : Setup the vari 264c0 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 ables that refer 264d0 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 to the various 264e0 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a non-data files.. 264f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26500 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 required by the 26510 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 tests in this fi 26520 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 26530 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 set enti 26540 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 26550 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 26560 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 26570 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 ame EntityFramew 26580 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 ork.dll].... 26590 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 set installe 265a0 72 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 rExeFile [getBui 265b0 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 ldFileName Insta 265c0 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 ller.exe].. 265d0 20 20 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 set sqliteDes 265e0 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 ignerDllFile [ge 265f0 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 26600 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d 26610 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 26620 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 26630 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 iteDllFile \.. 26640 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 26650 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 26660 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 26670 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 26680 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 26690 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c iteLinqDllFile \ 266a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 266b0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 266c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 266d0 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a te.Linq.dll].... 266e0 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 set syst 266f0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 26700 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 26710 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 [getBuildF 26720 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 ileName System.D 26730 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 ata.SQLite.EF6.d 26740 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 26750 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b et testExeFile [ 26760 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 26770 20 74 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 test.exe].. 26780 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 set testLinq 26790 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c ExeFile [getBuil 267a0 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 dFileName testli 267b0 6e 71 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 nq.exe].. 267c0 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46 set testEf6ExeF 267d0 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ile [getBuildFil 267e0 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 eName testef6.ex 267f0 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 26800 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 26810 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 26820 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 26830 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 to the various d 26840 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ata files.. 26850 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 26860 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 red by the tests 26870 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a in this file... 26880 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 26890 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f set testLinqO 268a0 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 utFile [file nat 268b0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 268c0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 268d0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 268e0 44 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 DataPath] testli 268f0 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 nq.out]].... 26900 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e set northwin 26910 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 dEfDbFile [file 26920 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 26930 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 26940 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 [file dirna 26950 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 26960 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 26970 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 ataPath]]] \.. 26980 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 testli 26990 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 nq northwindEF.d 269a0 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 b]].... s 269b0 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 et nonWalDbFile 269c0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 269d0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 269e0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 269f0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 26a00 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a h] nonWal.db]].. 26a10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 77 61 .. set wa 26a20 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 lDbFile [file na 26a30 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 26a40 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 26a50 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 26a60 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 tDataPath] wal.d 26a70 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 b]].... # 26a80 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26a90 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e : The various in 26aa0 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 stall/uninstall 26ab0 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 log files used t 26ac0 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 o test the.. 26ad0 20 20 20 20 23 20 20 20 20 20 20 20 64 65 73 69 # desi 26ae0 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e gn-time componen 26af0 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 t installer... 26b00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26b10 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c set testInstall 26b20 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 Vs2005LogFile [f 26b30 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 26b40 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 26b50 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 26b60 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 26b70 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f Installer_Test_ 26b80 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2005.log]].... 26b90 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 26ba0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 InstallVs2008Log 26bb0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 26bc0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 26bd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26be0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 26bf0 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 taPath] Installe 26c00 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f r_Test_Vs2008.lo 26c10 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 26c20 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 et testInstallVs 26c30 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2010LogFile [fil 26c40 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 26c50 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 26c60 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 26c70 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 26c80 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 26c90 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2010.log]].... 26ca0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e set testIn 26cb0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 stallVs2012LogFi 26cc0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 26cd0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 26ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 26cf0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 26d00 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f Path] Installer_ 26d10 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d Test_Vs2012.log] 26d20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 26d30 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 26d40 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 13LogFile [file 26d50 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 26d60 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 26d70 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 26d80 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 26d90 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 26da0 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 13.log]].... 26db0 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 set testInst 26dc0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 26dd0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 26de0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 26df0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 26e00 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 26e10 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 26e20 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d st_Vs2015.log]]. 26e30 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 26e40 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 26e50 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 05LogFile [file 26e60 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 26e70 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 26e80 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 26e90 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 26ea0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 26eb0 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2005.log]].... 26ec0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 26ed0 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 installVs2008Log 26ee0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 26ef0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 26f00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26f10 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 26f20 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 26f30 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e ler_Test_Vs2008. 26f40 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 26f50 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 26f60 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 26f70 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 26f80 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 26f90 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 26fa0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 26fb0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 26fc0 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d est_Vs2010.log]] 26fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 26fe0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 26ff0 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 012LogFile [file 27000 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 27010 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 27020 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 27030 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 27040 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 27050 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2012.log]].... 27060 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 set testU 27070 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f ninstallVs2013Lo 27080 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 27090 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 270a0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 270b0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 270c0 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 ataPath] Uninsta 270d0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 ller_Test_Vs2013 270e0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 270f0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 set testUninst 27100 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 27110 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 27120 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 27130 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 27140 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 27150 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f th] Uninstaller_ 27160 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d Test_Vs2015.log] 27170 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 ].... ### 27180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 27190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 271a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 271b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 271c0 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ####.... 271d0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 271e0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 271f0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 27200 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 27210 20 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72$entityFramewor
27220 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  kDllFile]]]} the
27230 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
27240 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 27250 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 t_channel$entit
27260 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c  yFrameworkDllFil
27270 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
27280 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
27290 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
272a0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
272b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
272c0 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c  ile tail $instal 272d0 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 lerExeFile]]]} t 272e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 272f0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
27300 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73  est_channel $ins 27310 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e tallerExeFile In 27320 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 staller.exe.. 27330 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 27340 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 27350 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 27360 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 27370 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 27380 69 6c 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e il$sqliteDesign
27390 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68  erDllFile]]]} th
273a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
273b0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 273c0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 st_channel$sqli
273d0 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c  teDesignerDllFil
273e0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
273f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
27400 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
27410 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
27420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
27430 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d  ile tail $system 27440 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c DataSQLiteDllFil 27450 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 27460 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 27470 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
27480 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  el $systemDataSQ 27490 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 LiteDllFile.. 274a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 274b0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 274c0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 274d0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 274e0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 274f0 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 il$systemDataSQ
27500 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d  LiteLinqDllFile]
27510 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
27520 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
27530 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 27540 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
27550 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20  teLinqDllFile..
27560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
27570 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
27580 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27590 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
275a0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
275b0 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61  tail $systemData 275c0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 SQLiteEf6DllFile 275d0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 275e0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 275f0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
27600 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c  l $systemDataSQL 27610 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 iteEf6DllFile.. 27620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27630 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 27640 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 27650 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 27660 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 27670 74 61 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c tail$testExeFil
27680 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
27690 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
276a0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 276b0 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 el$testExeFile
276c0 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20  test.exe..
276d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
276e0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
276f0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
27700 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
27710 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
27720 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65  $testLinqExeFile 27730 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 27740 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 27750 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
27760 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69  l $testLinqExeFi 27770 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d le testlinq.exe. 27780 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 27790 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 277a0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 277b0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 277c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 277d0 65 20 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 e tail$testEf6E
277e0 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
277f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
27800 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 27810 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 channel$testEf6
27820 45 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e  ExeFile testef6.
27830 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  exe..        }..
27840 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
27850 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
27860 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
27870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27880 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 27890 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 LinqOutFile]]]} 278a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 278b0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
278c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 278d0 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 stLinqOutFile.. 278e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 278f0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 27900 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 27910 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 27920 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 27930 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 tail$northwindE
27940 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  fDbFile]]]} then
27950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
27960 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 27970 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 _channel$northw
27980 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20  indEfDbFile..
27990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
279a0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
279b0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
279c0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
279d0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
279e0 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  il $nonWalDbFile 279f0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 27a00 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 27a10 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
27a20 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d  l $nonWalDbFile. 27a30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 27a40 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 27a50 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 27a60 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 27a70 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 27a80 65 20 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c e tail$walDbFil
27a90 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
27aa0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
27ab0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 27ac0 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 el$walDbFile..
27ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
27ae0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
27af0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27b00 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
27b10 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
27b20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 27b30 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d lVs2005LogFile]] 27b40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 27b50 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 27b60 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
27b70 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 27b80 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 05LogFile.. 27b90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 27ba0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 27bb0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 27bc0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 27bd0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 27be0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
27bf0 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  008LogFile]]]} t
27c00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
27c10 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 27c20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
27c30 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  tInstallVs2008Lo
27c40 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
27c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
27c60 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
27c70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
27c80 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
27c90 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 27ca0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c stInstallVs2010L 27cb0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 27cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 27cd0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
27ce0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73  channel $testIns 27cf0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 27d00 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 27d10 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 27d20 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 27d30 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 27d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 27d50 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
27d60 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
27d70 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
27d80 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
27d90 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 27da0 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
27db0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2012LogFile..
27dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
27dd0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
27de0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27df0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
27e00 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
27e10 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 27e20 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d lVs2013LogFile]] 27e30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 27e40 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 27e50 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
27e60 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 27e70 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 13LogFile.. 27e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 27e90 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 27ea0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 27eb0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 27ec0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 27ed0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
27ee0 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  015LogFile]]]} t
27ef0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
27f00 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 27f10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
27f20 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  tInstallVs2015Lo
27f30 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
27f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
27f50 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
27f60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
27f70 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
27f80 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 27f90 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 27fa0 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 5LogFile]]]} the 27fb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 27fc0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
27fd0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 27fe0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f ninstallVs2005Lo 27ff0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 28000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28010 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 28020 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 28030 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 28040 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
28050 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
28060 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
28070 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
28080 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 28090 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
280a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  ninstallVs2008Lo
280b0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
280c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
280d0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
280e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
280f0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
28100 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 28110 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 28120 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 0LogFile]]]} the 28130 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 28140 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
28150 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 28160 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f ninstallVs2010Lo 28170 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 28180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28190 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 281a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 281b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 281c0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
281d0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
281e0 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  2LogFile]]]} the
281f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
28200 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 28210 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
28220 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  ninstallVs2012Lo
28230 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
28240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
28250 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
28260 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
28270 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
28280 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 28290 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 282a0 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 3LogFile]]]} the 282b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 282c0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
282d0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 282e0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f ninstallVs2013Lo 282f0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 28300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28310 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 28320 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 28330 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 28340 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
28350 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
28360 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  5LogFile]]]} the
28370 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
28380 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 28390 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
283a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  ninstallVs2015Lo
283b0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
283c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
283d0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
283e0 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73  nSQLiteTestFiles
283f0 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20  Epilogue {} {..
28400 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b       uplevel 1 {
28410 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20  ..        unset
28420 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20  -nocomplain \..
28430 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55             testU
28440 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  ninstallVs2015Lo
28450 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74  gFile testUninst
28460 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65  allVs2013LogFile
28470 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28480 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
28490 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 55  012LogFile testU
284a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
284b0 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  gFile \..
284c0 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61       testUninsta
284d0 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20  llVs2008LogFile
284e0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
284f0 30 30 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20  005LogFile \..
28500 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e            testIn
28510 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69  stallVs2015LogFi
28520 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
28530 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2013LogFile \..
28540 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49             testI
28550 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46  nstallVs2012LogF
28560 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
28570 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a  s2010LogFile \..
28580 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
28590 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
285a0 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c  File testInstall
285b0 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d  Vs2005LogFile...
285c0 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
285d0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20  nocomplain \..
285e0 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77            northw
285f0 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74  indEfDbFile test
28600 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20  LinqOutFile \..
28610 20 20 20 20 20 20 20 20 20 20 20 77 61 6c 44 62             walDb
28620 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c  File nonWalDbFil
28630 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73  e....        uns
28640 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c  et -nocomplain \
28650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
28660 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73  stEf6ExeFile tes
28670 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a  tLinqExeFile \..
28680 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
28690 45 78 65 46 69 6c 65 20 73 79 73 74 65 6d 44 61  ExeFile systemDa
286a0 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69  taSQLiteEf6DllFi
286b0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
286c0 20 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69    systemDataSQLi
286d0 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79  teLinqDllFile sy
286e0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c  stemDataSQLiteDl
286f0 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  lFile \..
28700 20 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 67       sqliteDesig
28710 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61  nerDllFile insta
28720 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20  llerExeFile \..
28730 20 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74             entit
28740 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c  yFrameworkDllFil
28750 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  e..      }..
28760 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
28770 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c  unSQLiteTestEpil
28780 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
28790 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
287a0 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
287b0 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67  ur custom epilog
287c0 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f  ue if the main o
287d0 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ne has been..
287e0 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
287f0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
28800 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
28810 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f  xists ::no(epilo
28820 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65  gue.eagle)]} the
28830 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
28840 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
28850 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65  Show when our te
28860 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64  sts actually end
28870 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20  ed (now)...
28880 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
28890 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 288a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 288b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 288c0 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 ---- System.Data 288d0 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e .SQLite tests en 288e0 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 ded at " \.. 288f0 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 [clock f 28900 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 ormat [clock sec 28910 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 onds]] \n].... 28920 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 28930 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 28940 65 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 e "epilogue" cus 28950 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 28960 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 /or per-host tes 28970 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 28980 20 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e settings now. 28990 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 289a0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 289b0 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 list loadSQLiteT 289c0 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 estSettings$::t
289d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69  est_channel .epi
289e0 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  logue]....
289f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42    #..        # B
28a00 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68  UGFIX: Before ch
28a10 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  ecking the final
28a20 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73   resources in us
28a30 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b  e by SQLite, mak
28a40 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
28a50 20 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f       sure both o
28a60 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c  f the PRAGMA rel
28a70 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e  ated directory n
28a80 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d  ames are freed..
28a90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
28aa0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
28ab0 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a  teDirectories $: 28ac0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 :test_channel tr 28ad0 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ue.... #. 28ae0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 28af0 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 Also report the 28b00 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 resource usage 28b10 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 after running th 28b20 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 e tests... 28b30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 #.. rep 28b40 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 ortSQLiteResourc 28b50 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e es$::test_chann
28b60 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
28b70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28b80 20 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74   Report the crit
28b90 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
28ba0 74 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  ts after running
28bb0 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20   the tests...
28bc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28bd0 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43  getSQLiteHandleC
28be0 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  ounts $::test_ch 28bf0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 28c00 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 28c10 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 TE: If necessary 28c20 2c 20 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 , disable shared 28c30 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e -cache mode now. 28c40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 28c50 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 28c60 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 timeOption share 28c70 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d dCache]} then {. 28c80 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c . enabl 28c90 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a eSharedCache$::
28ca0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c  test_channel fal
28cb0 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  se..        }..
28cc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
28cd0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
28ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d20 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
28d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d40 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f  #### END Eagle O
28d50 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
28d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d70 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
28d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28dc0 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  ###..  }....  #.
28dd0 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20  .  # NOTE: Save
28de0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the
28df0 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
28e00 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d  ning this file..
28e10 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e  .  #..  if {![in
28e20 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e  fo exists common
28e30 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  _directory]} the
28e40 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d  n {..    set com
28e50 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66  mon_directory [f
28e60 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
28e70 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d  o script]]..  }.
28e80 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
28e90 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79  : Provide the Sy
28ea0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
28eb0 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f   test package to
28ec0 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
28ed0 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67  ...  #..  packag
28ee0 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d  e provide System
28ef0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73  .Data.SQLite.Tes
28f00 74 20 31 2e 30 0d 0a 7d 0d 0a                    t 1.0..}..