System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 52ab39009003272670d9ce215d01f32a556b9433:

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 20 2f 20 22 6e 65 74 46 78 34 36  x461" / "netFx46
22e0: 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2"?..
22f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2300: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
2310: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
2320: 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f 3a  netFx35; # TODO:
2330: 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22   Good "fallback"
2340: 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20   default?..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2360: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2370: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2380: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  .....    #..
2390: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
23a0: 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 65  cedure should re
23b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
23c0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured
23d0: 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 20  test..    #
23e0: 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d 6f    platform is mo
23f0: 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65  st likely the de
2400: 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 6d  fault for this m
2410: 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d 0a  achine...    #..
2420: 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 75      proc isDefau
2430: 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  ltBuildPlatform
2440: 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d  { {verbose true}
2450: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
2460: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e       # NOTE: Run
2470: 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 69 73  ning on WoW64 is
2480: 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 61 75   never the defau
2490: 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  lt platform...
24a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
24b0: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34  {[isRunningWoW64
24c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24d0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} 24e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2500: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
2510: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
2520: 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 65 66  detected non-def
2530: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 28 57  ault platform (W
2540: 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 20 20  oW64)\n"..
2550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
2560: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
2570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
2580: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2590: 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63  his has a good c
25a0: 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74  hance of being t
25b0: 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66  he default platf
25c0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
25d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 25e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 25f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2600: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64  _channel "---- d
2610: 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 20  etected default
2620: 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20  platform\n"..
2630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
2640: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d  turn true..    }
2650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2660: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b  tBuildPlatform {
2670: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
2680: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
2690: 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66  sts ::test_platf
26a0: 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  orm] && \..
26b0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
26c0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74  gth $::test_plat 26d0: 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 26f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 2700: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 2710: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 test platform. 2720: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 2730: 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 is not set,.. 2740: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2750: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 2760: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 2770: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 2780: 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 2790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 27a0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 eturn [expr {$na
27b0: 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70  tive ? $::test_p 27c0: 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a latform : ""}].. 27d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 27e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 27f0: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 est_machine] && 2800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2810: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2820: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30  est_machine] > 0
2830: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2850: 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20  OTE: For native
2860: 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74  builds, return t
2870: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
2880: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
2890: 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
28a0: 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 63 68     the test mach
28b0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ine architecture
28c0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74  ; otherwise, ret
28d0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20  urn an empty..
28e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
28f0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
2900: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2910: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
2920: 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d      $native ? [m 2930: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 2940: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65$::test_machine
2950: 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20  ] : ""..
2960: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
2970: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2980: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
2990: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
29a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
29b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
29c0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
29d0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
29e0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
29f0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
2a00: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2a10: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2a20: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
2a30: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2a40: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2a50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2a60: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  urn [expr {..
2a70: 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f         $native ? 2a80: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 2a90: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
2aa0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20  orm(machine)] :
2ab0: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  ""..        }]..
2ac0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ae0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61     # NOTE: No ma
2af0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2b00: 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  re is available,
2b10: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2b20: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2b30: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20    #       It is
2b40: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74  important to ret
2b50: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
2b60: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65  ing here because
2b70: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2b80: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20        result of
2b90: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  this procedure m
2ba0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ay be used with
2bb0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20  [file join]...
2bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2bd0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
2be0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2bf0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2c00: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d  Configuration {}
2c10: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2c20: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2c30: 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61  f the "configura
2c40: 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61  tion" setting ha
2c50: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2c60: 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  n by the..
2c70: 23 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e  #       user (e.
2c80: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2c90: 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68  d line).  This h
2ca0: 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61  elps control exa
2cb0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ctly..      #
2cc0: 20 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66      which set of
2cd0: 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65   binaries we are
2ce0: 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74   testing (i.e. t
2cf0: 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68  hose built in th
2d00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
2d10: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
2d20: 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66  ease" build conf
2d30: 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f  igurations).  To
2d40: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a   override this..
2d50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
2d60: 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  lue via the comm
2d70: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20  and line, enter
2d80: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61  a command simila
2d90: 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20  r to one of..
2da0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
2db0: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e  ollowing (all on
2dc0: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
2dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2de0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2df0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e00: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e10: 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22  iguration Debug"
2e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e30: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
2e40: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
2e50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2e60: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2e70: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e80: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e90: 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73  iguration Releas
2ea0: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
2eb0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2ec0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2ed0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ee0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ef0: 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74  .exe -file .\pat
2f00: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d  h\to\all.eagle -
2f10: 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23  preTest..      #
2f20: 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20           "unset
2f30: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74  -nocomplain test
2f40: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d  _configuration".
2f50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f60: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2f70: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
2f80: 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  ation] && \..
2f90: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2fa0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f  ength $::test_co 2fb0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 nfiguration] > 0 2fc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fe0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 2ff0: 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 cified test conf 3000: 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 iguration. The 3010: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 default value us 3020: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 3030: 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 for this var 3040: 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c iable is typical 3050: 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 ly "Release", as 3060: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3070: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3080: 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d suite itself.. 3090: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30a0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
30b0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
30c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
30d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72       # NOTE: Nor
30f0: 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e  mally, we will n
3100: 65 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61  ever hit this ca
3110: 73 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76  se because the v
3120: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..
3130: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
3140: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
3150: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61  variable is alwa
3160: 79 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  ys set by the te
3170: 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20  st suite..
3180: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66    #       itself
3190: 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61  ; however, it ca
31a0: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden
31b0: 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20  using the unset
31c0: 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20  command..
31d0: 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68   #       from th
31e0: 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f  e -preTest optio
31f0: 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75  n to the test su
3200: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
3210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3220: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor 3230: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 m(configuration) 3240: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3250: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3260: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 3270: 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ions {} {.. 3280: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3290: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 : See if the lis 32a0: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 32b0: 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 urations has bee 32c0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d n overridden by. 32d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 32e0: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e he user (e.g. on 32f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 3300: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e)... #.. 3310: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3320: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 ists ::test_conf 3330: 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c igurations] && \ 3340: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle 3350: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3360: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30  figurations] > 0
3370: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3380: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3390: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
33a0: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74  cified list of t
33b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
33c0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
33d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $33e0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 33f0: 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 tions.. } e 3400: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 3410: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3420: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c : Use the defaul 3430: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 t list of test c 3440: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 3450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3460: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 3470: 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a Debug Release].. 3480: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3490: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 34a0: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 34b0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 34c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 34d0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 igure out the ba 34e0: 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 se directory whe 34f0: 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 re all the build 3500: 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 s should be.. 3510: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 3520: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 3530: 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 e the directory 3540: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 that contains th 3550: 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 e actual.. 3560: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 # build ou 3570: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 tput directory ( 3580: 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 e.g. parent of " 3590: 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d bin")... #. 35a0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 35b0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 35c0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 35d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35f0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
3600: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
3610: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
3620: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3630: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
3640: 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 64  the build base d
3650: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
3660: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
3670: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3680: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
3690: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
36a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
36b0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62  eturn $::build_b 36c0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ase_directory.. 36d0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 36e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 36f0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 3700: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3710: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3720: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
3730: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
3740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74      # NOTE: Next
3760: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68  , fallback to th
3770: 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69  e grandparent di
3780: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
3790: 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ne..        #
37a0: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74      containing t
37b0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
37c0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
37d0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
37e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
37f0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
3800: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
3810: 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  name $::common_d 3820: 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 irectory]].. 3830: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3840: 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d o exists ::path] 3850: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 3860: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 3870: 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68$::path] > 0} th
3880: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3890: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
38a0: 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61   Finally, fallba
38b0: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ck to the parent
38c0: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68   directory of th
38d0: 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20  e EagleTest..
38e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 74       #       pat
38f0: 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 73  h.  The EagleTes
3900: 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e  t package guaran
3910: 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 76  tees that this v
3920: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
3930: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65   #       will be
3940: 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 65   set to the dire
3950: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
3960: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 20   the first file
3970: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
3980: 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 20      execute the
3990: 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65  [runTestPrologue
39a0: 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  ] script library
39b0: 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
39c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
39d0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72  return [file dir
39e0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20  name $::path].. 39f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 3a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3a10: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 # NOTE: No pat 3a20: 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 h is available, 3a30: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3a40: 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f string. This po 3a50: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 int.. # 3a60: 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 should not 3a70: 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 be reached... 3a80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3a90: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 3aa0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 3ab0: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 3ac0: 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 TestDataPath {} 3ad0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3ae0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 3af0: 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74 6f out the directo 3b00: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 ry where all the 3b10: 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 test data files 3b20: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 should.. # 3b30: 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 be locate 3b40: 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 d. This should 3b50: 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64 69 be the "data" di 3b60: 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 rectory beneath 3b70: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 3b80: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e directory con 3b90: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 taining the actu 3ba0: 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73 2e al test scripts. 3bb0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3bc0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 3bd0: 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d in$::path data]
3be0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3bf0: 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f  proc isRunningWo
3c00: 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  W64 {} {..
3c10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3c20: 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75   For now, just u
3c30: 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  se the existing
3c40: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
3c50: 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20  for detecting..
3c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 57       #       a W
3c70: 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20  oW64 process...
3c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3c90: 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72  turn [haveConstr
3ca0: 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20  aint wow64]..
3cb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3cc0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
3cd0: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
3ce0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
3cf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d00: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d  # NOTE: First, m
3d10: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 73  ake sure the tes
3d20: 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 72  t suite infrastr
3d30: 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65  ucture is allowe
3d40: 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  d to..      #
3d50: 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 65      use the [exe
3d60: 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  c] command...
3d70: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
3d80: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
3d90: 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69  no(exec)] && ![i
3da0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
3db0: 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e  corFlags)]} then
3dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3dd0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
3de0: 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  f the location o
3df0: 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72  f CorFlags is pr
3e00: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76  esent in the env
3e10: 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20  ironment,..
3e20: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69     #       use i
3e30: 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 73  t; otherwise ass
3e40: 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 65  ume it is in the
3e50: 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20   PATH...
3e60: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
3e70: 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d  orFlags [expr {.
3e80: 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f  .          [info
3e90: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f   exists ::env(Co
3ea0: 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e  rFlags)] ? $::en 3eb0: 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 v(CorFlags) : "C 3ec0: 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 orFlags".. 3ed0: 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }].... 3ee0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3ef0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 E: Attempt to ex 3f00: 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f ecute CorFlags o 3f10: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 n the specified 3f20: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 file... # 3f30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 3f40: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 3f50: 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c exec --$corFl
3f60: 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ags [file native
3f70: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  name $fileName]. 3f80: 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d . } exec] 3f90: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 3fa0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 3fb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 3fc0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 3fd0: 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 r caller, attemp 3fe0: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 3ff0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 4000: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 platform f 4010: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 or the specified 4020: 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a file as well... 4030: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4040: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4050: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
4060: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
4070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4080: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
4090: 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c  TE: Store the pl
40a0: 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61  atform in the na
40b0: 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20  med variable in
40c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
40d0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
40e0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4100: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
4110: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61  r 1 $varName pla 4120: 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 tform.... 4130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4140: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4150: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4160: 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 he PE line from 4170: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 the captured.. 4180: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4190: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 41a0: 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 is value is "PE3 41b0: 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 2" or "PE32+", t 41c0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 41d0: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 41e0: 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 file is 32-bit 41f0: 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 or 64-bit, respe 4200: 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 ctively;.. 4210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 4220: 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 herwise, its typ 4230: 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 e is unknown... 4240: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4250: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 4260: 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 ttern {^PE 4270: 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b : (PE32|PE32\+ 4280: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
4290: 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78        if {[regex
42a0: 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74  p -line -- $patt 42b0: 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 ern$exec dummy
42c0: 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  pe32]} then {..
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
42f0: 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74  HACK: This [swit
4300: 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74  ch] assumes that
4310: 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 62   32-bit executab
4320: 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  les are..
4330: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
4340: 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 68  lways x86 and th
4350: 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 74  at 64-bit execut
4360: 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73  ables are always
4370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4380: 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20  #       x64...
4390: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
43b0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70  tch -exact -- $p 43c0: 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e32 {.. 43d0: 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 PE32 {.. 43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43f0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 set platform Wi 4400: 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n32.. 4410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4420: 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d PE32+ {. 4430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 4440: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4450: 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x64.. 4460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4470: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default 4480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4490: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 44a0: 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 m "".. 44b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 44c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 44d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 44f0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 t platform "".. 4500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 4510: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4520: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4530: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4540: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4550: 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 he ILONLY line f 4560: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 rom the captured 4570: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 4580: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4590: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 this value is ze 45a0: 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 ro, the specifie 45b0: 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 d file must.. 45c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 45d0: 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 e a mixed-mode a 45e0: 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 ssembly; otherwi 45f0: 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 se, it contains 4600: 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only.. 4610: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 4620: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 components... 4630: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4640: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4650: 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 {^ILONLY : (0 4660: 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 |1)\s+$}....
4670: 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65        if {![rege
4680: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74  xp -line -- $pat 4690: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 tern$exec dummy
46a0: 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b   ilOnly]} then {
46b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
46c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
46e0: 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c       if {!$ilOnl 46f0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 4700: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 4710: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 4720: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 4730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 4740: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 4750: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 4760: 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 cannot use [exec 4770: 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f ] or execution o 4780: 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 f CorFlags.. 4790: 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 # failed 47a0: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d , return false.. 47b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 47d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 47e0: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 47f0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4800: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4810: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4820: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4830: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 4840: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 4850: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 4860: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 4870: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 4880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4890: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 48a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 48b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 48c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 48d0: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
48e0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
48f0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
4900: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4910: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4920: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
4930: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
4940: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4950: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
4960: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
4970: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
4980: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4990: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $49a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 49b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 49c0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 49d0: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 49e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 49f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 4a00: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f erwise, on Windo 4a10: 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 ws, always use t 4a20: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 he default file 4a30: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 name.. # 4a40: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 "sqlite3.d 4a50: 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ll"... #. 4a60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4a70: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 4a80: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 4a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4aa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4ab0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 4ac0: 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 both the generi 4ad0: 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d c POSIX file nam 4ae0: 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 e and the.. 4af0: 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f # Mac O 4b00: 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 S X file name, s 4b10: 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 ince we do not c 4b20: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e urrently have an 4b30: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 4b40: 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 way to de 4b50: 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 tect which of th 4b60: 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 ose platforms we 4b70: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e are running on. 4b80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4b90: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 4ba0: 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c t libsqlite3.dyl 4bb0: 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f ib libsqlite3.so 4bc0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 4bd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4be0: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 4bf0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4c00: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4c10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4c20: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4c30: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 4c40: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 4c50: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4c60: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4c70: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4ca0: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 4cb0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 4cc0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 4cd0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
4ce0: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
4cf0: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
4d00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4d10: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4d20: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
4d30: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
4d40: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
4d50: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
4d60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4d70: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
4d80: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
4d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4da0: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 4db0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 4dc0: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4dd0: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4de0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4df0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4e00: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4e10: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4e20: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4e30: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4e40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4e50: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 4e60: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 4e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4e80: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 4e90: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 4ea0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 4eb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4ec0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ed0: 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 , return both th 4ee0: 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 e generic POSIX 4ef0: 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 file name and th 4f00: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 4f10: 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 Mac OS X file 4f20: 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 name, since we 4f30: 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 do not currently 4f40: 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 have an easy.. 4f50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 4f60: 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 ay to detect whi 4f70: 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 ch of those plat 4f80: 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e forms we are run 4f90: 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 ning on... 4fa0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4fb0: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 4fc0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 4fd0: 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 b libSQLite.Inte 4fe0: 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d rop.so].. } 4ff0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 5000: 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 proc getCoreExte 5010: 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e nsionBinaryFileN 5020: 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 ame { {default " 5030: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 5040: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 t fileName [getC 5050: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d oreBinaryFileNam 5060: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5070: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5080: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
5090: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
50a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 50b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 50c0: 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 rn$default..
50d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
50e0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
50f0: 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74   { native direct
5100: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
5110: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5120: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
5130: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
5140: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
5150: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
5160: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
5170: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
5180: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
5190: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
51a0: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
51b0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
51c0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
51d0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
51e0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
51f0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
5200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5210: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
5220: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
5230: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
5240: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5250: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5260: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5270: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5280: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 5290: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 52a0: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 52b0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 52c0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
52d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
52e0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
52f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
5300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5310: 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
5320: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69  tically detect i
5330: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  f the primary as
5340: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
5350: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61        contains a
5360: 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  ny native compon
5370: 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61  ents, if necessa
5380: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5390: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
53a0: 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20  length $native] 53b0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 53c0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 53d0: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
53e0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
53f0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
5400: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5410: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ame..        }..
5420: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
5430: 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64  tive [isMixedMod
5440: 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 5450: 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 ame$varName]..
5460: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5470: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5480: 20 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   If the primary
5490: 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f  assembly also co
54a0: 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76  ntains the nativ
54b0: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20  e components,..
54c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20       #       we
54d0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
54e0: 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20  we need...
54f0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 5500: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 5520: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5540: 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 68 OTE: If the mach 5550: 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 ine name is unav 5560: 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 69 ailable, there i 5570: 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 77 s nothign else w 5580: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5590: 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 can do... 55a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 55b0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c nfo exists ::tcl 55c0: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin 55d0: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 55e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 55f0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5600: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5610: 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 OTE: What is the 5620: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 5630: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5640: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5650: 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 5660: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 5670: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
5680: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75  orm(machine) tru
5690: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
56a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
56b0: 74 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72  t is the platfor
56c0: 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69  m for this machi
56d0: 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne?..      #..
56e0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
56f0: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
5700: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf 5710: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d orm(machine)]... 5720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5730: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 5740: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 5750: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 d file name for 5760: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 5770: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 5780: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 containing t 5790: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 57a0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d QLite native com 57b0: 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 ponents. If thi 57c0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 57d0: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 file exists, we 57e0: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 should have eve 57f0: 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e rything we need. 5800: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5810: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 5820: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f eOnly [getIntero 5830: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 5840: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 5850: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5860: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5870: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
5880: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
5890: 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 58a0: 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ure$fileNameOnl
58b0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
58c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
58d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 58e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 58f0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5900: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5910: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5920: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5930: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5940: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5950: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69     $platform$fi
5960: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a  leNameOnly]]....
5970: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
5980: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 5990: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 59a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 59b0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 59c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 59d0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 59e0: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 59f0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a n$directory \..
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 5a10: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5a20: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5a30: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5a40: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5a60: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
5a70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
5a80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5a90: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
5aa0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
5ab0: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
5ac0: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
5ad0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
5ae0: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
5af0: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
5b00: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
5b10: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
5b20: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
5b30: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
5b40: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
5b50: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
5b60: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
5b70: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5b80: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5b90: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5ba0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5bb0: 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
5bc0: 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61  itecture $fileNa 5bd0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5be0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5bf0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5c00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5c10: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5c20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5c30: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5c40: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5c50: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5c60: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5c70: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
5c80: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 5c90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5ca0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5cb0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5cd0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5cf0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5d00: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5d10: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5d20: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5d30: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5d50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5d60: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5d70: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 5d80: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 5d90: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 5da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5db0: 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 OTE: One or more 5dc0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5dd0: 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 ts needed by Sys 5de0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. 5df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 5e00: 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 re missing... 5e10: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5e20: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 5e30: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5e40: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 eleaseAvailable 5e50: 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 { directory {var 5e60: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 5e70: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 5e80: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
5e90: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5ea0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 5eb0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d arName$varName.
5ec0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5ed0: 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c    return [isBuil
5ee0: 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64  dAvailable "" $d 5ef0: 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d irectory$varNam
5f00: 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  e]..    }.....
5f10: 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64    proc joinBuild
5f20: 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69  Directory { nati
5f30: 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61  ve path year pla
5f40: 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74  tform configurat
5f50: 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
5f60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5f70: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74  Figure out and t
5f80: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66  hen return the f
5f90: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
5fa0: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ath to the build
5fb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5fc0: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20  directory based
5fd0: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d  on all the argum
5fe0: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79  ents provided by
5ff0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
6000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
6010: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b  {$native} then { 6020: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6030: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 [file join$pat
6040: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61  h bin $year$pla
6050: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura 6060: 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 tion].. } e 6070: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 6080: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 6090: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 60a0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
60b0: 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bin]..      }..
60c0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
60d0: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74  c getBuildDirect
60e0: 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c  ory { managedOnl
60f0: 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  y } {..      #..
6100: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
6110: 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65  e if the "native
6120: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
6130: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20   has been set.
6140: 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a  If so, use the..
6150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
6160: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20  rectory for the
6170: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
6180: 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20  bly (a.k.a. the
6190: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a  native interop..
61a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
61b0: 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61  sembly).  To ena
61c0: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ble this option
61d0: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  via the command
61e0: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20  line, enter a..
61f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
6200: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20  mand similar to
6210: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
6220: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65  wing (all on one
6230: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23   line):..      #
6240: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6250: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
6260: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74  initialize -runt
6270: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
6280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6290: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
62a0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
62b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
62c0: 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68      To enable th
62d0: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
62e0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70  e command line p
62f0: 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74  rior to the "bet
6300: 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20  a 16"..      #
6310: 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20       release of
6320: 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Eagle, the follo
6330: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73  wing command mus
6340: 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61  t be used instea
6350: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
6360: 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e   (also all on on
6370: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
6380: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
6390: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
63a0: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73  -initialize -pos
63b0: 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20  tInitialize..
63c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62     #         "ob
63d0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
63e0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
63f0: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69  e AddRuntimeOpti
6400: 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20  on native"..
6410: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
6420: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
6430: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
6440: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
6450: 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64  exists ::build_d
6460: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
6470: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
6480: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 6490: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 d_directory] > 0 64a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 64b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 64c0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 64d0: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 n of the build d 64e0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 64f0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 6500: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 6510: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 6520: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 6530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6540: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 eturn$::build_d
6550: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
6560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
6570: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6580: 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74  OTE: If the "nat
6590: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
65a0: 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20  ion is set, the
65b0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
65c0: 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bly..        #
65d0: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65       is being te
65e0: 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63  sted.  In that c
65f0: 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f  ase, the path to
6600: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
6610: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  tory..        #
6620: 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61        will conta
6630: 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  in the platform
6640: 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65  name and all the
6650: 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
6660: 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
6670: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
6680: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
6690: 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74  directory.  If t
66a0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
66b0: 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ime..        #
66c0: 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e       option is n
66d0: 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c  ot set, the buil
66e0: 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  d directory will
66f0: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74   be considered t
6700: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20  o be..        #
6710: 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d        "platform-
6720: 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74  neutral", with t
6730: 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70  he notable excep
6740: 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69  tion of any nati
6750: 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ve..        #
6760: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e      assembly (e.
6770: 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  g. "SQLite.Inter
6780: 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20  op.dll") copied
6790: 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65  there during the
67a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
67b0: 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20    build process
67c0: 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20  itself.  If the
67d0: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f  build process so
67e0: 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a  mehow does not..
67f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6800: 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20  copy the native
6810: 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69  assembly for thi
6820: 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74  s platform, most
6830: 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20   of the tests..
6840: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
6850: 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c  n the suite will
6860: 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70   simply be skipp
6870: 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73  ed.  Generally s
6880: 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a  peaking, there..
6890: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
68a0: 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20  are two ways to
68b0: 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69  build the binari
68c0: 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  es when preparin
68d0: 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20  g to run the..
68e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
68f0: 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20  st suite:..
6900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6910: 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74        1. Build t
6920: 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61  he separate mana
6930: 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61  ged and native a
6940: 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20  ssemblies using
6950: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
6960: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
6970: 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  s similar to:..
6980: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6990: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
69a0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 69b0: 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e ration}ManagedOn 69c0: 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a ly${Platform}..
69d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69e0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 69f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 onfiguration}Nat 6a00: 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f iveOnly${Platfo
6a10: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
6a20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6a30: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 6a40: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 6a50: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 6a60: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 6a70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6a80: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
6a90: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
6aa0: 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20  r "x64"...
6ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
6ac0: 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68       2. Build th
6ad0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
6ae0: 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f  embly using a co
6af0: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f  mmand similar to
6b00: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
6b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6b20: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e   build.bat ${Con 6b30: 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c figuration}${Pl
6b40: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
6b50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
6b60: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43         Where ${C 6b70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 onfiguration} is 6b80: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 either "Debug" 6b90: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 or "Release" and 6ba0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6bb0: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d${Platform}
6bc0: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33   is either "Win3
6bd0: 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66  2" or "x64".  If
6be0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   this command is
6bf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6c00: 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f       used, vario
6c10: 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65  us tests that re
6c20: 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74  quire supplement
6c30: 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20  ary managed..
6c40: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6c50: 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e  assemblies (e.g.
6c60: 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b   LINQ) may be sk
6c70: 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f  ipped unless tho
6c80: 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20  se binaries..
6c90: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6ca0: 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79  are subsequently
6cb0: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65   copied into the
6cc0: 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f   correct directo
6cd0: 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20  ry (i.e. by..
6ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6cf0: 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e  "test_all.bat").
6d00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6d10: 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74       #       Not
6d20: 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68  e that all of th
6d30: 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73  e build commands
6d40: 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61   above will defa
6d50: 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20  ult to using..
6d60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
6d70: 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e  e latest version
6d80: 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69   of MSBuild avai
6d90: 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74  lable and the "t
6da0: 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20  est_year" may..
6db0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
6dc0: 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74  eed to be adjust
6dd0: 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74  ed accordingly t
6de0: 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74  o actually run t
6df0: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
6e00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6e10: 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d  Refer to the com
6e20: 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69  ments in [getBui
6e30: 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65  ldYear] for more
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d   information on.
6e50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6e60: 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73   how to set this
6e70: 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20   variable...
6e80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
6e90: 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20  et native [expr
6ea0: 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26  {!$managedOnly & 6eb0: 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 & [hasRuntimeOpt 6ec0: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d ion native]}]... 6ed0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6ee0: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 [joinBuildDirect 6ef0: 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 ory$native [get
6f00: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
6f10: 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ry] \..
6f20: 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72     [getBuildYear
6f30: 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  ] [getBuildPlatf
6f40: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65  orm $native] [ge 6f50: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 6f60: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ion]].. }.. 6f70: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6f80: 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 oc getReleaseVer 6f90: 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 sion {} {.. 6fa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6fb0: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the 6fc0: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 6fd0: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 for use with th 6fe0: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 6ff0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 7000: 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 when checking f 7010: 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c or available rel 7020: 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d eases... #. 7030: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7040: 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 exists ::releas 7050: 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d e_version] && \. 7060: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7070: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c ng length$::rel
7080: 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20  ease_version] >
7090: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
70a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
70b0: 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73  NOTE: The releas
70c0: 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65  e version has be
70d0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74  en overridden; t
70e0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
70f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
7100: 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20    verbatim...
7110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7120: 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73  return $::releas 7130: 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 e_version.. 7140: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 7150: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 7160: 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 NOTE: No release 7170: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 version is avai 7180: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e lable, return an 7190: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 71a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 71b0: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 It is important 71c0: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 to return an emp 71d0: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 ty string here b 71e0: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 ecause the.. 71f0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 7200: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 lt of this proce 7210: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 dure may be used 7220: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e with [file join 7230: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 ]... #.. 7240: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 return "" 7250: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 7260: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 7270: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b tBuildFileName { 7280: 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 fileName manage 7290: 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 dOnly {platform 72a0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 72b0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 72c0: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 Returns the spec 72d0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 72e0: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f as if it were lo 72f0: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 cated in the.. 7300: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 7310: 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 d directory, dis 7320: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 7330: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 7340: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 7350: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 7360: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 7370: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 7380: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 7390: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 73a0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 73b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f 73c0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 ile join [getBui 73d0: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6d 61 6e ldDirectory$man
73e0: 61 67 65 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66  agedOnly] $platf 73f0: 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 7400: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
7410: 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  eName]]]....
7420: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43    #..      # HAC
7430: 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20  K: When running
7440: 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65  on WoW64, assume
7450: 20 74 68 65 20 74 65 73 74 20 65 78 65 63 75 74   the test execut
7460: 61 62 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e  ables are presen
7470: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7480: 20 77 69 74 68 20 74 68 65 20 22 33 32 22 20 73   with the "32" s
7490: 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a  uffix on them...
74a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
74b0: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57  f {[isRunningWoW
74c0: 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74  64] && [file ext
74d0: 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20  ension $result] 74e0: 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 eq ".exe"} then 74f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 {.. set r 7500: 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 esult [appendArg 7510: 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 s [file rootname 7520: 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65$result] 32.exe
7530: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
7540: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 7550: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 lt.. }..... 7560: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7570: 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b alDirectory {} { 7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7590: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 75a0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 ocedure returns 75b0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 the directory wh 75c0: 65 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c ere the external 75d0: 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 binary.. # 75e0: 20 20 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 files are 75f0: 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 located... 7600: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7610: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7620: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 7630: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 [file dirname [i 7640: 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a nfo binary]]]].. 7650: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7660: 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 oc getBinaryDire 7670: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 7680: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7690: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 76a0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 76b0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 76c0: 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 e test applicati 76d0: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 76e0: 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 itself (i.e. t 76f0: 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 he Eagle shell) 7700: 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 is located. Thi 7710: 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 s will be used a 7720: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 7730: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e the destination 7740: 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 for the copied 7750: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 7760: 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 te native and.. 7770: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e # man 7780: 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 aged assemblies 7790: 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 (i.e. because th 77a0: 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 is is one of the 77b0: 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 few places.. 77c0: 20 20 20 23 20 20 20 20 20 20 20 77 68 65 72 65 # where 77d0: 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 the CLR will ac 77e0: 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 tually find and 77f0: 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 load them proper 7800: 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ly)... #.. 7810: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 7820: 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 xists ::binary_d 7830: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 7840: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 7850: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 g length$::bina
7860: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
7870: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
7880: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
7890: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
78a0: 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79  on of the binary
78b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
78c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
78d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
78e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
78f0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
7900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7910: 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72   return $::binar 7920: 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 y_directory.. 7930: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7940: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 return [inf 7950: 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 o binary].. 7960: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 7970: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7980: 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c alFileName { fil 7990: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 eName } {.. 79a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 79b0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 79c0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 79d0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 79e0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 79f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 7a00: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 rectory containi 7a10: 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 ng the external 7a20: 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 binaries... 7a30: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7a40: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7a50: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 7a60: 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f tExternalDirecto 7a70: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ry]$fileName]].
7a80: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7a90: 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c  roc getBinaryFil
7aa0: 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65  eName { fileName
7ab0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d   {platform ""} }
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
7ad0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
7ae0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ns the specified
7af0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66   file name as if
7b00: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64   it were located
7b10: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
7b20: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
7b30: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
7b40: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
7b50: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
7b60: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
7b70: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
7b80: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
7b90: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
7ba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7bb0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
7bc0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
7bd0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
7be0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
7bf0: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 7c00: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
7c10: 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  Name]]]..    }..
7c20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
7c30: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  oreBinaryFileNam
7c40: 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  e { {platform ""
7c50: 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22 7d 20  } {standard ""}
7c60: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
7c70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
7c80: 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61 74  rns the full pat
7c90: 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 63  h for the file c
7ca0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
7cb0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
7cc0: 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20   #       native
7cd0: 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f 72  library code for
7ce0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20   this platform.
7cf0: 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61 6e   First, check an
7d00: 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20 20  d see if..
7d10: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
7d20: 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c  te core native l
7d30: 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
7d40: 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20  dy been loaded.
7d50: 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20   Next,..      #
7d60: 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20 74        fallback t
7d70: 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c 20  o what the full
7d80: 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c 20  path should be,
7d90: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72  based on whether
7da0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
7db0: 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61      mixed-mode a
7dc0: 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e 67  ssembly is being
7dd0: 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e 61   used and the na
7de0: 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  me of the curren
7df0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7e00: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20   platform...
7e10: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
7e20: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
7e30: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
7e40: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
7e50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7e60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7e70: 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
7e80: 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65 4e 61  ethods _SQLiteNa
7e90: 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61  tiveModuleFileNa
7ea0: 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69 6c 65  me..      } file
7eb0: 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5b 73  Name] == 0 && [s
7ec0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi 7ed0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 7ee0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 7ef0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 7f00: 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 The SQLite core 7f10: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 native library h 7f20: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 as already been 7f30: 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 loaded via.. 7f40: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 7f50: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 native library p 7f60: 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 re-loader. Retu 7f70: 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d rn that file nam 7f80: 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 7f90: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 7fa0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
7fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
7fc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
7fd0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
7fe0: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61  untime option ha
7ff0: 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c 77 61  s been set, alwa
8000: 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20  ys return the..
8010: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
8020: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6d  e name for the m
8030: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
8040: 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ly...      #..
8050: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
8060: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
8070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8080: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8090: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
80a0: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
80b0: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  mbly file name..
80c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
80d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
80e0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
80f0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
8100: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
8110: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 8120: 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 form System.Data 8130: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 .SQLite.dll]].. 8140: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 8150: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8160: 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 74 69 Are we attempti 8170: 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 ng to automatica 8180: 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 74 68 lly detect wheth 8190: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 er or not the.. 81a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 # int 81b0: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 73 68 erop assembly sh 81c0: 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d 0a 20 ould be used?.. 81d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 81e0: 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 78 70 t automatic [exp 81f0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt 8200: 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d 3d 20 h$standard] ==
8210: 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  0}]....      #..
8220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
8230: 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72 20 22  rst, in either "
8240: 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20 22 6e  automatic" or "n
8250: 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d 6f 64  on-standard" mod
8260: 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20 20 20  es, attempt..
8270: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 66 69     #       to fi
8280: 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e  nd the native-on
8290: 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  ly interop assem
82a0: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  bly...      #..
82b0: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 82c0: 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 61 72 tic || !$standar
82d0: 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  d} then {..
82e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
82f0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
8300: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
8310: 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72  ative-only inter
8320: 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  op assembly file
8330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8340: 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20    name for this
8350: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
8360: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
8370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8380: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
8390: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f  eOnly [getIntero
83a0: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d  pAssemblyFileNam
83b0: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20  esOnly] {..
83c0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
83d0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
83e0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
83f0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
8400: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
8410: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66  ry] $platform$f
8420: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
8430: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
8440: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 8450: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 8460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 8470: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
8480: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
84a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
84b0: 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20 69 6e  # NOTE: Then, in
84c0: 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74   either "automat
84d0: 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61 72 64  ic" or "standard
84e0: 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74  " modes, attempt
84f0: 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
8500: 20 20 20 66 69 6e 64 20 74 68 65 20 73 74 61 6e     find the stan
8510: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
8520: 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ary...      #..
8530: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 8540: 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 72 64 tic ||$standard
8550: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8560: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
8570: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
8580: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61  determine the na
8590: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
85a0: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
85b0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
85c0: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
85d0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 20 61   this platform a
85e0: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 69  nd then return i
85f0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
8600: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
8610: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
8620: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
8630: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20  eNamesOnly] {..
8640: 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c           set fil
8650: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
8660: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
8670: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
8680: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
8690: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 86a0: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d m$fileNameOnly]
86b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
86c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
86d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 86e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 86f0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
8710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
8720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8730: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61 73 20      # NOTE: Was
8740: 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
8750: 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 65 78  mbly compiled ex
8760: 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61 6c 20  pecting to deal
8770: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20  with the..
8780: 23 20 20 20 20 20 20 20 73 74 61 6e 64 61 72 64  #       standard
8790: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f 0d 0a   core library?..
87a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
87b0: 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65  f {[haveSQLiteDe
87c0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53 51 4c  fineConstant SQL
87d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d 20 74  ITE_STANDARD]} t
87e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
87f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
8800: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65  : Fallback to re
8810: 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 69  turning the nati
8820: 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64  ve-only standard
8830: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d   SQLite library.
8840: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
8850: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
8860: 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  he platform...
8870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8880: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e   set fileNamesOn
8890: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  ly [getNativeLib
88a0: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
88b0: 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  y]....        if
88c0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65   {[llength $file 88d0: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d NamesOnly] == 0} 88e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 88f0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 8900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8910: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 8920: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 8930: 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 8940: 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 [getBinaryD 8950: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
8960: 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c  orm [lindex $fil 8970: 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d eNamesOnly 0]]]. 8980: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8990: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 89a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c # NOTE: Fall 89b0: 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e back to returnin 89c0: 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c g the native-onl 89d0: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 89e0: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 ly file.. 89f0: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 66 6f # name fo 8a00: 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d r the platform.. 8a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8a20: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 8a30: 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f sOnly [getIntero 8a40: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 8a50: 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 esOnly].... 8a60: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 8a70: 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20$fileNamesOnly]
8a80: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
8aa0: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
8ab0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
8ac0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
8ad0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
8ae0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
8af0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $8b00: 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 platform [lindex 8b10: 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20$fileNamesOnly
8b20: 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  0]]]..      }..
8b30: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8b40: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
8b50: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
8b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8b70: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
8b80: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
8b90: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
8ba0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
8bb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
8bc0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
8bd0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
8be0: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
8bf0: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
8c00: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
8c10: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
8c20: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
8c30: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
8c40: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
8c50: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
8c60: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 8c70: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 8c80: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 8c90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 8cb0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 8cc0: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 8cd0: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 8ce0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 8cf0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 8d00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
8d20: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
8d30: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
8d40: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
8d50: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
8d60: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
8d70: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
8d80: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 8d90: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 8da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 8db0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 8dc0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 8dd0: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 8de0: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 8df0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 8e00: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 8e10: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 8e20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 8e30: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
8e40: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
8e50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
8e60: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
8e70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
8e80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
8e90: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 8ea0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 8eb0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 8ec0: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
8ed0: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
8ee0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8ef0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
8f00: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
8f10: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
8f20: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
8f30: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
8f40: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
8f50: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
8f60: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
8f70: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
8f80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
8f90: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
8fa0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
8fb0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 8fd0: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 8fe0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 8ff0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9000: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 9010: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 9020: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 9030: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 9040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9050: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 9060: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 9070: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9080: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 9090: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 90a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 90b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 90c0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 90d0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 90e0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 90f0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 9100: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 9110: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 9120: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 9130: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 9140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 9150: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 9160: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 9170: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 9180: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 9190: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 91a0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 91b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 91c0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
91d0: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
91e0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
91f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9200: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9210: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
9220: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
9230: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9240: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9250: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9260: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9270: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9280: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 9290: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 92a0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 92b0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 92c0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 92d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 92e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
92f0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
9300: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9310: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9320: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
9330: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
9340: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
9350: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9360: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9370: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9380: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9390: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
93a0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 93b0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 93c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 93d0: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 93e0: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 93f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9400: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 9410: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 9420: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 9430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 9440: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 9450: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 9460: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 9470: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 9480: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 9490: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 94a0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 94b0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 94c0: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 94d0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 94e0: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 94f0: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 9500: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9510: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9520: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 9530: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 9540: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 9550: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
9560: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
9570: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9580: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9590: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
95a0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
95b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
95c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
95d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
95e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
95f0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
9600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $9610: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9620: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 9630: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 9640: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 9650: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 9660: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 9670: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
9680: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
9690: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
96a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
96b0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
96c0: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
96d0: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
96e0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
96f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9700: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
9710: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
9720: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
9730: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 9740: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 9750: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 9760: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 9770: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 9780: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9790: 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f proc getExecuteO 97a0: 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 nSetup {} {.. 97b0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 97c0: 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e sts ::execute_on 97d0: 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 _setup] && \.. 97e0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 97f0: 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 length$::execut
9800: 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d  e_on_setup] > 0}
9810: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9820: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9830: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63  TE: Return the c
9840: 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f  onfigured SQL to
9850: 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20   execute during
9860: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
9870: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9880: 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20  setup procedure
9890: 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20  (i.e. for every
98a0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  test database co
98b0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
98c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
98d0: 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65  eturn $::execute 98e0: 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 _on_setup.. 98f0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9910: 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 NOTE: By default 9920: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 , there is no SQ 9930: 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 L to execute dur 9940: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti 9950: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 on.. # 9960: 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 setup proced 9970: 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 ure (i.e. for ev 9980: 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 ery test databas 9990: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a e connection)... 99a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 99b0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 99c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 99d0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 74 72 . proc getStr 99e0: 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 ingMapForTclEsca 99f0: 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 pe {} {.. r 9a00: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c 20 5c eturn [list \\ \ 9a10: 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c \\\ $\\\[$ \ 9a20: 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a 20 20 \\] \$ \\\$].. 9a30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9a40: 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 getTestOverride 9a50: 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 sPreamble { {ext 9a60: 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d raVarNames ""} } 9a70: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 {.. set va 9a80: 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d rNames [list]... 9a90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9aa0: 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c # NOTE: If avail 9ab0: 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 able, start with 9ac0: 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 the master list 9ad0: 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 of test overrid 9ae0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9af0: 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 variables... 9b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9b10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9b20: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 est_overrides] & 9b30: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 9b40: 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f llength$::test_
9b50: 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20  overrides] > 0}
9b60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9b70: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
9b80: 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76  Names $::test_ov 9b90: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d errides.. } 9ba0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9bb0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 # NOTE: If re 9bc0: 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 quested by our c 9bd0: 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 aller, add any a 9be0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 dditional variab 9bf0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 le.. # 9c00: 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 names to copy 9c10: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 now... #.. 9c20: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 9c30: 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 h$extraVarNames
9c40: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9c50: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
9c60: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78  end varNames $ex 9c70: 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 traVarNames.. 9c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 9c90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 9ca0: 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 uild the script 9cb0: 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 fragment to be r 9cc0: 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 eturned by proce 9cd0: 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 ssing each.. 9ce0: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 9cf0: 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 le name and addi 9d00: 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 ng the nececessa 9d10: 72 79 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 ry script fragme 9d20: 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 nts for.. # 9d30: 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e each one. 9d40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9d50: 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a set result "".. 9d60: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 9d70: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 varName$varName
9d80: 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  s {..        #..
9d90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9da0: 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66  Build the qualif
9db0: 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ied global varia
9dc0: 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ble name...
9dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
9de0: 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61  t fullVarName [a
9df0: 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61  ppendArgs :: $va 9e00: 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 rName].... 9e10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9e20: 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 OTE: Does the va 9e30: 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 riable exist in 9e40: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 this interpreter 9e50: 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 context?.. 9e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 9e70: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 {[info exists$
9e80: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68  fullVarName]} th
9e90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9ea0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
9eb0: 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63  OTE: Append a sc
9ec0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f  ript fragment to
9ed0: 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 61 74   the result that
9ee0: 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d   will correctly.
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
9f00: 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74     copy any cont
9f10: 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61  ained value to a
9f20: 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74  nother interpret
9f30: 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20  er context...
9f40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9f50: 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c      append resul
9f60: 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c  t \n "set " $ful 9f70: 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b lVarName " \{" [ 9f80: 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a 20 20 string map \.. 9f90: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 9fa0: 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 StringMapForTclE 9fb0: 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 75 6c scape] [set$ful
9fc0: 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d 0a 20  lVarName]] \}..
9fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9ff0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
a000: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
a010: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  ns one or more s
a020: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c  cript fragments,
a030: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20   append a..
a040: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65   #       newline
a050: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
a060: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
a070: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20  ngth $result] > a080: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a090: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result a0a0: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n.. }.... a0b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
a0c0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
a0d0: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73      proc moveSys
a0e0: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
a0f0: 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72  Config { {restor
a100: 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73  e false} {verbos
a110: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
a120: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
a130: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
a140: 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  tory]....      i
a150: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
a160: 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d  h $directory] == a170: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. a180: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a190: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a1a0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a1b0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a1c0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a1d0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski a1e0: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 79 pped moving \"Sy a1f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a200: 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 .dll.config\", " a210: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a220: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 "no binary dir a230: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 ectory\n"].. a240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... a250: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } a260: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 .... set fi a270: 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 leName(1) [file a280: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 normalize \.. a290: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi a2a0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 n$directory Sys
a2b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a2c0: 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a  dll.config]]....
a2d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
a2e0: 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67  me(2) [appendArg
a2f0: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e  s $fileName(1) . a300: 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 moved].... a310: 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 if {$restore} th
a320: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
a330: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a340: 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 fileName(2)]} th a350: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a360: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a370: 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61  eName(2) $fileNa a380: 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(1).... a390: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a3a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a3b0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a3c0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a3d0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a3e0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a3f0: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a400: 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22  ame(2) "\" to \"
a410: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a420: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31       $fileName(1 a430: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a440: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a450: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a460: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a470: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a480: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a490: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a4a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a4b0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a4c0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a4d0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c "$fileName(2) \
a4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a4f0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a500: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a510: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
a530: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  se {..        if
a540: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a550: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 fileName(1)]} th a560: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a570: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a580: 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61  eName(1) $fileNa a590: 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(2).... a5a0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a5b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a5c0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a5d0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a5e0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a5f0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a600: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a610: 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22  ame(1) "\" to \"
a620: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a630: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32       $fileName(2 a640: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a650: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a660: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a670: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a680: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a690: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a6a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a6b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a6c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a6d0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a6e0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c "$fileName(1) \
a6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a700: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a710: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a730: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
a740: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a750: 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72  c getAppDomainPr
a760: 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78  eamble { {prefix
a770: 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d   ""} {suffix ""}
a780: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
a790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
a7a0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
a7b0: 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70  rns a test setup
a7c0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a7d0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20   suitable for..
a7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61       #       eva
a7f0: 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e  luation by an in
a800: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
a810: 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64  d in an isolated
a820: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20   application..
a830: 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61      #       doma
a840: 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20  in.  The script
a850: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
a860: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a870: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20  surrounded by..
a880: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a890: 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66   prefix and suff
a8a0: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d  ix "script fragm
a8b0: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20  ents" specified
a8c0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a  by our caller,..
a8d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66        #       if
a8e0: 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72   any.  The entir
a8f0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72  e script being r
a900: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a910: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d  substituted via.
a920: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
a930: 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63  subst], in the c
a940: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
a950: 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69  ller, before bei
a960: 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  ng returned...
a970: 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73      #       This
a980: 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61   step is necessa
a990: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20  ry so that some
a9a0: 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20  limited context
a9b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20  information,..
a9c0: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d      #       prim
a9d0: 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f  arily related to
a9e0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
a9f0: 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65  ectories, can be
aa00: 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20   transferred..
aa10: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74      #       to t
aa20: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  he interpreter i
aa30: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61  n the isolated a
aa40: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
aa50: 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20  n, making it..
aa60: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65      #       able
aa70: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79   to successfully
aa80: 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20   run tests that
aa90: 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d  require one or m
aaa0: 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ore of the..
aab0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20    #       files
aac0: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65  in one of the te
aad0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
aae0: 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75  s.  Callers shou
aaf0: 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20  ld keep in..
ab00: 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74    #       mind t
ab10: 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72  hat the test scr
ab20: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69  ipt fragment bei
ab30: 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e  ng returned cann
ab40: 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20  ot rely on..
ab50: 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63    #       any sc
ab60: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f  ript library pro
ab70: 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65  cedures that are
ab80: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79   not provided by
ab90: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
aba0: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72    #       librar
abb0: 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20  y package (i.e.
abc0: 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69  "init.eagle"), i
abd0: 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70  ncluding those p
abe0: 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20  rovided by..
abf0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61    #       the Ea
ac00: 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  gle test package
ac10: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c  , unless the fil
ac20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ac30: 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  m is loaded..
ac40: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61     #       manua
ac50: 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68  lly via some oth
ac60: 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e  er mechanism (e.
ac70: 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20  g. by including
ac80: 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20  appropriate..
ac90: 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b     #       [pack
aca0: 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20  age require] or
acb0: 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64  [source] command
acc0: 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20  s in the prefix
acd0: 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20  or suffix..
ace0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
acf0: 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73  fragments).  Als
ad00: 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20  o, all variable
ad10: 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61  references and a
ad20: 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20  ll nested..
ad30: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
ad40: 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e  s (i.e. those in
ad50: 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
ad60: 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  ) contained in t
ad70: 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20  he final..
ad80: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66  #       script f
ad90: 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64  ragment will end
ada0: 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61   up being evalua
adb0: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  ted in the conte
adc0: 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  xt of the..
add0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67   #       calling
ade0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64   interpreter and
adf0: 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20   not the target
ae00: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
ae10: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
ae20: 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74    #       isolat
ae30: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ed application d
ae40: 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65  omain unless the
ae50: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e   dollar signs an
ae60: 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20  d/or square..
ae70: 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b     #       brack
ae80: 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c  ets are speciall
ae90: 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61  y quoted with ba
aea0: 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20  ckslashes...
aeb0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
aec0: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69  n [uplevel 1 [li
aed0: 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64  st subst [append
aee0: 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a  Args $prefix {.. aef0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. af00: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c # NOTE: The \ af10: 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e [object\] comman af20: 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 d may be missing af30: 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 in some Eagle c af40: 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ore.. # af50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e library con af60: 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c figurations. Cl af70: 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 oning and using af80: 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 the procedure.. af90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c # \ afa0: 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e [changeNativeRun afb0: 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 timeOption\] may afc0: 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 help to mitigat afd0: 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 e this... afe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 #.. proc aff0: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun b000: 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 timeOption \.. b010: 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f {[info b020: 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 args changeNati b030: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d veRuntimeOption] b040: 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. b050: 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 {[info body cha b060: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime b070: 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 Option]}.... b080: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. b090: 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 changeNat b0a0: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption b0b0: 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 [hasRuntimeOpti b0c0: 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 on native].. b0d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b }.. } [ b0e0: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 getTestOverrides b0f0: 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 Preamble [list p b100: 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c ath test_channel b110: 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 ]]$suffix]]]..
b120: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
b130: 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61  c tryCopyExterna
b140: 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  lFile {..
b150: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
b160: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77  latform ""} {new
b170: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65  FileName ""} {ve
b180: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d  rbose true} } {.
b190: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
b1a0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78  eFileName [getEx
b1b0: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24  ternalFileName $b1c0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... b1d0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex b1e0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
b1f0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
b200: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb b210: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b220: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
b230: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
b240: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
b250: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b260: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
b270: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22  external file \"
b280: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam b290: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. b2a0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does b2b0: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. b2c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b2d0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b2e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b2f0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b300: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b310: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b320: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b330: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
b340: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil b350: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
b360: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b370: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
b380: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
b390: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
b3a0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
b3b0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  orm]..      }...
b3c0: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65  .      set targe
b3d0: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  tDirectory [file
b3e0: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74   dirname $target b3f0: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... b400: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. b410: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 . if {![f b420: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
b430: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
b440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b450: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67  file mkdir $targ b460: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 etDirectory.. b470: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b480: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for b490: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
b4a0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa b4b0: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 me.. }] == b4c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. b4d0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
b4e0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
b4f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
b500: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
b510: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66   external file f
b520: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46  rom \"" $sourceF b530: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c ileName "\" to \ b540: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. b550: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d$targetFileNam
b560: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
b570: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
b580: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c b590: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b5a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b5b0: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t b5c0: 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 o copy external b5d0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$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 22 5c 22  .            "\"
b600: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF b610: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. b620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b630: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo b640: 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a pyBinaryFile {.. b650: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file b660: 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 Name managedOnly b670: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { b680: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d newFileName ""}. b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 . {ve b6a0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. b6b0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 . set sourc b6c0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 eFileName [getBi b6d0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
b6e0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform b6f0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! b700: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f [file exists$so
b710: 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  urceFileName]} t
b720: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
b730: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the b740: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t b750: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b760: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b770: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b780: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
b790: 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66  copying binary f
b7a0: 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46  ile \"" $sourceF b7b0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. b7c0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it b7d0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ b7e0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. b7f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return b800: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... b810: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b820: 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 ength$newFileNa
b830: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
b840: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
b850: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
b860: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d  BuildFileName \.
b870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65  .            $ne b880: 77 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 wFileName$manag
b890: 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d  edOnly $platform b8a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else b8b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t b8c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g b8d0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName b8e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
b8f0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage b900: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d dOnly$platform]
b910: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b920: 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72     set targetDir
b930: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
b940: 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65  name $targetFile b950: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i b960: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. b970: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b980: 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 exists$targetDi
b990: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
b9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
b9b0: 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69   mkdir $targetDi b9c0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 rectory.. b9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 }.... fi b9e0: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
b9f0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $ba00: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. ba10: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t ba20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t ba30: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
ba40: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ba50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ba60: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e  "---- copied bin
ba70: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ary file from \"
ba80: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam ba90: 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a e "\" to \"" \.. baa0: 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72$tar
bab0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
bac0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
bad0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bae0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel baf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bb00: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bb10: 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 - failed to copy bb20: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f binary file fro bb30: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
bb40: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
bb50: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20       "\" to \""
bb60: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName bb70: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a \"\n].. }.. bb80: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr bb90: 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 oc tryCopyBuildF bba0: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. bbb0: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana bbc0: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor bbd0: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa bbe0: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. bbf0: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru bc00: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se bc10: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName bc20: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa bc30: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 me$fileName $ma bc40: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
bc50: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
bc60: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
bc70: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d  $sourceFileName] bc80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bc90: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
bca0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bcb0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ bcc0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA bcd0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. bce0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp bcf0: 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 ed copying build bd00: 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 file \""$sourc
bd10: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
bd20: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
bd30: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
bd40: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t\n"]..        }
bd50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
bd60: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
bd70: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
bd80: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65   length $newFile bd90: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then bda0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t bdb0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g bdc0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName bdd0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70$newFileName $p bde0: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. bdf0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. be00: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile be10: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF be20: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
be30: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20  e $platform].. be40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s be50: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f et targetDirecto be60: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 ry [file dirname be70: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
be80: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
be90: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
bea0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
beb0: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ts $targetDirect bec0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. bed0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 file mkd bee0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ir$targetDirect
bef0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ory..        }..
bf00: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
bf10: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour bf20: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
bf30: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
bf40: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
bf50: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bf60: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel bf70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bf80: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bf90: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f bfa0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
bfb0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
bfc0: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
bfd0: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi bfe0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. bff0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. c000: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c010: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c020: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c030: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
c040: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
c050: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
c060: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName c070: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " c080: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
c090: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
c0a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
c0b0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
c0c0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
c0d0: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61   { fileName {pla
c0e0: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f  tform ""} {verbo
c0f0: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
c100: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
c110: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
c120: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ame $fileName$p
c130: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20  latform]....
c140: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
c150: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} c160: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c170: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
c180: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
c190: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch c1a0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c1b0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. c1c0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c1d0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 deleting binary c1e0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
c1f0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
c200: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
c210: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
c220: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
c230: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
c240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
c250: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
c260: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName c270: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. c280: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
c290: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
c2a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
c2b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
c2c0: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66  deleted binary f
c2d0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam c2e0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } c2f0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c300: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
c310: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
c320: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c330: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
c340: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20  o delete binary
c350: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa c360: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. c370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... c380: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 proc tryDeleteB c390: 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 uildFile {.. c3a0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c3b0: 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c managedOnly {pl c3c0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb c3d0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. c3e0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam c3f0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN c400: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d ame$fileName $m c410: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 anagedOnly$plat
c420: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
c430: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
c440: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the c450: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if c460: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
c480: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c490: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c4b0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 "---- skipped de c4c0: 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c leting build fil c4d0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
c4e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
c4f0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
c500: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
c510: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
c520: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
c530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
c540: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
c550: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d  te $fileName}] = c560: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. c570: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c580: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c590: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c5a0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65        "---- dele
c5b0: 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ted build file \
c5c0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c5d0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else c5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput c5f0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
c600: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
c610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
c620: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  -- failed to del
c630: 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ete build file \
c640: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c650: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. c660: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c670: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly c680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f c690: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO c6a0: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" c6b0: 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 } {pdb true} {ve c6c0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. c6d0: 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 . tryCopyBu c6e0: 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d ildFile$fileNam
c6f0: 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24  e $managedOnly$
c700: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72  platform "" $ver c710: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if c720: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
c730: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42          tryCopyB
c740: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64  uildFile [append
c750: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c760: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c770: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c780: 64 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 db]$managedOnly
c790: 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76   $platform ""$v
c7a0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d  erbose..      }.
c7b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c7c0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73  roc tryDeleteAss
c7d0: 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  embly {..
c7e0: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
c7f0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62  latform ""} {pdb
c800: 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20   true} {verbose
c810: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c820: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
c830: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
c840: 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73  platform $verbos c850: 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 e.... if {$
c860: 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  pdb} then {..
c870: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
c880: 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64  naryFile [append
c890: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c8a0: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c8b0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c8c0: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 db]$platform $v c8d0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d erbose.. }. c8e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p c8f0: 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d roc tryLoadAssem c900: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b bly { fileName { c910: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b platform ""} } { c920: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file c930: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF c940: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
c950: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a  e $platform].... c960: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch c970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set c980: 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 assembly [object c990: 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 load -loadtype c9a0: 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c File -alias$fil
c9b0: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d  eName]..      }]
c9c0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
c9d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c9e0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61    # NOTE: Now, a
c9f0: 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
ca00: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
ca10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
ca20: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
ca30: 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  int [file rootna
ca40: 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  me [file tail $f ca50: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 ileName]].... ca60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ca70: 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the ca80: 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 image runtime v ca90: 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 ersion from the caa0: 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 assembly because cab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # cac0: 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 several tests cad0: 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e rely on it havin cae0: 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 g a certain valu caf0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. cb00: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr cb10: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs cb20: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
cb30: 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20  eName] _ \..
cb40: 20 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62          [$assemb cb50: 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 ly ImageRuntimeV cb60: 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 ersion]].... cb70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # cb80: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th cb90: 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 e full path of t cba0: 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d he loaded file.. cbb0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. cbc0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
cbd0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
cbe0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
cbf0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
cc00: 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61  proc isSQLiteRea
cc10: 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  dy {} {..      #
cc20: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
cc30: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  This procedure m
cc40: 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a  ust return non-z
cc50: 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  ero only if the
cc60: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20  SQLite native..
cc70: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62       #       lib
cc80: 72 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73  rary and the Sys
cc90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
cca0: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
ccb0: 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20   are loaded..
ccc0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
ccd0: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
cce0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20  the test suite.
ccf0: 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73   Currently, this
cd00: 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20   procedure..
cd10: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
cd20: 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20   be called only
cd30: 61 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f  after the [tryLo
cd40: 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63  adAssembly] proc
cd50: 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20  edure has..
cd60: 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61   #       been ca
cd70: 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f  lled to probe fo
cd80: 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  r the System.Dat
cd90: 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64  a.SQLite managed
cda0: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
cdb0: 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65   #       and the
cdc0: 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65   [checkForSQLite
cdd0: 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20  ] procedure has
cde0: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
cdf0: 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20  robe for..
ce00: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
ce10: 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  te native librar
ce20: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68  y; otherwise, th
ce30: 69 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c  is procedure wil
ce40: 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20  l simply..
ce50: 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72  #       always r
ce60: 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...
ce70: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
ce80: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20  rn [expr {..
ce90: 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61      [haveConstra
cea0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
ceb0: 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65  SQLite] && [have
cec0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
ced0: 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20  e]..      }]..
cee0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
cef0: 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b   matchPlatform {
cf00: 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20   platform } {..
cf10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
cf20: 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73  NOTE: An empty s
cf30: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c  tring for the pl
cf40: 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61  atform means tha
cf50: 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e  t the build is n
cf60: 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ot..      #
cf70: 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20    [primarily] a
cf80: 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68  native build; th
cf90: 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61  erefore, it alwa
cfa0: 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20  ys matches...
cfb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
cfc0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $cfd0: 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 platform] == 0} cfe0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cff0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. d000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d010: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I d020: 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 f the machine na d030: 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c me is unavailabl d040: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 e, there is noth d050: 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 ign else we.. d060: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 # can d d070: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. d080: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex d090: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf d0a0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t d0b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r d0c0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. d0d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d0e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 . # NOTE: D d0f0: 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 oes the specifie d100: 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 d platform match d110: 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 up to the curre d120: 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 nt process?.. d130: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { d140: 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61$platform eq [ma
d150: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
d160: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( d170: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 machine)]} then d180: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur d190: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. d1a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d1b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 # NOTE: The sp d1c0: 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d ecified platform d1d0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 does not match d1e0: 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 up with the plat d1f0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 form.. # d200: 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 for the curr d210: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ent process... d220: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret d230: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d urn false.. } d240: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 ..... proc ha d250: 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo d260: 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 mmand {} {.. d270: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d280: 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 E: Is the [objec d290: 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 t] command curre d2a0: 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d ntly available?. d2b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d2c0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c return [expr {[l d2d0: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d length [info com d2e0: 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e mands object]] > d2f0: 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 0}].. }..... d300: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo d310: 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d rSQLiteObjectCom d320: 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d mand { channel } d330: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs d340: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
d350: 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62  hecking for \"ob
d360: 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75  ject\" command u
d370: 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  sage... "....
d380: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
d390: 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
d3a0: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20  ObjectCommand)]
d3b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
d3c0: 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
d3d0: 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
d3e0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
d3f0: 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n. d400: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. d410: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d420: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 # NOTE: Unle d430: 73 73 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 ss we are forbid d440: 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 den from doing s d450: 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 o, add some cons d460: 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 traints.. d470: 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 # that wi d480: 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 ll allow most of d490: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite d4a0: 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f to run (i.e. tho d4b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 se.. # d4c0: 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 64 tests that d d4d0: 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 o not directly r d4e0: 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 ely upon the [ob d4f0: 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d ject] command).. d500: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d510: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e d520: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 xists ::no(shimS d530: 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e QLiteAssemblyCon d540: 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e straints)]} then d550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 {.. ad d560: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d570: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 te.. ad d580: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d590: 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 teInterop.. d5a0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d5b0: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S d5c0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 QLite.. d5d0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S d5e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit d5f0: 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 e.Encryption.. d600: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d610: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat d620: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d a.SQLite.Linq... d630: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo d640: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append d650: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d660: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat d670: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b a.SQLite.dll_v [ d680: 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 getBuildClrVersi d690: 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d on]].. }. d6a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! d6b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n d6c0: 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 o(shimSQLiteDefi d6d0: 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 neConstantConstr d6e0: 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. d6f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea d700: 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e ch defineConstan d710: 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 t [list \.. d720: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP d730: 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT d740: 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 IONS INTEROP_FTS d750: 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 5_EXTENSION \.. d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT d770: 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e EROP_JSON1_EXTEN d780: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 SION INTEROP_PER d790: 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f CENTILE_EXTENSIO d7a0: 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. d7b0: 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 INTEROP_REGEX d7c0: 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 P_EXTENSION INTE d7d0: 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 ROP_TEST_EXTENSI d7e0: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. d7f0: 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 45 53 53 INTEROP_SESS d800: 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e ION_EXTENSION IN d810: 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e TEROP_SHA1_EXTEN d820: 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. d830: 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f INTEROP_TO d840: 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 TYPE_EXTENSION I d850: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 NTEROP_VIRTUAL_T d860: 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 ABLE \.. d870: 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f USE_INTERO d880: 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 P_DLL] {.. d890: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra d8a0: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs d8b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d8c0: 20 20 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 [getSQLiteDef d8d0: 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 ineConstantPrefi d8e0: 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 x]$defineConsta
d8f0: 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  nt]..          }
d900: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
d910: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
d920: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68  o exists ::no(sh
d930: 69 6d 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74  imSQLiteVisualSt
d940: 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29  udioConstraints)
d950: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
d960: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
d970: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76  nt [appendArgs v
d980: 69 73 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74  isualStudio [get
d990: 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20  BuildYear]]..
d9a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
d9b0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel d9c0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a no\n.. }.. d9d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr d9e0: 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 oc changeNativeR d9f0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e untimeOption { n da00: 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 ative } {.. da10: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 if {[llength [i da20: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 nfo commands deb da30: 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 ug]] > 0 && \.. da40: 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 [llengt da50: 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 h [info subcomma da60: 6e 64 73 20 64 65 62 75 67 20 72 75 6e 74 69 6d nds debug runtim da70: 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 eoption]] > 0 && da80: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 [catch {.. da90: 20 20 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 debug runtime daa0: 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e option [expr {$n
dab0: 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20  ative ? "add" :
dac0: 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76  "remove"}] nativ
dad0: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  e..      }] == 0
dae0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
daf0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
db00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
db10: 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
db20: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26  bjectCommand] &&
db30: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..
db40: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
db50: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
db60: 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e  Active [expr {$n db70: 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 ative ? \.. db80: 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69 "AddRunti db90: 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d meOption" : "Rem dba0: 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e oveRuntimeOption dbb0: 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 "}] native.. dbc0: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then dbd0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur dbe0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. dbf0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return dc00: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... dc10: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF dc20: 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 7b orSQLiteBuilds { dc30: 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 channel {select dc40: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. dc50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO dc60: 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 TE: Check for ev dc70: 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c ery possible val dc80: 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f id combination o dc90: 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 f values used wh dca0: 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 en.. # dcb0: 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 locating out t dcc0: 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 he build output dcd0: 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 directory, showi dce0: 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c ng each availabl dcf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # dd00: 20 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e build variation dd10: 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d along the way.. dd20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. dd30: 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b foreach native [ dd40: 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d list false true] dd50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 {.. fore dd60: 61 63 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 ach year [getBui dd70: 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 ldYears] {.. dd80: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f foreach co dd90: 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 nfiguration [get dda0: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati ddb0: 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. ddc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. ddd0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 # NOTE: Figur dde0: 65 20 6f 75 74 20 74 68 65 20 65 66 66 65 63 74 e out the effect ddf0: 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f ive build platfo de00: 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 rm. This is.. de10: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # de20: 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 based on wheth de30: 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 er or not a [pri de40: 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 marily] native b de50: 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 uild.. de60: 20 20 23 20 20 20 20 20 20 20 69 73 20 62 65 69 # is bei de70: 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 ng used. For [p de80: 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 rimarily] non-na de90: 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 tive builds,.. dea0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # deb0: 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20 61 this will be a dec0: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d n empty string.. ded0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. dee0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set def0: 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 platform [getBui df00: 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 ldPlatform$nati
df10: 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ve]....
df20: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe df30: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. df40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . df50: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking df60: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. df70: 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22 22 SQLite build \"" df80: 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 [expr \.. df90: 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 {$nati
dfa0: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a  ve ? "native/" :
dfb0: 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74   ""}] [expr {[st
dfc0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20  ring length \..
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $dfe0: 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 platform] > 0 ? dff0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c 61 [appendArgs$pla
e000: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20  tform /] : ""}]
e010: 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20 20  $year \.. e020: 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 /$conf
e030: 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e  iguration "\"...
e040: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   "]....
e050: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e060: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
e070: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
e080: 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68  ied directory wh
e090: 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72  ere the necessar
e0a0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  y..            #
e0b0: 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74         component
e0c0: 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  s for System.Dat
e0d0: 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20  a.SQLite should
e0e0: 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20  be found...
e0f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e100: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
e110: 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69  ory [joinBuildDi
e120: 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20  rectory $native e130: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e140: 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 [getBuildBase e150: 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 61 72 Directory]$year
e160: 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66   $platform$conf
e170: 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  iguration]....
e180: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
e190: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
e1a0: 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73 61 72   Do the necessar
e1b0: 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f 20 20  y files exist?
e1c0: 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74  Currently, no ot
e1d0: 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20 20 20  her steps..
e1e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
e1f0: 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69  re taken to veri
e200: 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 73  fy this build is
e210: 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65   actually viable
e220: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
e230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e240: 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61   {[isBuildAvaila
e250: 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69 72  ble $native$dir
e260: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
e270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
e280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e290: 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20  # NOTE: When in
e2a0: 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61  "select" mode, a
e2b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c  utomatically sel
e2c0: 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20  ect the first..
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
e2e0: 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 62       available b
e2f0: 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e 44  uild of System.D
e300: 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 74  ata.SQLite and t
e310: 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 20  hen return..
e320: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
e330: 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a    immediately...
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
e350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
e360: 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d  f {$select && [m e370: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c atchPlatform$pl
e380: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
e390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e3a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
e3b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75      # NOTE: Manu
e3c0: 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c  ally override al
e3d0: 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  l the build dire
e3e0: 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d  ctory selection.
e3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e400: 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64   #       related
e410: 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69   test settings i
e420: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65  n order to force
e430: 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20   this build..
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
e450: 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44       of System.D
e460: 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65  ata.SQLite to be
e470: 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...
e480: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e490: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
e4a0: 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e  [changeNativeRun
e4b0: 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69  timeOption $nati e4c0: 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ve]} then {.. e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t e4e0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
e4f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e510: 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74     "no, failed t
e520: 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  o " [expr {$nati e530: 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65 ve ? "add" : "re e540: 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 move"}] \.. e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e560: 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65 5c " the \"native\ e570: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e " runtime option e580: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... e590: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return e5a0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 false.. e5b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set e5d0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65 ::test_year$ye
e5e0: 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..
e5f0: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 70      set ::test_p
e600: 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor e610: 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. e620: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f set ::test_co e630: 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e nfiguration$con
e640: 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20  figuration....
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
e660: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap e670: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e690: 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 "yes, selected ( e6a0: 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 " [expr {$native
e6b0: 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22   ? "native/" : "
e6c0: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  "}] \..
e6d0: 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72             [expr
e6e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
e6f0: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20   $platform] > 0 e700: 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d ? [appendArgs \. e710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e720: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f$platform /
e730: 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 2f  ] : ""}] $year / e740: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
e750: 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ")\n"]....
e760: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e770: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20   true..
e780: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e7a0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye e7b0: 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s\n.. e7c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. e7d0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. e7e0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs e7f0: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
e800: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
e810: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
e820: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
e830: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
e840: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  lse..    }.....
e850: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
e860: 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 7b  SQLiteReleases {
e870: 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74   channel {select
e880: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
e890: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
e8a0: 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 61  TE: Check for pa
e8b0: 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53  st releases of S
e8c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
e8d0: 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f  e in the directo
e8e0: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ry..      #
e8f0: 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74    contained in t
e900: 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  he "System.Data.
e910: 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d  SQLite" environm
e920: 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69 66  ent variable, if
e930: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e940: 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20  present...
e950: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
e960: 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
e970: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
e980: 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  te)] && \..
e990: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
e9a0: 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 65  gth $::env(Syste e9b0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 m.Data.SQLite)] e9c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. e9d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e9e0: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th e9f0: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie ea00: 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 d directory wher ea10: 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d e the necessary. ea20: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # ea30: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 components for ea40: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ea50: 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 te should be fou ea60: 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a nd... #.. ea70: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 set dire ea80: 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 ctory [file nati ea90: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi eaa0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. eab0: 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44$::env(System.D
eac0: 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 74  ata.SQLite) [get
ead0: 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d  ReleaseVersion]]
eae0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ]....        tpu
eaf0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app eb00: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. eb10: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che eb20: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System eb30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c .Data.SQLite rel eb40: 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 ease \"" \.. eb50: 20 20 20 20 20 20 20 20 24 64 69 72 65 63 74 6f$directo
eb60: 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a  ry "\"... "]....
eb70: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52          if {[isR
eb80: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20  eleaseAvailable
eb90: 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74 66  $directory platf eba0: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 orm]} then {.. ebb0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str ebc0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
ebd0: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  form] == 0} then
ebe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
ebf0: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b  set platform unk
ec00: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  nown..
ec10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
ec20: 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d  f {$select && [m ec30: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c atchPlatform$pl
ec40: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
ec50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
ec60: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f   ::build_directo
ec70: 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d  ry $directory... ec80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu ec90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
eca0: 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 65  endArgs "yes, se
ecb0: 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 66  lected (" $platf ecc0: 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 orm ")\n"].... ecd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return ece0: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 true.. ecf0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. ed00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
ed10: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ed20: 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66  s "yes (" $platf ed30: 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 orm ")\n"].. ed40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. ed50: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. ed60: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ed70: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20  nel no\n....
ed80: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
ed90: 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f   exists $directo eda0: 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 ry] || \.. edb0: 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 ![file i edc0: 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 sdirectory$dire
edd0: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
edf0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe ee00: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. ee10: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- ee20: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari ee30: 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 able \"System.Da ee40: 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 61 ta.SQLite\" is a ee50: 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 n " \.. ee60: 20 20 20 20 20 20 20 22 69 6e 76 61 6c 69 64 20 "invalid ee70: 64 69 72 65 63 74 6f 72 79 2c 20 73 6b 69 70 70 directory, skipp ee80: 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 ing check for re ee90: 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d leases...\n"]... eea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret eeb0: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. eec0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... eed0: 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68 foreach path eee0: 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 73 [lsort -decreas eef0: 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 24 ing [file list$
ef00: 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d  directory *]] {.
ef10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
ef20: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 70  {[file exists $p ef30: 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 73 ath] && [file is ef40: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 5d directory$path]
ef50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ef60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c ef70: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr ef80: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ef90: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch efa0: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste efb0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re efc0: 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 lease \"" \.. efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
efe0: 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a  path "\"... "]..
eff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f000: 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76  if {[isReleaseAv
f010: 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 6c  ailable $path pl f020: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. f030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f040: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len f050: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d gth$platform] =
f060: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f080: 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e  et platform unkn
f090: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  own..
f0a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
f0b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73            if {$s f0c0: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50 elect && [matchP f0d0: 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 latform$platfor
f0e0: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  m]} then {..
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f100: 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74  t ::build_direct
f110: 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20  ory $path.... f120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t f130: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f140: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20  ppendArgs "yes,
f150: 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61  selected (" $pla f160: 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a tform ")\n"].... f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f180: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } f1a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. f1b0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs f1c0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
f1d0: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70  dArgs "yes (" $p f1e0: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a latform ")\n"].. f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f200: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. f210: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. f220: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs f230: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f260: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
f270: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
f280: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f290: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ f2a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. f2b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- f2c0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari f2d0: 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 able \"System.Da f2e0: 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 6e ta.SQLite\" is n f2f0: 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 ot " \.. f300: 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 69 "set, skippi f310: 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 6c ng check for rel f320: 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 eases...\n"].. f330: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r f340: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. f350: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc f360: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 checkForSQLiteLi f370: 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 brary { channel f380: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs f390: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
f3a0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c  checking for SQL
f3b0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f3c0: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
f3d0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
f3e0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
f3f0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
f400: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
f410: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
f420: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53  SQLite.SQLite3 S
f430: 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20  QLiteVersion..
f440: 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
f450: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f470: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
f480: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65   the returned ve
f490: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20  rsion was null.
f4a0: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20   If so, make it
f4b0: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20  easy..        #
f4c0: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a        to spot...
f4d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f4e0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
f4f0: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20  ength $version] f500: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. f510: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 set vers f520: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 ion null.. f530: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # f540: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE f550: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 : Attempt to que f560: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f ry the Fossil so f570: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier f580: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a for the SQLite.. f590: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # f5a0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 core library... f5b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f5c0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. f5d0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object f5e0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + f5f0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. f600: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste f610: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ f620: 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 72 Lite3 SQLiteSour f630: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ceId.. } f640: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then f650: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. f660: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE f670: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q f680: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil f690: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie f6a0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. f6b0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s f6c0: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. f6d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... f6e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f6f0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i f700: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F f710: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide f720: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null f730: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # f740: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make f750: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. f760: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. f770: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string f780: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
f790: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
f7a0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
f7b0: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
f7c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f7d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
f7e0: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53  NOTE: Yes, the S
f7f0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
f800: 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ry appears to be
f810: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
f820: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f830: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
f840: 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Lite....
f850: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ f860: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes f870: 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 ("$version " "
f880: 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d  $sourceId ")\n"] f890: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { f8a0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs f8b0: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
f8c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
f8d0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
f8e0: 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  ForSQLiteInterop
f8f0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
f900: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha f910: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b nnel "---- check f920: 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 ing for SQLite i f930: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e nterop assembly. f940: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if f950: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. f960: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok f970: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub f980: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. f990: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S f9a0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e QLite.SQLite3 In f9b0: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 teropVersion.. f9c0: 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d } version] = f9d0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. f9e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f9f0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if fa00: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 the returned ve fa10: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 rsion was null. fa20: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 If so, make it fa30: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 easy.. # fa40: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a to spot... fa50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fa60: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l fa70: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
fa80: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
fa90: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
faa0: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
fab0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
fac0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
fad0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65  : Attempt to que
fae0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
faf0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
fb00: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  for the SQLite..
fb10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
fb20: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library...
fb30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fb40: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
fb50: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
fb60: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
fb70: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
fb80: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
fb90: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
fba0: 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75  Lite3 InteropSou
fbb0: 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d  rceId..        }
fbc0: 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e   sourceId]} then
fbd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
fbe0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
fbf0: 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20  E: We failed to
fc00: 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c  query the Fossil
fc10: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
fc20: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
fc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
fc40: 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e  sourceId unknown
fc50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
fc60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fc70: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
fc80: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned
fc90: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64  Fossil source id
fca0: 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c  entifier was nul
fcb0: 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  l.  If..
fcc0: 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65  #       so, make
fcd0: 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74   it easy to spot
fce0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
fcf0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
fd00: 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source fd10: 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { fd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set fd30: 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 sourceId null.. fd40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... fd50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # fd60: 20 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63 NOTE: Before ac fd70: 74 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 tually adding th fd80: 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e e test constrain fd90: 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 t, make sure the fda0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # fdb0: 20 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c version is val fdc0: 69 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 id (i.e. not jus fdd0: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20 t that we could fde0: 71 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 query it)... fdf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i fe00: 66 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 f {$version ne "
fe10: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {..
fe20: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
fe30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
fe40: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e  s, the SQLite in
fe50: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61  terop assembly a
fe60: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61  ppears to be ava
fe70: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  ilable...
fe80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
fe90: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
fea0: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20  LiteInterop....
feb0: 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73           set ans
fec0: 77 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20  wer yes..
fed0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
fee0: 20 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 20       set answer
fef0: 6e 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  no..        }...
ff00: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $ff10: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA ff20: 72 67 73 20 24 61 6e 73 77 65 72 20 22 20 28 22 rgs$answer " ("
ff30: 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73   $version " "$s
ff40: 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a  ourceId ")\n"]..
ff50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ff60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c ff70: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. ff80: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... ff90: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo ffa0: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon ffb0: 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 stant { channel ffc0: 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 name } {.. ffd0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
ffe0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
fff0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
10000 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
10010 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65  m.Data.SQLite de
10020 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22  fine constant \"
10030 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  " $name \.. 10040 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a "\"... "].. 10050 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 10060 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 ch {.. ob 10070 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 10080 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 10090 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 100a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 100b0 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f SQLite3 DefineCo 100c0 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d nstants.. } 100d0 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 defineConstants 100e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 100f0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 if {[lse 10100 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 arch -exact -noc 10110 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 ase$defineConst
10120 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d  ants $name] != - 10130 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 1} then {.. 10140 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10150 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t 10160 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 his define const 10170 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 ant was enabled 10180 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 when the managed 10190 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 101a0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 assembly was 101b0 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 compiled... 101c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 101d0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 101e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 [appendArgs [ge 101f0 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e tSQLiteDefineCon 10200 73 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 stantPrefix]$na
10210 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
10220 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10230 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d yes\n.. } 10240 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10250 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10260 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20  l no\n..
10270 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
10280 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
10290 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c   $channel error\ 102a0 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. 102b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 102c0 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 etDateTimeFormat 102d0 20 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74 72 75 { {timeZone tru 102e0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 102f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 10300 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 his procedure si 10310 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 mply returns the 10320 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 "default" DateT 10330 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d ime format used. 10340 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 10350 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 10360 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 10370 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 10380 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f ts ::datetime_fo 10390 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 rmat] && \.. 103a0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 103b0 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 ngth$::datetime
103c0 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68  _format] > 0} th
103d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
103e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
103f0 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75   Return the manu
10400 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20  ally overridden
10410 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61  value for the Da
10420 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a  teTime format...
10430 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10440 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74     return $::dat 10450 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 etime_format.. 10460 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 10470 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10480 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return 10490 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 an ISO8601 DateT 104a0 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 ime format compa 104b0 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 tible with SQLit 104c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 e,.. # 104d0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 104e0 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 SQLite, and suit 104f0 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 able for round-t 10500 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 ripping with the 10510 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 10520 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 DateTime class 10530 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 of the framewor 10540 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 k. If this valu 10550 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 e is changed,.. 10560 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 # v 10570 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 arious tests may 10580 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 fail... 10590 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 105a0 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d n [appendArgs \. 105b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79 . "yy 105c0 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 yy-MM-dd HH:mm:s 105d0 73 2e 46 46 46 46 46 46 46 22 20 5b 65 78 70 72 s.FFFFFFF" [expr 105e0 20 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20 22 4b {$timeZone ? "K
105f0 22 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 20 20  " : ""}]]..
10600 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
10610 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69    proc getDateTi
10620 6d 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 65 20  meTicks { value
10630 7b 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 66 61  {local ""} {defa
10640 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ult ""} } {..
10650 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
10660 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d  ength $value] == 10670 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 10680 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 66 61 return$defa
10690 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ult..      }....
106a0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
106b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
106c0 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74  dateTime [object
106d0 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create
106e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d  \..            -
106f0 70 61 72 61 6d 65 74 65 72 74 79 70 65 73 20 5b  parametertypes [
10700 6c 69 73 74 20 53 74 72 69 6e 67 20 53 74 72 69  list String Stri
10710 6e 67 20 49 46 6f 72 6d 61 74 50 72 6f 76 69 64  ng IFormatProvid
10720 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  er \..
10730 20 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69    System.Globali
10740 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69 6d 65 53  zation.DateTimeS
10750 74 79 6c 65 73 5d 20 44 61 74 65 54 69 6d 65 20  tyles] DateTime
10760 50 61 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 20  ParseExact \..
10770 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65            $value 10780 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 [getDateTimeFor 10790 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73 74 mat] null Adjust 107a0 54 6f 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20 20 ToUniversal].. 107b0 20 20 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d 0a }]} then {.. 107c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
107d0 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d  default..      }
107e0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73  ....      if {[s
107f0 74 72 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e  tring is boolean
10800 20 2d 73 74 72 69 63 74 20 24 6c 6f 63 61 6c 5d   -strict $local] 10810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10820 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b set dateTime [ 10830 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 object invoke -c 10840 72 65 61 74 65 20 44 61 74 65 54 69 6d 65 20 53 reate DateTime S 10850 70 65 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20 20 pecifyKind \.. 10860 20 20 20 20 20 20 20 20 20 20 24 64 61 74 65 54$dateT
10870 69 6d 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 20  ime Utc]..
10880 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
10890 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74    return [object
108a0 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d   invoke $dateTim 108b0 65 20 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 e Ticks].. 108c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 }.... if {$
108d0 6c 6f 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a 20  local} then {..
108e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6f         return [o
108f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61  bject invoke $da 10900 74 65 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54 69 teTime ToLocalTi 10910 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 me.Ticks].. 10920 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10930 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 return [objec 10940 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 t invoke$dateTi
10950 6d 65 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 69  me ToUniversalTi
10960 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20  me.Ticks]..
10970 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
10980 20 20 70 72 6f 63 20 67 65 74 50 72 6f 70 65 72    proc getProper
10990 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61  ties { object va
109a0 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20  rName } {..
109b0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 109c0 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a e properties.... 109d0 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20 set count 109e0 30 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 61 6d 0.. set nam 109f0 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 es [list].... 10a00 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 if {[isObject 10a10 48 61 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d 20 Handle$object]
10a20 26 26 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 6e  && $object ne "n 10a30 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. 10a40 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 10a50 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 nd names [object 10a60 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 members \.. 10a70 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 -membert 10a80 79 70 65 73 20 50 72 6f 70 65 72 74 79 20 2d 6e ypes Property -n 10a90 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d ameonly$object]
10aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c  ....        eval
10ab0 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b   lappend names [
10ac0 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 5c  object members \
10ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d  ..            -m
10ae0 65 6d 62 65 72 74 79 70 65 73 20 46 69 65 6c 64  embertypes Field
10af0 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65   -nameonly $obje 10b00 63 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ct].. }.... 10b10 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 10b20 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 me$names {..
10b30 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
10b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
10b50 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a 65  ect invoke -obje
10b60 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f  ctflags +NoDispo
10b70 73 65 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d 65  se $object$name
10b80 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75  ..        } valu
10b90 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
10ba0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
10bb0 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $10bc0 76 61 6c 75 65 5d 20 26 26 20 24 76 61 6c 75 65 value] &&$value
10bd0 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   ne "null"} then
10be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
10bf0 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20  set error null;
10c00 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
10c10 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
10c20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
10c30 20 20 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73     -marshalflags
10c40 20 2b 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 72   +NoHandle Inter
10c50 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
10c60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10c70 20 20 20 20 41 64 64 4f 62 6a 65 63 74 52 65 66      AddObjectRef
10c80 65 72 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 65  erence Ok $value 10c90 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20 20 error.... 10ca0 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 lappend pr 10cb0 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 10cc0 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 ) [list$name $v 10cd0 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 alue].. 10ce0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10cf0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 lappend p 10d00 72 6f 70 65 72 74 69 65 73 28 76 61 6c 75 65 73 roperties(values 10d10 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 ) [list$name $v 10d20 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 alue].. 10d30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 10d40 69 6e 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20 20 incr count.. 10d50 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 10d60 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 10d70 70 72 6f 70 65 72 74 69 65 73 28 65 72 72 6f 72 properties(error 10d80 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 s) [list$name $10d90 3a 3a 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20 20 ::errorCode].. 10da0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 10db0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 10dc0 20 24 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d 0a$count..    }..
10dd0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41  ...    proc getA
10de0 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f  llProperties { o
10df0 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20  bject varName }
10e00 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
10e10 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72   $varName proper 10e20 74 69 65 73 0d 0a 20 20 20 20 20 20 73 65 74 20 ties.. set 10e30 76 61 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a 0d value$object...
10e40 0a 20 20 20 20 20 20 77 68 69 6c 65 20 7b 74 72  .      while {tr
10e50 75 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  ue} {..        i
10e60 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
10e70 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e   properties(seen
10e80 4f 62 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d 0a  Objects)] || \..
10e90 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c              $val 10ea0 75 65 20 6e 69 20 24 70 72 6f 70 65 72 74 69 65 ue ni$propertie
10eb0 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d 20  s(seenObjects)}
10ec0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10ed0 20 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 20    getProperties
10ee0 24 76 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65  $value propertie 10ef0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 s.. lap 10f00 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 pend properties( 10f10 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 24 76 61 seenObjects)$va
10f20 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lue..        }..
10f30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
10f40 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70  info exists prop
10f50 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d  erties(objects)]
10f60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10f70 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20      break..
10f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10f90 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 72  if {[llength $pr 10fa0 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 10fb0 29 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d )] == 0} then {. 10fc0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 . unset 10fd0 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 properties(obje 10fe0 63 74 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20 20 cts); break.. 10ff0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11000 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6c 69 6e set value [lin 11010 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 70 72 6f dex [lindex$pro
11020 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29  perties(objects)
11030 20 30 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20   0] end]..
11040 20 20 73 65 74 20 70 72 6f 70 65 72 74 69 65 73    set properties
11050 28 6f 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e 67  (objects) [lrang
11060 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f 62  e $properties(ob 11070 6a 65 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a 20 jects) 1 end].. 11080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11090 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 110a0 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e properties(seen 110b0 4f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 Objects)]} then 110c0 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.. forea 110d0 63 68 20 76 61 6c 75 65 20 24 70 72 6f 70 65 72 ch value$proper
110e0 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73  ties(seenObjects
110f0 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ) {..          i
11100 66 20 7b 24 76 61 6c 75 65 20 65 71 20 24 6f 62  f {$value eq$ob
11110 6a 65 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a  ject} continue..
11120 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
11130 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20  {object dispose
11140 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 20  $value}.. 11150 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e }.... un 11160 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28 73 set properties(s 11170 65 65 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20 20 eenObjects).. 11180 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 11190 20 20 20 20 70 72 6f 63 20 67 65 74 56 61 72 69 proc getVari 111a0 61 62 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65 73 ables { varNames 111b0 20 7b 6f 62 6a 65 63 74 73 20 66 61 6c 73 65 7d {objects false} 111c0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 111d0 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d result [list]... 111e0 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 . foreach v 111f0 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 arName$varNames
11200 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
11210 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74  [uplevel 1 [list
11220 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 76   array exists $v 11230 61 72 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20 7b arName]]} then { 11240 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 11250 61 72 72 61 79 4e 61 6d 65 20 24 76 61 72 4e 61 arrayName$varNa
11260 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  me....
11270 66 6f 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 4e  foreach elementN
11280 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  ame [uplevel 1 [
11290 6c 69 73 74 20 61 72 72 61 79 20 6e 61 6d 65 73  list array names
112a0 20 24 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b 0d   $arrayName]] {. 112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 112c0 20 6e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 name [appendArg 112d0 73 20 24 61 72 72 61 79 4e 61 6d 65 20 28 20 24 s$arrayName ( $112e0 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d 0a elementName )].. 112f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 11300 76 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 varValue [upleve 11310 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24 6e l 1 [list set$n
11320 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ame]]....
11330 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74       if {$object 11340 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 s && [isObjectHa 11350 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d ndle$varValue]}
11360 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11370 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f         unset -no
11380 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74  complain propert
11390 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..
113a0 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74     getAllPropert
113b0 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 72  ies $varValue pr 113c0 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 operties.... 113d0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 113e0 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 d result [list$
113f0 6e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74 20  name [array get
11400 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20  properties]]..
11410 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
11420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
11430 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
11440 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61   [list $name$va
11450 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20  rValue]..
11460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11470 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
11480 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11490 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 5b 75   set varValue [u
114a0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
114b0 65 74 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a 0d  et $varName]]... 114c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
114d0 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f 62  objects && [isOb
114e0 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 56  jectHandle $varV 114f0 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 alue]} then {.. 11500 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 unset 11510 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f -nocomplain pro 11520 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 perties.. 11530 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 getAllPrope 11540 72 74 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 rties$varValue
11550 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20  properties....
11560 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
11570 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $11580 76 61 72 4e 61 6d 65 20 5b 61 72 72 61 79 20 67 varName [array g 11590 65 74 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d et properties]]. 115a0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 115b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 115c0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 115d0 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 24 [list$varName $115e0 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 varValue].. 115f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 11600 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 11610 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
11620 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
11630 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c    proc enumerabl
11640 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72  eToList { enumer
11650 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  able } {..
11660 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
11670 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
11680 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e 11690 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 numerable] == 0 116a0 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 ||$enumerable e
116b0 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b  q "null"} then {
116c0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
116d0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20   $result.. 116e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 }.... objec 116f0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 11700 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c item$enumerabl
11710 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e {..        if
11720 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
11730 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  $item] > 0} then 11740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 {.. la 11750 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 ppend result [$i
11760 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20  tem ToString]..
11770 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11780 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
11790 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d  n $result.. } 117a0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 ..... proc ca 117b0 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 tchAndReturn { s 117c0 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 cript {stackTrac 117d0 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 e false} {strict 117e0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 117f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11800 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 E: Evaluate the 11810 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 script provided 11820 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e by our caller in 11830 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d their context,. 11840 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 11850 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 apturing both th 11860 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 e result and the 11870 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 return code... 11880 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 11890 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 t code [catch {u 118a0 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 plevel 1$script
118b0 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20  } result]....
118c0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
118d0 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 72 69  TE: Did the scri
118e0 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  pt provided by o
118f0 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61  ur caller NOT ra
11900 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20  ise an error?..
11910 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
11920 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 63 6f   {$strict &&$co
11930 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72  de == 0 || !$str 11940 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 ict &&$code !=
11950 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..
11960 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
11970 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20  NOTE: Success.
11980 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69  Return a list wi
11990 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  th the return co
119a0 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  de and the resul
119b0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
119c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
119d0 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code$resul
119e0 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  t]..      } else
119f0 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d  if {$stackTrace} 11a00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11a10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11a20 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 TE: Failure. Ou 11a30 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 r caller wants a 11a40 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 full stack trac 11a50 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 e (if applicable 11a60 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ),.. # 11a70 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 return a lis 11a80 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 t with the retur 11a90 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 n code and the r 11aa0 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d esult verbatim.. 11ab0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11ac0 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list 11ad0 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d$code $result]. 11ae0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 11af0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11b00 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c # NOTE: Fail 11b10 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 ure. Our caller 11b20 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 does not want a 11b30 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 full stack trac 11b40 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 e (if.. # 11b50 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c applicabl 11b60 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 e), return a lis 11b70 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 t with the retur 11b80 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f n code, the erro 11b90 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 11ba0 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 code for the 11bb0 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 interpreter, and 11bc0 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 the error messa 11bd0 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 ge up to the.. 11be0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f # po 11bf0 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 73 74 int where the st 11c00 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 ack trace should 11c10 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 start... 11c20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 11c30 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $11c40 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a 20 ::errorCode \.. 11c50 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 74 72 [extr 11c60 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c actSystemDataSQL 11c70 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 iteExceptionMess 11c80 61 67 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a 20 age$result]]..
11c90 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
11ca0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69  ..    proc compi
11cb0 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a  leCSharpWith {..
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74              text
11cd0 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20   memory symbols
11ce0 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61  strict resultsVa
11cf0 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e  rName errorsVarN
11d00 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20  ame fileNames..
11d10 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20             args
11d20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
11d30 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63      # NOTE: Sinc
11d40 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74  e we are going t
11d50 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f  o use this metho
11d60 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73  d name a lot, as
11d70 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20  sign it to a..
11d80 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69      #       vari
11d90 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20  able first...
11da0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
11db0 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73  add ReferencedAs
11dc0 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a  semblies.Add....
11dd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11de0 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68   NOTE: Create th
11df0 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74  e base command t
11e00 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61  o evaluate and a
11e10 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20  dd the property
11e20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20  settings..
11e30 23 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65  #       that are
11e40 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e   almost always n
11e50 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69  eeded by our uni
11e60 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68  t tests (i.e. th
11e70 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20  e System..
11e80 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74  #       and Syst
11e90 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79  em.Data assembly
11ea0 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20   references)...
11eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
11ec0 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20  t command [list
11ed0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d  \..          com
11ee0 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 74  pileCSharp $text 11ef0 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c$memory $symbol 11f00 73 20 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 s$strict result
11f10 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20  s errors \..
11f20 20 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65        $add Syste 11f30 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 m.dll$add Syste
11f40 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20  m.Data.dll $add 11f50 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 System.Transacti 11f60 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 ons.dll \.. 11f70 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d$add System
11f80 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .Xml.dll]....
11f90 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11fa0 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20  TE: Add all the
11fb0 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61  provided file na
11fc0 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20  mes as assembly
11fd0 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20  references...
11fe0 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65     #..      fore
11ff0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69  ach fileName $fi 12000 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 12010 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 lappend comma 12020 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 nd$add [getBina
12030 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 12040 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Name].. }.. 12050 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12060 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 # NOTE: Add the 12070 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 extra arguments 12080 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 , if any, to the 12090 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c command to eval 120a0 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a uate... #.. 120b0 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 120c0 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 nd command$args
120d0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
120e0 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73     # NOTE: Alias
120f0 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f   the compiler lo
12100 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20  cal results and
12110 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73  errors variables
12120 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23   to the..      #
12130 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20         variable
12140 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62  names provided b
12150 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller...
12160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
12170 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
12180 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65   $resultsVarName 12190 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 121a0 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 upvar 1$
121b0 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72  resultsVarName r
121c0 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d  esults..      }.
121d0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
121e0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72  ring length $err 121f0 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d orsVarName] > 0} 12200 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12210 20 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 upvar 1$errors
12220 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a  VarName errors..
12230 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
12240 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
12250 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63  : Evaluate the c
12260 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70  onstructed [comp
12270 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61  ileCSharp] comma
12280 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68  nd and return th
12290 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
122a0 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20   result...
122b0 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63  #..      eval $c 122c0 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c ommand.. }... 122d0 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d .. proc isMem 122e0 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 oryDb { fileName 122f0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 12300 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 # NOTE: Is 12310 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 the specified da 12320 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 tabase file name 12330 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 really an in-me 12340 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a mory database?.. 12350 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 12360 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 eturn [expr {$fi
12370 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f  leName eq ":memo
12380 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  ry:" || \..
12390 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e       [string ran
123a0 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31  ge $fileName 0 1 123b0 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 2] eq "file::mem 123c0 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a ory:"}].. }.. 123d0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 ... proc isTa 123e0 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b bleInDb { name { 123f0 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. 12400 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12410 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 12420 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 12430 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 12440 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 12450 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 12460 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 12470 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 It contains th 12480 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne 12490 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 ction handle tha 124a0 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 t will be.. 124b0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f # used to 124c0 20 65 78 65 63 75 74 65 20 74 68 65 20 71 75 65 execute the que 124d0 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 ry used to deter 124e0 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 mine if the name 124f0 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 d table is.. 12500 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e # presen 12510 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 t in that databa 12520 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 se... #.. 12530 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
12540 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
12550 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
12560 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65  : Use the sqlite
12570 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f  _master table to
12580 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   determine if th
12590 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73  e named table is
125a0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
125b0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
125c0 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20  atabase...
125d0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c  #..      set sql
125e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45   {..        SELE
125f0 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d  CT COUNT(*) FROM
12600 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57   sqlite_master W
12610 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62  HERE type = 'tab
12620 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f  le' AND name = ?
12630 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....
12640 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
12650 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  OTE: Return non-
12660 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65  zero if the name
12670 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 65  d table is prese
12680 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  nt...      #..
12690 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
126a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c   {..        [sql
126b0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
126c0 65 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 71  e scalar $db$sq
126d0 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53  l [list param1 S
126e0 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20  tring $name]] > 126f0 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 0.. }].. 12700 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 12710 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67 65 getDbDefaultPage 12720 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 Size {} {.. 12730 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 if {[catch {exe 12740 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d 41 20 cuteSql "PRAGMA 12750 70 61 67 65 5f 73 69 7a 65 3b 22 20 73 63 61 6c page_size;" scal 12760 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 ar} result] == 0 12770 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12780 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
12790 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
127a0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
127b0 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   0..      }..
127c0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
127d0 67 65 74 44 62 44 65 66 61 75 6c 74 43 61 63 68  getDbDefaultCach
127e0 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20  eSize {} {..
127f0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
12800 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d 41  ecuteSql "PRAGMA
12810 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 20 73 63   cache_size;" sc
12820 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  alar} result] ==
12830 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
12840 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 12850 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 lt.. } else 12860 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 12870 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 rn 0.. }.. 12880 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 12890 63 20 75 73 65 4c 65 67 61 63 79 44 62 50 61 67 c useLegacyDbPag 128a0 65 41 6e 64 43 61 63 68 65 53 69 7a 65 73 20 7b eAndCacheSizes { 128b0 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 varName } {.. 128c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 128d0 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 128e0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 128f0 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") 12900 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 12910 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 of our.. # 12920 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 caller. I 12930 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 t contains the d 12940 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 12950 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 on handle that w 12960 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 ill be.. # 12970 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 used to ex 12980 65 63 75 74 65 20 71 75 65 72 69 65 73 20 75 73 ecute queries us 12990 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 70 61 ed to set the pa 129a0 67 65 20 61 6e 64 20 63 61 63 68 65 20 73 69 7a ge and cache siz 129b0 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 129c0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
129d0 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
129e0 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db 129f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 50 52 41 47 {.. PRAG 12a00 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 MA page_size = 1 12a10 30 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 50 52 024;.. PR 12a20 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 AGMA cache_size 12a30 3d 20 32 30 30 30 3b 0d 0a 20 20 20 20 20 20 7d = 2000;.. } 12a40 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 12a50 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 12a60 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 [sql execute 12a70 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 -execute scalar 12a80 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 67$db "PRAGMA pag
12a90 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a 20 20 20  e_size;"] \..
12aa0 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63         [sql exec
12ab0 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
12ac0 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 12ad0 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d 5d 0d 0a cache_size;"]].. 12ae0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12af0 6f 63 20 65 78 74 72 61 63 74 53 79 73 74 65 6d oc extractSystem 12b00 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 DataSQLiteExcept 12b10 69 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76 61 6c ionMessage { val 12b20 75 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d ue } {.. #. 12b30 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 12b40 66 20 74 68 65 20 73 74 72 69 6e 67 20 63 6f 6e f the string con 12b50 66 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61 74 20 forms to format 12b60 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20 65 78 of the normal ex 12b70 63 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 ception.. # 12b80 20 20 20 20 20 20 20 65 72 72 6f 72 20 73 74 72 error str 12b90 69 6e 67 73 2c 20 65 78 74 72 61 63 74 20 61 6e ings, extract an 12ba0 64 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20 74 68 d return only th 12bb0 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0d e error message. 12bc0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 . # p 12bd0 6f 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a ortion itself... 12be0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 12bf0 65 74 20 70 61 74 74 65 72 6e 73 20 5b 6c 69 73 et patterns [lis 12c00 74 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 t \.. {Syst 12c10 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 em\.Data\.SQLite 12c20 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f \.SQLiteExceptio 12c30 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29 n $$0x80004005$$ 12c40 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 : (.+?) (?: )?a 12c50 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73 t} \.. {Sys 12c60 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 tem\.Data\.SQLit 12c70 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 e\.SQLiteExcepti 12c80 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 on: (.+?) (?: ) 12c90 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 45 ?at} \.. {E 12ca0 61 67 6c 65 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 agle\._Component 12cb0 73 5c 2e 50 75 62 6c 69 63 5c 2e 53 63 72 69 70 s\.Public\.Scrip 12cc0 74 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f tException: (.+? 12cd0 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d ) (?: )?at}]... 12ce0 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 . foreach p 12cf0 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 73 attern$patterns
12d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
12d10 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74  [regexp -- $patt 12d20 65 72 6e 20 24 76 61 6c 75 65 20 64 75 6d 6d 79 ern$value dummy
12d30 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 6e 20   message]} then
12d40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
12d50 20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67   message [string
12d60 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20   map [list \r\n
12d70 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  \n] [string trim
12d80 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 20 20   $message]].. 12d90 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65 73 set lines 12da0 20 5b 73 70 6c 69 74 20 24 6d 65 73 73 61 67 65 [split$message
12db0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
12dc0 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $12dd0 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74 68 65 lines] == 2} the 12de0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 12df0 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 if {[lindex$li
12e00 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e 64 65  nes 0] eq [linde
12e10 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 68 65  x $lines 1]} the 12e20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 12e30 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 return [linde 12e40 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20 20 20 x$lines 0]..
12e50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
12e60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12e70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 6c 69   [appendArgs [li
12e80 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 22  ndex $lines 0] " 12e90 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20 24 6c -- " [lindex$l
12ea0 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20 20 20  ines 1]]..
12eb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
12ec0 20 20 20 72 65 74 75 72 6e 20 24 6d 65 73 73 61     return $messa 12ed0 67 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 ge.. }.. 12ee0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12ef0 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 return$value..
12f00 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
12f10 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20  c trimSql { sql
12f20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  } {..      retur
12f30 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d  n [regsub -all -
12f40 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20  - {\s+} [string
12f50 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d  trim $sql] " "]. 12f60 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 12f70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20 7b roc executeSql { 12f80 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f sql {execute no 12f90 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 ne} {format none 12fa0 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 } {fileName ""} 12fb0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 12fc0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
12fd0 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74  ileName] == 0} t
12fe0 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d  hen {set fileNam
12ff0 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20  e :memory:}..
13000 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65     setupDb $file 13010 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 Name "" "" "" "" 13020 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 "" false false 13030 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20 74 false false db t 13040 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 rue.... try 13050 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 13060 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c rn [uplevel 1 [l 13070 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 13080 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d sql execute - 13090 65 78 65 63 75 74 65 20 24 65 78 65 63 75 74 65 execute$execute
130a0 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74   -format $format 130b0 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20$db $sql]].. 130c0 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a } finally {.. 130d0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e set conn 130e0 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e ection [getDbCon 130f0 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 nection].... 13100 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 try {.. 13110 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 cleanupDb$
13120 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73  fileName db fals
13130 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false..
13140 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79         } finally
13150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
13160 6a 65 63 74 20 66 6c 61 67 73 20 24 63 6f 6e 6e  ject flags $conn 13170 65 63 74 69 6f 6e 20 2d 4e 6f 44 69 73 70 6f 73 ection -NoDispos 13180 65 3b 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 e; freeDbConnect 13190 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ion.. }.. 131a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 131b0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e ... proc hasN 131c0 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 oFlags { varName 131d0 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 none } {.. 131e0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
131f0 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20  e flags....
13200 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
13210 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20  ts flags]} then
13220 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
13230 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
13240 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
13250 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61  ring length $fla 13260 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b gs] == 0} then { 13270 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 13280 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. 13290 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e .. if {$non
132a0 65 20 26 26 20 24 66 6c 61 67 73 20 65 71 20 22  e && $flags eq " 132b0 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 None"} then {.. 132c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 132d0 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... 132e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 132f0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 13300 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 proc getConnect 13310 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e ionFlags { fileN 13320 61 6d 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 ame flags {quiet 13330 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 13340 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13350 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 TE: Figure out w 13360 68 69 63 68 20 64 61 74 61 62 61 73 65 20 66 69 hich database fi 13370 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 le name or conne 13380 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 ction string the 13390 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # 133a0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 connection fla 133b0 67 73 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 gs will actually 133c0 20 61 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 apply to. This 133d0 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 is not necessar 133e0 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 133f0 20 69 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 in quiet mode b 13400 65 63 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f ecause this info 13410 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 rmation is only 13420 75 73 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 used for logging 13430 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13440 61 6e 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 and reporting pu 13450 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 rposes... # 13460 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
13470 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
13480 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
13490 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d   length $fileNam 134a0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 134b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 set da 134c0 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 tabase [appendAr 134d0 67 73 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 gs "file name \" 134e0 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d "$fileName \"].
134f0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69  .        } elsei
13500 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
13510 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26  ::dataSource] &&
13520 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13530 21 5b 61 72 72 61 79 20 65 78 69 73 74 73 20 3a  ![array exists :
13540 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68  :dataSource]} th
13550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13560 73 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70  set database [ap
13570 70 65 6e 64 41 72 67 73 20 22 64 61 74 61 20 73  pendArgs "data s
13580 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74  ource \"" $::dat 13590 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 aSource \"].. 135a0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 135b0 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 set dat 135c0 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d abase <unknown>. 135d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 135e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 135f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 # NOTE: Ev 13600 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20 en though there 13610 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f 75 72 is only one sour 13620 63 65 20 6f 66 20 66 6c 61 67 73 20 73 6f 20 66 ce of flags so f 13630 61 72 2c 20 74 68 65 79 0d 0a 20 20 20 20 20 20 ar, they.. 13640 23 20 20 20 20 20 20 20 6d 75 73 74 20 62 65 20 # must be 13650 63 6f 6d 62 69 6e 65 64 20 75 73 69 6e 67 20 74 combined using t 13660 68 65 20 63 6f 72 72 65 63 74 20 73 79 6e 74 61 he correct synta 13670 78 20 66 6f 72 20 65 6e 75 6d 65 72 61 74 65 64 x for enumerated 13680 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13690 66 6c 61 67 20 76 61 6c 75 65 73 20 66 6f 72 20 flag values for 136a0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f the .NET Framewo 136b0 72 6b 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 rk... #.. 136c0 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 set flags [c 136d0 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 ombineFlags$fla
136e0 67 73 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  gs ""]....
136f0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13700 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
13710 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63  the local connec
13720 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74  tion flags and t
13730 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  he associated..
13740 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
13750 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65  a source or file
13760 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d   name...      #.
13770 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui 13780 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 13790 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 137a0 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c xists ::no(emitL 137b0 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c ocalFlags)] && \ 137c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 .. (! 137d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 137e0 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 o(emitLocalFlags 137f0 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 IfNone)] || \.. 13800 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 13810 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 sNoFlags flags f 13820 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a alse])} then {.. 13830 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 13840 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
13850 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
13870 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74  -- local connect
13880 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
13890 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. 138a0 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are 138b0 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 : " [expr {![has 138c0 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 NoFlags flags fa 138d0 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 lse] ? \.. 138e0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA 138f0 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 rgs \"$flags \"
13900 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c  ] : "<none>"}] \
13910 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
13920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13930 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13940 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
13950 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  the shared conne
13960 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20  ction flags...
13970 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
13980 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 13990 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 139a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 139b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 139c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 139d0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect 139e0 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d ion SharedFlags. 139f0 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 . } share 13a00 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 dFlags] == 0} th 13a10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13a20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 13a30 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 s ::no(emitShare 13a40 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 dFlags)] && \.. 13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b (![ 13a60 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 13a70 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 (emitSharedFlags 13a80 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 IfNone)] || \.. 13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b ![ 13aa0 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 hasNoFlags share 13ab0 64 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 dFlags true])} t 13ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13ad0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
13ae0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
13af0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
13b00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68          "---- sh
13b10 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ared connection
13b20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74  flags for " $dat 13b30 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 abase \.. 13b40 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 " are: 13b50 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f " [expr {![hasNo 13b60 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 Flags sharedFlag 13b70 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 s true] ? \.. 13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap 13b90 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 pendArgs \"$sha
13ba0 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22  redFlags \"] : "
13bb0 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
13bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
13bd0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
13be0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
13bf0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
13c00 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d  mitSharedFlags)]
13c10 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
13c20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73       ![info exis
13c30 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72  ts ::no(emitShar
13c40 65 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c  edFlagsIfUnavail
13c50 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  able)]} then {..
13c60 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
13c70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 13c80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 13c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13ca0 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f "---- shared co 13cb0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 nnection flags f 13cc0 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c or "$database \
13cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13ce0 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69    " are: <unavai
13cf0 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20  lable>\n"]..
13d00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
13d10 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13d20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13d30 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20  NOTE: Show (and
13d40 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 65  log) the detecte
13d50 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74  d global connect
13d60 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e  ion flags, if an
13d70 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
13d80 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 13d90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13da0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 13db0 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 s ::no(emitGloba 13dc0 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 lFlags)] && \.. 13dd0 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e (![in 13de0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 13df0 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 mitGlobalFlagsIf 13e00 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 13e10 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e ![hasN 13e20 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 oFlags ::connect 13e30 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d ion_flags false] 13e40 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 )} then {.. 13e50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
13e60 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
13e70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
13e80 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c          "---- gl
13e90 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  obal connection
13ea0 66 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a  flags are: " \..
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
13ec0 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67  xpr {![hasNoFlag
13ed0 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
13ee0 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d  lags false] ? \.
13ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
13f00 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a  appendArgs \" $: 13f10 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 13f20 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" 13f30 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. 13f40 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13f50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 13f60 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 OTE: If there ar 13f70 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 e any global (pe 13f80 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e r test run) conn 13f90 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 ection flags cur 13fa0 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 rently.. # 13fb0 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 set, use t 13fc0 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 hem now (i.e. by 13fd0 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 combining them 13fe0 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f with the ones fo 13ff0 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 r this.. # 14000 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 14010 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 14020 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 14030 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e sts ::connection 14040 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d _flags]} then {. 14050 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14060 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 # NOTE: Comb 14070 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 ine and/or repla 14080 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f ce the connectio 14090 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e n flags and then 140a0 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 show the.. 140b0 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 # new v 140c0 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 alue... # 140d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 6c .. set fl 140e0 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 ags [combineFlag 140f0 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e s$flags $::conn 14100 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d ection_flags]... 14110 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14120 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 14130 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e (and log) the n 14140 65 77 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e ew effective con 14150 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a nection flags... 14160 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14170 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
14180 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14190 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
141a0 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d  sts ::no(emitCom
141b0 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20  binedFlags)] &&
141c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
141d0 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   (![info exists
141e0 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65  ::no(emitCombine
141f0 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c  dFlagsIfNone)] |
14200 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
14210 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73      ![hasNoFlags
14220 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20   flags false])}
14230 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14240 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 14250 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 14260 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 14270 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 14280 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 ombined connecti 14290 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
142a0 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
142b0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
142c0 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61  e: " [expr {![ha
142d0 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66  sNoFlags flags f
142e0 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20  alse] ? \..
142f0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65             [appe
14300 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73  ndArgs \" $flags 14310 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 14320 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 14330 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 14340 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14350 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 return$flags..
14360 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
14370 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  c getFlagsProper
14380 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20  ty { {flags ""}
14390 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
143a0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
143b0 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d    # NOTE: Determ
143c0 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d  ine what the com
143d0 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e  bined (global an
143e0 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74  d local) connect
143f0 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
14400 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20     flags should
14410 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69  be, possibly qui
14420 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  etly...      #..
14430 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
14440 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  [getConnectionFl
14450 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71  ags "" $flags$q
14460 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  uiet]....      #
14470 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
14480 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20  If no global or
14490 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  local connection
144a0 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63   flags were spec
144b0 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20  ified, the..
144c0 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c    #       defaul
144d0 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  t connection fla
144e0 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  gs should be use
144f0 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65  d; therefore, re
14500 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  turn..      #
14510 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72      an empty str
14520 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65  ing in that case
14530 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
14540 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
14550 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20  ngth $flags] == 14560 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 14570 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 14580 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 14590 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 145a0 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 In order to chec 145b0 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 k if the default 145c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 145d0 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 s are being used 145e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 145f0 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 it is necessary 14600 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e to attempt a con 14610 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 version to the a 14620 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 ctual enumerated 14630 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14640 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 type. Failing t 14650 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 hat, the check a 14660 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 gainst the defau 14670 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 lt value will be 14680 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14690 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 skipped... 146a0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 #.. if {[ca 146b0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 tch {.. s 146c0 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 et error null; # 146d0 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 IGNORED.... 146e0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 146f0 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 e Utility TryPar 14700 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c seFlagsEnum "" \ 14710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 14720 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 14730 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 14740 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 nFlags ""$flags
14750 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20   null true \..
14760 20 20 20 20 20 20 20 20 20 20 74 72 75 65 20 74            true t
14770 72 75 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  rue error..
14780 20 7d 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20   } value]} then
14790 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
147a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
147b0 74 65 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 73  tempting to pars
147c0 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  e the connection
147d0 20 66 6c 61 67 73 20 63 61 75 73 65 64 20 61 20   flags caused a
147e0 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20  script..
147f0 23 20 20 20 20 20 20 20 65 72 72 6f 72 2e 20 20  #       error.
14800 45 6d 69 74 20 61 20 77 61 72 6e 69 6e 67 20 74  Emit a warning t
14810 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66  o the test log f
14820 69 6c 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  ile and continue
14830 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14840 20 20 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 79    using an emtpy
14850 20 73 74 72 69 6e 67 20 69 6e 73 74 65 61 64 2e   string instead.
14860 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14870 20 20 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 6e       tlog [appen
14880 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
14890 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
148a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 61  NG: failed to pa
148b0 72 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  rse connection f
148c0 6c 61 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c  lags, error: " \
148d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e  ..            \n
148e0 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d  \t $value \n]... 148f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c . set val 14900 75 65 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ue "".. }.. 14910 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14920 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 14930 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 combined flags s 14940 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 tring could not 14950 61 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 actually be conv 14960 65 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 erted.. # 14970 20 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d to the enum 14980 65 72 61 74 65 64 20 74 79 70 65 20 69 74 20 69 erated type it i 14990 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 s the default va 149a0 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 lue, then just u 149b0 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # 149c0 20 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f it verbatim; o 149d0 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 therwise, just r 149e0 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 149f0 74 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d tring. In that. 14a00 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 14a10 61 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 ase, the default 14a20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 14a30 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d s will be used.. 14a40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14a50 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 14a60 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 th$value] == 0
14a70 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65  || $value ne "De 14a80 66 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a fault"} then {.. 14a90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14aa0 20 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 # WARNING: Th 14ab0 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 is returns the s 14ac0 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 tring value of t 14ad0 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 he combined flag 14ae0 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 s, not.. 14af0 23 20 20 20 20 20 20 20 20 20 20 74 68 65 20 65 # the e 14b00 6e 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e numerated value. 14b10 20 20 54 68 69 73 20 69 73 20 62 79 20 64 65 73 This is by des 14b20 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e ign and should n 14b30 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 14b40 20 20 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 be change 14b50 64 20 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 d without carefu 14b60 6c 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 l consideration 14b70 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a (e.g. it would.. 14b80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 14b90 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 prevent the S 14ba0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 14bb0 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 class from allow 14bc0 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 ing invalid.. 14bd0 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 14be0 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 ["magical"] meta 14bf0 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 -flags)... 14c00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 14c10 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 urn [appendArgs 14c20 22 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 "Flags="$flags
14c30 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \;]..      }....
14c40 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
14c50 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
14c60 72 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64  roc enableShared
14c70 43 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20  Cache { channel
14c80 65 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61  enable {quiet fa
14c90 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
14ca0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
14cb0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
14cc0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
14cd0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
14ce0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
14cf0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
14d00 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
14d10 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
14d20 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
14d30 5f 63 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74  _cache [expr int
14d40 28 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20  ($enable)].. 14d50 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 } result] == 0 14d60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14d70 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
14d80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14d90 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14da0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 14dc0 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 14dd0 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 enable_shared_ca 14de0 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d che("$enable \.
14df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
14e00 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75  )... ok: " $resu 14e10 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 14e20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 14e30 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 14e40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
14e50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
14e60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 14e70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 14e80 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 14e90 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f sqlite3_enable_ 14ea0 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 shared_cache("$
14eb0 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20  enable \..
14ec0 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72          ")... er
14ed0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 14ee0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 14ef0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 14f00 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 14f10 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 setupDb {.. 14f20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName 14f30 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 {mode ""} {dateT 14f40 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 imeFormat ""} {d 14f50 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 ateTimeKind ""} 14f60 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 {flags ""}.. 14f70 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 {extra " 14f80 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 "} {qualify true 14f90 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 } {delete true} 14fa0 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 {uri false}.. 14fb0 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 {tempor 14fc0 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 ary true} {varNa 14fd0 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 me db} {quiet fa 14fe0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 14ff0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15000 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f First, see if o 15010 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 ur caller has re 15020 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 quested an in-me 15030 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a mory database... 15040 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 15050 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d et isMemory [isM 15060 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d emoryDb$fileNam
15070 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
15080 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72       # NOTE: For
15090 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64   now, all test d
150a0 61 74 61 62 61 73 65 73 20 75 73 65 64 20 62 79  atabases used by
150b0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite
150c0 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20  are placed..
150d0 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
150e0 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72 65  he database dire
150f0 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74  ctory.  Each dat
15100 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65  abase and relate
15110 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23  d files..      #
15120 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20 61         used by a
15130 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20   test should be
15140 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 74 68  cleaned up by th
15150 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 74 68  at test using th
15160 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
15170 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f   "cleanupDb" pro
15180 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a  cedure, below...
15190 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
151a0 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26  f {!$isMemory && 151b0 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20$qualify} then
151c0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  {..        set f
151d0 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ileName [file jo
151e0 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
151f0 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20  irectory] [file
15200 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]] 15210 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15220 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15230 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 TE: By default, 15240 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 delete any pre-e 15250 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 xisting database 15260 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 with the same f 15270 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ile.. # 15280 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 name if it cu 15290 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d rrently exists.. 152a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 152b0 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
152c0 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69  & $delete && [fi 152d0 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
152e0 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
152f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15300 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
15310 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70   to delete any p
15320 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61  re-existing data
15330 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61  base with the sa
15340 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20  me file..
15350 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a   #       name...
15360 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15370 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66     if {[catch {f
15380 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65  ile delete $file 15390 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 Name} error]} th 153a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 153b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 153c0 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 153d0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 153e0 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor 153f0 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 15400 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 15410 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
15420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15430 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15440 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15450 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15460 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 15470 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 NG: failed to de 15480 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 lete database fi 15490 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
154a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
154b0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73      "\" during s
154c0 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  etup, error: " \
154d0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 154e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 154f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 15500 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15510 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer 15520 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified 15530 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. 15540 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con 15550 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. 15560 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle 15570 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 r. The handle t 15580 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 o the opened dat 15590 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 abase will be st 155a0 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 ored there... 155b0 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 #.. upva 155c0 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d r 1$varName db.
155d0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
155e0 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20    # NOTE: Start
155f0 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e  building the con
15600 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20  nection string.
15610 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72   The only requir
15620 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20  ed portion..
15630 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65    #       of the
15640 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
15650 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20 73  ng is the data s
15660 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e  ource, which con
15670 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20  tains the..
15680 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73   #       databas
15690 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65  e file name itse
156a0 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c  lf.  If our call
156b0 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20  er wants to use
156c0 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20  a URI as..
156d0 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74 61  #       the data
156e0 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65   source, use the
156f0 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74   FullUri connect
15700 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65  ion string prope
15710 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  rty to..      #
15720 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 68        prevent th
15730 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73 74  e data source st
15740 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20  ring from being
15750 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20  mangled...
15760 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72  #..      if {$ur 15770 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 i} then {.. 15780 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio 15790 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c n {FullUri=${fil
157a0 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d  eName}}..      }
157b0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
157c0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection
157d0 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66  {Data Source=${f 157e0 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. 157f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 15800 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e # NOTE: Sin 15810 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 ce this procedur 15820 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c e has no special 15830 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 knowledge of wh 15840 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a at the default.. 15850 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 15860 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 tting is for the 15870 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e ToFullPath conn 15880 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 ection string pr 15890 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 opery, always.. 158a0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 # add 158b0 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e the value we kn 158c0 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 ow about to the 158d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 158e0 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 g... #.. 158f0 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec 15900 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 tion {;ToFullPat 15910 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d h=${qualify}}...
15920 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15930 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
15940 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
15950 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20  a journal mode,
15960 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72  add the necessar
15970 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20  y portion..
15980 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20   #       of the
15990 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
159a0 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  g now...      #.
159b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
159c0 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d  ng length $mode] 159d0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 159e0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 159f0 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 nection {;Journa 15a00 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d l Mode=${mode}}.
15a10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
15a20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
15a30 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  E: If our caller
15a40 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74   specified a Dat
15a50 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64  eTime format, ad
15a60 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d  d the necessary.
15a70 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
15a80 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  ortion of the co
15a90 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
15aa0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
15ab0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
15ac0 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d   length $dateTim 15ad0 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 eFormat] > 0} th 15ae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 15af0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 15b00 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 {;DateTimeFormat 15b10 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 =${dateTimeForma
15b20 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  t}}..      }....
15b30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
15b40 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
15b50 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
15b60 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61   DateTimeKind, a
15b70 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
15b80 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20   portion..
15b90 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63  #       of the c
15ba0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
15bb0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
15bc0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
15bd0 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69  g length $dateTi 15be0 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 meKind] > 0} the 15bf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app 15c00 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { 15c10 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b ;DateTimeKind=${
15c20 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a  dateTimeKind}}..
15c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15c40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
15c50 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 61  : Figure out wha
15c60 74 20 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67  t the final flag
15c70 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65  s for this conne
15c80 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65  ction need to be
15c90 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15ca0 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74    set flags [get
15cb0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags
15cc0 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73  $fileName$flags
15cd0 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20   $quiet].... 15ce0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15cf0 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 15d00 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 specified some 15d10 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 15d20 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a Flags, add the.. 15d30 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 # ne 15d40 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 cessary portion 15d50 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f of the connectio 15d60 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 n string now... 15d70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 15d80 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 15d90 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68$flags] > 0} th
15da0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
15db0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
15dc0 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d  {;Flags=${flags} 15dd0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 15de0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15df0 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call 15e00 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 er specified an 15e10 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f extra payload to 15e20 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d the connection. 15e30 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 15e40 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 tring, append it 15e50 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 15e60 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15e70 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d g length$extra]
15e80 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
15e90 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
15ea0 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72  nection \; $extr 15eb0 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 a.. }.... 15ec0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15ed0 4f 54 45 3a 20 46 6f 72 20 63 6c 61 72 69 74 79 OTE: For clarity 15ee0 2c 20 61 70 70 65 6e 64 20 61 20 66 69 6e 61 6c , append a final 15ef0 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 68 semicolon to th 15f00 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 15f10 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ing... #.. 15f20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn 15f30 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 ection \;.... 15f40 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15f50 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 TE: Open the dat 15f60 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection 15f70 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 now, placing th 15f80 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 e opaque handle 15f90 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 value.. # 15fa0 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 into the va 15fb0 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 riable specified 15fc0 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 15fd0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15fe0 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e set db [sql open 15ff0 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 -type SQLite [s 16000 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e ubst$connection
16010 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ]]....      #..
16020 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e       # NOTE: Con
16030 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f  figure the tempo
16040 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66  rary directory f
16050 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65  or the newly ope
16060 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20  ned database..
16070 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e      #       conn
16080 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73  ection now unles
16090 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72  s our caller for
160a0 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20  bids it...
160b0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65  #..      if {$te 160c0 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 mporary && ![inf 160d0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 o exists ::no(se 160e0 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 tTemporaryDirect 160f0 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ory)]} then {.. 16100 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu 16110 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 te$db [appendAr
16120 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
16130 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73    "PRAGMA temp_s
16140 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
16150 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61   \"" [getTempora
16160 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c  ryDirectory] \"\
16170 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ;]..      }....
16180 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
16190 4e 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e  NOTE: Perform an
161a0 79 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e  y extra per-conn
161b0 65 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72  ection setup for
161c0 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65   the newly opene
161d0 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
161e0 20 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e   database now un
161f0 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20  less our caller
16200 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20  forbids it...
16210 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
16220 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b  executeOnSetup [
16230 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75  getExecuteOnSetu
16240 70 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  p]....      if {
16250 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $16260 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 executeOnSetup] 16270 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 > 0 && \.. 16280 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 ![info exist 16290 73 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e s ::no(executeOn 162a0 53 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d Setup)]} then {. 162b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 162c0 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 162d0 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 command may rai 162e0 73 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 se an error; if 162f0 73 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 so, that is fine 16300 2c 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 , as.. # 16310 20 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 the enclos 16320 69 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 ing test will th 16330 65 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 en fail. The [s 16340 75 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 ubst] command is 16350 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 16360 20 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 used on the SQ 16370 4c 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 L in case it nee 16380 64 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 ds to refer to s 16390 74 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 tate in our.. 163a0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 163b0 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 text... # 163c0 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 .. sql ex 163d0 65 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 ecute$db [subst
163e0 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70   $executeOnSetup 163f0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 16400 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 16410 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 OTE: Always retu 16420 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f rn the connectio 16430 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 n handle upon su 16440 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d ccess... #. 16450 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 . return$d
16460 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  b..    }.....
16470 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65   proc getDbConne
16480 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
16490 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   db} } {..
164a0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
164b0 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70   Refer to the sp
164c0 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65  ecified variable
164d0 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20   (e.g. "db") in
164e0 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
164f0 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ur..      #
16500 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68    caller.  The h
16510 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74  andle to the dat
16520 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79  abase previously
16530 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d   opened via the.
16540 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
16550 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75  setupDb] procedu
16560 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f  re should be sto
16570 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
16580 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
16590 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a   1 $varName db.. 165a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 165b0 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 # NOTE: This re 165c0 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 turns the ADO.NE 165d0 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 T IDbConnection 165e0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 object instance 165f0 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 for the.. # 16600 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 specified 16610 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e databse handle. 16620 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 Since getting 16630 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 this object reli 16640 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 es upon.. # 16650 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 Eagle int 16660 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 ernals, great ca 16670 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b re should be tak 16680 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 en to avoid disp 16690 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 osing of.. 166a0 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a # this obj 166b0 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 ect or otherwise 166c0 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f putting it into 166d0 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 an invalid stat 166e0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 166f0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 16700 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d sts db]} then {. 16710 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 16720 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 16730 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 16740 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 16750 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e -objectflags +N 16760 6f 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 oDispose -alias 16770 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16780 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 16790 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f Active.connectio 167a0 6e 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 ns Item$db..
167b0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d       } result] =
167c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
167d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
167e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63      # NOTE: Succ
167f0 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20  ess, return the
16800 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61  opaque object ha
16810 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ndle...
16820 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   #..          re
16830 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 16840 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 16850 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 16860 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 16870 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 ailure, report w 16880 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 hy... # 16890 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 168a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
168b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
168c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
168d0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
168e0 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e  iled to get conn
168f0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f  ection handle fo
16900 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c  r database \"" \
16910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16920 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  $db "\", error: 16930 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c " \n\t$result \
16940 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
16950 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16960 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
16970 20 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e   Failure, return
16980 20 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e   an obviously in
16990 76 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a  valid opaque obj
169a0 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  ect handle...
169b0 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
169c0 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
169d0 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62  .    proc freeDb
169e0 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61  Connection { {va
169f0 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  rName connection
16a00 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
16a10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
16a20 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
16a30 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
16a40 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22  .g. "connection"
16a50 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  ) in the..
16a60 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20  #       context
16a70 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20  of our caller.
16a80 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63  The opaque objec
16a90 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20  t handle for an
16aa0 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23  ADO.NET..      #
16ab0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
16ac0 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74  n previously ret
16ad0 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43  urned by [getDbC
16ae0 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c  onnection] shoul
16af0 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  d be..      #
16b00 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65      stored there
16b10 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
16b20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 16b30 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d me connection... 16b40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16b50 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 16b60 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 to remove the op 16b70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 16b80 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 le from the inte 16b90 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 rpreter.. # 16ba0 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 now. Thi 16bb0 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 s [object dispos 16bc0 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 e] call will not 16bd0 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 actually dispos 16be0 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 e of the.. 16bf0 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 # underlyi 16c00 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 ng object becaus 16c10 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 e the +NoDispose 16c20 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e flag was set on 16c30 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 it.. # 16c40 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 during creati 16c50 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 on of the opaque 16c60 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d object handle.. 16c70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16c80 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 16c90 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 connection] && 16ca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 \.. [ca 16cb0 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 tch {object disp 16cc0 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d ose$connection}
16cd0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
16ce0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
16cf0 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
16d00 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
16d10 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64   remove the hand
16d20 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  le, report why..
16d30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
16d40 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 16d50 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 16d60 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16d70 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 16d80 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 16d90 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 move connection 16da0 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e handle \""$conn
16db0 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ection \..
16dc0 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72        "\", error
16dd0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 16de0 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 16df0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 16e00 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e addDbConnection 16e10 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 { connection {v 16e20 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a arName db} } {.. 16e30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16e40 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 16e50 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 16e60 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 16e70 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 16e80 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 16e90 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d # caller.. 16ea0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16eb0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
16ec0 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
16ed0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72        # NOTE: Cr
16ee0 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79  eate a correctly
16ef0 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20   formatted name
16f00 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
16f10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a   connection to..
16f20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
16f30 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
16f40 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68  st managed by th
16f50 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65  e Eagle interpre
16f60 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ter...      #..
16f70 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a       set db [obj
16f80 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
16f90 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
16fa0 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e            Eagle.
16fb0 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76  _Components.Priv
16fc0 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61  ate.FormatOps Da
16fd0 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65  tabaseObjectName
16fe0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a   $connection \.. 16ff0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 SQLite 17000 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 Connection [obje 17010 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 17020 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 17030 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 NextId]].... 17040 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17050 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62 E: Add the datab 17060 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 ase connection p 17070 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 17080 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 aller to the lis 17090 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 170a0 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 of those known 170b0 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 to the Eagle int 170c0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 170d0 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 #.. object 170e0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 170f0 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 NonPublic Interp 17100 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e reter.GetActive. 17110 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 connections Add 17120 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 \..$db
17130 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20   $connection.. 17140 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 17150 20 72 65 6d 6f 76 65 44 62 54 72 61 6e 73 61 63 removeDbTransac 17160 74 69 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74 69 tion { transacti 17170 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d on } {.. #. 17180 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 17190 65 6d 6f 76 65 20 74 68 65 20 64 61 74 61 62 61 emove the databa 171a0 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 70 se transaction p 171b0 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 171c0 61 6c 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d 0a aller from the.. 171d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 171e0 73 74 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 st of those know 171f0 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 n to the Eagle i 17200 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 17210 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 #.. obje 17220 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 17230 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 +NonPublic Inte 17240 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 17250 65 2e 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 5c e.transactions \ 17260 0d 0a 20 20 20 20 20 20 20 20 20 20 52 65 6d 6f .. Remo 17270 76 65 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d ve$transaction.
17280 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
17290 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f 6d 44  roc getRowsFromD
172a0 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74 61 54  ataTable { dataT
172b0 61 62 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c 62  able {valueCallb
172c0 61 63 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ack ""} } {..
172d0 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73     set rows [lis
172e0 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f  t]..      set co
172f0 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20  unt [$dataTable 17300 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a Columns.Count].. 17310 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 .. for {set 17320 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 index 0} {$inde
17330 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63  x < $count} {inc 17340 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 r index} {.. 17350 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75 set dataColu 17360 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d mn [$dataTable -
17370 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65  alias Columns.ge
17380 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a  t_Item $index].. 17390 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 set name 173a0 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61 s($index) [$data 173b0 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d Column ColumnNam 173c0 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 e].. }.... 173d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 173e0 4e 4f 54 45 3a 20 53 65 74 75 70 20 73 6f 6d 65 NOTE: Setup some 173f0 20 54 63 6c 20 72 65 74 75 72 6e 20 63 6f 64 65 Tcl return code 17400 20 63 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 20 constants... 17410 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 17420 4f 6b 20 30 3b 20 73 65 74 20 45 72 72 6f 72 20 Ok 0; set Error 17430 31 3b 20 73 65 74 20 52 65 74 75 72 6e 20 32 3b 1; set Return 2; 17440 20 73 65 74 20 42 72 65 61 6b 20 33 3b 20 73 65 set Break 3; se 17450 74 20 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a t Continue 4.... 17460 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 17470 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 each -alias data 17480 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 Row [set dataRow 17490 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f s [$dataTable Ro
174a0 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ws]] {..
174b0 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a  set row [list]..
174c0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73  ..        for {s
174d0 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e  et index 0} {$in 174e0 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 dex <$count} {i
174f0 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
17500 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
17510 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65  e [$dataRow -cre 17520 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 ate -alias get_I 17530 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 tem$index]....
17540 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
17550 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c  ring length $val 17560 75 65 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d ueCallback] > 0} 17570 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17580 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 set code [c 17590 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 175a0 20 20 20 20 20 20 24 76 61 6c 75 65 43 61 6c 6c$valueCall
175b0 62 61 63 6b 20 24 64 61 74 61 54 61 62 6c 65 20  back $dataTable 175c0 24 64 61 74 61 52 6f 77 20 24 69 6e 64 65 78 20$dataRow $index 175d0 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20$value..
175e0 20 20 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d 0d      } newValue].
175f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
17600 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d  f {$code ==$Ok}
17610 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17620 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17630 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17640 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
17650 64 20 28 6e 65 77 3f 29 20 72 6f 77 20 76 61 6c  d (new?) row val
17660 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue...
17670 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17680 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20      lappend row
17690 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e  [list $names($in
176a0 64 65 78 29 20 24 6e 65 77 56 61 6c 75 65 5d 0d  dex) $newValue]. 176b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 176c0 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 lseif {$code ==
176d0 24 45 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a  $Error} then {.. 176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 176f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 17700 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 28 NOTE: Use the ( 17710 6e 65 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 76 new?) NULL row v 17720 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 alue... 17730 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17740 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f lappend ro 17750 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 w [list$names($17760 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 index)].. 17770 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 } elseif {$
17780 63 6f 64 65 20 3d 3d 20 24 52 65 74 75 72 6e 7d  code == $Return} 17790 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 177a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 177b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 177c0 53 6b 69 70 20 72 65 6d 61 69 6e 69 6e 67 20 76 Skip remaining v 177d0 61 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20 72 alues for this r 177e0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ow... 177f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17800 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 break.. 17810 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif 17820 7b 24 63 6f 64 65 20 3d 3d 20 24 42 72 65 61 6b {$code == $Break 17830 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17840 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17850 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17860 20 53 6b 69 70 20 70 72 6f 63 65 73 73 69 6e 67 Skip processing 17870 20 74 68 69 73 20 72 6f 77 20 76 61 6c 75 65 2e this row value. 17880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17890 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d #.. } 178a0 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d elseif {$code =
178b0 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65  = $Continue} the 178c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 178d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 178e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 178f0 64 65 66 61 75 6c 74 20 72 6f 77 20 76 61 6c 75 default row valu 17900 65 20 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20 e handling... 17910 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 17920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 17930 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 17940 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 17950 20 63 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65 0d code$Continue.
17960 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
17970 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 63            if {$c 17980 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 ode ==$Continue
17990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
179a0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
179b0 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d  g length $value] 179c0 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 179d0 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a ![obj 179e0 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 ect invoke Conve 179f0 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c rt IsDBNull$val
17a00 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
17a10 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
17a20 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61  nd row [list $na 17a30 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 mes($index) [$va 17a40 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a lue ToString]].. 17a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 17a60 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 17a70 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 lappend row 17a80 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e [list$names($in 17a90 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 dex)].. 17aa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 17ab0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 17ac0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 17ad0 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20 rows$row..
17ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
17af0 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d  rn $rows.. }. 17b00 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d .... proc dum 17b10 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 pRowsFromDataTab 17b20 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77 le { channel row 17b30 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 s } {.. set 17b40 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 sequence 1.... 17b50 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77 foreach row 17b60 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20$rows {..
17b70 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17b80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 17b90 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 [exp 17ba0 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31 r {$sequence > 1
17bb0 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22   ? "\n" : ""}] "
17bc0 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71  ---- ROW #" $seq 17bd0 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 uence :\n].... 17be0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 foreach pa 17bf0 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20 ir$row {..
17c00 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74       if {[llengt
17c10 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74  h $pair] >= 2} t 17c20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 17c30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
17c40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74  l [appendArgs \t
17c50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17c60 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65      [list [linde
17c70 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22  x $pair 0]] ": " 17c80 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 [list [lindex$
17c90 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20  pair 1]] \n]..
17ca0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66          } elseif
17cb0 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72   {[llength $pair 17cc0 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a ] == 1} then {.. 17cd0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 17ce0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
17cf0 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20  ndArgs \t \..
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69               [li
17d10 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72  st [lindex $pair 17d20 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 0]] ": <null>\n 17d30 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 "].. } 17d40 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 17d50 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
17d60 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20  el \t<empty>\n;
17d70 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f  # NOTE: No data?
17d80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
17d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
17da0 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63      incr sequenc
17db0 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  e..      }..
17dc0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
17dd0 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e  leanupDb { fileN
17de0 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d  ame {varName db}
17df0 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20   {collect true}
17e00 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a  {qualify true}..
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75       {delete tru
17e30 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
17e40 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
17e50 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20  ttempt to force
17e60 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72  all pending "gar
17e70 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f  bage" objects to
17e80 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a   be collected,..
17e90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
17ea0 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73  cluding SQLite s
17eb0 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61  tatements and ba
17ec0 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68  ckup objects; th
17ed0 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d  is should allow.
17ee0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
17ef0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
17f00 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
17f10 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20  e deleted...
17f20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$17f30 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d collect} then {. 17f40 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 . collect 17f50 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f Garbage$::test_
17f60 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d  channel..      }
17f70 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
17f80 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
17f90 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
17fa0 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
17fb0 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
17fc0 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
17fd0 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
17fe0 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
17ff0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
18000 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
18010 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20  d via the..
18020 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44   #       [setupD
18030 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f  b] procedure sho
18040 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68  uld be stored th
18050 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ere...      #..
18060 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 18070 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 18080 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18090 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e E: Close the con 180a0 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 nection to the d 180b0 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 atabase now. Th 180c0 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 is should allow 180d0 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 us.. # 180e0 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 to delete the 180f0 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 underlying datab 18100 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 ase file... 18110 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 18120 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 nfo exists db] & 18130 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c & [catch {sql cl 18140 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d ose$db} error]}
18150 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18160 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
18170 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
18180 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74  ailed to close t
18190 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70  he database, rep
181a0 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
181b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
181c0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 181d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 181e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= 181f0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 18200 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 led to close dat 18210 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c abase \""$db "\
18220 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  ", error: " \..
18230 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
18240 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 18250 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 18260 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 18270 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 rst, see if our 18280 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 caller has reque 18290 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 sted an in-memor 182a0 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 y database... 182b0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 182c0 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f isMemory [isMemo 182d0 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ryDb$fileName].
182e0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
182f0 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
18300 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f  the full path to
18310 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
18320 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f  le name.  For no
18330 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20  w, all test..
18340 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62     #       datab
18350 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74  ase files are st
18360 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70  ored in the temp
18370 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e  orary directory.
18380 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
18390 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20   if {!$isMemory 183a0 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 &&$qualify} the
183b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
183c0 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
183d0 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
183e0 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c  eDirectory] [fil
183f0 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65  e tail $fileName 18400 5d 5d 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 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 18430 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 he file still ex 18440 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ists... #.. 18450 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 if {!$isMe
18460 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20  mory && $delete 18470 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 && [file exists 18480 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
18490 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
184a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
184b0 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74  kip deleting dat
184c0 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73  abase files if s
184d0 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65  omebody sets the
184e0 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20   global..
184f0 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
18500 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e  e to prevent it.
18510 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18520 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
18530 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61  exists ::no(clea
18540 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65  nupDbFile)]} the
18550 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
18560 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
18570 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  TE: Attempt to d
18580 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64  elete the test d
18590 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77  atabase file now
185a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
185b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
185c0 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b  et code [catch {
185d0 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil 185e0 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 eName} error]]} 185f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18600 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18610 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f # NOTE: We so 18620 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 mehow failed to 18630 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c delete the file, 18640 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 18650 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 18660 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
18670 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
18680 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
186a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
186b0 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61  led to delete da
186c0 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20  tabase file \""
186d0 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 186f0 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c during cleanup, 18700 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
18710 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
18720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
18730 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
18740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
18750 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68   # NOTE: Show th
18760 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65  at we skipped de
18770 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e  leting the file.
18780 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
18790 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64           set cod
187a0 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e 0....
187b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 187c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 187d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 187e0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 187f0 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 G: skipped delet 18800 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c ing database fil 18810 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
18820 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18830 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
18840 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  nup\n"]..
18850 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
18860 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
18870 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
18880 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
18890 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21   exist, success!
188a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
188b0 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
188c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
188d0 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a    return $code.. 188e0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 188f0 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 oc saveEnvironme 18900 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 ntVariables { na 18910 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d mes {varName ""} 18920 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 18930 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 18940 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 each name, does 18950 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f the live enviro 18960 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 nment variable e 18970 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 xist? If.. 18980 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61 76 # so, sav 18990 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 e the value for 189a0 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73 65 later; otherwise 189b0 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 , make sure the 189c0 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20 20 saved.. # 189d0 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73 20 value does 189e0 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 not exist either 189f0 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76 69 . The live envi 18a00 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 18a10 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 18a20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65 64 ARE NOT changed 18a30 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 by this procedu 18a40 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 18a50 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 18a60 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
18a70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
18a80 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61         set varNa
18a90 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  me savedEnv..
18aa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70     }....      up
18ab0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73  var 1 $varName s 18ac0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 18ad0 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e foreach name$n
18ae0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
18af0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
18b00 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d 20   ::env($name)]} 18b10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18b20 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 24 set savedEnv($
18b30 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e 61  name) $::env($na
18b40 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me)..        } e
18b50 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
18b60 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
18b70 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d  in savedEnv($nam 18b80 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e).. }.. 18b90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 18ba0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 18bb0 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 6c This is self-cl 18bc0 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73 eaning. If no s 18bd0 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 aved environment 18be0 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a variables now.. 18bf0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 18c00 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 ist, remove the 18c10 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d array... #. 18c20 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 61 . if {[arra 18c30 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 5d y size savedEnv] 18c40 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 18c50 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 18c60 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 18c70 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 v.. }.. 18c80 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 18c90 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 18ca0 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d tVariables { nam 18cb0 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 es {varName ""} 18cc0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 18cd0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 18ce0 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20 each name, does 18cf0 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72 6f the saved enviro 18d00 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 nment variable e 18d10 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 xist? If.. 18d20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65 73 # so, res 18d30 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 76 tore the saved v 18d40 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20 69 alue and unset i 18d50 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 t; otherwise, ma 18d60 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20 23 ke sure.. # 18d70 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65 20 the live 18d80 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 18d90 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 able does not ex 18da0 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65 2e ist either (i.e. 18db0 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 it.. # 18dc0 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20 74 was not set t 18dd0 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20 20 o begin with). 18de0 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20 6c Both saved and l 18df0 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d ive environment. 18e00 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 18e10 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68 61 ariables ARE cha 18e20 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f nged by this pro 18e30 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 cedure... # 18e40 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 18e50 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
18e60 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ame] == 0} then
18e70 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76  {..        set v
18e80 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d  arName savedEnv.
18e90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
18ea0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 18eb0 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 me savedEnv.... 18ec0 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d foreach nam 18ed0 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 e$names {..
18ee0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
18ef0 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 6e  ists savedEnv($n 18f00 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ame)]} then {.. 18f10 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 set ::e 18f20 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65 64 nv($name) $saved 18f30 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 Env($name)..
18f40 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
18f50 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76  omplain savedEnv
18f60 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 18f70 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 18f80 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 18f90 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e 61 mplain ::env($na
18fa0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me)..        }..
18fb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18fc0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18fd0 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63  : This is self-c
18fe0 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20  leaning.  If no
18ff0 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e  saved environmen
19000 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d  t variables now.
19010 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
19020 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65  xist, remove the
19030 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23   array...      #
19040 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72  ..      if {[arr
19050 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76  ay size savedEnv
19060 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
19070 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
19080 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
19090 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  nv..      }..
190a0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
190b0 73 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 61  saveGetSettingVa
190c0 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  lueEnvironment {
190d0 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
190e0 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
190f0 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61  dEnv....      sa
19100 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  veEnvironmentVar
19110 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
19120 20 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70            No_Exp
19130 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74  and No_SQLiteGet
19140 53 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f  SettingValue No_
19150 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46  SQLiteXmlConfigF
19160 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile] \..
19170 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20    savedEnv..
19180 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
19190 65 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67  estoreGetSetting
191a0 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  ValueEnvironment
191b0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76   {} {..      upv
191c0 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61  ar 1 savedEnv sa
191d0 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
191e0 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
191f0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
19200 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e  t \..          N
19210 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69  o_Expand No_SQLi
19220 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  teGetSettingValu
19230 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f  e No_SQLiteXmlCo
19240 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20  nfigFile] \..
19250 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d         savedEnv.
19260 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
19270 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f  roc saveSQLiteCo
19280 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d  nnectionEnvironm
19290 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ent {} {..
192a0 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76  upvar 1 savedEnv
192b0 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20   savedEnv....
192c0 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65     saveEnvironme
192d0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
192e0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44  t \..          D
192f0 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69  efaultFlags_SQLi
19300 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f  teConnection No_
19310 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
19320 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20  NewParser] \..
19330 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76          savedEnv
19340 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
19350 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69  proc restoreSQLi
19360 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69  teConnectionEnvi
19370 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
19380 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
19390 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
193a0 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e  .      restoreEn
193b0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
193c0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
193d0 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61        DefaultFla
193e0 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  gs_SQLiteConnect
193f0 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e  ion No_SQLiteCon
19400 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72  nectionNewParser
19410 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] \..          s
19420 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a  avedEnv..    }..
19430 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65  ...    proc save
19440 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76  SQLiteConvertEnv
19450 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20  ironment {} {..
19460 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76       upvar 1 sav
19470 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a  edEnv savedEnv..
19480 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69  ..      saveEnvi
19490 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
194a0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
194b0 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f      Use_SQLiteCo
194c0 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54  nvert_DefaultDbT
194d0 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f  ype Use_SQLiteCo
194e0 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70  nvert_DefaultTyp
194f0 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20  eName] \..
19500 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20      savedEnv..
19510 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
19520 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f   restoreSQLiteCo
19530 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  nvertEnvironment
19540 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76   {} {..      upv
19550 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61  ar 1 savedEnv sa
19560 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
19570 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
19580 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
19590 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55  t \..          U
195a0 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  se_SQLiteConvert
195b0 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55  _DefaultDbType U
195c0 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  se_SQLiteConvert
195d0 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65  _DefaultTypeName
195e0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] \..          s
195f0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a  avedEnv..    }..
19600 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75  ...    proc setu
19610 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  pDbInterruptCall
19620 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c  back { channel l
19630 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  og } {..      tp
19640 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 19650 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 -- setting up de 19660 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 bugger interrupt 19670 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a callback... ".. 19680 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 19690 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 ch {.. sa 196a0 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 196b0 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 196c0 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 quie 196d0 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 tFindInterpreter 196e0 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 TestPath quietSe 196f0 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 tupInterpreterTe 19700 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 stPath].... 19710 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 try {.. 19720 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19730 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 # NOTE: Prevent 19740 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 the vendor scri 19750 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f pt from being no 19760 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e isy when creatin 19770 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 g.. # 19780 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 the isolate 19790 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 197a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 197b0 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 set ::env 197c0 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 (quietFindInterp 197d0 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 reterTestPath) 1 197e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 197f0 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 ::env(quietSetup 19800 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 InterpreterTestP 19810 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 ath) 1.... 19820 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19830 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 # NOTE: Make su 19840 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 re the script de 19850 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 bugger and the i 19860 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 19870 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ter.. # 19880 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 are setup 19890 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 198a0 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 se... # 198b0 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 198c0 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 g setup true tru 198d0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e.... # 198e0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 198f0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 TE: Load the nec 19900 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 essary packages 19910 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 into the isolate 19920 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 19930 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 19940 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 debug eva 19950 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l {.. 19960 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 19970 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 Eagle.. 19980 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 package requ 19990 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 ire Eagle.Librar 199a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 y.. p 199b0 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E 199c0 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 agle.Test.. 199d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 199e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 199f0 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 19a00 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 e necessary vari 19a10 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 ables into the i 19a20 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 19a30 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ter... 19a40 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 #.. deb 19a50 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 ug invoke 0 set 19a60 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
19a70 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a  channel; # NOTE:
19a80 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20   For [tputs]...
19a90 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69           debug i
19aa0 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65  nvoke 0 set ::te
19ab0 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e  st_log $log; # N 19ac0 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e OTE: For [tlog]. 19ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 19ae0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 19af0 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 E: Install the c 19b00 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 allback script t 19b10 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 o be evaluated i 19b20 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a n the isolated.. 19b30 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 19b40 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 interpreter wh 19b50 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 en this interpre 19b60 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 ter is interrupt 19b70 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 ed by script.. 19b80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19b90 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 cancellation, et 19ba0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d c... #. 19bb0 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 19bc0 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 callback apply 19bd0 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 {{sender e} {.. 19be0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 19bf0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 19c00 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 : Check if this 19c10 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 debugger callbac 19c20 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 k is one that we 19c30 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 care about... 19c40 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 19c50 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 set int 19c60 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c erruptTypes [spl 19c70 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 it [$e Interrupt
19c80 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20  Type] ", "]....
19c90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22             if {"
19ca0 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e  Canceled" in $in 19cb0 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 terruptTypes || 19cc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19cd0 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 "Unwound" in 19ce0 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d$interruptTypes}
19cf0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
19d00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19d10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19d20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f  Make sure the [o
19d30 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69  bject] command i
19d40 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69  s available.  Si
19d50 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..
19d60 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
19d70 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69  is an isolated i
19d80 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63  nterpreter, chec
19d90 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72  k for it the har
19da0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
19db0 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20   #       way...
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19de0 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
19df0 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74   commands object
19e00 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ]] > 0} then {..
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
19e30 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61     # NOTE: Itera
19e40 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64  te through all d
19e50 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
19e60 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65  ons known to the
19e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19e80 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74    #       parent
19e90 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
19eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19ec0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
19ed0 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62   -alias pair [ob
19ee0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
19ef0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
19f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19f10 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65       $e Interpre 19f20 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d ter.connections] 19f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19f40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19f50 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 19f60 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 E: Attempt to ca 19f70 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 ncel any SQL que 19f80 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 ries in progress 19f90 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on.. 19fa0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 19fb0 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e his database con 19fc0 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 nection... 19fd0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19ff0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 if {[catch {$pa
1a000 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d  ir Value.Cancel}
1a010 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1a020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a030 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a040 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a050 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 ndArgs \n \.. 1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a070 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1a080 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 NG: failed to ca 1a090 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 ncel query for " 1a0a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e "con 1a0c0 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 nection \"" [$pa
1a0d0 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72  ir Key] "\", err
1a0e0 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20  or: " \n\t \..
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a100 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d        $error \n] 1a110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1a130 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1a140 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a160 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1a170 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1a180 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20  rgs \n \..
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1a1a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e  === WARNING: can
1a1b0 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71  not cancel any q
1a1c0 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20  ueries: " \..
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a1e0 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22   "the \"object\"
1a1f0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not
1a200 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20  available\n"]..
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1a230 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20           }}..
1a240 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b       } finally {
1a250 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74  ..          rest
1a260 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  oreEnvironmentVa
1a270 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
1a280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71  .              q
1a290 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65  uietFindInterpre
1a2a0 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65  terTestPath quie
1a2b0 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
1a2c0 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20  rTestPath]..
1a2d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
1a2e0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
1a2f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
1a300 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
1a310 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
1a320 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
1a330 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 1a340 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 1a350 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 1a360 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1a370 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
1a380 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 1a390 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 1a3a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1a3b0 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 1a3c0 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 1a3d0 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 1a3e0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 1a3f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1a400 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 1a410 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 1a420 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 1a430 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 1a440 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 1a450 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 1a460 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 1a470 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 1a480 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 1a490 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 1a4a0 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 1a4b0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 1a4c0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 1a4d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1a4e0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
1a4f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
1a500 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 1a510 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 1a520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 1a530 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 1a540 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 1a550 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 1a560 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1a570 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 1a580 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
1a590 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1a5a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1a5b0 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
1a5c0 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
1a5d0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
1a5e0 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
1a5f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
1a600 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
1a610 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a620 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 1a630 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1a640 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 1a650 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a660 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a670 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 1a680 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 1a690 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 1a6a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a6b0 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 1a6c0 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 1a6d0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
1a6e0 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
1a6f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
1a700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
1a710 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
1a720 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
1a730 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
1a740 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
1a750 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1a760 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1a770 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1a780 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1a790 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1a7a0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1a7b0 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 1a7c0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
1a7d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a7e0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
1a7f0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
1a800 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 1a810 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1a820 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1a830 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1a840 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1a850 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 1a860 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 1a870 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 1a880 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a890 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 1a8a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1a8b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1a8c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1a8d0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1a8e0 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
1a8f0 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
1a900 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 1a910 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 1a920 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 1a930 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 1a940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 1a950 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 1a960 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1a970 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 1a980 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 1a990 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 1a9a0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 1a9b0 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 1a9c0 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
1a9d0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
1a9e0 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d   proc cleanupMem
1a9f0 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71  ory { varName {q
1aa00 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
1aa10 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1aa20 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
1aa30 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  and] && \..
1aa40 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1aa50 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20  gth $varName] > 1aa60 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1aa70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1aa80 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 1aa90 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 1aaa0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con 1aab0 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the 1aac0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1aad0 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 context of our 1aae0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 caller. The op 1aaf0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 1ab00 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 le for an.. 1ab10 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e # ADO.N 1ab20 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 ET connection pr 1ab30 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 eviously returne 1ab40 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 d by [getDbConne 1ab50 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ction].. 1ab60 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 1ab70 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 1ab80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ab90 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
1aba0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  Name connection.
1abb0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1abc0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1abd0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1abe0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c   $connection Rel 1abf0 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 easeMemory.. 1ac00 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 1ac10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ac20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1ac30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1ac40 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1ac50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1ac60 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1ac70 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1ac80 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1ac90 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 release database 1aca0 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 memory, error: 1acb0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1acc0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1acd0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1ace0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1acf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ad00 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  if {[llength [in
1ad10 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75  fo commands debu
1ad20 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  g]] > 0} then {.
1ad30 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1ad40 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1ad50 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
1ad60 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20   debug purge]..
1ad70 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
1ad80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ad90 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1ada0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1adb0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1adc0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1add0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1ade0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1adf0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1ae00 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72  to purge call fr
1ae10 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  ame, error: " \.
1ae20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ae30 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1ae40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1ae50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1ae60 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1ae70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c {.. upl 1ae80 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 evel 1 [list deb 1ae90 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 ug cleanup].. 1aea0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 } result]} 1aeb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1aec0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1aed0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1aee0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1aef0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1af00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1af10 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1af20 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1af30 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 cleanup interpr 1af40 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c eter, error: " \ 1af50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1af60 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
1af70 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1af80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1af90 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1afa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70   {..          up
1afb0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65  level 1 [list de
1afc0 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20  bug collect]..
1afd0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1afe0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1aff0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1b000 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b010 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1b020 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_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 74  ARNING: failed t
1b060 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
1b070 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b090 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1b0a0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b0b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1b0c0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1b0d0 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 proc setupMemory 1b0e0 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 Counters { varNa 1b0f0 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 me } {.. if 1b100 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1b110 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1b120 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 1b130 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f ar 1$varName co
1b140 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  unter....
1b150 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20   set counter(1)
1b160 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
1b170 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
1b180 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67       System.Diag
1b190 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61  nostics.Performa
1b1a0 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65  nceCounter Proce
1b1b0 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..
1b1c0 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20    "Working Set"
1b1d0 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
1b1e0 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e  file tail $::bin 1b1f0 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 _file]]].... 1b200 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 set counter( 1b210 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 2) [object creat 1b220 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 1b230 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1b240 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f iagnostics.Perfo 1b250 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 rmanceCounter Pr 1b260 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 ocess \.. 1b270 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 "Working Se 1b280 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f t Peak" [file ro 1b290 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 otname [file tai 1b2a0 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d l$::bin_file]]]
1b2b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
1b2c0 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65  counter(3) [obje
1b2d0 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
1b2e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b2f0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
1b300 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f  cs.PerformanceCo
1b310 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d  unter Process \.
1b320 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72  .            "Pr
1b330 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69  ivate Bytes" [fi
1b340 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c  le rootname [fil
1b350 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69  e tail $::bin_fi 1b360 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a le]]].. }.. 1b370 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " 1b380 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... 1b390 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f proc reportMemo 1b3a0 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 ryCounters { cha 1b3b0 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 nnel varName pre 1b3c0 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 fix } {.. i 1b3d0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1b3e0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 1b3f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 1b400 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 var 1$varName c
1b410 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20  ounter....
1b420 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1b430 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1b440 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1b450 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
1b460 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
1b470 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
1b480 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 1b490 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (1) CounterName] 1b4a0 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 1b4b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1b4c0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
1b4d0 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c  ounter(1) RawVal
1b4e0 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ue] \n]....
1b4f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1b500 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1b510 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 1b520 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 -- "$prefix " c
1b530 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20  ounter \"" \..
1b540 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
1b550 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65  t invoke $counte 1b560 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 r(2) CounterName 1b570 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 ] "\" value is " 1b580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b590 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
1b5a0 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61  counter(2) RawVa
1b5b0 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  lue] \n]....
1b5c0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1b5d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1b5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 1b5f0 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 --- "$prefix "
1b600 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20  counter \"" \..
1b610 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65             [obje
1b620 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74  ct invoke $count 1b630 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d er(3) CounterNam 1b640 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 e] "\" value is 1b650 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1b660 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1b670 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56$counter(3) RawV
1b680 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  alue] \n]..
1b690 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
1b6a0 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61    proc collectGa
1b6b0 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20  rbage { channel
1b6c0 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30  {milliseconds 10
1b6d0 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d  00} {quiet true}
1b6e0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
1b6f0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
1b700 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
1b710 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
1b720 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1b730 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1b740 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
1b750 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ry false..
1b760 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
1b770 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b780 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1b790 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b7a0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b7b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b7c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b7d0 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20     "---- memory
1b7e0 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
1b7f0 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74  R before collect
1b800 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  ion... " \..
1b810 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 1b820 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 1b830 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b840 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1b850 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1b860 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1b870 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1b880 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1b890 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1b8a0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1b8b0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1b8c0 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 o get CLR memory 1b8d0 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 usage, error: " 1b8e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b8f0 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
1b900 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1b910 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1b920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1b930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b970 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
1b980 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1b990 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74  E: Repeatedly at
1b9a0 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74  tempt to collect
1b9b0 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74   garbage until t
1b9c0 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62  he allotted numb
1b9d0 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  er..      #
1b9e0 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64    of millisecond
1b9f0 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20  s has elapsed.
1ba00 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74  Always attempt t
1ba10 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
1ba20 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1ba30 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d   at least once..
1ba40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1ba50 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1ba60 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1ba70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
1ba80 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20  et start [clock
1ba90 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20  seconds]..
1baa0 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72    set stop [expr
1bab0 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c   {$start + ($mil
1bac0 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30  liseconds / 1000
1bad0 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64  )}]....        d
1bae0 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  o {..          #
1baf0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1bb00 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
1bb10 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62  orce a full garb
1bb20 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e  age collection n
1bb30 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d  ow.  Report any.
1bb40 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1bb50 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73     error that is
1bb60 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20   encountered if
1bb70 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20  we fail...
1bb80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1bb90 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1bba0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
1bbb0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54  t invoke GC GetT
1bbc0 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d  otalMemory true.
1bbd0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72  .          } err
1bbe0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
1bbf0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1bc00 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1bc10 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1bc20 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1bc30 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1bc50 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1bc60 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63  d full garbage c
1bc70 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72  ollection, error
1bc80 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
1bc90 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65           \n\t $e 1bca0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 1bcb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1bcc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1bcd0 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b set now [clock 1bce0 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 seconds].. 1bcf0 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 } while {$sta
1bd00 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e  rt <= $now &&$n
1bd10 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20  ow < $stop}.. 1bd20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 }.... ## 1bd30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bd40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bd50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bd60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bd70 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 1bd80 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1bd90 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 1bda0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bdb0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 1bdc0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 1bdd0 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 nvoke GC GetTota 1bde0 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 lMemory false.. 1bdf0 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1be00 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1be10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1be20 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1be30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1be40 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1be50 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1be60 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 "---- me 1be70 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 mory in use by t 1be80 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c he CLR after col 1be90 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a lection... " \.. 1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1beb0 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c$result " bytes\
1bec0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
1bed0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1bee0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1bef0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1bf00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1bf10 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1bf20 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1bf40 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1bf50 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65  ed to get CLR me
1bf60 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f  mory usage, erro
1bf70 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
1bf80 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1bf90 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1bfa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1bfb0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1bfc0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1bfd0 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 tSQLiteHandleCou 1bfe0 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 nts { channel {q 1bff0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 1c000 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 1c010 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 t [list].... 1c020 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1c030 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 eObjectCommand] 1c040 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1c050 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e [haveSQLiteDefin 1c060 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54 5f eConstant COUNT_ 1c070 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d HANDLE]} then {. 1c080 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1c090 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 1c0a0 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 each critical ha 1c0b0 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 ndle count to th 1c0c0 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 e resulting list 1c0d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1c0e0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 1c0f0 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 me [list \.. 1c100 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 connecti 1c110 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e onCount statemen 1c120 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 tCount backupCou 1c130 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d nt blobCount] {. 1c140 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1c150 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1c160 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1c170 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1c180 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1c190 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1c1a0 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 ata.SQLite.Debug 1c1b0 44 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 Data$name..
1c1c0 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d        } value] =
1c1d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1c1e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1c1f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1c200 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1c210 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1c220 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1c230 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1c240 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
1c250 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d  e count \"" $nam 1c260 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 e "\" is "$valu
1c270 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
1c280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1c290 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
1c2a0 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  lt $value.. 1c2b0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1c2c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1c2d0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1c2f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1c300 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1c320 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1c330 6c 65 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 led to get criti 1c340 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 cal handle count 1c350 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 1c360 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20$name
1c370 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
1c380 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20  \t $value \n].. 1c390 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1c3a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1c3b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 1c3c0 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 seif {!$quiet} t
1c3d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1c3e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1c3f0 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e  : The actual han
1c400 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e  dle counts are n
1c410 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68  ot available; th
1c420 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20  erefore, just..
1c430 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
1c440 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c  eturn an empty l
1c450 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ist...        #.
1c460 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1c470 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 channel "---- cr 1c480 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f itical handle co 1c490 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 unts unavailable 1c4a0 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n".. }.... 1c4b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
1c4c0 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
1c4d0 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77      proc shutdow
1c4e0 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65  nSQLite { channe
1c4f0 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20  l {force false}
1c500 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
1c510 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1c520 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
1c530 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ure that SQLite
1c540 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
1c550 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64  completely shutd
1c560 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  own.  This..
1c570 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65    #       is use
1c580 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20  d by tests that
1c590 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61  change configura
1c5a0 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64  tion options and
1c5b0 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20  /or those..
1c5c0 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65   #       that ne
1c5d0 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure
1c5e0 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69  logging is initi
1c5f0 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73  alized (i.e. jus
1c600 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20  t in case..
1c610 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
1c620 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1c630 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64   was initialized
1c640 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20   in the process
1c650 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..
1c660 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
1c670 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e  teLog class bein
1c680 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20  g able to setup
1c690 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  its logging call
1c6a0 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20  back)...      #
1c6b0 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20        Normally,
1c6c0 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  this should only
1c6d0 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
1c6e0 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
1c6f0 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20  d and..      #
1c700 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75       ready for u
1c710 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
1c720 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
1c730 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65        if {$force 1c740 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 || [isSQLiteRea 1c750 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. 1c760 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c770 23 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 # BUGFIX: Make s 1c780 75 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 ure that any "le 1c790 61 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f aked" transactio 1c7a0 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 ns and/or connec 1c7b0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 tions.. # 1c7c0 20 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 are cle 1c7d0 61 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 aned up before c 1c7e0 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 alling the nativ 1c7f0 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 e shutdown funct 1c800 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ion... #. 1c810 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 1c820 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e transaction [in 1c830 66 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d fo transactions] 1c840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1c850 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 1c860 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c870 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c System#Data#SQL 1c880 69 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 ite#SQLiteTransa 1c890 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 ction#*$transac
1c8a0 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tion]} then {..
1c8b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1c8c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1c8d0 20 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73         sql trans
1c8e0 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  action rollback
1c8f0 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20  $transaction.. 1c900 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 1c910 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 1c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1c930 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1c940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1c950 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1c960 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1c970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c980 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c "---- roll 1c990 65 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 ed back leaked t 1c9a0 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c ransaction \"" \ 1c9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c9c0 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69$transacti
1c9d0 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  on \"\n]..
1c9e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1c9f0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1ca10 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1ca20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ca30 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1ca40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1ca50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ca60 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1ca70 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
1ca80 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74  ollback leaked t
1ca90 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c  ransaction \"" \
1caa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1cab0 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69        $transacti 1cac0 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 on "\", error: " 1cad0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1cae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1caf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1cb00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1cb10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1cb20 20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b      foreach db [
1cb30 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  info connections
1cb40 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ] {..          i
1cb50 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
1cb60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1cb70 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51    System#Data#SQ
1cb80 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite#SQLiteConne
1cb90 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68  ction#* $db]} th 1cba0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1cbb0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 if {[catch {sq 1cbc0 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
1cbd0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1cbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1cbf0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1cc00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1cc10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1cc20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1cc30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1cc40 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f         "---- clo
1cc50 73 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62  sed leaked datab
1cc60 61 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e  ase \"" $db \"\n 1cc70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 1cc80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1cc90 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1cca0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1ccb0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1ccd0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1cce0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1cd00 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1cd10 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 iled to close le 1cd20 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 aked database \" 1cd30 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1cd40 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22$db "\"
1cd50 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
1cd60 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 1cd70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1cd80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1cd90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1cda0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 1cdb0 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 . # BUGFI 1cdc0 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e X: Before callin 1cdd0 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 g the native shu 1cde0 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 tdown function, 1cdf0 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a make sure both.. 1ce00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ce10 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 of the PRAGMA 1ce20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 1ce30 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 1ce40 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 1ce50 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1ce60 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 1ce70 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a$channel true..
1ce80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1ce90 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1cea0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1ceb0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1cec0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1ced0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1cee0 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
1cef0 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
1cf00 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20  3_shutdown..
1cf10 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
1cf20 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1cf30 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1cf40 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1cf50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1cf60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1cf70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1cf80 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
1cf90 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
1cfa0 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  ()... ok: " $res 1cfb0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1cfc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1cfd0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1cfe0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1cff0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d000 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d010 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1d020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1d030 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 1d040 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 1d050 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 1d060 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1d070 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d080 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1d090 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1d0a0 20 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 43   getSettingReadC
1d0b0 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 61  ount { name {via
1d0c0 46 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  File false} } {.
1d0d0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1d0e0 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64  Constraint build
1d0f0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  Configuration.De
1d100 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  bug] && [catch {
1d110 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
1d120 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1d130 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73  NonPublic -alias
1d140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1d150 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1d160 74 65 2e 44 65 62 75 67 44 61 74 61 20 5b 65 78  te.DebugData [ex
1d170 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c  pr {$viaFile ? \ 1d180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 73 .. "s 1d190 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f ettingFileReadCo 1d1a0 75 6e 74 73 22 20 3a 20 22 73 65 74 74 69 6e 67 unts" : "setting 1d1b0 52 65 61 64 43 6f 75 6e 74 73 22 7d 5d 0d 0a 20 ReadCounts"}].. 1d1c0 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 } settingRe 1d1d0 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 adCounts] == 0} 1d1e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d1f0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 1d200 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 th$name] > 0} t
1d210 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d220 20 69 66 20 7b 5b 24 73 65 74 74 69 6e 67 52 65   if {[$settingRe 1d230 61 64 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56 adCounts TryGetV 1d240 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 alue$name value
1d250 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1d260 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1d270 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1d280 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1d290 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1d2a0 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e - setting \""$n
1d2b0 61 6d 65 20 22 5c 22 20 77 61 73 20 72 65 61 64  ame "\" was read
1d2c0 20 22 20 24 76 61 6c 75 65 20 22 20 74 69 6d 65   " $value " time 1d2d0 73 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 s" \.. 1d2e0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 76 69 [expr {$vi
1d2f0 61 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74  aFile ? " from t
1d300 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
1d310 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e   file" : ""}] \n
1d320 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
1d330 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a   return $value.. 1d340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1d350 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1d360 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d set nam 1d370 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 eCount [$setting
1d380 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74  ReadCounts Count
1d390 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ]..          set
1d3a0 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d   valueCount 0...
1d3b0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1d3c0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
1d3d0 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65   pair $settingRe 1d3e0 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 adCounts {.. 1d3f0 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c incr val 1d400 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 ueCount [$pair V
1d410 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alue]....
1d420 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1d430 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1d440 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1d450 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1d460 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 setting \"" [$pa
1d470 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20  ir Key] "\" was
1d480 72 65 61 64 20 22 20 5b 24 70 61 69 72 20 56 61  read " [$pair Va 1d490 6c 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 lue] \.. 1d4a0 20 20 20 20 20 20 20 20 22 20 74 69 6d 65 73 22 " times" 1d4b0 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65 [expr {$viaFile
1d4c0 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f   ? " from the co
1d4d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
1d4e0 22 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  " : \..
1d4f0 20 20 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d         ""}] \n].
1d500 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1d510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d520 20 5b 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e   [list $nameCoun 1d530 74 20 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a t$valueCount]..
1d540 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1d550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1d560 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1d570 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 name] > 0} then 1d580 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 1d590 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1d5a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1d5c0 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e  - setting \"" $n 1d5d0 61 6d 65 20 22 5c 22 20 77 61 73 20 6e 6f 74 20 ame "\" was not 1d5e0 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69 read" [expr {$vi
1d5f0 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20  aFile ? \..
1d600 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68         " from th
1d610 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
1d620 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d  file" : ""}] \n]
1d630 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1d640 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1d650 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d660 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1d670 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1d680 20 6e 6f 20 73 65 74 74 69 6e 67 73 20 77 65 72 no settings wer 1d690 65 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 e read" [expr {$
1d6a0 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20  viaFile ? \..
1d6b0 20 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20           " from
1d6c0 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
1d6d0 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c  n file" : ""}] \
1d6e0 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  n]..      }....
1d6f0 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a       return -1..
1d700 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1d710 6f 63 20 67 65 74 4f 74 68 65 72 43 6f 75 6e 74  oc getOtherCount
1d720 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20   { name } {..
1d730 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73     if {[haveCons
1d740 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66  traint buildConf
1d750 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d  iguration.Debug]
1d760 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20   && [catch {..
1d770 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1d780 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1d790 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a  ublic -alias \..
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1d7b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44  em.Data.SQLite.D
1d7c0 65 62 75 67 44 61 74 61 20 6f 74 68 65 72 43 6f  ebugData otherCo
1d7d0 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f 74  unts..      } ot
1d7e0 68 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  herCounts] == 0}
1d7f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d800 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
1d810 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20  gth $name] > 0} 1d820 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d830 20 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f 75 if {[$otherCou
1d840 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 20  nts TryGetValue
1d850 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68  $name value]} th 1d860 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1d870 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d880 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d890 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1d8a0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68         "---- oth
1d8b0 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24  er counter \"" $1d8c0 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61 6c name "\" has val 1d8d0 75 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d ue "$value \n].
1d8e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1d8f0 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20  eturn $value.. 1d900 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1d910 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1d920 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 1d930 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e ount [$otherCoun
1d940 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
1d950 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f       set valueCo
1d960 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  unt 0....
1d970 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
1d980 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f  h -alias pair $o 1d990 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 therCounts {.. 1d9a0 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 1d9b0 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
1d9c0 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
1d9d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1d9e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1d9f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1da00 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1da10 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 - other counter 1da20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 \"" [$pair Key]
1da30 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20  "\" has value "
1da40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1da50 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d     [$pair Value] 1da60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1da70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 }.... r 1da80 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d eturn [list$nam
1da90 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75  eCount $valueCou 1daa0 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a nt].. }.. 1dab0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1dac0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 1dad0 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 gth$name] > 0}
1dae0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1daf0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1db00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1db10 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1db20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 "---- other cou 1db30 6e 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 nter \""$name "
1db40 5c 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 5c  \" has no value\
1db50 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
1db60 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
1db70 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1db80 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20 61 el "---- there a 1db90 72 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75 6e re no other coun 1dba0 74 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20 7d ters\n".. } 1dbb0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 1dbc0 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 -1.. }..... 1dbd0 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 proc reportSQ 1dbe0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d LiteResources {. 1dbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 . cha 1dc00 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 nnel {quiet fals 1dc10 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 e} {reset true} 1dc20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d {collect true} } 1dc30 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1dc40 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70 6f # NOTE: If po 1dc50 73 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20 72 ssible, always r 1dc60 65 73 65 74 20 74 68 65 20 63 61 63 68 65 64 20 eset the cached 1dc70 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f assembly directo 1dc80 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 1dc90 20 20 61 6e 64 20 74 68 65 20 63 61 63 68 65 64 and the cached 1dca0 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 XML configurati 1dcb0 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 on file name... 1dcc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1dcd0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1dce0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1dcf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1dd00 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1dd10 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1dd20 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1dd30 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1dd40 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1dd50 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1dd60 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re 1dd80 73 65 74 43 61 63 68 65 64 41 73 73 65 6d 62 6c setCachedAssembl 1dd90 79 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 yDirectory.. 1dda0 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 } error] == 1ddb0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1ddc0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1ddd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1dde0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1ddf0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 nnel "---- reset 1de00 20 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 cached assembly 1de10 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a 20 directory\n".. 1de20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1de30 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1de40 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1de50 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1de60 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1de70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1de80 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1de90 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1dea0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1deb0 72 65 73 65 74 20 63 61 63 68 65 64 20 61 73 73 reset cached ass 1dec0 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 2c embly directory, 1ded0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1dee0 20 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22 20 "error: " 1def0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1df00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1df10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1df20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1df30 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1df40 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
1df50 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
1df60 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1df70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1df80 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1df90 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
1dfa0 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64 58      ResetCachedX
1dfb0 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  mlConfigFileName
1dfc0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f  ..        } erro
1dfd0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
1dfe0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1dff0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e000 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e010 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1e020 20 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d   reset cached XM
1e030 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  L configuration
1e040 66 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 20  file name\n"..
1e050 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1e060 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1e070 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1e080 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1e090 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1e0a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1e0b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1e0c0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1e0d0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
1e0e0 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20  eset cached XML
1e0f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 20  configuration "
1e100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e110 20 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 65     "file name, e
1e120 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1e130 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1e140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1e150 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1e160 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1e170 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 1e180 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 report on (and 1e190 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 possibly reset) 1e1a0 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 the runtime.. 1e1b0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 # confi 1e1c0 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 guration statist 1e1d0 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ics... #.. 1e1e0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1e1f0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1e200 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 d] && \.. 1e210 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 [haveConstrai 1e220 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 nt buildConfigur 1e230 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 ation.Debug]} th 1e240 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 1e250 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1e260 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1e270 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1e280 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1e2a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1e2b0 2e 44 65 62 75 67 44 61 74 61 20 73 65 74 74 69 .DebugData setti 1e2c0 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 ngReadCounts.. 1e2d0 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 1e2e0 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 1e2f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1e300 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 set nameCount 1e310 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f [$settingReadCo
1e320 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20  unts Count]..
1e330 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65         set value
1e340 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20  Count 0....
1e350 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
1e360 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20  ach -alias pair
1e370 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 1e380 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ts {.. 1e390 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e incr valueCoun 1e3a0 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d t [$pair Value].
1e3b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1e3c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1e3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e3e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1e3f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e410 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20    "---- setting
1e420 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20  \"" [$pair Key] 1e430 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c "\" was read " \ 1e440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e450 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1e460 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20  ] " times\n"]..
1e470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1e480 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1e490 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 1e4a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1e4b0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1e4c0 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64 43 h {$settingReadC
1e4d0 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72  ounts Clear} err
1e4e0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1e4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e500 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1e510 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e520 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1e530 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1e540 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e550 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73         "---- res
1e560 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69  et setting stati
1e570 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 72  stics for the pr
1e580 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20  evious " \..
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e5a0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1e5b0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1e5c0 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65  ount " values re
1e5d0 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  ad\n"]..
1e5e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1e5f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
1e610 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1e620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e630 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1e640 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e660 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
1e670 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73  G: failed to res
1e680 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69  et setting stati
1e690 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20  stics for " \..
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e6b0 20 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 73     "the previous
1e6c0 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20   " $nameCount " 1e6d0 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c names and "$val
1e6e0 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20  ueCount \..
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e700 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20 65 72   values read, er
1e710 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1e720 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1e730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1e740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1e750 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1e760 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1e770 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1e780 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1e790 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1e7a0 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 c -alias \.. 1e7b0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1e7c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 .Data.SQLite.Deb 1e7d0 75 67 44 61 74 61 20 73 65 74 74 69 6e 67 46 69 ugData settingFi 1e7e0 6c 65 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 leReadCounts.. 1e7f0 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 46 } settingF 1e800 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d ileReadCounts] = 1e810 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1e820 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 1e830 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46 69 ount [$settingFi
1e840 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75  leReadCounts Cou
1e850 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  nt]..          s
1e860 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d  et valueCount 0.
1e870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  ...          obj
1e880 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
1e890 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67  as pair $setting 1e8a0 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 7b FileReadCounts { 1e8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e .. in 1e8c0 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 cr valueCount [$
1e8d0 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20  pair Value]....
1e8e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1e8f0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 1e910 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1e920 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1e940 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20  --- setting \""
1e950 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20  [$pair Key] "\" 1e960 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 was read " \.. 1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e980 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 [$pair Value] "
1e990 74 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 63  times from the c
1e9a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
1e9b0 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  e\n"]..
1e9c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1e9d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
1e9e0 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 1e9f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1ea00 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 f {[catch {$sett
1ea10 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74  ingFileReadCount
1ea20 73 20 43 6c 65 61 72 7d 20 65 72 72 6f 72 5d 20  s Clear} error]
1ea30 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1ea50 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1ea60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ea70 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1ea80 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eaa0 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73     "---- reset s
1eab0 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63  etting statistic
1eac0 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f  s for the previo
1ead0 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  us " \..
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 1eaf0 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 eCount " names a 1eb00 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 nd "$valueCount
1eb10 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 22   " values read "
1eb20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1eb30 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 74 68          "from th
1eb40 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
1eb50 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  file\n"]..
1eb60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1eb70 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1eb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1eb90 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1eba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ebb0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1ebc0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1ebd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ebe0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1ebf0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
1ec00 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61  eset setting sta
1ec10 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d  tistics for " \.
1ec20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ec30 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f       "the previo
1ec40 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20  us " $nameCount 1ec50 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
1ec60 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20  alueCount \..
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ec80 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 66   " values read f
1ec90 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72  rom the configur
1eca0 61 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f  ation file, erro
1ecb0 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20  r: " \n\t \..
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ecd0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 1ece0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1ecf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1ed00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ed10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 1ed20 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1ed30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1ed40 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1ed50 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d Public -alias \. 1ed60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 1ed70 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1ed80 65 2e 44 65 62 75 67 44 61 74 61 20 6f 74 68 65 e.DebugData othe 1ed90 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 rCounts.. 1eda0 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 } otherCounts] 1edb0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1edc0 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 set name 1edd0 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 Count [$otherCou
1ede0 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20  nts Count]..
1edf0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43        set valueC
1ee00 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20  ount 0....
1ee10 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
1ee20 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24  ch -alias pair $1ee30 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 otherCounts {.. 1ee40 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 incr 1ee50 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 valueCount [$pai
1ee60 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20  r Value]....
1ee70 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1ee80 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1ee90 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1eea0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1eeb0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1eec0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1eed0 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c   other counter \
1eee0 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22  "" [$pair Key] " 1eef0 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c \" has value " \ 1ef00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ef10 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1ef20 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
1ef30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1ef40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
1ef50 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 1ef60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1ef70 66 20 7b 5b 63 61 74 63 68 20 7b 24 6f 74 68 65 f {[catch {$othe
1ef80 72 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65  rCounts Clear} e
1ef90 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
1efa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1efb0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1efc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1efd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1efe0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1eff0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1f000 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
1f010 65 73 65 74 20 6f 74 68 65 72 20 63 6f 75 6e 74  eset other count
1f020 65 72 73 20 66 6f 72 20 74 68 65 20 70 72 65 76  ers for the prev
1f030 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  ious " \..
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e                $n 1f050 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 ameCount " names 1f060 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 and "$valueCou
1f070 6e 74 20 22 20 76 61 6c 75 65 73 5c 6e 22 5d 0d  nt " values\n"].
1f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1f090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
1f0a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1f0b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1f0c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1f0d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1f0e0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1f0f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1f110 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1f120 65 64 20 74 6f 20 72 65 73 65 74 20 6f 74 68 65  ed to reset othe
1f130 72 20 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 22  r counters for "
1f140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f150 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65          "the pre
1f160 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75  vious " $nameCou 1f170 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 nt " names and " 1f180 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a$valueCount \..
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f1a0 20 20 20 20 22 20 76 61 6c 75 65 73 2c 20 65 72      " values, er
1f1b0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1f1c0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1f1d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f1e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f1f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1f200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f210 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1f220 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 ObjectCommand] & 1f230 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 1f240 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 1f250 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 Constant INTEROP 1f260 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 _VIRTUAL_TABLE] 1f270 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1f280 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e [haveSQLiteDefin 1f290 65 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f eConstant TRACK_ 1f2a0 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 MEMORY_BYTES]} t 1f2b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1f2c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1f2d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
1f2e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 1f2f0 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor 1f300 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 1f310 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 teMemory... ".. 1f320 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f330 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1f340 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1f350 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1f360 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1f380 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1f390 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 SQLiteMemory byt 1f3a0 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 esAllocated.. 1f3b0 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 1f3c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1f3d0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1f3e0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1f3f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1f400 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1f410 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
1f420 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
1f430 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1f440 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1f450 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
1f460 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
1f470 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1f480 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1f490 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1f4a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 1f4b0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 1f4c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1f4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1f4e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1f4f0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
1f500 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 1f510 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 maximum memory i 1f520 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 1f530 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 1f540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1f550 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1f560 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1f570 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1f580 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1f590 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1f5a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1f5b0 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 iteMemory maximu 1f5c0 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d mBytesAllocated. 1f5d0 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 1f5e0 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 1f5f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1f600 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1f610 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1f620 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1f630 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 ndArgs$memory "
1f640 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
1f650 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1f660 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1f670 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1f680 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
1f690 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1f6a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1f6b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1f6c0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f6d0 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1f6e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f6f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1f700 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
1f710 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1f720 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1f730 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 el "---- current 1f740 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 1f750 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. 1f760 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1f770 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 1f780 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 1f790 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1f7a0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1f7b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1f7c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1f7d0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1f7e0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1f7f0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 1f800 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 eNativeMethods s 1f810 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 qlite3_memory_us 1f820 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 ed.. } me 1f830 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e mory] == 0} then 1f840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1f850 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1f860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1f870 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1f880 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
1f890 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
1f8a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1f8b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1f8c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1f8d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79       # NOTE: May
1f8e0 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  be the SQLite co
1f8f0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e  re library is un
1f900 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20  available?..
1f910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f920 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
1f930 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
1f940 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1f950 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f960 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1f970 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1f980 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 1f990 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f9a0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 1f9b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1f9c0 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 memory unavailab 1f9d0 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 le.... if 1f9e0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1f9f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1fa00 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1fa10 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1fa20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1fa30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1fa40 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d   set result $mem 1fa50 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 ory; # NOTE: Ret 1fa60 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 urn memory in-us 1fa70 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e e to our caller. 1fa80 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 .... if {!$
1fa90 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1faa0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1fab0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 annel "---- maxi 1fac0 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 mum memory in us 1fad0 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 e by SQLite... " 1fae0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1faf0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1fb00 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1fb10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1fb20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1fb30 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1fb40 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 1fb50 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 1fb60 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1fb70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 1fb80 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 1fb90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1fba0 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 sqlite3_memor 1fbb0 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 y_highwater 0.. 1fbc0 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 1fbd0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1fbe0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1fbf0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1fc00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1fc10 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1fc20 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
1fc30 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
1fc40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1fc50 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1fc60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1fc70 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68  # NOTE: Maybe th
1fc80 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1fc90 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c  brary is unavail
1fca0 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20  able?..
1fcb0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
1fcc0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
1fcd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1fce0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1fcf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1fd00 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1fd10 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1fd20 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 1fd30 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1fd40 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1fd50 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1fd60 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d y unavailable... 1fd70 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
1fd80 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1fd90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1fda0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fdb0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1fdc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1fdd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1fde0 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 1fdf0 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 1fe00 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 tGarbage$channe
1fe10 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
1fe20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1fe30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fe40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1fe50 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65  "---- current me
1fe60 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74  mory in use by t
1fe70 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20  he CLR... "..
1fe80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
1fe90 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1fea0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1feb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
1fec0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1fed0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1fee0 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
1fef0 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20  mory false..
1ff00 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d      } memory] ==
1ff10 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1ff20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
1ff30 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74  g is integer -st
1ff40 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74  rict $memory]} t 1ff50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ff60 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1ff70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ff80 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1ff90 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1ffa0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
1ffb0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
1ffc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1ffd0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1ffe0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1fff0 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20  invalid....
20000 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 20010 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 20020 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20030 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
20040 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 20050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 20060 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20070 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 20080 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 20090 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 200a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
200b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
200c0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
200d0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 200e0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
200f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
20100 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20110 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
20120 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
20130 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20  available....
20140 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 20150 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20160 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
20170 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $20180 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 20190 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 201a0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
201b0 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
201c0 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
201d0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
201e0 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ries { channel {
201f0 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  reset false} } {
20200 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
20210 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
20220 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  f the sqlite3_wi
20230 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
20240 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
20250 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
20260 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  #..      tputs $20270 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 20280 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 20290 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e ing for function 202a0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 202b0 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 et_directory... 202c0 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ".... #.. 202d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 202e0 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c call to the sql 202f0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 20300 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 20310 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 n uses the.. 20320 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 # invali 20330 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 d value 0 for th 20340 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 e first argument 20350 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 . This code is 20360 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 designed.. 20370 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b # to check 20380 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 if calling the 20390 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 function will ra 203a0 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e ise an exception 203b0 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 (i.e... # 203c0 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c the actual 203d0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 result of the f 203e0 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 unction does not 203f0 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 matter as long 20400 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 as no.. # 20410 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 directory i 20420 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 s changed)... 20430 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 20440 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 20 5b [isWindows] && [ 20450 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 20460 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 20470 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 20480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20490 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 204a0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 204b0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. 204c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 sqlite3_wi 204d0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 204e0 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 y 0 null.. 204f0 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. 20500 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20510 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c # NOTE: Call 20520 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f ing the sqlite3_ 20530 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 20540 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 ory function doe 20550 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 s not.. # 20560 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 cause an 20570 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 exception; there 20580 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 fore, it must be 20590 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e available (i.e. 205a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 205b0 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 even though it 205c0 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 should return a 205d0 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 failure return 205e0 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 code in this.. 205f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 20600 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d se)... #. 20610 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 20620 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 traint sqlite3_w 20630 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 20640 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 ry.... tp 20650 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
20660 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  \n....        #.
20670 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
20680 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72   Does our caller
20690 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74   want to reset t
206a0 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d  he directories?.
206b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
206c0 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20      if {$reset} 206d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 206e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 206f0 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 NOTE: Now make 20700 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 sure the databas 20710 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 20720 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d directories are. 20730 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 20740 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 reset their d 20750 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 efault values, w 20760 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e hich should be n 20770 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 ull for both... 20780 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 20790 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 Since the sqlit 207a0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 207b0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 207c0 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 is available,.. 207d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 207e0 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 207f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 20800 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 for {set index 20810 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 1} {$index < 3}
20820 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
20830 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
20840 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
20850 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
20860 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
20870 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
20890 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
208a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
208b0 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
208c0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
208d0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
208e0 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c  tory $index null 208f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 20900 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 20910 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20920 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
20930 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
20940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20950 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
20960 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
20970 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e  _directory(" $in 20980 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dex \.. 20990 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c ", null 209a0 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 )... ok: "$resu
209b0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
209c0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
209d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
209e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 209f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 20a00 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20a10 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 - call sqlite3_w 20a20 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 20a30 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 ry("$index \..
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20a50 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72   ", null)... err
20a60 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu 20a70 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 20a80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 20a90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 20aa0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 20ab0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
20ac0 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20  annel no\n....
20ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
20ae0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
20af0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
20b00 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
20b10 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61  tories?  This ca
20b20 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  n only..
20b30 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f  #       be perfo
20b40 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
20b50 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61  s loaded and rea
20b60 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
20b70 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e test..
20b80 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a  #       suite...
20b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
20ba0 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26     if {$reset && 20bb0 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d [isSQLiteReady] 20bc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20bd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 20be0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b # NOTE: Now mak 20bf0 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 e sure the datab 20c00 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 20c10 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 y directories ar 20c20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 20c30 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 reset their 20c40 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c default values, 20c50 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 which should be 20c60 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d null for both.. 20c70 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 20c80 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c Since the sql 20c90 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 20ca0 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 20cb0 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 n does not.. 20cc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 20cd0 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c pear to be avail 20ce0 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 able, use the as 20cf0 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 sociated PRAGMA 20d00 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 commands.. 20d10 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 # inst 20d20 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ead... 20d30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 #.. for 20d40 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b each directory [ 20d50 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f list data_store_ 20d60 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 directory temp_s 20d70 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 tore_directory] 20d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s 20d90 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 et sql [appendAr 20da0 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 gs "PRAGMA "$di
20db0 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22  rectory " = \"\"
20dc0 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ;"]....
20dd0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
20de0 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20  xecuteSql $sql} 20df0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 20e00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20e10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
20e20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
20e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20e40 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74      "---- execut
20e50 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65  e PRAGMA " $dire 20e60 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c ctory "... ok: \ 20e70 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 20e80 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
20e90 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
20ea0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
20eb0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
20ec0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 20ed0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 20ee0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 20ef0 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA 20f00 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
20f10 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  . error: " \..
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20f30 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 20f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 20f50 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20f60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 20f70 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 20f80 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c # NOTE: Final 20f90 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 ly, show the cur 20fa0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 rent value of th 20fb0 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 20fc0 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 20fd0 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 20fe0 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f ies. This can o 20ff0 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 21000 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 21010 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 aded.. # 21020 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f and ready fo 21030 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 21040 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 21050 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 21060 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 SQLiteReady]} th 21070 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f en {.. fo 21080 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 reach directory 21090 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 [list data_store 210a0 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f _directory temp_ 210b0 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d store_directory] 210c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 210d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
210e0 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
210f0 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63  hecking " $direc 21100 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a tory "... "].... 21110 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 21120 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 21130 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
21140 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20  ry \;]....
21150 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
21160 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20  executeSql $sql 21170 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 scalar} result] 21180 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 21190 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 211a0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
211b0 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72  Args "ok: \"" $r 211c0 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 211d0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 211e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 211f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
21200 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20  endArgs "error:
21210 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 21220 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 21230 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 21240 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 21250 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 proc loadSQLi 21260 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b teTestSettings { 21270 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 channel {suffix 21280 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 ""} {quiet fals 21290 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 212a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 212b0 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 kip loading the 212c0 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 settings if thei 212d0 72 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e r usage has been 212e0 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 disabled... 212f0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 21300 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 21310 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 o(sqliteTestSett 21320 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ings)]} then {.. 21330 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 21340 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 21350 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 21360 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 and/or per-host 21370 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f test settings no 21380 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 21390 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 213a0 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c exists ::tcl_pl 213b0 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 atform(user)]} t 213c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 213d0 20 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 set userSetting 213e0 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 sFileName [file 213f0 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 join [getCommonD 21400 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 irectory] \.. 21410 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 21420 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 ndArgs settings 21430 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c$suffix . $::tcl 21440 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 _platform(user) 21450 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 .eagle]].... 21460 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 21470 65 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 exists$userSett
21480 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  ingsFileName]} t
21490 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
214a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 214b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 214c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
214d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
214e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
214f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64        "---- load
21500 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73  ing per-user tes
21510 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20  t settings file
21520 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
21530 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 21540 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c ttingsFileName \ 21550 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 "...\n].. 21560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21570 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 21580 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21590 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 215a0 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 t source$userSe
215b0 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d  ttingsFileName].
215c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
215d0 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
215e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
215f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21610 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
21620 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21640 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
21650 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61  G: failed to loa
21660 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69  d per-user setti
21670 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21690 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting 216a0 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 sFileName "\", e 216b0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
216c0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
216d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
216e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
216f0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
21700 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 21710 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 21720 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21730 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
21740 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
21750 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
21760 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e  - skipped loadin
21770 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
21780 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
21790 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
217a0 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett 217b0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" 217c0 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 217d0 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. 217e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 217f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 21800 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 .. ###### 21810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 21820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 21830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 21840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 21850 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.... if 21860 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 21870 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 tcl_platform(hos 21880 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 t)]} then {.. 21890 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 set hostS 218a0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 218b0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC 218c0 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] 218d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 218e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set 218f0 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
21900 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 21910 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a host) .eagle]].. 21920 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 21930 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f [file exists$ho
21940 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
21950 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
21960 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 21970 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 21980 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21990 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
219a0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
219b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
219c0 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  - loading per-ho
219d0 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
219e0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $21a00 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 21a10 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. 21a20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 21a30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 21a40 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 21a50 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 21a60 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
21a70 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
21a80 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
21a90 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65     } error]} the
21aa0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21ab0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 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 20 20 74 70 75 74 73 20 24 63 tputs$c
21ae0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
21af0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
21b00 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
21b10 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
21b20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74  to load per-host
21b30 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
21b40 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
21b50 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53            $hostS 21b60 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 21b70 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 21b80 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
21bb0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
21bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
21bd0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 21be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21bf0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
21c00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21c20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
21c30 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74  loading per-host
21c40 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
21c50 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f               $ho 21c70 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 21c80 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 me "\", it does 21c90 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 21ca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 21cb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21cc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 21cd0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 21ce0 63 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 c copySampleData 21cf0 62 61 73 65 46 69 6c 65 73 20 7b 7d 20 7b 0d 0a baseFiles {} {.. 21d00 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 21d10 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 21d20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 21d30 70 79 20 28 6f 72 20 72 65 2d 63 6f 70 79 29 20 py (or re-copy) 21d40 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 64 61 the reference da 21d50 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 tabase file used 21d60 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 for this.. 21d70 20 20 20 23 20 20 20 20 20 20 20 75 6e 69 74 20 # unit 21d80 74 65 73 74 20 74 6f 20 74 68 65 20 62 75 69 6c test to the buil 21d90 64 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20 63 d directory in c 21da0 61 73 65 20 69 74 20 68 61 73 20 62 65 65 6e 20 ase it has been 21db0 63 68 61 6e 67 65 64 0d 0a 20 20 20 20 20 20 20 changed.. 21dc0 20 23 20 20 20 20 20 20 20 62 79 20 61 20 70 72 # by a pr 21dd0 65 76 69 6f 75 73 20 74 65 73 74 20 72 75 6e 2e evious test run. 21de0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 21df0 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - 21e00 66 6f 72 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 force$northwind
21e10 45 66 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20  EfDbFile \..
21e20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
21e30 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74   [getBuildDirect
21e40 6f 72 79 20 66 61 6c 73 65 5d 20 5b 66 69 6c 65  ory false] [file
21e50 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64   tail $northwind 21e60 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 20 20 EfDbFile]].. 21e70 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 21e80 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 proc runSQLit 21e90 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d eTestPrologue {} 21ea0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 21eb0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 21ec0 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 running our cust 21ed0 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 om prologue if t 21ee0 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 he main one has 21ef0 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 21f00 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 skipped... 21f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 21f20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 21f30 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 :no(prologue.eag 21f40 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 21f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 21f60 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 21f70 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 e "before-constr 21f80 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 aints" custom pe 21f90 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 r-user and/or pe 21fa0 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 r-host.. 21fb0 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 # test set 21fc0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 tings now... 21fd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 #.. u 21fe0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c plevel 1 [list l 21ff0 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 oadSQLiteTestSet 22000 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 tings$::test_ch
22010 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a  annel .before]..
22020 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
22030 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
22040 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63  ck if the [objec
22050 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76  t] command is av
22060 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c  ailable; if not,
22070 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20   add some..
22080 20 20 20 23 20 20 20 20 20 20 20 73 68 69 6d 73     #       shims
22090 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73   to make the tes
220a0 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f  t suite run smoo
220b0 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  ther...        #
220c0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
220d0 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  orSQLiteObjectCo
220e0 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68  mmand $::test_ch 220f0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 22100 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22110 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 TE: Determine th 22120 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e e names of the n 22130 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 ative platform a 22140 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e nd architecture. 22150 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 22160 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 22170 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 m [getBuildPlatf 22180 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 orm true].. 22190 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 set architect 221a0 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 ure [architectur 221b0 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c eForPlatform$pl
221c0 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
221d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
221e0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70  NOTE: Show the p
221f0 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68  latform and arch
22200 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f  itecture used to
22210 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65   help locate the
22220 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
22230 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66    native build f
22240 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  iles...        #
22250 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
22260 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 22270 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 22280 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 22290 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f platform for lo 222a0 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 cating native bu 222b0 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 ild files is \"" 222c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 222d0 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d$platform \"\n].
222e0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
222f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22300 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 22310 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 22320 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 - architecture f 22330 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 or locating nati 22340 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 ve build files i 22350 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 s \"" \.. 22360 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75$architectu
22370 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  re \"\n]....
22380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
22390 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c   NOTE: Build a l
223a0 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61  ist of configura
223b0 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20  tion files that
223c0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
223d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
223e0 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  et configFileNam
223f0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
22400 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
22410 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
22420 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20  onfig]....
22430 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
22440 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73  OTE: Build a lis
22450 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d  t of auxiliary M
22460 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67  anaged Debugging
22470 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41   Assistants (MDA
22480 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  )..        #
22490 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
224a0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
224b0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...
224c0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
224d0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
224e0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
224f0 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
22500 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  l32.exe.mda.conf
22510 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65  ig Installer.exe
22520 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20  .mda.config \..
22530 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e             test.
22540 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74  exe.mda.config t
22550 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e  estlinq.exe.mda.
22560 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20  config \..
22570 20 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78        testef6.ex
22580 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d  e.mda.config]...
22590 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
225a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
225b0 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78  d the list of ex
225c0 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61  ternal files tha
225d0 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f  t we handle.  So
225e0 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23  me of..        #
225f0 20 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c         these fil
22600 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65  es may be native
22610 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20   and/or managed
22620 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20  assemblies that
22630 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  are..        #
22640 20 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f       required to
22650 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73   perform various
22660 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
22670 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
22680 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
22690 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
226a0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
226b0 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  n EntityFramewor
226c0 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61  k lib [string ma
226d0 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5c  p [list Fx ""] \
226e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73  ..            [s
226f0 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list
22700 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35  netFx451 netFx45
22710 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 34   netFx452 netFx4
22720 35 20 6e 65 74 46 78 34 36 20 5c 0d 0a 20 20 20  5 netFx46 \..
22730 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 35           netFx45
22740 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 34   netFx461 netFx4
22750 35 20 6e 65 74 46 78 34 36 32 20 6e 65 74 46 78  5 netFx462 netFx
22760 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74  45] [getBuildNet
22770 46 78 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20  Fx]]] \..
22780 20 20 20 20 20 45 6e 74 69 74 79 46 72 61 6d 65       EntityFrame
22790 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  work.dll]]....
227a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
227b0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
227c0 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76  he list of nativ
227d0 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73  e assembly files
227e0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
227f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
22800 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46       set nativeF
22810 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d  ileNames [list].
22820 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  ...        eval
22830 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69  lappend nativeFi
22840 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 69  leNames [getNati
22850 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d  veLibraryFileNam
22860 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 20  esOnly]..
22870 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61   eval lappend na
22880 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67  tiveFileNames [g
22890 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c  etInteropAssembl
228a0 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d  yFileNamesOnly].
228b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
228c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
228d0 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
228e0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
228f0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
22900 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...
22910 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
22920 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73  t mixedFileNames
22930 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
22940 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
22950 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d  meOption native]
22960 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22970 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78 65      lappend mixe
22980 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 65  dFileNames Syste
22990 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
229a0 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
229b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
229c0 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
229d0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e   the list of man
229e0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69  aged assembly fi
229f0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
22a00 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
22a10 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61          set mana
22a20 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  gedFileNames [li
22a30 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
22a40 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
22a50 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 79  Lite.Linq.dll Sy
22a60 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
22a70 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .EF6.dll]....
22a80 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52 75       if {![hasRu
22a90 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
22aa0 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
22ab0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d         lappend m
22ac0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
22ad0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
22ae0 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te.dll..
22af0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
22b00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
22b10 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75 73  Show the various
22b20 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20 6e   lists of file n
22b30 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68 61  ames that are ha
22b40 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a 20  ndled by this..
22b50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
22b60 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20  rocedure...
22b70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
22b80 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22b90 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22ba0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 22bb0 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 63 ---- list of \"c 22bc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 onfiguration\" f 22bd0 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 22be0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
22bf0 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
22c00 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  \n]....        t
22c10 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22c20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22c30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22c40 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 "---- list of \" 22c50 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f MDA configuratio 22c60 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 n\" file names i 22c70 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 s: " \.. 22c80 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46 69$mdaConfigFi
22c90 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20  leNames \n]....
22ca0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 22cb0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 22cc0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 22cd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 "---- li 22ce0 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c st of \"external 22cf0 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 \" file names is 22d00 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69 6c : "$externalFil
22d10 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  eNames \n]....
22d20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22d30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 22d40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 22d50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 22d60 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22 20 t of \"native\" 22d70 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 22d80 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
22d90 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
22da0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 22db0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 22dc0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 22dd0 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 22de0 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20 6e \"mixed\" file n 22df0 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78 65 ames is: "$mixe
22e00 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a  dFileNames \n]..
22e10 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
22e20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 22e30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 22e40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 22e50 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61 67 list of \"manag 22e60 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 ed\" file names 22e70 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46 69 is: "$managedFi
22e80 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20  leNames \n]....
22e90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22ea0 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65    # NOTE: Remove
22eb0 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72   any test constr
22ec0 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 72  aints that refer
22ed0 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61   to the native a
22ee0 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23  nd/or..        #
22ef0 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61         managed a
22f00 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
22f10 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c  at we handle unl
22f20 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72  ess forbidden fr
22f30 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  om..        #
22f40 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20      doing so...
22f50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22f60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
22f70 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52  sts ::no(sqliteR
22f80 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73  emoveConstraints
22f90 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
22fa0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
22fb0 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69  leName $configFi 22fc0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 22fd0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 22fe0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 22ff0 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
23000 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
23010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
23020 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
23030 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61  $mdaConfigFileNa 23040 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 23050 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 23060 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 23070 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
23080 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
23090 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
230a0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74  ch fileName $ext 230b0 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b ernalFileNames { 230c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 230d0 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 230e0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 230f0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
23100 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20  eName]]..
23110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
23120 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
23130 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 23140 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 23150 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 23160 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 23170 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
23180 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
23190 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
231a0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 231b0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 231c0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 231d0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 231e0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
231f0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
23200 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
23210 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
23220 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65  ame $managedFile 23230 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 23240 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 23250 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 23260 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
23270 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
23280 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
23290 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
232a0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c   # NOTE: Skip al
232b0 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  l System.Data.SQ
232c0 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c  Lite related fil
232d0 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65  e handling (dele
232e0 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23  ting,..        #
232f0 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20         copying,
23300 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20  and loading) if
23310 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
23320 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
23330 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
23340 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c  s ::no(sqliteFil
23350 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
23360 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23370 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
23380 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65  p trying to dele
23390 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  te any files if
233a0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
233b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
233c0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
233d0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
233e0 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  eSqliteFiles)]}
233f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
23400 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
23410 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
23420 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c  eSqliteConfigFil
23430 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
23440 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
23450 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f  ach fileName $co 23460 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 23470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 23480 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 tryDeleteBinary 23490 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a File$fileName..
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
234b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
234c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
234d0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
234e0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
234f0 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d  eExternalFiles)]
23500 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23510 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
23520 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e  fileName $mdaCon 23530 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23550 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 23560 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c le$fileName fal
23570 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..
23580 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
23590 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
235a0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 235b0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 235c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 235d0 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 235e0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
235f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
23600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23610 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
23620 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
23630 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69  deleteSqliteNati
23640 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
23650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
23660 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
23670 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
23680 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 69  liteImplicitNati
23690 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
236a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
236b0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
236c0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 236d0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 236e0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 236f0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
23700 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
23710 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23720 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23730 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
23740 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
23750 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f  o(deleteSqliteNo
23760 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  nImplicitFiles)]
23770 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23780 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
23790 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
237a0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61  (deleteSqlitePla
237b0 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20  tformFiles)] &&
237c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
237d0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
237e0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 237f0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23810 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 23820 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
23830 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
23840 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
23850 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 23860 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a Name$platform..
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23880 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
23890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
238a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
238b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
238c0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63  (deleteSqliteArc
238d0 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d  hitectureFiles)]
238e0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
238f0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
23900 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69  ng length $archi 23910 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 tecture] > 0} th 23920 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23930 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 23940 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
23950 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23970 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
23980 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
23990 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
239c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
239d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
239e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
239f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
23a00 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
23a10 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29  qliteMixedFiles)
23a20 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23a30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
23a40 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
23a50 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65  : If the "native
23a60 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
23a70 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65 20   is set, delete
23a80 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 20  implicit..
23a90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23aa0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
23ab0 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 6c  bly files as wel
23ac0 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d 65  l.  This runtime
23ad0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..
23ae0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
23af0 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20  heck is handled
23b00 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68  when building th
23b10 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d  e list of mixed-
23b20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  mode..
23b30 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
23b40 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e  mbly file names.
23b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23b60 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
23b70 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
23b80 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
23b90 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65  liteImplicitMixe
23ba0 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
23bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23bc0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
23bd0 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 23be0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 23bf0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 23c00 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
23c10 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
23c20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
23c40 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
23c50 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
23c60 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49  deleteSqliteNonI
23c70 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
23c80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
23c90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
23ca0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
23cb0 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66  eleteSqlitePlatf
23cc0 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
23cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23ce0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
23cf0 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 23d00 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 23d20 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
23d30 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
23d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23d50 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
23d60 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 23d70 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 e$platform..
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23da0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
23db0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
23dc0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
23dd0 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74  leteSqliteArchit
23de0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26  ectureFiles)] &&
23df0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23e00 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
23e10 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63  length $architec 23e20 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ture] > 0} then 23e30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23e40 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 23e50 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
23e60 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
23e80 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24  DeleteAssembly $23e90 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 fileName$archit
23ea0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
23eb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23f00 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
23f10 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
23f20 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d  eManagedFiles)]}
23f30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23f40 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
23f50 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed 23f60 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 23f80 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 DeleteAssembly$
23f90 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
23fa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
23fb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
23fd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
23fe0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
23ff0 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63  r the "autoSelec
24000 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  t" runtime optio
24010 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d  n.  If present,.
24020 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
24030 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75     attempt to au
24040 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65  tomatically sele
24050 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 61  ct the first ava
24060 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..
24070 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
24080 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f  (or "release") o
24090 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73  f SQLite and Sys
240a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d  tem.Data.SQLite.
240b0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
240c0 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 20     for use with
240d0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
240e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
240f0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
24100 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75  RuntimeOption au
24110 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20  toSelect]} then
24120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
24130 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c  f {![checkForSQL
24140 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 24150 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d t_channel true]} 24160 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24170 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 24180 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
24190 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72  :test_channel tr
241a0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
241b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
241c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
241d0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
241e0 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
241f0 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c 64  verify the build
24200 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e   directory if in
24210 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20  structed;..
24220 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68       #       oth
24230 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72  erwise, make sur
24240 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78  e it actually ex
24250 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65  ists or halt the
24260 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20   entire..
24270 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 69     #       testi
24280 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 74  ng process if it
24290 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e   does not exist.
242a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
242b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
242c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
242d0 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 63  verifyBuildDirec
242e0 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tory)]} then {..
242f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
24300 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
24310 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  E: At this point
24320 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  , the build dire
24330 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74  ctory MUST exist
24340 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20   as a..
24350 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 64     #       valid
24360 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
24370 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
24380 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d  ss to continue..
24390 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
243a0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
243b0 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75  directory [getBu
243c0 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c  ildDirectory fal
243d0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se]....
243e0 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
243f0 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 24400 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 24410 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 24420 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
24430 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
24460 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
24470 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
24480 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
24490 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
244a0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
244b0 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
244c0 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
244d0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
244e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
244f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 24500 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 24510 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 24520 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 24530 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 24540 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 y build director 24550 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 y \""$directory
24560 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24570 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74        "\", all t
24580 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22  esting halted\n"
24590 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
245a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
245b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73      # NOTE: Rais
245c0 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72  ing a script err
245d0 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69  or from this poi
245e0 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a  nt should halt..
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
24600 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e        the testin
24610 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  g process...
24620 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
24630 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
24640 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24660 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72    "could not ver
24670 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
24680 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 24690 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 246a0 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 246b0 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 testing halted" 246c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 246d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 246e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 246f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 24700 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 Skip trying to c 24710 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 opy any files if 24720 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 24730 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24740 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 24750 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 24760 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 24770 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 24780 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 24790 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 247a0 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 247b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 247c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
247d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
247e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
247f0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e      "---- copyin
24800 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 6f  g \"configuratio
24810 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d  n\" files...\n".
24820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
24830 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
24840 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 24850 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 24860 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui 24870 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ldFile$fileName
24880 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
24890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
248a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
248b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
248c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
248d0 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46  ySqliteExternalF
248e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
24900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
24910 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20   NOTE: Copy the
24920 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e  Managed Debuggin
24930 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44  g Assistants (MD
24940 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  A) configuration
24950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24960 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72  #       file for
24970 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
24980 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75   to the build ou
24990 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d  tput directory,.
249a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
249b0 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69         while usi
249c0 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  ng each of the n
249d0 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69  ames of the vari
249e0 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d  ous legacy test.
249f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
24a00 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c         executabl
24a10 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68  es.  This will h
24a20 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  elp to make sure
24a30 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20   that all the..
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
24a50 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74       legacy test
24a60 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74  s run with exact
24a70 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20  ly the same set
24a80 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20  of Managed..
24a90 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
24aa0 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69    Debugging Assi
24ab0 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65  stants configure
24ac0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...
24ad0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
24ae0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 24af0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 24b10 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d 44 --- copying \"MD 24b20 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c A configuration\ 24b30 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d " files...\n"... 24b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 24b50 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 24b60 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61$mdaConfigFileNa
24b70 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
24b80 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69         tryCopyBi
24b90 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68  naryFile EagleSh
24ba0 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
24bb0 69 67 20 74 72 75 65 20 22 22 20 24 66 69 6c 65  ig true "" $file 24bc0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 24bd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 24be0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24bf0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 24c00 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 Copy the externa 24c10 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 l binaries, if a 24c20 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 ny, to the direc 24c30 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 tory that.. 24c40 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 24c50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 contains the Ea 24c60 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 gle shell. This 24c70 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 is typically us 24c80 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 ed to make.. 24c90 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 24ca0 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 sure assemblie 24cb0 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 s referenced by 24cc0 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 the ones being t 24cd0 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 ested are.. 24ce0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 24cf0 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e available durin 24d00 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 g the testing pr 24d10 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ocess... 24d20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 24d30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
24d40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d  test_channel "--
24d50 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 74  -- copying \"ext
24d60 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e 2e  ernal\" files...
24d70 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n"....
24d80 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
24d90 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 24da0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 24db0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 24dc0 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 opyExternalFile 24dd0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
24de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24df0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24e00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
24e10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
24e20 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65  copySqliteNative
24e30 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
24e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
24e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24e60 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  # NOTE: If the t
24e70 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20  est platform is
24e80 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75  likely the defau
24e90 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20  lt for this..
24ea0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
24eb0 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f     machine, also
24ec0 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65   try to copy the
24ed0 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f   native files to
24ee0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
24ef0 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61      #       bina
24f00 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...
24f10 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
24f30 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
24f40 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d  :no(copySqliteIm
24f50 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c 65  plicitNativeFile
24f60 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
24f70 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 44              [isD
24f80 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66  efaultBuildPlatf
24f90 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
24fb0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 24fc0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 24fd0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 24fe0 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 copying implici 24ff0 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c t \"native\" fil 25000 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 25010 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 25020 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
25030 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
25040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25050 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
25060 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c  ly $fileName fal 25070 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se.. 25080 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 25090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 250a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 250b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 250c0 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c opySqliteNonImpl 250d0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 250e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 250f0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 25100 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 25110 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 SqlitePlatformFi 25120 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25140 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
25150 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74  platform] > 0} t
25160 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25170 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $25180 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 25190 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 251b0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e "---- copyin 251c0 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c g \"native\" fil 251d0 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 es for platform 251e0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c$pl
25200 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d  atform \"...\n].
25210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
25220 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
25230 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 25240 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 25260 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
25270 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70  ileName false $p 25280 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 25290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 252b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 252c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 252d0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 252e0 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 liteArchitecture 252f0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25310 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 25320 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
25330 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25350 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 25360 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 25370 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25380 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 25390 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76 65 copying \"native 253a0 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 \" files for arc 253b0 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d hitecture \"" \. 253c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 253d0 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
253e0 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d  ture \"...\n]...
253f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25400 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
25410 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 25420 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 25430 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 25440 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
25450 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 63  eName false $arc 25460 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 hitecture.. 25470 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25490 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 254a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 254b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 254c0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 254d0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 254e0 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 teMixedFiles)]} 254f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 25500 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25510 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 25520 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 f the "native" r 25530 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 untime option is 25540 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c 69 set, copy impli 25550 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 cit.. 25560 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 # mixed 25570 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 -mode assembly f 25580 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 iles as well. T 25590 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f he runtime optio 255a0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 255b0 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20 69 # check i 255c0 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 s handled when b 255d0 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73 74 uilding the list 255e0 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a of mixed-mode.. 255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 25600 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 assembly f 25610 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 ile names... 25620 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 25630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 25640 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 25650 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c o(copySqliteImpl 25660 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29 5d icitMixedFiles)] 25670 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 25680 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 25690 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
256a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
256b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
256c0 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22  ying implicit \"
256d0 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e  mixed\" files...
256e0 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n"....
256f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
25700 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69  ileName $mixedFi 25710 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 25720 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 25730 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 CopyAssembly$fi
25740 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20  leName false..
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
25770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
25780 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
25790 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
257a0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
257b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
257d0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
257e0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
257f0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
25800 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
25810 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
25820 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 25830 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 25840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 25850 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
25860 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
25870 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
25890 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69  --- copying \"mi
258a0 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20  xed\" files for
258b0 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a  platform \"" \..
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
258d0 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform 258e0 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 \"...\n].... 258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 25900 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
25910 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
25920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25930 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
25940 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 25950 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d false$platform.
25960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25970 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
25980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
25990 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
259a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
259b0 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
259c0 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
259d0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
259e0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
259f0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 25a00 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 25a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 25a20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
25a30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
25a40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a60 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
25a70 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20  \"mixed\" files
25a80 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
25a90 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61                $a 25ab0 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e rchitecture \".. 25ac0 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n].... 25ad0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 25ae0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 h fileName$mixe
25af0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25b10 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
25b20 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73  y $fileName fals 25b30 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d e$architecture.
25b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25b50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
25b60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
25b70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
25b80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
25b90 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
25ba0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
25bb0 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46  pySqliteManagedF
25bc0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
25be0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 25bf0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e nel "---- copyin 25c00 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 g \"managed\" fi 25c10 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 les...\n".... 25c20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 25c30 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e ch fileName$man
25c40 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  agedFileNames {.
25c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25c60 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
25c70 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d   $fileName true. 25c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 25c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 25ca0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 25cb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 25cc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 25cd0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f kip trying to lo 25ce0 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 ad any files if 25cf0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 25d00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25d10 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 25d20 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 25d30 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 25d40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25d50 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 25d60 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 25d70 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 iteImplicitFiles 25d80 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 25d90 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 25da0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 25db0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 25dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 25dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 25de0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 25df0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 25e00 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 LinqFiles)]} the 25e10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 25e20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 25e30 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 25e40 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a QLite.Linq.dll.. 25e50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 25e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 25e70 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 25e80 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 :no(loadSqliteEf 25e90 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 6Files)]} then { 25ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25eb0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 25ec0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 25ed0 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 te.EF6.dll.. 25ee0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 25ef0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 25f00 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 25f10 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 loadSqliteNonImp 25f20 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 25f30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25f40 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 25f50 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 25f60 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 25f70 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 25f90 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
25fa0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
25fb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25fc0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
25fd0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
25fe0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74  SQLite.dll $plat 25ff0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. 26000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26010 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 26020 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 26030 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 adSqliteArchitec 26040 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 26050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26060 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 26070 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
26080 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
260a0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
260b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
260c0 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74  e.dll $architect 260d0 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 260e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 260f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 26100 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 26110 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 26120 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 ileNameOnly$nat
26130 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
26140 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
26150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
26160 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26170 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26180 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26190 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 261a0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 ersion of \""$f
261b0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e  ileNameOnly "\".
261c0 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  .. \"" \..
261d0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
261e0 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
261f0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 26200 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d NameOnly]] \"\n] 26210 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 26220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 26230 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 26240 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 NameOnly$mixedF
26250 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
26260 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
26270 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
26280 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 26290 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 262b0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 262c0 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e on of \""$fileN
262d0 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c  ameOnly "\"... \
262e0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
262f0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
26300 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
26310 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 26320 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 Only]] \"\n].. 26330 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 26340 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 26350 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 26360 4f 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 69 6c Only$managedFil
26370 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
26380 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
26390 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $263a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 263b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 263d0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 263e0 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d of \""$fileNam
263f0 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
26400 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26410 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
26420 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
26430 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 26440 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 ly]] \"\n].. 26450 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 26460 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 26470 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 26480 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
26490 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
264a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
264b0 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46  ameOnly $nativeF 264c0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 264d0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 264e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 264f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
26500 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
26510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26520 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
26530 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
26540 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20  $platform \.. 26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / 26560 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22$fileNameOnly "
26570 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20  \"... \"" [file
26580 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
265a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
265b0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70  $fileNameOnly$p
265c0 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d  latform]] \"\n].
265d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
265e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
265f0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
26600 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d   fileNameOnly $m 26610 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 26620 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 . cat 26630 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 26640 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
26650 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
26660 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
26670 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
26680 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
26690 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 266a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 266b0 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f /$fileNameO
266c0 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
266d0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
266f0 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
26700 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 26710 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ly$platform]] \
26720 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
26730 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
26740 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
26750 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
26760 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69  ng length $archi 26770 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 tecture] > 0} th 26780 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 26790 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 267a0 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 Only$nativeFile
267b0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
267c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
267d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
267e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 267f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 26800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26810 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 26820 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 rsion of \""$ar
26830 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20  chitecture \..
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26850 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  / $fileNameOnly 26860 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 26870 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 26880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 26890 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 268a0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24$fileNameOnly $268b0 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c architecture]] \ 268c0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 268d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 268e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f .... fo 268f0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 26900 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d ly$mixedFileNam
26910 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
26920 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
26930 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $26940 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 26950 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26970 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 26980 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
26990 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24               / $269b0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 269c0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 ... \"" [file ve 269d0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 269e0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 269f0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
26a00 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63  ileNameOnly $arc 26a10 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e hitecture]] \"\n 26a20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 26a30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 26a40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 26a50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 26a60 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the 26a70 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 list of managed 26a80 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 assemblies for t 26a90 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce 26aa0 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ss.. # 26ab0 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f and report o 26ac0 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 n the System.Dat 26ad0 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 26ae0 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ones... 26af0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 26b00 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 26b10 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 26b20 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 26b30 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 assemblies [obje 26b40 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d ct invoke AppDom 26b50 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 ain.CurrentDomai 26b60 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d n GetAssemblies] 26b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 26b80 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 ject foreach ass 26b90 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 embly$assemblie
26ba0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
26bb0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
26bc0 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61  ch \{System.Data
26bd0 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62  .SQLite* $assemb 26be0 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ly]} then {.. 26bf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 26c00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
26c10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26c30 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
26c40 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22  aded assembly: "
26c50 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a   $assembly \n].. 26c60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 26c70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 26c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26c90 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 26ca0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
26cb0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
26cc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
26cd0 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
26ce0 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44  s for \"System.D
26cf0 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20  ata.SQLite\"...
26d00 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
26d10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
26d20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
26d30 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
26d40 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
26d50 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
26d60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
26d70 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
26d80 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..
26d90 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61    } defineConsta
26da0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
26db0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
26dc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26dd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26de0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 26df0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 26e00 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f$defineCo
26e10 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d  nstants] <none>]
26e20 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
26e30 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
26e40 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 26e50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 26e60 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 26e70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 26e80 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 26e90 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 26ea0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
26eb0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
26ec0 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
26ed0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
26ee0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
26ef0 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
26f00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
26f10 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
26f20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
26f30 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
26f40 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
26f50 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
26f60 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
26f70 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
26f80 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  rVersion..
26f90 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
26fa0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
26fb0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
26fc0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver 26fd0 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 26fe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26ff0 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 set version nu 27000 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 27010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 27020 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27030 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
27040 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20   $version \n].. 27050 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 27060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 27070 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27080 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
27090 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
270a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
270b0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
270c0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 270d0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 270e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 270f0 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 - source checkou 27100 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 t of \"System.Da 27110 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 27120 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 27130 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 27140 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 27150 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 27160 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 27180 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 27190 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 271a0 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 on ProviderSourc 271b0 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d eId.. } 271c0 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d sourceId] == 0} 271d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 271e0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 271f0 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
27200 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
27210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
27220 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
27230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27240 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
27250 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 27260 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
27270 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20  sourceId \n]..
27280 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
27290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
272a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 272b0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 272c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 272d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 272e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 272f0 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 TE: Check the av 27300 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 ailable builds ( 27310 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 and "releases") 27320 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 of SQLite and.. 27330 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 27340 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 27350 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 27360 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 27370 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
27380 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
27390 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
273a0 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 273b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 273c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 273d0 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 # NOTE: Now, w 273e0 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 e need to know i 273f0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 f the SQLite cor 27400 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 e library is ava 27410 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 ilable.. 27420 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 # (i.e. be 27430 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 cause the manage 27440 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 d-only System.Da 27450 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 ta.SQLite assemb 27460 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 ly can.. 27470 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 # load wit 27480 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 hout it; however 27490 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 , it cannot do a 274a0 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 nything useful w 274b0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 ithout.. 274c0 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 # it). If 274d0 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 we are using th 274e0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 274f0 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 embly and we alr 27500 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 eady.. # 27510 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 found it ( 27520 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f above), this sho 27530 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 uld always succe 27540 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 27550 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 27560 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a SQLiteLibrary$:
27570 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
27580 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
27590 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
275a0 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
275b0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
275c0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
275d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
275e0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
275f0 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74  eInterop $::test 27600 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 27610 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 27620 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 27630 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 SQLite database 27640 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 27650 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 irectories... 27660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27670 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 27680 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
27690 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
276a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
276b0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
276c0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
276d0 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d  various compile-
276e0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65  time options nee
276f0 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..
27700 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f   #       test co
27710 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65  nstraints were e
27720 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
27730 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
27740 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20    There..
27750 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d   #       are som
27760 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
27770 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74  ptions that must
27780 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20   also have been
27790 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20  enabled..
277a0 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
277b0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
277c0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
277d0 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72   effective.  For
277e0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20   those..
277f0 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c  #       options,
27800 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75   it will be assu
27810 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20  med that it was
27820 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
27830 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  interop..
27840 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
27850 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62  y if it was enab
27860 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
27870 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
27880 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
27890 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65    foreach define
278a0 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c  Constant [list \
278b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48  ..            CH
278c0 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f  ECK_STATE COUNT_
278d0 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54  HANDLE DEBUG INT
278e0 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52  EROP_CODEC INTER
278f0 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20  OP_DEBUG \..
27900 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
27910 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
27920 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35  ONS INTEROP_FTS5
27930 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
27940 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
27950 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20  P_INCLUDE_CEROD
27960 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
27970 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e  EXTRA INTEROP_IN
27980 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20  CLUDE_SEE \..
27990 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
279a0 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20  _INCLUDE_ZIPVFS
279b0 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
279c0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
279d0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c         INTEROP_L
279e0 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45  EGACY_CLOSE INTE
279f0 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f  ROP_LOG INTEROP_
27a00 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
27a10 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
27a20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
27a30 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
27a40 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54  EROP_SESSION_EXT
27a50 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ENSION \..
27a60 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 48        INTEROP_SH
27a70 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  A1_EXTENSION INT
27a80 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
27a90 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
27aa0 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50     INTEROP_TOTYP
27ab0 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45  E_EXTENSION INTE
27ac0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
27ad0 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  E \..
27ae0 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e   NET_20 NET_35 N
27af0 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54  ET_40 NET_45 NET
27b00 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54  _451 NET_452 NET
27b10 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20  _46 NET_461 \..
27b20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34             NET_4
27b30 36 32 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  62 NET_COMPACT_2
27b40 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  0 PLATFORM_COMPA
27b50 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20  CTFRAMEWORK \..
27b60 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f             PRELO
27b70 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52  AD_NATIVE_LIBRAR
27b80 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53  Y RETARGETABLE S
27b90 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c  QLITE_STANDARD \
27ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48  ..            TH
27bb0 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20  ROW_ON_DISPOSED
27bc0 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e  TRACE TRACE_CONN
27bd0 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54  ECTION TRACE_DET
27be0 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ECTION \..
27bf0 20 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44        TRACE_HAND
27c00 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44  LE TRACE_PRELOAD
27c10 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52   TRACE_SHARED TR
27c20 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d  ACE_STATEMENT \.
27c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41  .            TRA
27c40 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b  CE_WARNING TRACK
27c50 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53  _MEMORY_BYTES US
27c60 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f  E_ENTITY_FRAMEWO
27c70 52 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20  RK_6 \..
27c80 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f      USE_INTEROP_
27c90 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f  DLL USE_PREPARE_
27ca0 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20  V2 WINDOWS] {..
27cb0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
27cc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
27cd0 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69  eck if the compi
27ce0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
27cf0 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20  s listed in the
27d00 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20  list of..
27d10 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69     #       "defi
27d20 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65  ne constants" ke
27d30 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74  pt track of by t
27d40 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
27d50 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  bly...
27d60 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  #..          che
27d70 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
27d80 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73  eConstant $::tes 27d90 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e t_channel$defin
27da0 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20  eConstant..
27db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
27dc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
27dd0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
27de0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
27df0 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 73 20  te provider was
27e00 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20  compiled with..
27e10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
27e20 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65  upport for any e
27e30 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73  ncrypted databas
27e40 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
27e50 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
27e60 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  eSQLiteDefineCon
27e70 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 43 4f  stant INTEROP_CO
27e80 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  DEC] || \..
27e90 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69         [haveSQLi
27ea0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
27eb0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
27ec0 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  _SEE]} then {..
27ed0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
27ee0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
27ef0 73 2c 20 61 64 64 20 67 65 6e 65 72 69 63 20 63  s, add generic c
27f00 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75 73  onstraint for us
27f10 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
27f20 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ite...
27f30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  #..          add
27f40 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65  Constraint Syste
27f50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e  m.Data.SQLite.En
27f60 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  cryption..
27f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
27f80 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
27f90 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72  : Check the curr
27fa0 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20  ent build year.
27fb0 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73   Basically, this
27fc0 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20   indicates..
27fd0 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63      #       whic
27fe0 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42  h version of MSB
27ff0 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75  uild and/or Visu
28000 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 73  al Studio was us
28010 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23  ed to..        #
28020 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74         compile t
28030 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61  he assembly bina
28040 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e  ries under test.
28050 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
28060 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 28070 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 28080 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 28090 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys 280a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 280b0 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d build year... ". 280c0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 ... set y 280d0 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 ear [getBuildYea 280e0 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 r].. addC 280f0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 28100 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e dArgs buildYear. 28110 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20$year]..
28120 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 28130 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 28140 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e gs \"$year \"\n
28150 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
28160 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
28170 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e  Check the curren
28180 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61  t build .NET Fra
28190 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61 6c  mework.  Basical
281a0 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20  ly, this..
281b0 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63 61    #       indica
281c0 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69 6f  tes which versio
281d0 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 72  n of the .NET Fr
281e0 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e 67  amework is being
281f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
28200 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61 73    used by the as
28210 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20  sembly binaries
28220 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20  under test...
28230 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28240 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 28250 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 28260 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 28270 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 28280 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 28290 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e .NET Framework. 282a0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 282b0 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 75 set netFx [getBu 282c0 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 20 ildNetFx].. 282d0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 282e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 282f0 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 ldFramework.$ne
28300 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70  tFx]..        tp
28310 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 28320 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 28330 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d \"$netFx \"\n].
28340 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28350 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
28360 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  eck the current
28370 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
28380 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  ion.  This shoul
28390 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20  d normally..
283a0 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65      #       be e
283b0 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
283c0 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20   "Release"...
283d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
283e0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 283f0 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 28400 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 28410 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 28420 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 28430 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e configuration.. 28440 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 . ".... s 28450 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e et configuration 28460 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig 28470 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 uration].. 28480 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 28490 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil 284a0 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 dConfiguration. 284b0 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d$configuration].
284c0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $284d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 284e0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 appendArgs \"$c
284f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c  onfiguration \"\
28500 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
28510 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28520 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e   Try to setup an
28530 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62   interrupt callb
28540 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63  ack using the sc
28550 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20  ript debugger..
28560 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
28570 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20  hat will cancel
28580 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20  all SQL queries
28590 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20  in progress for
285a0 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20  all database..
285b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
285c0 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20  nnections known
285d0 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  to this interpre
285e0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ter...        #.
285f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
28600 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
28610 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43  sqliteInterruptC
28620 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20  allback)]} then
28630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
28640 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c  upDbInterruptCal
28650 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68  lback $::test_ch 28660 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f annel$::test_lo
28670 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  g..        }....
28680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
28690 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
286a0 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20   for the native
286b0 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  runtime option,
286c0 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e  which would mean
286d0 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20   we are..
286e0 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74   #       using t
286f0 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
28700 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
28710 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
28720 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f  kForRuntimeOptio
28730 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  n $::test_channe 28740 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 l native.... 28750 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 28760 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 28770 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 the test suite s 28780 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 hould count the 28790 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 number of connec 287a0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 tions.. # 287b0 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 "opened" 287c0 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f and "closed" fro 287d0 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 m the pool when 287e0 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 determining if a 287f0 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 28800 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 passed. 28810 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 Disabling this b 28820 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 ehavior is somet 28830 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 imes necessary ( 28840 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 e.g... # 28850 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 during the 28860 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 release testing 28870 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 process) becaus 28880 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 e there are seve 28890 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ral.. # 288a0 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 tests that 288b0 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 rely on the "ope 288c0 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 ned from pool" c 288d0 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 ount being great 288e0 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 er.. # 288f0 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 than zero. 28900 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 These tests may 28910 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 fail due to the 28920 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 non-deterministi 28930 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 c.. # 28940 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 behavior of t 28950 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 he CLR GC, even 28960 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f when there is no 28970 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 bug in the code 28980 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 28990 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d being tested.. 289a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 289b0 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 checkForRunt 289c0 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 imeOption$::tes
289d0 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c  t_channel noPool
289e0 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20  Counts....
289f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
28a00 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
28a10 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f  e test suite sho
28a20 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d 63  uld use shared-c
28a30 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 20  ache mode...
28a40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
28a50 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70  heckForRuntimeOp
28a60 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61  tion $::test_cha 28a70 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 65 nnel sharedCache 28a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 28a90 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 28aa0 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 eport the resour 28ab0 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 ce usage prior t 28ac0 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 o running any te 28ad0 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 28ae0 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 . reportS 28af0 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 QLiteResources$
28b00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
28b10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
28b20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61       # NOTE: Gra
28b30 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61  b the list of na
28b40 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72  tive modules for
28b50 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
28b60 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 20  cess and..
28b70 20 20 23 20 20 20 20 20 20 20 72 65 70 6f 72 74    #       report
28b80 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44   on the System.D
28b90 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
28ba0 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20  ed ones...
28bb0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
28bc0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
28bd0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
28be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
28bf0 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63  t modules [objec
28c00 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20  t invoke \..
28c10 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
28c20 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f  .Diagnostics.Pro
28c30 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
28c40 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d  rocess Modules].
28c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  ...          obj
28c60 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
28c70 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c  as module $modul 28c80 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 28c90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 28ca0 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 # NOTE: The mod 28cb0 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 ule file name he 28cc0 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 re must be norma 28cd0 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 lized... 28ce0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 28cf0 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 28d00 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 [file normalize 28d10 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d [$module FileNam
28d20 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e]]..
28d30 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c   set fileNameOnl
28d40 79 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  y [file tail $fi 28d50 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 28d60 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 if {[lsea 28d70 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 rch -exact -noca 28d80 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 se -- \.. 28d90 20 20 20 20 20 20 20 20 20 5b 67 65 74 4e 61 74 [getNat 28da0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 28db0 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 mesOnly]$fileNa
28dc0 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74  meOnly] != -1} t
28dd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
28de0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 28df0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 28e00 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 28e10 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 28e20 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 - found loaded S 28e30 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 QLite native lib 28e40 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c rary module: " \ 28e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 28e60 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e$fileName \n
28e70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
28e80 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 63   elseif {[lsearc
28e90 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65  h -exact -nocase
28ea0 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   -- \..
28eb0 20 20 20 20 20 20 20 5b 67 65 74 49 6e 74 65 72         [getInter
28ec0 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61  opAssemblyFileNa
28ed0 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61  mesOnly] $fileNa 28ee0 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 meOnly] != -1} t 28ef0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 28f00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
28f10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
28f20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
28f30 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
28f40 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53  - found loaded S
28f50 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
28f60 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22  sembly module: "
28f70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28f80 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 28f90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 28fa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 28fb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 28fc0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 28fd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
28fe0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
28ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29000 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69  "---- compile-ti
29010 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53  me options for S
29020 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
29030 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
29040 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
29050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
29060 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
29070 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
29080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29090 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
290a0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c  Lite.SQLite3 SQL
290b0 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
290c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63  s..          } c
290d0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d  ompileOptions] =
290e0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
290f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $29100 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 29110 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d appendArgs [form 29120 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d atList [lsort \. 29130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 29140 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73$compileOptions
29150 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20  ] <none>] \n]..
29160 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
29170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
29180 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 29190 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a nnel unknown\n.. 291a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 291b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 291c0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 291d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
291e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
291f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
29200 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  - compile-time o
29210 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74  ptions for SQLit
29220 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
29230 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ly... "....
29240 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
29250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
29260 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
29270 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
29280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29290 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
292a0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
292b0 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  eropCompileOptio
292c0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  ns..          }
292d0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20  compileOptions]
292e0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
292f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
29300 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 29310 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 [appendArgs [for 29320 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c matList [lsort \ 29330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29340 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e$compileOption
29350 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  s] <none>] \n]..
29360 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
29370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
29380 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 29390 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 293a0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 293b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 293c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 293d0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 NOTE: Show the a 293e0 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 ctive test const 293f0 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 raints... 29400 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 29410 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
29420 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d  l [appendArgs "-
29430 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a  --- constraints:
29440 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
29450 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c    [formatList [l
29460 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61  sort [getConstra
29470 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  ints]] <none>] \
29480 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
29490 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
294a0 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63   Save the test c
294b0 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75  onstraints for u
294c0 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72  se by threads cr
294d0 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20  eated in this..
294e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
294f0 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
29500 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  n.  This is nece
29510 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c  ssary because al
29520 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  l the Eagle..
29530 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65       #       "te
29540 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f  st context" info
29550 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74  rmation is per-t
29560 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20  hread...
29570 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
29580 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
29590 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d  est_constraints]
295a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
295b0 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63      set ::test_c
295c0 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61  onstraints $::ea 295d0 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 gle_tests(constr 295e0 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 aints).. 295f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 29600 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 29610 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d Load the "after- 29620 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 constraints" cus 29630 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 29640 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 /or per-host.. 29650 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 29660 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e st settings now. 29670 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29680 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 29690 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 list loadSQLiteT 296a0 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 estSettings$::t
296b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74  est_channel .aft
296c0 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  er]....        #
296d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
296e0 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20  : If necessary,
296f0 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61  enable shared-ca
29700 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20  che mode now...
29710 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
29720 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d    if {[hasRuntim
29730 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61  eOption sharedCa
29740 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  che]} then {..
29750 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68          enableSh
29760 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73  aredCache $::tes 29770 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a t_channel true.. 29780 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 29790 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 297a0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 # NOTE: Show whe 297b0 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 n our tests actu 297c0 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 ally began (now) 297d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 297e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
297f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
29800 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
29810 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73         "---- Sys
29820 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
29830 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22  tests began at "
29840 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29850 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63  [clock format [c
29860 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c  lock seconds]] \
29870 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
29880 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
29890 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c  runSQLiteTestFil
298a0 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d  esPrologue {} {.
298b0 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31  .      uplevel 1
298c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
298d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
298e0 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c  etup the variabl
298f0 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
29900 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e   the various non
29910 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20  -data files..
29920 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71       #       req
29930 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73  uired by the tes
29940 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e  ts in this file.
29950 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
29960 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 79 46       set entityF
29970 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 20  rameworkDllFile
29980 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
29990 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
299a0 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   EntityFramework
299b0 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20  .dll false]....
299c0 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 74 61         set insta
299d0 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20  llerExeFile \..
299e0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
299f0 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73  uildFileName Ins
29a00 74 61 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 65  taller.exe false
29a10 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
29a20 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44   sqliteDesignerD
29a30 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  llFile \..
29a40 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46        [getBuildF
29a50 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44  ileName SQLite.D
29a60 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61 6c 73  esigner.dll fals
29a70 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  e]....        se
29a80 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69  t systemDataSQLi
29a90 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20  teDllFile \..
29aa0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
29ab0 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ldFileName Syste
29ac0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
29ad0 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20  l false]....
29ae0 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61      set systemDa
29af0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46  taSQLiteLinqDllF
29b00 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
29b10 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
29b20 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
29b30 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
29b40 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20   false]....
29b50 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74     set systemDat
29b60 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
29b70 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
29b80 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
29b90 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
29ba0 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 61  QLite.EF6.dll fa
29bb0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse]....
29bc0 73 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20  set testExeFile
29bd0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
29be0 65 20 74 65 73 74 2e 65 78 65 20 66 61 6c 73 65  e test.exe false
29bf0 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ]..        set t
29c00 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b  estLinqExeFile [
29c10 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
29c20 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 66 61   testlinq.exe fa
29c30 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  lse]..        se
29c40 74 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65  t testEf6ExeFile
29c50 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
29c60 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 20 66  me testef6.exe f
29c70 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alse]....
29c80 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29c90 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76 61  TE: Setup the va
29ca0 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65 66  riables that ref
29cb0 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75  er to the variou
29cc0 73 20 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20  s data files..
29cd0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
29ce0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65  quired by the te
29cf0 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
29d00 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
29d10 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69        set testLi
29d20 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20  nqOutFile [file
29d30 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
29d40 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
29d50 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
29d60 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73  estDataPath] tes
29d70 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20  tlinq.out]]....
29d80 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 74 68         set north
29d90 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b 66 69  windEfDbFile [fi
29da0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
29db0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
29dc0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69          [file di
29dd0 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e  rname [file dirn
29de0 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65  ame [getSQLiteTe
29df0 73 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d  stDataPath]]] \.
29e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
29e10 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45  tlinq northwindE
29e20 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  F.db]]....
29e30 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69    set nonWalDbFi
29e40 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
29e50 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
29e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
29e70 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
29e80 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d  Path] nonWal.db]
29e90 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
29ea0 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65   walDbFile [file
29eb0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
29ec0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
29ed0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
29ee0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 61  TestDataPath] wa
29ef0 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  l.db]]....
29f00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
29f10 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f 75 73  OTE: The various
29f20 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61   install/uninsta
29f30 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 73 65  ll log files use
29f40 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d 0a 20  d to test the..
29f50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
29f60 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f  esign-time compo
29f70 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d  nent installer..
29f80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29f90 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
29fa0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
29fb0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
29fc0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
29fd0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
29fe0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
29ff0 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
2a000 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d  st_Vs2005.log]].
2a010 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
2a020 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38  estInstallVs2008
2a030 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
2a040 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
2a050 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
2a060 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
2a070 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
2a080 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38  ller_Test_Vs2008
2a090 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
2a0a0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
2a0b0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b  lVs2010LogFile [
2a0c0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2a0d0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2a0e0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
2a0f0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2a100 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  ] Installer_Test
2a110 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2010.log]]...
2a120 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
2a130 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  tInstallVs2012Lo
2a140 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
2a150 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
2a160 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
2a170 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
2a180 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
2a190 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c  er_Test_Vs2012.l
2a1a0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2a1b0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  set testInstallV
2a1c0 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69  s2013LogFile [fi
2a1d0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
2a1e0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
2a1f0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
2a200 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
2a210 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
2a220 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2013.log]]....
2a230 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
2a240 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
2a250 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2a260 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2a270 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2a280 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2a290 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72  aPath] Installer
2a2a0 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67  _Test_Vs2015.log
2a2b0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
2a2c0 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56  t testUninstallV
2a2d0 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69  s2005LogFile [fi
2a2e0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
2a2f0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
2a300 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
2a310 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
2a320 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  Uninstaller_Test
2a330 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2005.log]]...
2a340 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
2a350 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
2a360 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
2a370 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
2a380 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
2a390 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
2a3a0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
2a3b0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
2a3c0 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  08.log]]....
2a3d0 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
2a3e0 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
2a3f0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2a400 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
2a420 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
2a430 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
2a440 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f  r_Test_Vs2010.lo
2a450 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
2a460 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
2a470 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66  Vs2012LogFile [f
2a480 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
2a490 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
2a4a0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
2a4b0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
2a4c0 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
2a4d0 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2012.log]]..
2a4e0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
2a4f0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2a500 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  3LogFile [file n
2a510 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
2a520 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
2a530 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
2a540 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
2a550 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
2a560 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  013.log]]....
2a570 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
2a580 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
2a590 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2a5a0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2a5b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2a5c0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2a5d0 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
2a5e0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c  er_Test_Vs2015.l
2a5f0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2a600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a640 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
2a650 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
2a660 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2a670 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
2a680 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2a690 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65  ail $entityFrame 2a6a0 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 workDllFile]]]} 2a6b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2a6c0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2a6d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e  test_channel $en 2a6e0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 2a6f0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2a700 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2a710 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2a720 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2a730 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2a740 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 [file tail$ins
2a750 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d  tallerExeFile]]]
2a760 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2a770 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2a780 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2a790 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
2a7a0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a   Installer.exe..
2a7b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2a7c0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
2a7d0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
2a7e0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
2a7f0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
2a800 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65 73   tail $sqliteDes 2a810 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d ignerDllFile]]]} 2a820 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a830 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 2a840 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73$test_channel $s 2a850 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c qliteDesignerDll 2a860 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2a870 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2a880 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2a890 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2a8a0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2a8b0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 [file tail$sys
2a8c0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
2a8d0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2a8e0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2a8f0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2a900 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 annel$systemDat
2a910 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a  aSQLiteDllFile..
2a920 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2a930 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
2a940 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
2a950 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
2a960 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
2a970 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74   tail $systemDat 2a980 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 aSQLiteLinqDllFi 2a990 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 2a9a0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2a9b0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2a9c0 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  nel $systemDataS 2a9d0 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 2a9e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2a9f0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2aa00 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2aa10 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2aa20 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 2aa30 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 le tail$systemD
2aa40 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46  ataSQLiteEf6DllF
2aa50 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
2aa60 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2aa70 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2aa80 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 nnel$systemData
2aa90 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65  SQLiteEf6DllFile
2aaa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2aab0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2aac0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2aad0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2aae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2aaf0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78 65  le tail $testExe 2ab00 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2ab10 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 2ab20 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2ab30 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69  annel $testExeFi 2ab40 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 le test.exe.. 2ab50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2ab60 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2ab70 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2ab80 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2ab90 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2aba0 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 il$testLinqExeF
2abb0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
2abc0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2abd0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2abe0 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 nnel$testLinqEx
2abf0 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65  eFile testlinq.e
2ac00 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  xe..        }...
2ac10 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
2ac20 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2ac30 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2ac40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2ac50 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45  file tail $testE 2ac60 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 f6ExeFile]]]} th 2ac70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2ac80 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2ac90 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 2aca0 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 65 Ef6ExeFile teste 2acb0 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 f6.exe.. 2acc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 2acd0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 2ace0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 2acf0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 2ad00 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
2ad10 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d  estLinqOutFile]]
2ad20 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2ad30 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2ad40 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2ad50 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65$testLinqOutFile
2ad60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2ad70 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2ad80 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2ad90 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2ada0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2adb0 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69  le tail $northwi 2adc0 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 ndEfDbFile]]]} t 2add0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2ade0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2adf0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72  est_channel $nor 2ae00 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a thwindEfDbFile.. 2ae10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2ae20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 2ae30 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 2ae40 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 2ae50 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 2ae60 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 tail$nonWalDbF
2ae70 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
2ae80 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2ae90 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2aea0 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 nnel$nonWalDbFi
2aeb0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
2aec0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
2aed0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2aee0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2aef0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2af00 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44 62  file tail $walDb 2af10 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2af20 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 2af30 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2af40 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65  annel $walDbFile 2af50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2af60 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2af70 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2af80 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 2afa0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
2afb0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
2afc0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2afd0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2afe0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 2aff0 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
2b000 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2005LogFile..
2b010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2b020 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
2b030 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2b040 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
2b050 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2b060 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 2b070 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2008LogFile]]] 2b080 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2b090 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2b0a0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2b0b0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 2b0c0 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 8LogFile.. 2b0d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 2b0e0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2b0f0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2b100 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2b110 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2b120 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
2b130 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  10LogFile]]]} th
2b140 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2b150 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2b160 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
2b170 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  InstallVs2010Log
2b180 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2b190 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2b1a0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2b1b0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2b1c0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2b1d0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2b1e0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f tInstallVs2012Lo 2b1f0 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 2b200 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 2b210 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2b220 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74  hannel $testInst 2b230 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 2b240 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2b250 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2b260 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2b270 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2b280 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 2b290 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
2b2a0 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c  tallVs2013LogFil
2b2b0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2b2c0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2b2d0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 2b2e0 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
2b2f0 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2013LogFile..
2b300 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2b310 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
2b320 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2b330 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
2b340 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2b350 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 2b360 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2015LogFile]]] 2b370 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2b380 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2b390 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2b3a0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 2b3b0 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 2b3c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 2b3d0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2b3e0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2b3f0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2b400 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2b410 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2b420 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2005LogFile]]]}
2b430 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2b440 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2b450 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
2b460 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
2b470 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  5LogFile..
2b480 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
2b490 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2b4a0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2b4b0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2b4c0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2b4d0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2b4e0 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2008LogFile]]]} 2b4f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2b500 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2b510 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 2b520 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 2b530 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 8LogFile.. 2b540 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 2b550 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2b560 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2b570 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2b580 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2b590 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2b5a0 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2010LogFile]]]}
2b5b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2b5c0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2b5d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
2b5e0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2b5f0 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  0LogFile..
2b600 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
2b610 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2b620 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2b630 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2b640 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2b650 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2b660 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2012LogFile]]]} 2b670 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2b680 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2b690 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 2b6a0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2b6b0 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 2LogFile.. 2b6c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 2b6d0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2b6e0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2b6f0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2b700 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2b710 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2b720 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2013LogFile]]]}
2b730 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2b740 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2b750 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
2b760 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2b770 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  3LogFile..
2b780 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
2b790 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2b7a0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2b7b0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2b7c0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2b7d0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2b7e0 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2015LogFile]]]} 2b7f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2b800 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2b810 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 2b820 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2b830 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 2b840 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 2b850 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 2b860 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 runSQLiteTestFi 2b870 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b lesEpilogue {} { 2b880 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 .. uplevel 2b890 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 1 {.. uns 2b8a0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c et -nocomplain \ 2b8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 2b8c0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2b8d0 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 5LogFile testUni 2b8e0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 2b8f0 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 2b900 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c testUninstall 2b910 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 Vs2012LogFile te 2b920 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2b930 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 0LogFile \.. 2b940 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e testUnin 2b950 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 stallVs2008LogFi 2b960 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c le testUninstall 2b970 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5c 0d Vs2005LogFile \. 2b980 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 2b990 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 2b9a0 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 2b9b0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 2b9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 2b9d0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 2b9e0 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 ogFile testInsta 2b9f0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 2ba00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 2ba10 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 estInstallVs2008 2ba20 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 2ba30 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 2ba40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 .... unse 2ba50 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d t -nocomplain \. 2ba60 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 . nor 2ba70 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 thwindEfDbFile t 2ba80 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c estLinqOutFile \ 2ba90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 .. wa 2baa0 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 2bab0 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 2bac0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 2bad0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2bae0 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 2baf0 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 testLinqExeFile 2bb00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 2bb10 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 estExeFile syste 2bb20 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 2bb30 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 2bb40 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 systemDataS 2bb50 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 2bb60 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 2bb70 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 eDllFile \.. 2bb80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 sqliteDe 2bb90 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e signerDllFile in 2bba0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c stallerExeFile \ 2bbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e .. en 2bbc0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 2bbd0 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 File.. }.. 2bbe0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 2bbf0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 c runSQLiteTestE 2bc00 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 pilogue {} {.. 2bc10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2bc20 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 2bc30 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 g our custom epi 2bc40 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 2bc50 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 2bc60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 2bc70 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 2bc80 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 2bc90 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 o exists ::no(ep 2bca0 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ilogue.eagle)]} 2bcb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2bcc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2bcd0 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 2bce0 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 2bcf0 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 ended (now)... 2bd00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2bd10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2bd20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2bd30 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2bd40 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
2bd50 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
2bd60 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20   ended at " \..
2bd70 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
2bd80 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
2bd90 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d  seconds]] \n]...
2bda0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2bdb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
2bdc0 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20   the "epilogue"
2bdd0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
2bde0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20  and/or per-host
2bdf0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
2be00 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e        settings n
2be10 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
2be20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
2be30 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
2be40 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $2be50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 2be60 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 epilogue].... 2be70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2be80 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 2be90 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 checking the fi 2bea0 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e nal resources in 2beb0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 use by SQLite, 2bec0 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 make.. # 2bed0 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 sure bot 2bee0 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 h of the PRAGMA 2bef0 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 2bf00 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 2bf10 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 2bf20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 2bf30 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 2bf40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2bf50 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
2bf60 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2bf70 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20  TE: Also report
2bf80 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61  the resource usa
2bf90 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  ge after running
2bfa0 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20   the tests...
2bfb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bfc0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
2bfd0 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 2bfe0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 2bff0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2c000 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 TE: Report the c 2c010 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 2c020 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e ounts after runn 2c030 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a ing the tests... 2c040 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c050 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 getSQLiteHand 2c060 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 leCounts$::test
2c070 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
2c080 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2c090 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73   NOTE: If necess
2c0a0 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61  ary, disable sha
2c0b0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
2c0c0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
2c0d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
2c0e0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
2c0f0 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
2c100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
2c110 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
2c120 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  \$::test_channel
2c130 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
2c140 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2c150 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23  .....    #######
2c160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1a0 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
2c1b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1c0 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c  ####### END Eagl
2c1d0 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23  e ONLY #########
2c1e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c1f0 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
2c200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c240 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20  ######..  }....
2c250 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61   #..  # NOTE: Sa
2c260 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ve the name of t
2c270 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
2c280 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  taining this fil
2c290 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21  e...  #..  if {!
2c2a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d  [info exists com
2c2b0 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
2c2c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
2c2d0 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
2c2e0 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
2c2f0 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20  info script]]..
2c300 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
2c310 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65  OTE: Provide the
2c320 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2c330 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  ite test package
2c340 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
2c350 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63  ter...  #..  pac
2c360 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73  kage provide Sys
2c370 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2c380 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a           Test 1.0..}..