System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 7981f9a75dd3323078b46b8ee0181d2791eca61d:

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 32 30 31 35 2c 20 6f 72 20 32 30 013, 2015, or 20 0760: 31 37 20 62 75 69 6c 64 20 73 79 73 74 65 6d 73 17 build systems 0770: 2e 20 20 54 6f 0d 0a 20 20 20 20 20 20 23 20 20 . To.. # 0780: 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 override th 0790: 69 73 20 76 61 6c 75 65 20 76 69 61 20 74 68 65 is value via the 07a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 command line, e 07b0: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 nter a command s 07c0: 69 6d 69 6c 61 72 0d 0a 20 20 20 20 20 20 23 20 imilar.. # 07d0: 20 20 20 20 20 20 74 6f 20 6f 6e 65 20 6f 66 20 to one of 07e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 the following (a 07f0: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 0800: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0810: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0820: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 0830: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 0840: 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20 20 20 _year 2005".. 0850: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 0860: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 0870: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 0880: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0890: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 08a0: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 08b0: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 30 38 t test_year 2008 08c0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 08d0: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 08e0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 08f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0900: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0910: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0920: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 0930: 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20 20 23 r 2010".. # 0940: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 0950: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 0960: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 0970: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 0980: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0990: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 09a0: 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d 0a 20 st_year 2012".. 09b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 09c0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 09d0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 09e0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 09f0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a00: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a10: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a20: 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 13".. # 0a30: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0a40: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0a50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0a60: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0a70: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0a80: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 lize "set test_y 0a90: 65 61 72 20 32 30 31 35 22 0d 0a 20 20 20 20 20 ear 2015".. 0aa0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 0ab0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 0ac0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 0ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 0ae0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 0af0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 0b00: 74 65 73 74 5f 79 65 61 72 20 32 30 31 37 22 0d test_year 2017". 0b10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 0b20: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f -file .\path\to 0b30: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 \all.eagle.. 0b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0b50: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0b60: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0b70: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 0b80: 61 69 6e 20 74 65 73 74 5f 79 65 61 72 22 0d 0a ain test_year".. 0b90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 0ba0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 0bb0: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 0bc0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 0bd0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 0be0: 74 5f 79 65 61 72 5d 20 26 26 20 5b 73 74 72 69 t_year] && [stri 0bf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
0c00: 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65  t_year] > 0} the
0c10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
0c20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
0c30: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
0c40: 64 20 74 65 73 74 20 79 65 61 72 2e 20 20 49 66  d test year.  If
0c50: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
0c60: 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 0d 0a  s not set, the..
0c70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
0c80: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
0c90: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 77  ll be based on w
0ca0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 61  hether or not Ea
0cb0: 67 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  gle has been..
0cc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
0cd0: 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74  mpiled against t
0ce0: 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20 43  he CLR v2.0 or C
0cf0: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v4.0...
0d00: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
0d10: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  urn $::test_year 0d20: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 0d30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 0d40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 0d50: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63 Eagle has been c 0d60: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 ompiled against 0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2c 20 75 73 the CLR v4.0, us 0d80: 65 20 22 32 30 31 30 22 20 62 79 0d 0a 20 20 20 e "2010" by.. 0d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 # def 0da0: 61 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 ault (we could u 0db0: 73 65 20 22 32 30 31 32 22 2c 20 22 32 30 31 33 se "2012", "2013 0dc0: 22 2c 20 22 32 30 31 35 22 2c 20 6f 72 20 22 32 ", "2015", or "2 0dd0: 30 31 37 22 20 69 6e 20 74 68 61 74 0d 0a 20 20 017" in that.. 0de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 0df0: 73 65 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 se as well) as t 0e00: 68 65 20 74 65 73 74 20 79 65 61 72 3b 20 6f 74 he test year; ot 0e10: 68 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 herwise, use "20 0e20: 30 38 22 20 62 79 20 64 65 66 61 75 6c 74 0d 0a 08" by default.. 0e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0e40: 28 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 (we could use "2 0e50: 30 30 35 22 20 69 6e 20 74 68 61 74 20 63 61 73 005" in that cas 0e60: 65 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 e as well). If 0e70: 61 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 another major.. 0e80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b # [ 0e90: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 incompatible] ve 0ea0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 rsion of the CLR 0eb0: 20 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 is released, th 0ec0: 69 73 20 63 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 is check will.. 0ed0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 # h 0ee0: 61 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 ave to be change 0ef0: 64 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 d. The default 0f00: 74 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 test year to use 0f10: 20 66 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 for a.. 0f20: 23 20 20 20 20 20 20 20 70 61 72 74 69 63 75 6c # particul 0f30: 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d ar CLR version m 0f40: 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e ay be overridden 0f50: 20 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 by setting the 0f60: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 0f70: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 0f80: 20 22 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f "test_year_clr_ 0f90: 76 24 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 v$X", where "$X" 0fa0: 20 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d may [currently] 0fb0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 be.. # 0fc0: 20 20 20 20 20 65 69 74 68 65 72 20 22 32 22 20 either "2" 0fd0: 6f 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 or "4"... 0fe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 0ff0: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 1000: 69 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d imageRuntime40]} 1010: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1020: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 1030: 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f sts ::test_year_ 1040: 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 clr_v4] && \.. 1050: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1060: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 ing length$::te
1070: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20  st_year_clr_v4]
1080: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
1090: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
10a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10b0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
10c0: 64 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  d test year for
10d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
10e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
10f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1100: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c   $::test_year_cl 1110: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 r_v4.. 1120: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1140: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1150: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 the default tes 1160: 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 t year for the C 1170: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v4.0... 1180: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1190: 20 20 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 return 2010 11a0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 11b0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 11c0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 11d0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 11e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 11f0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1200: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 test_year_clr_v2 1210: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1220: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1230: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 ngth$::test_yea
1240: 72 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  r_clr_v2] > 0} t
1250: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1260: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1270: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1280: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
1290: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
12a0: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
12b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12c0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 12d0: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a st_year_clr_v2.. 12e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 12f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1300: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 1310: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 NOTE: Use the d 1320: 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 efault test year 1330: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e for the CLR v2. 1340: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 1350: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 1360: 65 74 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f eturn 2008; # TO 1370: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1380: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 13b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a }..... #.. 13c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 13d0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6f 6e procedure is on 13e0: 6c 79 20 75 73 65 64 20 77 68 65 6e 20 61 64 64 ly used when add 13f0: 69 6e 67 20 73 68 69 6d 6d 65 64 20 74 65 73 74 ing shimmed test 1400: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 1410: 20 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 67 #.. proc g 1420: 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f etBuildClrVersio 1430: 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 n {} {.. if 1440: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 1450: 3a 74 65 73 74 5f 63 6c 72 5d 20 26 26 20 5b 73 :test_clr] && [s 1460: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
1470: 74 65 73 74 5f 63 6c 72 5d 20 3e 20 30 7d 20 74  test_clr] > 0} t
1480: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1490: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
14a0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
14b0: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e  ied test version
14c0: 20 66 6f 72 20 74 68 65 20 43 4c 52 2e 20 20 49   for the CLR.  I
14d0: 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d  f this variable.
14e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14f0: 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65   is not set, the
1500: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
1510: 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20  ill be based on
1520: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0d 0a  whether or not..
1530: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1540: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
1550: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
1560: 74 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20  the CLR v2.0 or
1570: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1580: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
1590: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c 72  turn $::test_clr 15a0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 15b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 15c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 15d0: 63 6b 20 69 66 20 45 61 67 6c 65 20 68 61 73 20 ck if Eagle has 15e0: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 been compiled ag 15f0: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 ainst the CLR v4 1600: 2e 30 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 .0. If so,.. 1610: 20 20 20 20 20 23 20 20 20 20 20 20 20 6a 75 73 # jus 1620: 74 20 75 73 65 20 74 68 61 74 20 43 4c 52 20 76 t use that CLR v 1630: 65 72 73 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 ersion. Otherwi 1640: 73 65 2c 20 75 73 65 20 74 68 65 20 76 65 72 73 se, use the vers 1650: 69 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 ion for the.. 1660: 20 20 20 20 20 23 20 20 20 20 20 20 20 43 4c 52 # CLR 1670: 20 76 32 2e 30 2e 20 20 49 66 20 61 6e 6f 74 68 v2.0. If anoth 1680: 65 72 20 6d 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 er major [incomp 1690: 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f 6e 20 atible] version 16a0: 6f 66 20 74 68 65 20 43 4c 52 0d 0a 20 20 20 20 of the CLR.. 16b0: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 72 # is r 16c0: 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 68 eleased, this ch 16d0: 65 63 6b 20 77 69 6c 6c 20 68 61 76 65 20 74 6f eck will have to 16e0: 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 54 68 be changed. Th 16f0: 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 e default.. 1700: 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73 69 # versi 1710: 6f 6e 20 76 61 6c 75 65 20 66 6f 72 20 61 20 70 on value for a p 1720: 61 72 74 69 63 75 6c 61 72 20 43 4c 52 20 76 65 articular CLR ve 1730: 72 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 rsion may be ove 1740: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 20 rridden.. 1750: 20 23 20 20 20 20 20 20 20 62 79 20 73 65 74 74 # by sett 1760: 69 6e 67 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 ing the global v 1770: 61 72 69 61 62 6c 65 20 22 74 65 73 74 5f 63 6c ariable "test_cl 1780: 72 5f 76 24 58 22 2c 20 77 68 65 72 65 20 22 24 r_v$X", where "$1790: 58 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 X" may.. 17a0: 23 20 20 20 20 20 20 20 5b 63 75 72 72 65 6e 74 # [current 17b0: 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20 22 32 ly] be either "2 17c0: 22 20 6f 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 " or "4"... 17d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 17e0: 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {[haveConstrain 17f0: 74 20 69 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 t imageRuntime40 1800: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1810: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1820: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 xists ::test_clr 1830: 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 _v4] && \.. 1840: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 1850: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f length$::test_
1860: 63 6c 72 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65  clr_v4] > 0} the
1870: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1880: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1890: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
18a0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76  specified test v
18b0: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43  ersion for the C
18c0: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v4.0...
18d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18e0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74       return $::t 18f0: 65 73 74 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 est_clr_v4.. 1900: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1910: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1920: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1930: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 1940: 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20 lt test version 1950: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 for the CLR v4.0 1960: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 1970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1980: 74 75 72 6e 20 34 2e 30 2e 33 30 33 31 39 3b 20 turn 4.0.30319; 1990: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 # TODO: Good "fa 19a0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f llback" default? 19b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 19c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 19d0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 19e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 19f0: 73 74 5f 63 6c 72 5f 76 32 5d 20 26 26 20 5c 0d st_clr_v2] && \. 1a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 1a10: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
1a20: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 5d 20 3e 20  :test_clr_v2] >
1a30: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1a40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1a60: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1a70: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1a80: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a   the CLR v2.0...
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1aa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ab0: 6e 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32  n $::test_clr_v2 1ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1ad0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1ae0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1af0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1b00: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 76 65 default test ve 1b10: 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c rsion for the CL 1b20: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v2.0... 1b30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b40: 20 20 20 20 72 65 74 75 72 6e 20 32 2e 30 2e 35 return 2.0.5 1b50: 30 37 32 37 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 0727; # TODO: Go 1b60: 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 od "fallback" de 1b70: 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 fault?.. 1b80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1b90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 1ba0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 1bb0: 75 69 6c 64 59 65 61 72 73 20 7b 7d 20 7b 0d 0a uildYears {} {.. 1bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1bd0: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 1be0: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 e list of test y 1bf0: 65 61 72 73 20 68 61 73 20 62 65 65 6e 20 6f 76 ears has been ov 1c00: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 1c10: 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 user.. # 1c20: 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 (e.g. on the 1c30: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d command line).. 1c40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1c50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 1c60: 20 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 26 ::test_years] & 1c70: 26 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 & [llength$::te
1c80: 73 74 5f 79 65 61 72 73 5d 20 3e 20 30 7d 20 74  st_years] > 0} t
1c90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ca0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1cb0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
1cc0: 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ied list of test
1cd0: 20 79 65 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   years...
1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
1cf0: 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 73  rn $::test_years 1d00: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 1d10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1d20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1d30: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 the default lis 1d40: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20 t of test years 1d50: 28 69 2e 65 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 (i.e. all)... 1d60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d70: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30 return [list 200 1d80: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32 5 2008 2010 2012 1d90: 20 32 30 31 33 20 32 30 31 35 20 32 30 31 37 5d 2013 2015 2017] 1da0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1db0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1dc0: 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20 7b tBuildNetFx {} { 1dd0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1de0: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 1df0: 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46 72 the test .NET Fr 1e00: 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67 20 amework setting 1e10: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 1e20: 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 den by.. # 1e30: 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20 28 the user ( 1e40: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d e.g. on the comm 1e50: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 and line)... 1e60: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1e70: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1e80: 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c 0d st_net_fx] && \. 1e90: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 1ea0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
1eb0: 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 74  t_net_fx] > 0} t
1ec0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ed0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ee0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
1ef0: 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72  ied test .NET Fr
1f00: 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...
1f10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
1f20: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f  urn $::test_net_ 1f30: 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 fx.. } else 1f40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1f50: 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 1f60: 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ar].. set 1f70: 20 79 65 61 72 56 61 72 4e 61 6d 65 20 5b 61 70 yearVarName [ap 1f80: 70 65 6e 64 41 72 67 73 20 3a 3a 74 65 73 74 5f pendArgs ::test_ 1f90: 6e 65 74 5f 66 78 5f 20 24 79 65 61 72 5d 0d 0a net_fx_$year]..
1fa0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
1fb0: 6e 66 6f 20 65 78 69 73 74 73 20 24 79 65 61 72  nfo exists $year 1fc0: 56 61 72 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 VarName] && \.. 1fd0: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1fe0: 6e 67 20 6c 65 6e 67 74 68 20 5b 73 65 74 20 24 ng length [set$
1ff0: 79 65 61 72 56 61 72 4e 61 6d 65 5d 5d 20 3e 20  yearVarName]] >
2000: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2020: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
2030: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
2040: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2c   .NET Framework,
2050: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 62 75   based on the bu
2060: 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ild..          #
2070: 20 20 20 20 20 20 20 79 65 61 72 2e 0d 0a 20 20         year...
2080: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2090: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 65 74       return [set
20a0: 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 0d 0a   $yearVarName].. 20b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 20d0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 20e0: 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 Fallback to the 20f0: 20 22 77 65 6c 6c 20 6b 6e 6f 77 6e 22 20 2e 4e "well known" .N 2100: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 ET Framework ver 2110: 73 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 sion that.. 2120: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 2130: 6d 6f 73 74 20 63 6c 6f 73 65 6c 79 20 61 73 73 most closely ass 2140: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 ociated with a p 2150: 61 72 74 69 63 75 6c 61 72 20 76 65 72 73 69 6f articular versio 2160: 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 n of.. 2170: 23 20 20 20 20 20 20 20 56 69 73 75 61 6c 20 53 # Visual S 2180: 74 75 64 69 6f 2e 0d 0a 20 20 20 20 20 20 20 20 tudio... 2190: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 21a0: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 witch -exact -- 21b0: 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20 20$year {..
21c0: 20 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20       2005 {..
21d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21e0: 6e 20 6e 65 74 46 78 32 30 0d 0a 20 20 20 20 20  n netFx20..
21f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2200: 20 20 20 20 20 20 32 30 30 38 20 7b 0d 0a 20 20        2008 {..
2210: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2220: 72 6e 20 6e 65 74 46 78 33 35 0d 0a 20 20 20 20  rn netFx35..
2230: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
2240: 20 20 20 20 20 20 20 32 30 31 30 20 7b 0d 0a 20         2010 {..
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2260: 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 20  urn netFx40..
2270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2280: 20 20 20 20 20 20 20 20 32 30 31 32 20 7b 0d 0a          2012 {..
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22a0: 74 75 72 6e 20 6e 65 74 46 78 34 35 0d 0a 20 20  turn netFx45..
22b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22c0: 20 20 20 20 20 20 20 20 20 32 30 31 33 20 7b 0d           2013 {.
22d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
22e0: 65 74 75 72 6e 20 6e 65 74 46 78 34 35 31 3b 20  eturn netFx451;
22f0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
2300: 78 34 35 32 22 3f 0d 0a 20 20 20 20 20 20 20 20  x452"?..
2310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
2320: 20 20 20 32 30 31 35 20 7b 0d 0a 20 20 20 20 20     2015 {..
2330: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
2340: 6e 65 74 46 78 34 36 3b 20 23 20 54 4f 44 4f 3a  netFx46; # TODO:
2350: 20 4f 72 20 22 6e 65 74 46 78 34 36 31 22 20 2f   Or "netFx461" /
2360: 20 22 6e 65 74 46 78 34 36 32 22 3f 0d 0a 20 20   "netFx462"?..
2370: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2380: 20 20 20 20 20 20 20 20 20 32 30 31 37 20 7b 0d           2017 {.
2390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
23a0: 65 74 75 72 6e 20 6e 65 74 46 78 34 37 3b 20 23  eturn netFx47; #
23b0: 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46 78   TODO: Or "netFx
23c0: 34 37 31 22 3f 0d 0a 20 20 20 20 20 20 20 20 20  471"?..
23d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
23e0: 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20    default {..
23f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2400: 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44  n netFx35; # TOD
2410: 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63  O: Good "fallbac
2420: 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20  k" default?..
2430: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2440: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2450: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
2460: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20   }.....    #..
2470: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
2480: 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
2490: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
24a0: 69 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  if the configure
24b0: 64 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20  d test..    #
24c0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20      platform is
24d0: 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20  most likely the
24e0: 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73  default for this
24f0: 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23   machine...    #
2500: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65 66  ..    proc isDef
2510: 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  aultBuildPlatfor
2520: 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75  m { {verbose tru
2530: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
2540: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
2550: 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20  unning on WoW64
2560: 69 73 20 6e 65 76 65 72 20 74 68 65 20 64 65 66  is never the def
2570: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a  ault platform...
2580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2590: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57  f {[isRunningWoW
25a0: 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  64]} then {..
25b0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 25c0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 25d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
25e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2600: 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64  - detected non-d
2610: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20  efault platform
2620: 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20  (WoW64)\n"..
2630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2640: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
2650: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2660: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2670: 20 54 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64   This has a good
2680: 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67   chance of being
2690: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61   the default pla
26a0: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  tform...      #.
26b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb 26c0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 26d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
26e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  st_channel "----
26f0: 20 64 65 74 65 63 74 65 64 20 64 65 66 61 75 6c   detected defaul
2700: 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20  t platform\n"..
2710: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2720: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
2730: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
2740: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
2750: 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20   { native } {..
2760: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2770: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61  xists ::test_pla
2780: 74 66 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20  tform] && \..
2790: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
27a0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c  ength $::test_pl 27b0: 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 27c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 27d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 27e0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 27f0: 64 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e d test platform. 2800: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62 If this variab 2810: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a le is not set,.. 2820: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2830: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 2840: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 e will be based 2850: 6f 6e 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 on the machine a 2860: 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 rchitecture... 2870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2880: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 return [expr {$
2890: 6e 61 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74  native ? $::test 28a0: 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d _platform : ""}] 28b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 28c0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 28d0: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 :test_machine] & 28e0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 28f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2900: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e  :test_machine] >
2910: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2920: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2930: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76   NOTE: For nativ
2940: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e  e builds, return
2950: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61   the platform na
2960: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  me corresponding
2970: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20   to..        #
2980: 20 20 20 20 20 74 68 65 20 74 65 73 74 20 6d 61       the test ma
2990: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
29a0: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72  re; otherwise, r
29b0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a  eturn an empty..
29c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
29d0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
29e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
29f0: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20  rn [expr {..
2a00: 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20        $native ? 2a10: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo 2a20: 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 rm$::test_machi
2a30: 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20  ne] : ""..
2a40: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c    }]..      } el
2a50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
2a60: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
2a70: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65  m(machine)]} the
2a80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
2a90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2aa0: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64  For native build
2ab0: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c  s, return the pl
2ac0: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72  atform name corr
2ad0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20  esponding to..
2ae0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
2af0: 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  e machine archit
2b00: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
2b10: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
2b20: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
2b30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
2b40: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
2b50: 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65           $native 2b60: 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 ? [machineToPla 2b70: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
2b80: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20  tform(machine)]
2b90: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d  : ""..        }]
2ba0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
2bb0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2bc0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20       # NOTE: No
2bd0: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2be0: 74 75 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c  ture is availabl
2bf0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
2c00: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
2c10: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69      #       It i
2c20: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72  s important to r
2c30: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73  eturn an empty s
2c40: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75  tring here becau
2c50: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..
2c60: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f  #       result o
2c70: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
2c80: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
2c90: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a  h [file join]...
2ca0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2cb0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
2cc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
2cd0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
2ce0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ldConfiguration
2cf0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
2d00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
2d10: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75   if the "configu
2d20: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20  ration" setting
2d30: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
2d40: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20  den by the..
2d50: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28    #       user (
2d60: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
2d70: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73  and line).  This
2d80: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65   helps control e
2d90: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20  xactly..      #
2da0: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20        which set
2db0: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61  of binaries we a
2dc0: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e  re testing (i.e.
2dd0: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20   those built in
2de0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
2df0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52     "Debug" or "R
2e00: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f  elease" build co
2e10: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20  nfigurations).
2e20: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  To override this
2e30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e40: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f  value via the co
2e50: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65  mmand line, ente
2e60: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69  r a command simi
2e70: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20  lar to one of..
2e80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2e90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20   following (all
2ea0: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20  on one line):..
2eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ec0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ed0: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
2ee0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
2ef0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75  nfiguration Debu
2f00: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  g"..      #
2f10: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2f20: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2f40: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2f50: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
2f60: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
2f70: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65  nfiguration Rele
2f80: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ase"..      #
2f90: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
2fa0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
2fb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2fc0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
2fd0: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70  ll.exe -file .\p
2fe0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
2ff0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20   -preTest..
3000: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65   #         "unse
3010: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
3020: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
3030: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  "..      #..
3040: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3050: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
3060: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  uration] && \..
3070: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
3080: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 3090: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e configuration] > 30a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 30b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 30c0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 30d0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f pecified test co 30e0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 nfiguration. Th 30f0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 3100: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 used.. # 3110: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 for this v 3120: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 ariable is typic 3130: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 ally "Release", 3140: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65 as set by the te 3150: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 3160: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 suite itself 3170: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 3180: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
3190: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
31a0: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
31b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
31c0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
31d0: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c  ormally, we will
31e0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20   never hit this
31f0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65  case because the
3200: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20   value of the..
3210: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3220: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
3230: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c  n variable is al
3240: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20  ways set by the
3250: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20  test suite..
3260: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65      #       itse
3270: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  lf; however, it
3280: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65  can be overridde
3290: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65  n using the unse
32a0: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20  t command..
32b0: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20     #       from
32c0: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74  the -preTest opt
32d0: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20  ion to the test
32e0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
32f0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
3300: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  n $::eagle_platf 3310: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f orm(configuratio 3320: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n).. }.. 3330: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 3340: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 3350: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 ations {} {.. 3360: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3370: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c TE: See if the l 3380: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 3390: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 igurations has b 33a0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 een overridden b 33b0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 33c0: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 the user (e.g. 33d0: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c on the command l 33e0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ine)... #.. 33f0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 3400: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f exists ::test_co 3410: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 nfigurations] && 3420: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c \.. [l 3430: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 length$::test_c
3440: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e  onfigurations] >
3450: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
3460: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3470: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
3480: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66  pecified list of
3490: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
34a0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ions...        #
34b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
34c0: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 34d0: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d rations.. } 34e0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 34f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3500: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 TE: Use the defa 3510: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 ult list of test 3520: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e configurations. 3530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3540: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 3550: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d t Debug Release] 3560: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3570: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3580: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 3590: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 35a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 35b0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 35c0: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 base directory w 35d0: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 here all the bui 35e0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 lds should be.. 35f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 # loc 3600: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 3610: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 3620: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 y that contains 3630: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 the actual.. 3640: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 3650: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 3660: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 (e.g. parent of 3670: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 "bin")... 3680: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 3690: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c fo exists ::buil 36a0: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 36b0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 36c0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 36d0: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
36e0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
36f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
3700: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3710: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
3720: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65  f the build base
3730: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
3740: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
3750: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3760: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
3770: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
3780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3790: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 37a0: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d _base_directory. 37b0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 37c0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 37d0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 37e0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 37f0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 3800: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
3810: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
3820: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3830: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65        # NOTE: Ne
3840: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20  xt, fallback to
3850: 74 68 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20  the grandparent
3860: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65  directory of the
3870: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20   one..        #
3880: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67        containing
3890: 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e   this file (i.e.
38a0: 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29   "common.eagle")
38b0: 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d  , if available..
38c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
38d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
38e0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64   dirname [file d
38f0: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e  irname $::common 3900: 5f 64 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 _directory]].. 3910: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 3920: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 nfo exists ::pat 3930: 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 h] && \.. 3940: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 3950: 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 h$::path] > 0}
3960: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3970: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3980: 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c  E: Finally, fall
3990: 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65  back to the pare
39a0: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20  nt directory of
39b0: 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20  the EagleTest..
39c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
39d0: 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54  ath.  The EagleT
39e0: 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72  est package guar
39f0: 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73  antees that this
3a00: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20   variable..
3a10: 20 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20     #       will
3a20: 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69  be set to the di
3a30: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
3a40: 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c  ng the first fil
3a50: 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  e to..        #
3a60: 20 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68        execute th
3a70: 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67  e [runTestProlog
3a80: 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61  ue] script libra
3a90: 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20  ry procedure...
3aa0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3ab0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
3ac0: 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d  irname $::path]. 3ad0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 3ae0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3af0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 # NOTE: No p 3b00: 61 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ath is available 3b10: 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 , return an empt 3b20: 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 y string. This 3b30: 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 point.. # 3b40: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f should no 3b50: 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 t be reached... 3b60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3b70: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 return "".. 3b80: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 3b90: 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 proc getSQLi 3ba0: 74 65 54 65 73 74 44 61 74 61 50 61 74 68 20 7b teTestDataPath { 3bb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 3bc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 3bd0: 72 65 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 re out the direc 3be0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 tory where all t 3bf0: 68 65 20 74 65 73 74 20 64 61 74 61 20 66 69 6c he test data fil 3c00: 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 es should.. 3c10: 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 # be loca 3c20: 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c ted. This shoul 3c30: 64 20 62 65 20 74 68 65 20 22 64 61 74 61 22 20 d be the "data" 3c40: 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 directory beneat 3c50: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 h the.. # 3c60: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 3c70: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 ontaining the ac 3c80: 74 75 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 tual test script 3c90: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 3ca0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 3cb0: 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 join$::path dat
3cc0: 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  a]..    }.....
3cd0: 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67    proc isRunning
3ce0: 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20  WoW64 {} {..
3cf0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3d00: 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74  E: For now, just
3d10: 20 75 73 65 20 74 68 65 20 65 78 69 73 74 69 6e   use the existin
3d20: 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  g test constrain
3d30: 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d  t for detecting.
3d40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
3d50: 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d   WoW64 process..
3d60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d70: 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73  return [haveCons
3d80: 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20  traint wow64]..
3d90: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3da0: 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73  c isMixedModeAss
3db0: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65  embly { fileName
3dc0: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20   {varName ""} }
3dd0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
3de0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
3df0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 74   make sure the t
3e00: 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 61 73  est suite infras
3e10: 74 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f  tructure is allo
3e20: 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  wed to..      #
3e30: 20 20 20 20 20 20 75 73 65 20 74 68 65 20 5b 65        use the [e
3e40: 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20  xec] command...
3e50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3e60: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
3e70: 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21  ::no(exec)] && !
3e80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
3e90: 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68  o(corFlags)]} th
3ea0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3eb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3ec0: 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e   If the location
3ed0: 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20   of CorFlags is
3ee0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65  present in the e
3ef0: 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20  nvironment,..
3f00: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
3f10: 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61   it; otherwise a
3f20: 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74  ssume it is in t
3f30: 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20  he PATH...
3f40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
3f50: 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20   corFlags [expr
3f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e  {..          [in
3f70: 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
3f80: 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a  CorFlags)] ? $:: 3f90: 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 env(CorFlags) : 3fa0: 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 "CorFlags".. 3fb0: 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 }].... 3fc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 3fd0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 3fe0: 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 execute CorFlags 3ff0: 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 on the specifie 4000: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 d file... 4010: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 4020: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 4030: 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 exec --$cor
4040: 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69  Flags [file nati
4050: 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  vename $fileName 4060: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 ].. } exe 4070: 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d c] == 0} then {. 4080: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 4090: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 40a0: 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 If requested by 40b0: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 our caller, atte 40c0: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 mpt to determine 40d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 40e0: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d # platform 40f0: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 for the specifi 4100: 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e ed file as well. 4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 4120: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 4130: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
4140: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
4150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
4160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
4170: 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20  NOTE: Store the
4180: 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20  platform in the
4190: 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69  named variable i
41a0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  n the..
41b0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65     #       conte
41c0: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
41d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
41e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70  ..            up
41f0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70  var 1 $varName p 4200: 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 latform.... 4210: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 4230: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 tempt to extract 4240: 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f the PE line fro 4250: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a m the captured.. 4260: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 4270: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4280: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 this value is "P 4290: 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c E32" or "PE32+", 42a0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 42b0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 42c0: 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 ly file is 32-bi 42d0: 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 t or 64-bit, res 42e0: 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 pectively;.. 42f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4300: 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 otherwise, its t 4310: 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d ype is unknown.. 4320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 4330: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 4340: 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 pattern {^PE 4350: 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 : (PE32|PE32 4360: 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 \+)\s+$}....
4370: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67          if {[reg
4380: 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61  exp -line -- $pa 4390: 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d ttern$exec dumm
43a0: 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d  y pe32]} then {.
43b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
43c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
43d0: 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77  # HACK: This [sw
43e0: 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68  itch] assumes th
43f0: 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 75 74  at 32-bit execut
4400: 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20  ables are..
4410: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
4420: 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20   always x86 and
4430: 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 65 63  that 64-bit exec
4440: 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61  utables are alwa
4450: 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ys..
4460: 20 20 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a    #       x64...
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
4480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
4490: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20  witch -exact --
44a0: 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20  $pe32 {.. 44b0: 20 20 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d PE32 {. 44c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 44d0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 44e0: 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 Win32.. 44f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 4500: 20 20 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 PE32+ 4510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4520: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 4530: 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 m x64.. 4540: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 4550: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c defaul 4560: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t {.. 4570: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 4580: 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 orm "".. 4590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 45a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 45b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 45d0: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d set platform "". 45e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 45f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 4600: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4610: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 4620: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 tempt to extract 4630: 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 the ILONLY line 4640: 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 from the captur 4650: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ed.. # 4660: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 output. I 4670: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 f this value is 4680: 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 zero, the specif 4690: 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 ied file must.. 46a0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 46b0: 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 be a mixed-mode 46c0: 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 assembly; other 46d0: 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e wise, it contain 46e0: 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 s only.. 46f0: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 # manage 4700: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 d components... 4710: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4720: 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 set patter 4730: 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 n {^ILONLY : 4740: 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 (0|1)\s+$}....
4750: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65          if {![re
4760: 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70  gexp -line -- $p 4770: 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d attern$exec dum
4780: 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e  my ilOnly]} then
4790: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
47a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
47b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
47c0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f         if {!$ilO 47d0: 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 nly} then {.. 47e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 47f0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. 4800: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 4810: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 4820: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 4830: 49 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 If the test suit 4840: 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 e cannot use [ex 4850: 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e ec] or execution 4860: 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 of CorFlags.. 4870: 20 20 20 20 23 20 20 20 20 20 20 20 66 61 69 6c # fail 4880: 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 ed, return false 4890: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 48a0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 48b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 48c0: 6f 63 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 oc getNativeLibr 48d0: 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 aryFileNamesOnly 48e0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 48f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 4900: 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 rst, check if th 4910: 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 e list of native 4920: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 library file na 4930: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4940: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4950: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4960: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4970: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4980: 73 20 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 s ::native_libra 4990: 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 ry_file_names] & 49a0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 49b0: 6c 6c 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 llength$::nativ
49c0: 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e  e_library_file_n
49d0: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ames] > 0} then
49e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
49f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
4a00: 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
4a10: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61   library file na
4a20: 6d 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  mes has been ove
4a30: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20  rridden;..
4a40: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
4a50: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62  ore, use it verb
4a60: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
4a70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4a80: 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61   $::native_libra 4a90: 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 ry_file_names.. 4aa0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 4ab0: 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e isWindows]} then 4ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4ad0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4ae0: 74 68 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e therwise, on Win 4af0: 64 6f 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 dows, always use 4b00: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c the default fil 4b10: 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 e name.. 4b20: 23 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 # "sqlite3 4b30: 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 .dll"... 4b40: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 4b50: 6e 20 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e n [list sqlite3. 4b60: 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c dll].. } el 4b70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 4b80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4b90: 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 Otherwise, retu 4ba0: 72 6e 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 rn both the gene 4bb0: 72 69 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e ric POSIX file n 4bc0: 61 6d 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 ame and the.. 4bd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 # Mac 4be0: 20 4f 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c OS X file name, 4bf0: 20 73 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 since we do not 4c00: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 currently have 4c10: 61 6e 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 an easy.. 4c20: 20 23 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 # way to 4c30: 64 65 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 detect which of 4c40: 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 those platforms 4c50: 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f we are running o 4c60: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 n... #.. 4c70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 4c80: 69 73 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 ist libsqlite3.d 4c90: 79 6c 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e ylib libsqlite3. 4ca0: 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 so].. }.. 4cb0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4cc0: 20 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d getInteropAssem 4cd0: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 blyFileNamesOnly 4ce0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 4cf0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 4d00: 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 rst, check if th 4d10: 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f e list of intero 4d20: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 p assembly file 4d30: 6e 61 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a names has been.. 4d40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 4d50: 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 nually overridde 4d60: 6e 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 n... #.. 4d70: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 4d80: 73 74 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 sts ::interop_as 4d90: 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 sembly_file_name 4da0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 s] && \.. 4db0: 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 [llength$::i
4dc0: 6e 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f  nterop_assembly_
4dd0: 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d  file_names] > 0}
4de0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4df0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
4e00: 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  TE: The list of
4e10: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
4e20: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20   file names has
4e30: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4e40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4e50: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
4e60: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20   it verbatim...
4e70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4e80: 20 20 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65    return $::inte 4e90: 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c rop_assembly_fil 4ea0: 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d e_names.. } 4eb0: 20 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 elseif {[isWind 4ec0: 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ows]} then {.. 4ed0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4ee0: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 # NOTE: Otherwi 4ef0: 73 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 se, on Windows, 4f00: 61 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 always use the d 4f10: 65 66 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 efault file name 4f20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4f30: 20 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f "SQLite.Intero 4f40: 70 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 p.dll"... 4f50: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 4f60: 72 6e 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e rn [list SQLite. 4f70: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 Interop.dll].. 4f80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 4f90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4fa0: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 # NOTE: Otherwi 4fb0: 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 se, return both 4fc0: 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 the generic POSI 4fd0: 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 X file name and 4fe0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 4ff0: 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 Mac OS X fi 5000: 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 le name, since w 5010: 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 e do not current 5020: 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d ly have an easy. 5030: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5040: 20 77 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 way to detect w 5050: 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c hich of those pl 5060: 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 atforms we are r 5070: 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 unning on... 5080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5090: 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 eturn [list libS 50a0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 QLite.Interop.dy 50b0: 6c 69 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e lib libSQLite.In 50c0: 74 65 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 terop.so].. 50d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 50e0: 20 20 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 proc getCoreEx 50f0: 74 65 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c tensionBinaryFil 5100: 65 4e 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 eName { {default 5110: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 5120: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 set fileName [ge 5130: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e tCoreBinaryFileN 5140: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if 5150: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
5160: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
5170: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
5180: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  n $fileName.. 5190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 51a0: 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 turn$default..
51b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
51c0: 63 20 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62  c isBuildAvailab
51d0: 6c 65 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65  le { native dire
51e0: 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22  ctory {varName "
51f0: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
5200: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
5210: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
5220: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
5230: 6d 65 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61  me for the prima
5240: 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ry assembly..
5250: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
5260: 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d  ining the System
5270: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e  .Data.SQLite man
5280: 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e  aged components.
5290: 20 20 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20    It..      #
52a0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f      should be no
52b0: 74 65 64 20 74 68 61 74 20 74 68 69 73 20 61 73  ted that this as
52c0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20  sembly file may
52d0: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  also contain the
52e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
52f0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
5300: 73 2c 20 69 66 20 61 20 6e 61 74 69 76 65 20 62  s, if a native b
5310: 75 69 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d  uild is in use..
5320: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5330: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
5340: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
5350: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 5360: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 5370: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 5380: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 ite.dll]].... 5390: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 53a0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
53b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
53c0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
53d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
53e0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
53f0: 20 41 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f   Attempt to auto
5400: 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74  matically detect
5410: 20 69 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   if the primary
5420: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
5430: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73  #       contains
5440: 20 61 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70   any native comp
5450: 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73  onents, if neces
5460: 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sary...      #..
5470: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
5480: 67 20 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65  g length $native 5490: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 54a0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 54b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
54c0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
54d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 76 61  ..          upva
54e0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61  r 1 $varName$va
54f0: 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d  rName..        }
5500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
5510: 6e 61 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d  native [isMixedM
5520: 6f 64 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  odeAssembly $fil 5530: 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d eName$varName].
5540: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5550: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5560: 45 3a 20 49 66 20 74 68 65 20 70 72 69 6d 61 72  E: If the primar
5570: 79 20 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20  y assembly also
5580: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74  contains the nat
5590: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d  ive components,.
55a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
55b0: 65 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  e have everythin
55c0: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20  g we need...
55d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$55e0: 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a native} then {.. 55f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 5600: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 5610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5620: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 NOTE: If the ma 5630: 63 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e chine name is un 5640: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 available, there 5650: 20 69 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 is nothign else 5660: 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 we.. # 5670: 20 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 can do... 5680: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 5690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 56a0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 56b0: 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ine)]} then {.. 56c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa 56d0: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a lse.. }.... 56e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 56f0: 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 NOTE: What is t 5700: 68 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20 he architecture 5710: 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 for this machine 5720: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. 5730: 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 set architectu 5740: 72 65 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 re [machineToPla 5750: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
5760: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74  tform(machine) t
5770: 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  rue]....      #.
5780: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
5790: 68 61 74 20 69 73 20 74 68 65 20 70 6c 61 74 66  hat is the platf
57a0: 6f 72 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63  orm for this mac
57b0: 68 69 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  hine?..      #..
57c0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
57d0: 72 6d 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61  rm [machineToPla
57e0: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61  tform $::tcl_pla 57f0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d tform(machine)]. 5800: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5810: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 5820: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 5830: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f ied file name fo 5840: 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 r the interop as 5850: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 sembly.. # 5860: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 containing 5870: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 5880: 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 .SQLite native c 5890: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 omponents. If t 58a0: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 58b0: 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 file exists, 58c0: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 we should have e 58d0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 verything we nee 58e0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 58f0: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 5900: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 ameOnly [getInte 5910: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 5920: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 amesOnly] {.. 5930: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 5940: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 5950: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
5960: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
5970: 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 5980: 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f cture$fileNameO
5990: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nly]]....
59a0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
59b0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 59c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 59d0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 59e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 59f0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 5a00: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 5a10: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
5a20: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
5a30: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24       $platform$
5a40: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a  fileNameOnly]]..
5a50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66  ..        if {[f
5a60: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 5a70: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 5a80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 5a90: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 5aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 ... set f 5ab0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 5ac0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 5ad0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
5ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66  ..            $f 5af0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d ileNameOnly]]... 5b00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi 5b10: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
5b20: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
5b30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5b40: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  rue..        }..
5b50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
5b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
5b70: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
5b80: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
5b90: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51   name for the SQ
5ba0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
5bb0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
5bc0: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20  .  If this file
5bd0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c  exists, we shoul
5be0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  d have everythin
5bf0: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20  g we..      #
5c00: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20      need...
5c10: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63   #..      foreac
5c20: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
5c30: 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
5c40: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
5c50: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
5c60: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74  leName [file nat
5c70: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
5c80: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  in $directory \. 5c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 .$ar
5ca0: 63 68 69 74 65 63 74 75 72 65 20 24 66 69 6c 65  chitecture $file 5cb0: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 NameOnly]].... 5cc0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 5cd0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
5ce0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
5cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
5d00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
5d10: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
5d20: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
5d30: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
5d40: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 5d50: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
5d60: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  orm $fileNameOnl 5d70: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 y]].... i 5d80: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 5d90: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
5da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   {..          re
5db0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
5dc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
5dd0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
5de0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
5df0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 5e00: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 5e10: 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79$fileNameOnly
5e20: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ]]....        if
5e30: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $5e40: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 5e50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret 5e60: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 5e70: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 5e80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5e90: 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f NOTE: One or mo 5ea0: 72 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e re native compon 5eb0: 65 6e 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 ents needed by S 5ec0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 5ed0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5ee0: 20 61 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 are missing... 5ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 5f00: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 5f10: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 5f20: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c sReleaseAvailabl 5f30: 65 20 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 e { directory {v 5f40: 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a arName ""} } {.. 5f50: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 5f60: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
5f70: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
5f80: 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20          upvar 1
5f90: 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d  $varName$varNam
5fa0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
5fb0: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75      return [isBu
5fc0: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20  ildAvailable ""
5fd0: 24 64 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e  $directory$varN
5fe0: 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  ame]..    }.....
5ff0: 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69      proc joinBui
6000: 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61  ldDirectory { na
6010: 74 69 76 65 20 70 61 74 68 20 79 65 61 72 20 70  tive path year p
6020: 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72  latform configur
6030: 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20  ation } {..
6040: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6050: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64  : Figure out and
6060: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65   then return the
6070: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
6080: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69   path to the bui
6090: 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ld..      #
60a0: 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 65    directory base
60b0: 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67  d on all the arg
60c0: 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20  uments provided
60d0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
60e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
60f0: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e  f {$native} then 6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 6110: 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 rn [file join$p
6120: 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 70  ath bin $year$p
6130: 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75  latform $configu 6140: 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d ration].. } 6150: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 6160: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 6170: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 in$path bin $ye 6180: 61 72 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f ar$configuratio
6190: 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  n bin]..      }.
61a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
61b0: 72 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 65  roc getBuildDire
61c0: 63 74 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f  ctory { managedO
61d0: 6e 6c 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  nly } {..      #
61e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
61f0: 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69  See if the "nati
6200: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ve" runtime opti
6210: 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e  on has been set.
6220: 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65    If so, use the
6230: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6240: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
6250: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
6260: 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68  embly (a.k.a. th
6270: 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70  e native interop
6280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6290: 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65  assembly).  To e
62a0: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f  nable this optio
62b0: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  n via the comman
62c0: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d  d line, enter a.
62d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
62e0: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74  ommand similar t
62f0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  o one of the fol
6300: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f  lowing (all on o
6310: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20  ne line):..
6320: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20   #..      #
6330: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65    EagleShell.exe
6340: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75   -initialize -ru
6350: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
6360: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ve..      #
6370: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
6380: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
6390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
63a0: 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20        To enable
63b0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20  this option via
63c0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
63d0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62   prior to the "b
63e0: 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23  eta 16"..      #
63f0: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f         release o
6400: 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c  f Eagle, the fol
6410: 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d  lowing command m
6420: 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74  ust be used inst
6430: 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ead..      #
6440: 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20     (also all on
6450: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20  one line):..
6460: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
6470: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
6480: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70  e -initialize -p
6490: 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20  ostInitialize..
64a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22       #         "
64b0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
64c0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
64d0: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70  ive AddRuntimeOp
64e0: 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20  tion native"..
64f0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
6500: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
6510: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
6520: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
6530: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64  o exists ::build
6540: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
6550: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
6560: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75  ing length $::bu 6570: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e ild_directory] > 6580: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 6590: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 65a0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat 65b0: 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 ion of the build 65c0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 65d0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 65e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 65f0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 6600: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 it verbatim... 6610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6620: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 return$::build
6630: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
6640: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
6650: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6660: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e   NOTE: If the "n
6670: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f  ative" runtime o
6680: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68  ption is set, th
6690: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
66a0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23  embly..        #
66b0: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20         is being
66c0: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74  tested.  In that
66d0: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20   case, the path
66e0: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  to the build dir
66f0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
6700: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e  #       will con
6710: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  tain the platfor
6720: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74  m name and all t
6730: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  he binaries unde
6740: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  r test..
6750: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
6760: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61  e present in tha
6770: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66  t directory.  If
6780: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
6790: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23  ntime..        #
67a0: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73         option is
67b0: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75   not set, the bu
67c0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69  ild directory wi
67d0: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ll be considered
67e0: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..
67f0: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72  #       "platfor
6800: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68  m-neutral", with
6810: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63   the notable exc
6820: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61  eption of any na
6830: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20  tive..        #
6840: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28        assembly (
6850: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74  e.g. "SQLite.Int
6860: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65  erop.dll") copie
6870: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74  d there during t
6880: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
6890: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73      build proces
68a0: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68  s itself.  If th
68b0: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process
68c0: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74  somehow does not
68d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
68e0: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76    copy the nativ
68f0: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74  e assembly for t
6900: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f  his platform, mo
6910: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d  st of the tests.
6920: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6930: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69   in the suite wi
6940: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69  ll simply be ski
6950: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79  pped.  Generally
6960: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65   speaking, there
6970: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6980: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74    are two ways t
6990: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61  o build the bina
69a0: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72  ries when prepar
69b0: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a  ing to run the..
69c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69d0: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20  test suite:..
69e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69f0: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64  #       1. Build
6a00: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61   the separate ma
6a10: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65  naged and native
6a20: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e   assemblies usin
6a30: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  g some..
6a40: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61  #          comma
6a50: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d  nds similar to:.
6a60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6a70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
6a80: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 6a90: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 guration}Managed 6aa0: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d Only${Platform}
6ab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6ac0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $6ad0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e {Configuration}N 6ae0: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 ativeOnly${Plat
6af0: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
6b00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6b10: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e       Where ${Con 6b20: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 figuration} is e 6b30: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 6b40: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a "Release" and.. 6b50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6b60: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69${Platform} i
6b70: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22  s either "Win32"
6b80: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20   or "x64"...
6b90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6ba0: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20         2. Build
6bb0: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
6bc0: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20  ssembly using a
6bd0: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
6be0: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  to:..        #..
6bf0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c00: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 6c10: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b onfiguration}${
6c20: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20  Platform}..
6c30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6c40: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24           Where $6c50: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 {Configuration} 6c60: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 is either "Debug 6c70: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 " or "Release" a 6c80: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 6c90: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72${Platfor
6ca0: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69  m} is either "Wi
6cb0: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20  n32" or "x64".
6cc0: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  If this command
6cd0: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
6ce0: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72         used, var
6cf0: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20  ious tests that
6d00: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65  require suppleme
6d10: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20  ntary managed..
6d20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6d30: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e    assemblies (e.
6d40: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20  g. LINQ) may be
6d50: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74  skipped unless t
6d60: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20  hose binaries..
6d70: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6d80: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74    are subsequent
6d90: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74  ly copied into t
6da0: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63  he correct direc
6db0: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20  tory (i.e. by..
6dc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6dd0: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22    "test_all.bat"
6de0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
6df0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e         #       N
6e00: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20  ote that all of
6e10: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  the build comman
6e20: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65  ds above will de
6e30: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a  fault to using..
6e40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6e50: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69  the latest versi
6e60: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76  on of MSBuild av
6e70: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20  ailable and the
6e80: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d  "test_year" may.
6e90: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6ea0: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75   need to be adju
6eb0: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79  sted accordingly
6ec0: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e   to actually run
6ed0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
6ee0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6ef0: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63    Refer to the c
6f00: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42  omments in [getB
6f10: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f  uildYear] for mo
6f20: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re information o
6f30: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
6f40: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68     how to set th
6f50: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20  is variable...
6f60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6f70: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70   set native [exp
6f80: 72 20 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  r {!$managedOnly 6f90: 20 26 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f && [hasRuntimeO 6fa0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d ption native]}]. 6fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 6fc0: 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 n [joinBuildDire 6fd0: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 ctory$native [g
6fe0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63  etBuildBaseDirec
6ff0: 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
7000: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65       [getBuildYe
7010: 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61  ar] [getBuildPla
7020: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b  tform $native] [ 7030: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 7040: 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d ation]].. } 7050: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 7060: 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 proc getReleaseV 7070: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ersion {} {.. 7080: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7090: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 70a0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 he release versi 70b0: 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 on for use with 70c0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 70d0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ory.. # 70e0: 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 when checking 70f0: 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 for available r 7100: 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 eleases... 7110: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 7120: 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 fo exists ::rele 7130: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 ase_version] && 7140: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 7150: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 ring length$::r
7160: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20  elease_version]
7170: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
7180: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7190: 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65  # NOTE: The rele
71a0: 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20  ase version has
71b0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
71c0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
71d0: 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  it..        #
71e0: 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20      verbatim...
71f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7200: 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65    return $::rele 7210: 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 ase_version.. 7220: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7230: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7240: 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 # NOTE: No relea 7250: 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 se version is av 7260: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 7270: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 7280: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7290: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 72a0: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 72b0: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 72c0: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 72d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 72e0: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 72f0: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 7300: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 7310: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 7320: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7330: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 7340: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 7350: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 7360: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 { fileName mana 7370: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor 7380: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 m ""} } {.. 7390: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 73a0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 73b0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 73c0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 73d0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 73e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 73f0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 ild directory, d 7400: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 iscarding any di 7410: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 rectory informat 7420: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 ion present.. 7430: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 7440: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 e file name as p 7450: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 7460: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 7470: 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 7480: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 t [file nativena 7490: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 74a0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 74b0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6d uildDirectory$m
74c0: 61 6e 61 67 65 64 4f 6e 6c 79 5d 20 24 70 6c 61  anagedOnly] $pla 74d0: 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 tform \.. 74e0: 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 [file tail$f
74f0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20  ileName]]]....
7500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48      #..      # H
7510: 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e  ACK: When runnin
7520: 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75  g on WoW64, assu
7530: 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65 63  me the test exec
7540: 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65 73  utables are pres
7550: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
7560: 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32 22     with the "32"
7570: 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e   suffix on them.
7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7590: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57   if {[isRunningW
75a0: 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65  oW64] && [file e
75b0: 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74  xtension $result 75c0: 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65 ] eq ".exe"} the 75d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 75e0: 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 result [appendA 75f0: 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 rgs [file rootna 7600: 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 me$result] 32.e
7610: 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  xe]..      }....
7620: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 7630: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 7640: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 proc getExte 7650: 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d rnalDirectory {} 7660: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 7670: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 7680: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 7690: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 76a0: 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 6e where the extern 76b0: 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 al binary.. 76c0: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 61 # files a 76d0: 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 re located... 76e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 76f0: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 7700: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam 7710: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 7720: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d [info binary]]]] 7730: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 7740: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 proc getBinaryDi 7750: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 7760: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7770: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 7780: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 7790: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 77a0: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 the test applica 77b0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 77c0: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e itself (i.e. 77d0: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 77e0: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 ) is located. T 77f0: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 his will be used 7800: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # 7810: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 the destinati 7820: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 on for the copie 7830: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 d System.Data.SQ 7840: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d Lite native and. 7850: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d . # m 7860: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 7870: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 s (i.e. because 7880: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 this is one of t 7890: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 he few places.. 78a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65 # whe 78b0: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 re the CLR will 78c0: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e actually find an 78d0: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 d load them prop 78e0: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d erly)... #. 78f0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7900: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 exists ::binary 7910: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7920: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7930: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 ing length$::bi
7940: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20  nary_directory]
7950: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
7960: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7970: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
7980: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61  tion of the bina
7990: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
79a0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
79b0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
79c0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
79d0: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a  e it verbatim...
79e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
79f0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e     return $::bin 7a00: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ary_directory.. 7a10: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 7a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 return [i 7a30: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 nfo binary].. 7a40: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 7a50: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 proc getExte 7a60: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 rnalFileName { f 7a70: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 ileName } {.. 7a80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7a90: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 TE: Returns the 7aa0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e specified file n 7ab0: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 ame as if it wer 7ac0: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 e located in the 7ad0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7ae0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 7af0: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 ning the externa 7b00: 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 l binaries... 7b10: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 7b20: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 7b30: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 7b40: 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 getExternalDirec 7b50: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d tory]$fileName]
7b60: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
7b70: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46   proc getBinaryF
7b80: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61  ileName { fileNa
7b90: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
7ba0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
7bb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
7bc0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69  urns the specifi
7bd0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  ed file name as
7be0: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74  if it were locat
7bf0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
7c00: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20   #       binary
7c10: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61  directory, disca
7c20: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74  rding any direct
7c30: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ory information
7c40: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23  present..      #
7c50: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69         in the fi
7c60: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69  le name as provi
7c70: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
7c80: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
7c90: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
7ca0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20  nativename \..
7cb0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
7cc0: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
7cd0: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 7ce0: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 m [file tail$fi
7cf0: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
7d00: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
7d10: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e  tCoreBinaryFileN
7d20: 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20  ame { {platform
7d30: 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22  ""} {standard ""
7d40: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
7d50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
7d60: 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70  turns the full p
7d70: 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65  ath for the file
7d80: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
7d90: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..
7da0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
7db0: 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66  e library code f
7dc0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
7dd0: 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20  .  First, check
7de0: 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20  and see if..
7df0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
7e00: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65  Lite core native
7e10: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
7e20: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
7e30: 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20  .  Next,..
7e40: 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b  #       fallback
7e50: 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c   to what the ful
7e60: 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65  l path should be
7e70: 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68  , based on wheth
7e80: 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  er the..      #
7e90: 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65        mixed-mode
7ea0: 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69   assembly is bei
7eb0: 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20  ng used and the
7ec0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72  name of the curr
7ed0: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
7ee0: 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20     platform...
7ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
7f00: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
7f10: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
7f20: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
7f30: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
7f40: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
7f50: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
7f60: 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65  eMethods _SQLite
7f70: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65  NativeModuleFile
7f80: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69  Name..      } fi
7f90: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
7fa0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $7fb0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 7fc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 7fd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7fe0: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor 7ff0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 8000: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee 8010: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. 8020: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 8030: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 8040: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re 8050: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n 8060: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... 8070: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 8080: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
8090: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
80a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
80b0: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
80c0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
80d0: 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c  has been set, al
80e0: 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d  ways return the.
80f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
8100: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
8110: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
8120: 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  mbly...      #..
8130: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
8140: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
8150: 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
8160: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8170: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
8180: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
8190: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65  sembly file name
81a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
81b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
81c0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
81d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
81e0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
81f0: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl 8200: 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 atform System.Da 8210: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d ta.SQLite.dll]]. 8220: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8230: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8240: 45 3a 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 E: Are we attemp 8250: 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 ting to automati 8260: 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 cally detect whe 8270: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d ther or not the. 8280: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 8290: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 82a0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d should be used?. 82b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 82c0: 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 set automatic [e 82d0: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len 82e0: 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d gth$standard] =
82f0: 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  = 0}]....      #
8300: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
8310: 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72  First, in either
8320: 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20   "automatic" or
8330: 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d  "non-standard" m
8340: 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20  odes, attempt..
8350: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
8360: 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d  find the native-
8370: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
8380: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  embly...      #.
8390: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto 83a0: 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 matic || !$stand
83b0: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ard} then {..
83c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
83d0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
83e0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
83f0: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
8400: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69  erop assembly fi
8410: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
8420: 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69      name for thi
8430: 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74  s platform and t
8440: 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a  hen return it...
8450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8460: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
8470: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65  ameOnly [getInte
8480: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
8490: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20  amesOnly] {..
84a0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
84b0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
84c0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
84d0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
84e0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
84f0: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 8500: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d$fileNameOnly]].
8510: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
8520: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f 8530: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 8540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 8550: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
8560: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
8570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
8580: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8590: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20    # NOTE: Then,
85a0: 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d  in either "autom
85b0: 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61  atic" or "standa
85c0: 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d  rd" modes, attem
85d0: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  pt to..      #
85e0: 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 73 74       find the st
85f0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69  andard SQLite li
8600: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  brary...      #.
8610: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto 8620: 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 matic ||$standa
8630: 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  rd} then {..
8640: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
8650: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
8660: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the
8670: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e  native-only stan
8680: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
8690: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ary..        #
86a0: 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66       file name f
86b0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
86c0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
86d0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
86e0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
86f0: 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67   fileNameOnly [g
8700: 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
8710: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d  ileNamesOnly] {.
8720: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66  .          set f
8730: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
8740: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
8750: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
8760: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44  join [getBinaryD
8770: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf 8780: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c orm$fileNameOnl
8790: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y]]....
87a0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
87b0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 87c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 87d0: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
87e0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  me..          }.
87f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
8800: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
8810: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61        # NOTE: Wa
8820: 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  s the managed as
8830: 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled
8840: 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61  expecting to dea
8850: 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  l with the..
8860: 20 20 23 20 20 20 20 20 20 20 73 74 61 6e 64 61    #       standa
8870: 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f  rd core library?
8880: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8890: 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
88a0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53  DefineConstant S
88b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d  QLITE_STANDARD]}
88c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
88d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
88e0: 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20  TE: Fallback to
88f0: 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61  returning the na
8900: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
8910: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
8920: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
8930: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
8940: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a   the platform...
8950: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8960: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73     set fileNames
8970: 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
8980: 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
8990: 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nly]....
89a0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69  if {[llength $fi 89b0: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 leNamesOnly] == 89c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 89d0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 89e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 89f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 8a00: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 8a10: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 8a20: 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 8a30: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
8a40: 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66  tform [lindex $f 8a50: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d ileNamesOnly 0]] 8a60: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 8a70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8a80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 8a90: 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e llback to return 8aa0: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f ing the native-o 8ab0: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 nly interop asse 8ac0: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 mbly file.. 8ad0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 8ae0: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d for the platform 8af0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8b00: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 8b10: 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 mesOnly [getInte 8b20: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 8b30: 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 amesOnly].... 8b40: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 8b50: 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 h$fileNamesOnly
8b60: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
8b70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8b80: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   ""..        }..
8b90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8ba0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
8bb0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
8bd0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
8be0: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64   $platform [lind 8bf0: 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c ex$fileNamesOnl
8c00: 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  y 0]]]..      }.
8c10: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
8c20: 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72  roc getCommonDir
8c30: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
8c40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
8c50: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
8c60: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
8c70: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
8c80: 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d  he test scripts.
8c90: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
8ca0: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
8cb0: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
8cc0: 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73  his just returns
8cd0: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
8ce0: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
8cf0: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
8d00: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8d10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
8d20: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
8d30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
8d40: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
8d50: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct 8d60: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 8d70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8d80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 8d90: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 8da0: 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 common director 8db0: 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d y has been set;. 8dc0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8dd0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 8de0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 8df0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
8e00: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
8e10: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
8e20: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
8e30: 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74   ::vendor_direct
8e40: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
8e50: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
8e60: 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69  gth $::vendor_di 8e70: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 8e80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 8e90: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8ea0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 8eb0: 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 the vendor dire 8ec0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 ctory has been s 8ed0: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 et;.. # 8ee0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 8ef0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 8f00: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 8f10: 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 rn$::vendor_dir
8f20: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
8f30: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
8f40: 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61  ists ::tcl_libra
8f50: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
8f60: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
8f70: 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  th $::tcl_librar 8f80: 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 y] > 0 && \.. 8f90: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 [file isd 8fa0: 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f irectory$::tcl_
8fb0: 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b  library]} then {
8fc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8fd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
8fe0: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
8ff0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
9000: 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  he script librar
9010: 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  y is..        #
9020: 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70        set and ap
9030: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65  pears to be a re
9040: 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  al directory (i.
9050: 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d  e. not embedded.
9060: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
9070: 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b   within a file);
9080: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
9090: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
90a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $90b0: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 ::tcl_library.. 90c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 90d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 90e0: 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 # NOTE: Fallba 90f0: 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 ck to the direct 9100: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 9110: 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a he executable... 9120: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9130: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 return [info 9140: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d binary].. } 9150: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9160: 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 proc getDatabase 9170: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 9180: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9190: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 91a0: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 91b0: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 91c0: 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab 91d0: 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ases.. # 91e0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 91f0: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 9200: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 9210: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 9220: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9230: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 9240: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 9250: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 9260: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9270: 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 exists ::databas 9280: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 e_directory] && 9290: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 92a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
92b0: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
92c0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
92d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
92e0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
92f0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  ocation of the d
9300: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
9310: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
9320: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
9330: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
9340: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
9350: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9360: 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73  eturn $::databas 9370: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e_directory.. 9380: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 9390: 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 fo exists ::scra 93a0: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 tch_directory] & 93b0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 93c0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
93d0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
93e0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
93f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9400: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
9410: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
9420: 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72  scratch director
9430: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
9440: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
9450: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
9460: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
9470: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9480: 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68  eturn $::scratch 9490: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 94a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 94b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 return [getT 94c0: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 emporaryPath].. 94d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 94e0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe 94f0: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 9500: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 9510: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 9520: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret 9530: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo 9540: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d ry where the tem 9550: 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 porary files.. 9560: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 9570: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 9580: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 9590: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 95a0: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 95b0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 95c0: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 95d0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 95e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 95f0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9600: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc 9610: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 9620: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 9630: 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 ngth$::temporar
9640: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  y_directory] > 0
9650: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
9660: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
9670: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
9680: 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  n of the tempora
9690: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
96a0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
96c0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
96d0: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
96e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
96f0: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69   $::temporary_di 9700: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 9710: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 9720: 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f xists ::scratch_ 9730: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 9740: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 9750: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 ng length$::scr
9760: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20  atch_directory]
9770: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
9780: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9790: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
97a0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61  tion of the scra
97b0: 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61  tch directory ha
97c0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
97d0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
97e0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
97f0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
9800: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
9810: 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  n $::scratch_dir 9820: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 9830: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9840: 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f return [getTempo 9850: 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 raryPath].. 9860: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9870: 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 proc getExecut 9880: 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 eOnSetup {} {.. 9890: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 98a0: 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f xists ::execute_ 98b0: 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a on_setup] && \.. 98c0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 98d0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 g length$::exec
98e0: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20  ute_on_setup] >
98f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9910: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
9920: 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20   configured SQL
9930: 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e  to execute durin
9940: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
9950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9960: 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72    setup procedur
9970: 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72  e (i.e. for ever
9980: 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  y test database
9990: 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20  connection)...
99a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
99b0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75   return $::execu 99c0: 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 te_on_setup.. 99d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 99e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 99f0: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 9a00: 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 lt, there is no 9a10: 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 SQL to execute d 9a20: 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 uring the connec 9a30: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 tion.. # 9a40: 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 setup proc 9a50: 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 edure (i.e. for 9a60: 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 62 every test datab 9a70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e ase connection). 9a80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9a90: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 9aa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 9ab0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 ... proc getS 9ac0: 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 tringMapForTclEs 9ad0: 63 61 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 cape {} {.. 9ae0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c return [list \\ 9af0: 20 5c 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d \\\\ $\\\[$ 9b00: 20 5c 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a \\\] \$ \\\$].. 9b10: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9b20: 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 oc getTestOverri 9b30: 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 desPreamble { {e 9b40: 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d xtraVarNames ""} 9b50: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 9b60: 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d varNames [list]. 9b70: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9b80: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 # NOTE: If ava 9b90: 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 ilable, start wi 9ba0: 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 th the master li 9bb0: 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 st of test overr 9bc0: 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ide.. # 9bd0: 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 variables... 9be0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9bf0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9c00: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d :test_overrides] 9c10: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 9c20: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 [llength$::tes
9c30: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30  t_overrides] > 0
9c40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
9c50: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
9c60: 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f  arNames $::test_ 9c70: 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 overrides.. 9c80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 9c90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 9ca0: 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 requested by our 9cb0: 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 caller, add any 9cc0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 additional vari 9cd0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # 9ce0: 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 names to cop 9cf0: 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d y now... #. 9d00: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e . if {[llen 9d10: 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d gth$extraVarNam
9d20: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
9d30: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
9d40: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $9d50: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 extraVarNames.. 9d60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9d70: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9d80: 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 Build the scrip 9d90: 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 t fragment to be 9da0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f returned by pro 9db0: 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 cessing each.. 9dc0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 9dd0: 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 able name and ad 9de0: 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 ding the nececes 9df0: 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 67 sary script frag 9e00: 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 ments for.. 9e10: 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e # each on 9e20: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 9e30: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 set result "" 9e40: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac 9e50: 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 h varName$varNa
9e60: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  mes {..        #
9e70: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
9e80: 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c  : Build the qual
9e90: 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ified global var
9ea0: 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20  iable name...
9eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9ec0: 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20  set fullVarName
9ed0: 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24  [appendArgs :: $9ee0: 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 varName].... 9ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9f00: 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 NOTE: Does the 9f10: 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 variable exist i 9f20: 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 n this interpret 9f30: 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 er context?.. 9f40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9f50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 9f60: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20$fullVarName]}
9f70: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9f80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
9f90: 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20   NOTE: Append a
9fa0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
9fb0: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 68  to the result th
9fc0: 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c  at will correctl
9fd0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
9fe0: 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f       copy any co
9ff0: 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f  ntained value to
a000: 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72   another interpr
a010: 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20  eter context...
a020: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
a030: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73        append res
a040: 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66  ult \n "set " $f a050: 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 ullVarName " \{" a060: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a [string map \.. a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g a080: 65 74 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 etStringMapForTc a090: 6c 45 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 lEscape] [set$f
a0a0: 75 6c 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d  ullVarName]] \}.
a0b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
a0c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
a0d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
a0e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
a0f0: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
a100: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a110: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
a120: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
a130: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
a140: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
a150: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] a160: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. a170: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu a180: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. a190: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
a1a0: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
a1b0: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53  ..    proc moveS
a1c0: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44  ystemDataSQLiteD
a1d0: 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74  llConfig { {rest
a1e0: 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62  ore false} {verb
a1f0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ose true} } {..
a200: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
a210: 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  ry [getBinaryDir
a220: 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
a230: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
a240: 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20  gth $directory] a250: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. a260: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
a270: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
a280: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a290: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a2a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a2b0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a2c0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a2d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi a2e0: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c te.dll.config\", a2f0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. a300: 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 "no binary d a310: 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 irectory\n"].. a320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... a330: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. a340: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set a350: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c fileName(1) [fil a360: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 e normalize \.. a370: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j a380: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 oin$directory S
a390: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
a3a0: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a  e.dll.config]]..
a3b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
a3c0: 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41  Name(2) [appendA
a3d0: 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  rgs $fileName(1) a3e0: 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 .moved].... a3f0: 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 if {$restore}
a400: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a410: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
a420: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20   $fileName(2)]} a430: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a440: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
a450: 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65  ileName(2) $file a460: 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 Name(1).... a470: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a480: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a490: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a4a0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a4b0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a4d0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
a4e0: 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20  eName(2) "\" to
a4f0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
a500: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName a510: 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (1) \"\n].. a520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. a530: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. a540: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a550: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a560: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a570: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a580: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a590: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a5a0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving a5b0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 \""$fileName(2)
a5c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a5d0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
a5e0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
a5f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a600: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
a610: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
a620: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
a630: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20   $fileName(1)]} a640: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a650: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
a660: 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65  ileName(1) $file a670: 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 Name(2).... a680: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a690: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a6a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a6b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a6c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a6e0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
a6f0: 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20  eName(1) "\" to
a700: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
a710: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName a720: 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (2) \"\n].. a730: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. a740: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. a750: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a760: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a770: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a780: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a790: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a7a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a7b0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving a7c0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 \""$fileName(1)
a7d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a7e0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
a7f0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
a800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a810: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
a820: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
a830: 72 6f 63 20 77 72 69 74 65 53 79 73 74 65 6d 44  roc writeSystemD
a840: 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66  ataSQLiteDllConf
a850: 69 67 20 7b 20 64 61 74 61 20 7b 76 65 72 62 6f  ig { data {verbo
a860: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
a870: 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
a880: 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  y [getBinaryDire
a890: 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
a8a0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
a8b0: 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d  th $directory] = a8c0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. a8d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a8e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a8f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a900: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a910: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a920: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk a930: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 ipped moving \"S a940: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a950: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 e.dll.config\", a960: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. a970: 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 "no binary di a980: 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 rectory\n"].. a990: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a9a0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. a9b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f a9c0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f ileName [file no a9d0: 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 rmalize \.. a9e0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join a9f0: 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74 65$directory Syste
aa00: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
aa10: 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20  l.config]]....
aa20: 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 24 66      writeFile $f aa30: 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d 0a 0d ileName$data...
aa40: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb aa50: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. aa60: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
aa70: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
aa80: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
aa90: 77 72 6f 74 65 20 5c 22 53 79 73 74 65 6d 2e 44  wrote \"System.D
aaa0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
aab0: 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20 20  onfig\"\n"..
aac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
aad0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  urn $fileName.. aae0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro aaf0: 63 20 6d 6f 76 65 45 61 67 6c 65 53 68 65 6c 6c c moveEagleShell ab00: 4d 64 61 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 MdaConfig { {res ab10: 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 tore false} {ver ab20: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. ab30: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 set direct ab40: 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 ory [getBinaryDi ab50: 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 rectory].... ab60: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le ab70: 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d ngth$directory]
ab80: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
ab90: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb aba0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. abb0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
abc0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
abd0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
abe0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
abf0: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c  skipped moving \
ac00: 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e  "EagleShell.exe.
ac10: 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20  mda.config\", "
ac20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
ac30: 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 65   "no binary dire
ac40: 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20  ctory\n"]..
ac50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
ac60: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
ac70: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c  ...      set fil
ac80: 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e  eName(1) [file n
ac90: 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20  ormalize \..
aca0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
acb0: 20 24 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c   $directory Eagl acc0: 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 eShell.exe.mda.c acd0: 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 onfig]].... ace0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 set fileName(2) acf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 [appendArgs$fi
ad00: 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64  leName(1) .moved
ad10: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  ]....      if {$ad20: 72 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d restore} then {. ad30: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi ad40: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
ad50: 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(2)]} then {.
ad60: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
ad70: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName ad80: 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 (2)$fileName(1)
ad90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
ada0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then adb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. adc0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
add0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ade0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
adf0: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
ae00: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32   \"" $fileName(2 ae10: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ae30: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c$fileName(1) \"\
ae40: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
ae50: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
ae60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
ae70: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then ae80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t ae90: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
aea0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
aeb0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
aec0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
aed0: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi aee0: 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 leName(2) \.. aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" af00: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex af10: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. af20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. af30: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. af40: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi af50: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
af60: 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(1)]} then {.
af70: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
af80: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName af90: 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 (1)$fileName(2)
afa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
afb0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then afc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. afd0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
afe0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
aff0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
b000: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
b010: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31   \"" $fileName(1 b020: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b040: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c$fileName(2) \"\
b050: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
b060: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
b070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
b080: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then b090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t b0a0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b0b0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b0c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b0d0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
b0e0: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi b0f0: 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 leName(1) \.. b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" b110: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex b120: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. b130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. b140: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b150: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 69 .... proc wri b160: 74 65 45 61 67 6c 65 53 68 65 6c 6c 4d 64 61 43 teEagleShellMdaC b170: 6f 6e 66 69 67 20 7b 20 64 61 74 61 20 7b 76 65 onfig { data {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 64 69 72 65 63 . set direc b1a0: 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 tory [getBinaryD b1b0: 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 irectory].... b1c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b1d0: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 ength$directory
b1e0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
b1f0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver b200: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. b210: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b220: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b230: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b240: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
b250: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
b260: 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  \"EagleShell.exe
b270: 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22  .mda.config\", "
b280: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b290: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72    "no binary dir
b2a0: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20  ectory\n"]..
b2b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
b2c0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
b2d0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69  ....      set fi
b2e0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72  leName [file nor
b2f0: 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20  malize \..
b300: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24      [file join $b310: 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c 65 53 directory EagleS b320: 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con b330: 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 fig]].... w b340: 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 riteFile$fileNa
b350: 6d 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 20 20  me $data.... b360: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
b370: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b380: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch b390: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. b3a0: 20 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 "---- wrote b3b0: 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 \"EagleShell.ex b3c0: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 5c 6e e.mda.config\"\n b3d0: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... b3e0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
b3f0: 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  Name..    }.....
b400: 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44      proc getAppD
b410: 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20  omainPreamble {
b420: 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66  {prefix ""} {suf
b430: 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  fix ""} } {..
b440: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b450: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
b460: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73  re returns a tes
b470: 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66  t setup script f
b480: 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65  ragment suitable
b490: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
b4a0: 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62      evaluation b
b4b0: 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72  y an interpreter
b4c0: 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69   created in an i
b4d0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
b4e0: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
b4f0: 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20     domain.  The
b500: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
b510: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
b520: 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65  ill be surrounde
b530: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  d by..      #
b540: 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61      the prefix a
b550: 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70  nd suffix "scrip
b560: 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65  t fragments" spe
b570: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61  cified by our ca
b580: 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20  ller,..      #
b590: 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68       if any.  Th
b5a0: 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20  e entire script
b5b0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
b5c0: 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74  ill be substitut
b5d0: 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20  ed via..      #
b5e0: 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69        [subst], i
b5f0: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
b600: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66   our caller, bef
b610: 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ore being return
b620: 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed...      #
b630: 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20     This step is
b640: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61  necessary so tha
b650: 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63  t some limited c
b660: 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69  ontext informati
b670: 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  on,..      #
b680: 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c     primarily rel
b690: 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74  ated to the test
b6a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c  ing directories,
b6b0: 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72   can be transfer
b6c0: 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  red..      #
b6d0: 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70     to the interp
b6e0: 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f  reter in the iso
b6f0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
b700: 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67  n domain, making
b710: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
b720: 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65     able to succe
b730: 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74  ssfully run test
b740: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f  s that require o
b750: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
b760: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
b770: 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66   files in one of
b780: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
b790: 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65  ectories.  Calle
b7a0: 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69  rs should keep i
b7b0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
b7c0: 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74   mind that the t
b7d0: 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d  est script fragm
b7e0: 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ent being return
b7f0: 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f  ed cannot rely o
b800: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
b810: 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72   any script libr
b820: 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74  ary procedures t
b830: 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76  hat are not prov
b840: 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  ided by the Eagl
b850: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
b860: 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65   library package
b870: 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67   (i.e. "init.eag
b880: 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20  le"), including
b890: 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62  those provided b
b8a0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
b8b0: 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20   the Eagle test
b8c0: 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20  package, unless
b8d0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
b8e0: 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64  ing them is load
b8f0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
b900: 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73    manually via s
b910: 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e  ome other mechan
b920: 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63  ism (e.g. by inc
b930: 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61  luding appropria
b940: 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  te..      #
b950: 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69    [package requi
b960: 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20  re] or [source]
b970: 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20  commands in the
b980: 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78  prefix or suffix
b990: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b9a0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
b9b0: 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61  ).  Also, all va
b9c0: 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
b9d0: 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64  s and all nested
b9e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b9f0: 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74  commands (i.e. t
ba00: 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62  hose in square b
ba10: 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e  rackets) contain
ba20: 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d  ed in the final.
ba30: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
ba40: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77  cript fragment w
ba50: 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67  ill end up being
ba60: 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68   evaluated in th
ba70: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  e context of the
ba80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ba90: 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65  calling interpre
baa0: 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20  ter and not the
bab0: 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74  target interpret
bac0: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  er created in th
bad0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
bae0: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
baf0: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c  ation domain unl
bb00: 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73  ess the dollar s
bb10: 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61  igns and/or squa
bb20: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  re..      #
bb30: 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73    brackets are s
bb40: 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20  pecially quoted
bb50: 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73  with backslashes
bb60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
bb70: 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65    return [upleve
bb80: 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20  l 1 [list subst
bb90: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65  [appendArgs $pre bba0: 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 fix {.. # bbb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE bbc0: 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d : The $object$ bbd0: 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 command may be bbe0: 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 20 missing in some bbf0: 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 20 Eagle core.. bc00: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 # libr bc10: 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ary configuratio bc20: 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61 6e 64 ns. Cloning and bc30: 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 63 65 using the proce bc40: 64 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 dure.. # bc50: 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 65 4e 61 $changeNa bc60: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio bc70: 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 6f 20 n$ may help to bc80: 6d 69 74 69 67 61 74 65 20 74 68 69 73 2e 0d 0a mitigate this... bc90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. bca0: 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 proc changeNa bcb0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio bcc0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. bcd0: 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63 68 61 {[info args cha bce0: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime bcf0: 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 20 Option]} \.. bd00: 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 62 {[info b bd10: 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 69 76 65 ody changeNative bd20: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 0d RuntimeOption]}. bd30: 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch bd40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch bd50: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim bd60: 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75 6e 74 eOption [hasRunt bd70: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native bd80: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. bd90: 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 } [getTestOv bda0: 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 erridesPreamble bdb0: 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f [list path test_ bdc0: 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 channel]]$suffi
bdd0: 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  x]]]..    }.....
bde0: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
bdf0: 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a  ExternalFile {..
be00: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
be10: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
be20: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
be30: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75  ""} {verbose tru
be40: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
be50: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
be60: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c   [getExternalFil
be70: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] be80: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ be90: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
bea0: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
beb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
bec0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then bed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp bee0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
bef0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
bf00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
bf10: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
bf20: 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61 6c 20  opying external
bf30: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65  file \"" $source bf40: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. bf50: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i bf60: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist bf70: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. bf80: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur bf90: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... bfa0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string bfb0: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e length$newFileN
bfc0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
bfd0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
bfe0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
bff0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
c000: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
c010: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
c020: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c030: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
c040: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
c050: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName c060: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
c070: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
c080: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72  t targetDirector
c090: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
c0a0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d  $targetFileName] c0b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c c0c0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. c0d0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist c0e0: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f s$targetDirecto
c0f0: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
c100: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69         file mkdi
c110: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  r $targetDirecto c120: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ry.. }... c130: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co c140: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 py -force$sourc
c150: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65  eFileName $targe c160: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 tFileName.. c170: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { c180: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs c190: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
c1a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
c1c0: 20 63 6f 70 69 65 64 20 65 78 74 65 72 6e 61 6c   copied external
c1d0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $c1e0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 sourceFileName " c1f0: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 \" to \"" \.. c200: 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74$target
c210: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
c220: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c230: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c240: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c250: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c260: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f c270: 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 65 78 ailed to copy ex c280: 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d ternal file from c290: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
c2a0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c2b0: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $c2c0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ c2d0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. c2e0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro c2f0: 63 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 c tryCopyBinaryF c300: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. c310: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana c320: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor c330: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa c340: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. c350: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru c360: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se c370: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName c380: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN c390: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p c3a0: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... c3b0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi c3c0: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
c3d0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
c3e0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo c3f0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. c400: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c410: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c420: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c430: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
c440: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62  kipped copying b
c450: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $c460: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c480: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not c490: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. c4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... c4b0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } c4c0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s c4d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 tring length$ne
c4e0: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  wFileName] > 0}
c4f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c500: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
c510: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
c520: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c530: 20 20 20 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65      $newFileName c540: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70$managedOnly $p c550: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. c560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c570: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile c580: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi c590: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. c5a0: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20$fileName
c5b0: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c  $managedOnly$pl
c5c0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
c5d0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61  ....      set ta
c5e0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66  rgetDirectory [f
c5f0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72  ile dirname $tar c600: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a getFileName].... c610: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch c620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { c630: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 ![file exists$t
c640: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d  argetDirectory]}
c650: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
c660: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74     file mkdir $t c670: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a argetDirectory.. c680: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... c690: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - c6a0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c force$sourceFil
c6b0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  eName $targetFil c6c0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 eName.. }] c6d0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. c6e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c6f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c700: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c710: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
c720: 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ied binary file
c730: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source c740: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 FileName "\" to c750: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. c760: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61$targetFileNa
c770: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
c780: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
c790: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ c7a0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA c7b0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. c7c0: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed c7d0: 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 66 to copy binary f c7e0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
c7f0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
c800: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
c810: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi c820: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. c830: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... c840: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop c850: 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 yBuildFile {.. c860: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa c870: 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b me managedOnly { c880: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne c890: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 wFileName ""}.. c8a0: 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 62 {verb c8b0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. c8c0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF c8d0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil c8e0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
c8f0: 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  ame $managedOnly c900: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
c910: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
c920: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69  exists $sourceFi c930: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. c940: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
c950: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
c960: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $c970: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ c980: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. c990: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- c9a0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin c9b0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" c9c0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
c9d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c9e0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
c9f0: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
ca00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
ca10: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
ca20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
ca30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $ca40: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 ca50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ca60: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile ca70: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF ca80: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 ileName$newFile
ca90: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. caa0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. cab0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar cac0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get cad0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
cae0: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo caf0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rm].. }.... cb00: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target cb10: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 Directory [file cb20: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 dirname$targetF
cb30: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
cb40: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
cb50: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
cb60: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65  le exists $targe cb70: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 tDirectory]} the cb80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f cb90: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
cba0: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
cbb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
cbc0: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63   file copy -forc
cbd0: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  e $sourceFileNam cbe0: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
cbf0: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  e..      }] == 0
cc00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
cc10: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ cc20: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA cc30: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. cc40: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 "---- copied cc50: 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 build file from cc60: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
cc70: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  ame "\" to \"" \
cc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74  ..            $t cc90: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" cca0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 \n].. } els ccb0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu ccc0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
ccd0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
cce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
ccf0: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f  --- failed to co
cd00: 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72  py build file fr
cd10: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi cd20: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. cd30: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 "\" to \"" cd40: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
cd50: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
cd60: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
cd70: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 69 6e  roc tryDeleteBin
cd80: 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  aryFile { fileNa
cd90: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
cda0: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20   {verbose true}
cdb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
cdc0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
cdd0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file cde0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
cdf0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
ce00: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file ce10: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. ce20: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
ce30: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
ce40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: ce50: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap ce60: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. ce70: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- ce80: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting ce90: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" cea0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
cec0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
ced0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
cee0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
cef0: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
cf00: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
cf10: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f cf20: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 ileName}] == 0} cf30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cf40: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
cf50: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
cf60: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
cf70: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62   "---- deleted b
cf80: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $cf90: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. cfa0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. cfb0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
cfc0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
cfd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
cfe0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
cff0: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
d000: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
d010: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n]. d020: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. d030: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try d040: 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 DeleteBuildFile d050: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f d060: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO d070: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" d080: 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d } {verbose true} d090: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set d0a0: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 fileName [getBui d0b0: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ldFileName$file
d0c0: 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c  Name $managedOnl d0d0: 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a y$platform]....
d0e0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
d0f0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam d100: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. d110: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
d120: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
d130: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes d140: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen d150: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d160: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski d170: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75 pped deleting bu d180: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ild file \""$fi
d190: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
d1a0: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20          "\", it
d1b0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
d1c0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  "]..        }...
d1d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
d1e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d1f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69    if {[catch {fi
d200: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN d210: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ame}] == 0} then d220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput d230: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
d240: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
d250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
d260: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64  -- deleted build
d270: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN d280: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. d290: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. d2a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
d2b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
d2c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
d2d0: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
d2e0: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64   to delete build
d2f0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN d300: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. d310: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... d320: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 proc tryCopyAs d330: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. d340: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d fileName m d350: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 anagedOnly {plat d360: 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 form ""} {pdb tr d370: 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 ue} {verbose tru d380: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 e} } {.. tr d390: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 yCopyBuildFile$
d3a0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage d3b0: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 20 dOnly$platform
d3c0: 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20  "" $verbose.... d3d0: 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 if {$pdb} t
d3e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
d3f0: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
d400: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
d410: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
d420: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN d430: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 6d 61 6e 61 ame] .pdb]$mana
d440: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72  gedOnly $platfor d450: 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 m ""$verbose..
d460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
d470: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
d480: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a  leteAssembly {..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
d4a0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
d4b0: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76  "} {pdb true} {v
d4c0: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
d4d0: 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74  ..      tryDelet
d4e0: 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c  eBinaryFile $fil d4f0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 eName$platform
d500: 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20  $verbose.... d510: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e if {$pdb} then
d520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44   {..        tryD
d530: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
d540: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
d550: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
d560: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN d570: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 ame] .pdb]$plat
d580: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20  form $verbose.. d590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... d5a0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f .. proc tryLo d5b0: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c adAssembly { fil d5c0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform d5d0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s d5e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 et fileName [get d5f0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
d600: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo d610: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 rm].... if d620: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. d630: 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 set assembly d640: 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f [object load -lo d650: 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 adtype File -ali d660: 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 as$fileName]..
d670: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
d680: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
d690: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
d6a0: 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65   Now, add the ne
d6b0: 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e  cessary test con
d6c0: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...
d6d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
d6e0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65  Constraint [file
d6f0: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file
d700: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]] d710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. d720: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 # NOTE: G d730: 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 rab the image ru d740: 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 ntime version fr d750: 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 om the assembly d760: 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 because.. d770: 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c # several d780: 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 tests rely on i d790: 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 t having a certa d7a0: 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 in value... d7b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 #.. ad d7c0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app d7d0: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 endArgs [file ta d7e0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 il$fileName] _
d7f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
d800: 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52  $assembly ImageR d810: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d untimeVersion]]. d820: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d830: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re d840: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 turn the full pa d850: 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 th of the loaded d860: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... d870: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur d880: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
d890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
d8a0: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
d8b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51  ...    proc isSQ
d8c0: 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a  LiteReady {} {..
d8d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d8e0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
d8f0: 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72  edure must retur
d900: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20  n non-zero only
d910: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61  if the SQLite na
d920: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20  tive..      #
d930: 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20      library and
d940: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
d950: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61  SQLite managed a
d960: 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64  ssembly are load
d970: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
d980: 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20    and ready for
d990: 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20  use by the test
d9a0: 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c  suite.  Currentl
d9b0: 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  y, this procedur
d9c0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
d9d0: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
d9e0: 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65  d only after the
d9f0: 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c   [tryLoadAssembl
da00: 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  y] procedure has
da10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
da20: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
da30: 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73  robe for the Sys
da40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
da50: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
da60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
da70: 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f  and the [checkFo
da80: 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75  rSQLite] procedu
da90: 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  re has been call
daa0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d  ed to probe for.
dab0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
dac0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  he SQLite native
dad0: 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77   library; otherw
dae0: 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64  ise, this proced
daf0: 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d  ure will simply.
db00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
db10: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72  lways return zer
db20: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  o...      #..
db30: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
db40: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65  {..        [have
db50: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65  Constraint Syste
db60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26  m.Data.SQLite] &
db70: 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  & [haveConstrain
db80: 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20  t SQLite]..
db90: 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   }]..    }.....
dba0: 20 20 20 70 72 6f 63 20 6d 61 74 63 68 50 6c 61     proc matchPla
dbb0: 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d  tform { platform
dbc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
dbd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20       # NOTE: An
dbe0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72  empty string for
dbf0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65   the platform me
dc00: 61 6e 73 20 74 68 61 74 20 74 68 65 20 62 75 69  ans that the bui
dc10: 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  ld is not..
dc20: 20 23 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72   #       [primar
dc30: 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75  ily] a native bu
dc40: 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ild; therefore,
dc50: 69 74 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65  it always matche
dc60: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
dc70: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
dc80: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] dc90: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. dca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr dcb0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... dcc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dcd0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 NOTE: If the mac dce0: 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 hine name is una dcf0: 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 vailable, there dd00: 69 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 is nothign else dd10: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 we.. # dd20: 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 can do... dd30: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ dd40: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc dd50: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi dd60: 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ne)]} then {.. dd70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal dd80: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 se.. }.... dd90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dda0: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 NOTE: Does the s ddb0: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 pecified platfor ddc0: 6d 20 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 m match up to th ddd0: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces dde0: 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s?.. #.. ddf0: 20 20 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d if {$platform
de00: 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c   eq [machineToPl
de10: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c  atform $::tcl_pl de20: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d atform(machine)] de30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. de40: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. de50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... de60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: de70: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 The specified p de80: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 latform does not de90: 20 6d 61 74 63 68 20 75 70 20 77 69 74 68 20 74 match up with t dea0: 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 he platform.. deb0: 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t dec0: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce ded0: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. dee0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false def0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... df00: 70 72 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f proc haveSQLiteO df10: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 bjectCommand {} df20: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. df30: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 # NOTE: Is the df40: 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman df50: 64 20 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 d currently avai df60: 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d lable?.. #. df70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 . return [e df80: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 xpr {[llength [i df90: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a nfo commands obj dfa0: 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 ect]] > 0}].. dfb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc dfc0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 checkForSQLiteOb dfd0: 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 jectCommand { ch dfe0: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. dff0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
e000: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
e010: 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f  or \"object\" co
e020: 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22  mmand usage... "
e030: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
e040: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
e050: 28 73 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  (sqliteObjectCom
e060: 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20  mand)] && \..
e070: 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69         [haveSQLi
e080: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
e090: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e0a0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel e0b0: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 yes\n.. } e0c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. e0d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e0e0: 45 3a 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 E: Unless we are e0f0: 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 forbidden from e100: 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f doing so, add so e110: 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a me constraints.. e120: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # e130: 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 that will allow e140: 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 most of the test e150: 20 73 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 suite to run (i e160: 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 .e. those.. e170: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests e180: 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 that do not dir e190: 65 63 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 ectly rely upon e1a0: 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com e1b0: 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 mand)... e1c0: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! e1d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n e1e0: 6f 28 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 o(shimSQLiteAsse e1f0: 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 mblyConstraints) e200: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. e210: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai e220: 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 nt SQLite.. e230: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai e240: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop e250: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC e260: 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d onstraint System e270: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. e280: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst e290: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat e2a0: 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 a.SQLite.Encrypt e2b0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 ion.. a e2c0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys e2d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. e2e0: 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Linq.... e2f0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint e300: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys e320: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. e330: 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 dll_v [getBuildC e340: 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 lrVersion]].. e350: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e360: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi e370: 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c sts ::no(shimSQL e380: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan e390: 74 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 tConstraints)]} e3a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. e3b0: 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 foreach define e3c0: 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c Constant [list \ e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e3e0: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f INTEROP_EXTENSIO e3f0: 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 N_FUNCTIONS INTE e400: 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 ROP_FTS5_EXTENSI e410: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. e420: 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e INTEROP_JSON e430: 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 1_EXTENSION INTE e440: 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 ROP_PERCENTILE_E e450: 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. e460: 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO e470: 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 P_REGEXP_EXTENSI e480: 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f ON INTEROP_TEST_ e490: 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. e4a0: 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER e4b0: 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e OP_SESSION_EXTEN e4c0: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 53 48 41 SION INTEROP_SHA e4d0: 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 1_EXTENSION \.. e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT e4f0: 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 EROP_TOTYPE_EXTE e500: 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 NSION INTEROP_VI e510: 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 RTUAL_TABLE \.. e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 USE e530: 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d _INTEROP_DLL] {. e540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 . add e550: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe e560: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. e570: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ e580: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta e590: 6e 74 50 72 65 66 69 78 5d 20 24 64 65 66 69 6e ntPrefix]$defin
e5a0: 65 43 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 20 20  eConstant]..
e5b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e5c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
e5d0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
e5e0: 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 56  ::no(shimSQLiteV
e5f0: 69 73 75 61 6c 53 74 75 64 69 6f 43 6f 6e 73 74  isualStudioConst
e600: 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
e610: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
e620: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
e630: 64 41 72 67 73 20 76 69 73 75 61 6c 53 74 75 64  dArgs visualStud
e640: 69 6f 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  io [getBuildYear
e650: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ]]..        }...
e660: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $e670: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. e680: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... e690: 0a 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 . proc change e6a0: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 NativeRuntimeOpt e6b0: 69 6f 6e 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b ion { native } { e6c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle e6d0: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma e6e0: 6e 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 20 nds debug]] > 0 e6f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. e700: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 73 [llength [info s e710: 75 62 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 ubcommands debug e720: 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d runtimeoption]] e730: 20 3e 20 30 20 26 26 20 5b 63 61 74 63 68 20 7b > 0 && [catch { e740: 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug e750: 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 runtimeoption [e e760: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 xpr {$native ? "
e770: 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d  add" : "remove"}
e780: 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  ] native..
e790: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
e7a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
e7b0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
e7c0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
e7d0: 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
e7e0: 61 6e 64 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  and] && [catch {
e7f0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
e800: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
e810: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b 65  ter.GetActive [e
e820: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 5c  xpr {$native ? \ e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 41 .. "A e840: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 ddRuntimeOption" e850: 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d : "RemoveRuntim e860: 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 eOption"}] nativ e870: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 e.. }] == 0 e880: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e890: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. e8a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e8b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. e8c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc e8d0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 checkForSQLiteB e8e0: 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 uilds { channel e8f0: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } e900: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. e910: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check e920: 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 for every possi e930: 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e ble valid combin e940: 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 ation of values e950: 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 used when.. e960: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e # locatin e970: 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 g out the build e980: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory e990: 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 , showing each a e9a0: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. e9b0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 # build va e9c0: 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 riation along th e9d0: 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d e way... #. e9e0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e . foreach n e9f0: 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 ative [list fals ea00: 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 e true] {.. ea10: 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 foreach year ea20: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 [getBuildYears] ea30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for ea40: 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 each configurati ea50: 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 on [getBuildConf ea60: 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 igurations] {.. ea70: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. ea80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE ea90: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the eaa0: 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 effective build eab0: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 platform. This eac0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 is.. ead0: 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f # based o eae0: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 n whether or not eaf0: 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e a [primarily] n eb00: 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 ative build.. eb10: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # eb20: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 is being used. eb30: 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d For [primarily] eb40: 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c non-native buil eb50: 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ds,.. eb60: 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 # this wi eb70: 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 ll be an empty s eb80: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... eb90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. eba0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform ebb0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor ebc0: 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 m$native]....
ebd0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
ebe0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append ebf0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. ec00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch ec10: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste ec20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu ec30: 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d ild \"" [expr \. ec40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ec50: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 {$native ? "nat
ec60: 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78  ive/" : ""}] [ex
ec70: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  pr {[string leng
ec80: 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  th \..
ec90: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d        $platform] eca0: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 > 0 ? [appendAr ecb0: 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 gs$platform /]
ecc0: 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a  : ""}] $year \.. ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ece0: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e /$configuration
ecf0: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20   "\"... "]....
ed00: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
ed10: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
ed20: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79   Build the fully
ed30: 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63   qualified direc
ed40: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e  tory where the n
ed50: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
ed60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
ed70: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73  mponents for Sys
ed80: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
ed90: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e  should be found.
eda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
edb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
edc0: 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e   directory [join
edd0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24  BuildDirectory $ede0: 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 native \.. edf0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu ee00: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory ee10: 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 ]$year $platfor ee20: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e m$configuration
ee30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
ee40: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
ee50: 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e  # NOTE: Do the n
ee60: 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65  ecessary files e
ee70: 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79  xist?  Currently
ee80: 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73  , no other steps
ee90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
eea0: 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20        are taken
eeb0: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62  to verify this b
eec0: 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79  uild is actually
eed0: 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20   viable...
eee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
eef0: 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c       if {[isBuil
ef00: 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69  dAvailable $nati ef10: 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 ve$directory]}
ef20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ef30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ef40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
ef50: 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20  hen in "select"
ef60: 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61  mode, automatica
ef70: 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66  lly select the f
ef80: 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  irst..
ef90: 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69      #       avai
efa0: 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53  lable build of S
efb0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
efc0: 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  e and then retur
efd0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
efe0: 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61   #       immedia
eff0: 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  tely...
f000: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f010: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63        if {$selec f020: 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 t && [matchPlatf f030: 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 orm$platform]}
f040: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f050: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f060: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
f070: 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  E: Manually over
f080: 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69  ride all the bui
f090: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c  ld directory sel
f0a0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..
f0b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
f0c0: 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74  related test set
f0d0: 74 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74  tings in order t
f0e0: 6f 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69  o force this bui
f0f0: 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ld..
f100: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53      #       of S
f110: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f120: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20  e to be used...
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
f140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f150: 20 20 69 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61    if {![changeNa
f160: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f  tiveRuntimeOptio
f170: 6e 20 24 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  n $native]} then f180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f190: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
f1a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f1b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f1c0: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 2c 20 66            "no, f
f1d0: 61 69 6c 65 64 20 74 6f 20 22 20 5b 65 78 70 72  ailed to " [expr
f1e0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64   {$native ? "add f1f0: 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 5c " : "remove"}] \ f200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f210: 20 20 20 20 20 20 20 20 22 20 74 68 65 20 5c 22 " the \" f220: 6e 61 74 69 76 65 5c 22 20 72 75 6e 74 69 6d 65 native\" runtime f230: 20 6f 70 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 option\n"].... f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f250: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } f270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... f280: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 set ::test_y f290: 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 ear$year..
f2a0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
f2b0: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24  :test_platform $f2c0: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. f2d0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: f2e0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati f2f0: 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f on$configuratio
f300: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....
f310: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan f320: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs f330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. f340: 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c "yes, sel f350: 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b ected (" [expr { f360: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76$native ? "nativ
f370: 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  e/" : ""}] \..
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f390: 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67    [expr {[string
f3a0: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor f3b0: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 m] > 0 ? [append f3c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61$pla
f3e0: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20  tform /] : ""}]
f3f0: 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75  $year /$configu
f400: 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d  ration ")\n"]...
f410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f420: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
f430: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
f440: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
f450: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha f460: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 nnel yes\n.. f470: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. f480: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else f490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. f4a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f4b0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  no\n..
f4c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
f4d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
f4e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
f4f0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
f500: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
f510: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c  heckForSQLiteRel
f520: 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20  eases { channel
f530: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d  {select false} }
f540: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
f550: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
f560: 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73   for past releas
f570: 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74  es of System.Dat
f580: 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20  a.SQLite in the
f590: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
f5a0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
f5b0: 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65  ed in the "Syste
f5c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65  m.Data.SQLite" e
f5d0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
f5e0: 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23  ble, if..      #
f5f0: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d         present..
f600: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f610: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
f620: 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61   ::env(System.Da
f630: 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c  ta.SQLite)] && \
f640: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
f650: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e  ing length $::en f660: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ f670: 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e Lite)] > 0} then f680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. f690: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B f6a0: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q f6b0: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f ualified directo f6c0: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 ry where the nec f6d0: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 essary.. f6e0: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e # componen f6f0: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ts for System.Da f700: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 ta.SQLite should f710: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 be found... f720: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s f730: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 et directory [fi f740: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f f750: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. f760: 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53$::env(S
f770: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f780: 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65  e) [getReleaseVe
f790: 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  rsion]]]....
f7a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann f7b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ f7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- f7d0: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for f7e0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL f7f0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 ite release \"" f800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
f810: 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e  directory "\"...
f820: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   "]....        i
f830: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61  f {[isReleaseAva
f840: 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72  ilable $director f850: 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 y platform]} the f860: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i f870: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt f880: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 h$platform] ==
f890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
f8a0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
f8b0: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  orm unknown..
f8c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
f8d0: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63        if {$selec f8e0: 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 t && [matchPlatf f8f0: 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 orm$platform]}
f900: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f910: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f      set ::build_
f920: 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63  directory $direc f930: 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tory.... f940: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f950: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
f960: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22  yes, selected ("
f970: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" f980: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... f990: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. f9a0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { f9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp f9c0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
f9d0: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
f9e0: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" f9f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. fa00: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { fa10: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput fa20: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
fa30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
fa40: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $fa50: 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d directory] || \. fa60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 . ! fa70: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector fa80: 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 y$directory]} t
fa90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
faa0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe fab0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. fac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . fad0: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme fae0: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy faf0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite fb00: 5c 22 20 69 73 20 61 6e 20 22 20 5c 0d 0a 20 20 \" is an " \.. fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 69 "i fb20: 6e 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 nvalid directory fb30: 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b , skipping check fb40: 20 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e for releases... fb50: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... fb60: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false fb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... fb80: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea fb90: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d ch path [lsort - fba0: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 decreasing [file fbb0: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 list$directory
fbc0: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20   *]] {..
fbd0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78      if {[file ex
fbe0: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b  ists $path] && [ fbf0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory fc00: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d$path]} then {.
fc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
fc20: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a fc30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " fc50: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo fc60: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ fc70: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 Lite release \"" fc80: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. fc90: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e$path "\".
fca0: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
fcb0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65         if {[isRe
fcc0: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24  leaseAvailable $fcd0: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 path platform]} fce0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. fcf0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str fd00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
fd10: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  form] == 0} then
fd20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
fd30: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
fd40: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  rm unknown..
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
fd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
fd70: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20   if {$select && fd80: 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 [matchPlatform$
fd90: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
fda0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
fdb0: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64       set ::build
fdc0: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  _directory $path fdd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... fde0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
fdf0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
fe00: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
fe10: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ fe20: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... fe30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return fe40: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. fe50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fe70: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
fe80: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
fe90: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " fea0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. feb0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. fec0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { fed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. fee0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
fef0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
ff00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
ff10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
ff20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
ff30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
ff40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch ff50: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ff60: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ff70: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme ff80: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy ff90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite ffa0: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 \" is not " \.. ffb0: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c "set, ffc0: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 skipping check ffd0: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c for releases...\ ffe0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a n"].. }.... fff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 10000 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... 10010 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS 10020 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 QLiteLibrary { c 10030 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 hannel } {.. 10040 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10050 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
10060 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
10070 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
10080 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10090 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
100a0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
100b0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
100c0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
100d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
100e0 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73  Lite3 SQLiteVers
100f0 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
10100 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
10110 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
10120 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
10130 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
10140 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
10150 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
10160 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
10170 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
10180 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
10190 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
101a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve 101b0 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the 101c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 101d0 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. 101e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 101f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10200 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 10210 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 10220 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 10230 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S 10240 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # 10250 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr 10260 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. 10270 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 10280 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 10290 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 102a0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 102b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 102c0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 102d0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c Lite.SQLite3 SQL 102e0 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 iteSourceId.. 102f0 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] 10300 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 10320 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail 10330 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the 10340 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id 10350 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... 10360 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10370 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u 10380 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 10390 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 103a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 103b0 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret 103c0 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou 103d0 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w 103e0 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. 103f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so 10400 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t 10410 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... 10420 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 10430 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
10440 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
10450 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10460 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
10470 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
10480 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10490 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
104a0 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
104b0 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72  e library appear
104c0 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c  s to be availabl
104d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
104e0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
104f0 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20  aint SQLite....
10500 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 10510 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 10520 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
10530 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId 10540 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } 10550 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10560 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10570 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
10580 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
10590 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
105a0 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
105b0 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
105c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 105d0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 105e0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 105f0 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... 10600 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 10610 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 10620 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 10630 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 10640 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 10650 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 10660 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 ite3 InteropVers 10670 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver 10680 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 10690 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 106a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 106b0 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu 106c0 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was 106d0 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m 106e0 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. 106f0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 10700 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # 10710 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 10720 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
10730 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
10740 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
10750 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
10760 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
10770 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10780 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
10790 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
107a0 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
107b0 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
107c0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
107d0 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
107e0 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
107f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
10800 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
10810 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
10820 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
10830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10840 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
10850 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
10860 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20  eropSourceId..
10870 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
10880 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
10890 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
108a0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69    # NOTE: We fai
108b0 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  led to query the
108c0 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
108d0 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20  dentifier...
108e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
108f0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
10900 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
10910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
10920 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10930 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
10940 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f  turned Fossil so
10950 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
10960 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20  was null.  If..
10970 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
10980 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20  o, make it easy
10990 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
109a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
109b0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
109c0 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d  $sourceId] == 0} 109d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 109e0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 109f0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. 10a00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10a10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 # NOTE: Be 10a20 66 6f 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 fore actually ad 10a30 64 69 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f ding the test co 10a40 6e 73 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 nstraint, make s 10a50 75 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ure the.. 10a60 20 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e # version 10a70 20 69 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 is valid (i.e. 10a80 6e 6f 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 not just that we 10a90 20 63 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 could query it) 10aa0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10ab0 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 if {$versi
10ac0 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68  on ne "null"} th
10ad0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
10ae0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
10af0 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51  OTE: Yes, the SQ
10b00 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
10b10 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f  embly appears to
10b20 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   be available...
10b30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
10b40 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
10b50 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72  aint SQLiteInter
10b60 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  op....
10b70 73 65 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a  set answer yes..
10b80 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
10b90 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
10ba0 61 6e 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20  answer no..
10bb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10bc0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 10bd0 61 70 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 appendArgs$answ
10be0 65 72 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e  er " (" $version 10bf0 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
10c00 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
10c10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
10c20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 10c30 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. 10c40 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 10c50 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 10c60 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 fineConstant { c 10c70 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d hannel name } {. 10c80 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
10c90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
10ca0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
10cb0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
10cc0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
10cd0 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73  Lite define cons
10ce0 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c  tant \"" $name \ 10cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e .. "\". 10d00 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 .. "].... i 10d10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 10d20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 10d30 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 10d40 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 10d50 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 10d60 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 SQLite.SQLite3 D 10d70 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a efineConstants.. 10d80 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f } defineCo 10d90 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 10da0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 10db0 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 f {[lsearch -exa 10dc0 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 ct -nocase$defi
10dd0 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d  neConstants $nam 10de0 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b e] != -1} then { 10df0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 10e00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 10e10 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e Yes, this defin 10e20 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 e constant was e 10e30 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 nabled when the 10e40 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 managed.. 10e50 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 10e60 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 bly was compiled 10e70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 10e80 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon 10e90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 10ea0 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65 rgs [getSQLiteDe 10eb0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 fineConstantPref 10ec0 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 ix]$name]....
10ed0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 10ee0 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 hannel yes\n.. 10ef0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 10f00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 10f10 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
10f20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10f30 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
10f40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 10f50 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 error\n.. 10f60 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 10f70 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d proc getDateTim 10f80 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a eFormat { {timeZ 10f90 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 one true} } {.. 10fa0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10fb0 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 10fc0 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu 10fd0 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default 10fe0 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma 10ff0 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # 11000 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes 11010 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 11020 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 11030 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date 11040 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && 11050 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 11060 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
11070 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
11080 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
11090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
110a0 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
110b0 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
110c0 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
110d0 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
110e0 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
110f0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11100 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for 11110 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els 11120 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 11130 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 11140 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 11150 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma 11160 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit 11170 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. 11180 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste 11190 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a 111a0 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for 111b0 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w 111c0 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. 111d0 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim 111e0 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f 111f0 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th 11200 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan 11210 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # 11220 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te 11230 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... 11240 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11250 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 11260 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 11270 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 "yyyy-MM-dd 11280 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 HH:mm:ss.FFFFFFF 11290 22 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f " [expr {$timeZo
112a0 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d  ne ? "K" : ""}]]
112b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
112c0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
112d0 74 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b  tDateTimeTicks {
112e0 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22   value {local ""
112f0 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d  } {default ""} }
11300 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
11310 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 11320 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 lue] == 0} then 11330 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 11340 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 n$default..
11350 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
11360 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
11370 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20     set dateTime
11380 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
11390 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20  create \..
113a0 20 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72        -parameter
113b0 74 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69  types [list Stri
113c0 6e 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61  ng String IForma
113d0 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20  tProvider \..
113e0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
113f0 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61  Globalization.Da
11400 74 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61  teTimeStyles] Da
11410 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63  teTime ParseExac
11420 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
11430 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65   $value [getDate 11440 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c TimeFormat] null 11450 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 AdjustToUnivers 11460 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74 al].. }]} t 11470 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 11480 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a eturn$default..
11490 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
114a0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20   if {[string is
114b0 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20  boolean -strict
114c0 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d  $local]} then {. 114d0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 . set dat 114e0 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e eTime [object in 114f0 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74 voke -create Dat 11500 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e eTime SpecifyKin 11510 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d \.. 11520 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d$dateTime Utc].
11530 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11540 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
11550 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $11560 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d dateTime Ticks]. 11570 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11580 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68 if {$local} th
11590 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
115a0 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76  turn [object inv
115b0 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f  oke $dateTime To 115c0 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d LocalTime.Ticks] 115d0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 115e0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 115f0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 11600 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76$dateTime ToUniv
11610 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d  ersalTime.Ticks]
11620 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11630 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
11640 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62  tProperties { ob
11650 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b  ject varName } {
11660 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
11670 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74  $varName propert 11680 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 ies.... set 11690 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20 count 0.. 116a0 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d set names [list] 116b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 .... if {[i 116c0 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f sObjectHandle$o
116d0 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63  bject] && $objec 116e0 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 t ne "null"} the 116f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 n {.. eva 11700 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 l lappend names 11710 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 [object members 11720 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 11730 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70 membertypes Prop 11740 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 erty -nameonly$
11750 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20  object]....
11760 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
11770 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65  names [object me
11780 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20  mbers \..
11790 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65       -membertype
117a0 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c  s Field -nameonl
117b0 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20  y $object].. 117c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 }.... for 117d0 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 each name$names
117e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
117f0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
11800 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
11810 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b  e -objectflags +
11820 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63  NoDispose $objec 11830 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 t$name..
11840 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20   } value] == 0}
11850 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11860 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
11870 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26  andle $value] && 11880 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c$value ne "null
11890 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
118a0 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72         set error
118b0 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e   null; object in
118c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
118d0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
118e0 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68            -marsh
118f0 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c  alflags +NoHandl
11900 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
11910 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20  tActive \..
11920 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62             AddOb
11930 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b  jectReference Ok
11940 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d   $value error... 11950 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 . lap 11960 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 pend properties( 11970 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24 objects) [list$
11980 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 11990 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 119a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 119b0 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 ppend properties 119c0 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24 (values) [list$
119d0 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 119e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 119f0 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e incr coun 11a00 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 t.. } els 11a10 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c e {.. l 11a20 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 append propertie 11a30 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20 s(errors) [list 11a40 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f$name $::errorCo 11a50 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a de].. }.. 11a60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11a70 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a return$count..
11a80 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11a90 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74  oc getAllPropert
11aa0 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72  ies { object var
11ab0 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
11ac0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 11ad0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 properties.. 11ae0 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62 set value$ob
11af0 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68  ject....      wh
11b00 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20  ile {true} {..
11b10 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
11b20 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69   exists properti
11b30 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d  es(seenObjects)]
11b40 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
11b50 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72     $value ni$pr
11b60 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a  operties(seenObj
11b70 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  ects)} then {..
11b80 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70           getProp
11b90 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72  erties $value pr 11ba0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 operties.. 11bb0 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 lappend prop 11bc0 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 erties(seenObjec 11bd0 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 ts)$value..
11be0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
11bf0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
11c00 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62  ts properties(ob
11c10 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  jects)]} then {.
11c20 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
11c30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
11c40 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
11c50 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28  gth $properties( 11c60 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20 objects)] == 0} 11c70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11c80 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69 unset properti 11c90 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65 es(objects); bre 11ca0 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ak.. }... 11cb0 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c . set val 11cc0 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 ue [lindex [lind 11cd0 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f ex$properties(o
11ce0 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d  bjects) 0] end].
11cf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f  .        set pro
11d00 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29  perties(objects)
11d10 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72   [lrange $proper 11d20 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20 ties(objects) 1 11d30 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d end].. }... 11d40 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 11d50 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 exists properti 11d60 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d es(seenObjects)] 11d70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11d80 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20 foreach value 11d90 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e$properties(seen
11da0 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20  Objects) {..
11db0 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65        if {$value 11dc0 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e eq$object} con
11dd0 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20  tinue..
11de0 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64   catch {object d
11df0 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a  ispose $value}.. 11e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 11e10 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 unset prope 11e20 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 11e30 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 s).. }.. 11e40 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 11e50 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76 getVariables { v 11e60 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73 arNames {objects 11e70 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 11e80 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 11e90 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f ist].... fo 11ea0 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 reach varName$v
11eb0 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  arNames {..
11ec0 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20     if {[uplevel
11ed0 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78  1 [list array ex
11ee0 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d  ists $varName]]} 11ef0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11f00 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65 set arrayName 11f10 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20$varName....
11f20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65         foreach e
11f30 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65  lementName [uple
11f40 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61  vel 1 [list arra
11f50 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61  y names $arrayNa 11f60 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 me]] {.. 11f70 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70 set name [ap 11f80 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e pendArgs$arrayN
11f90 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61  ame ( $elementNa 11fa0 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 me )].. 11fb0 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 set varValue 11fc0 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list 11fd0 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a set$name]]....
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
11ff0 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f  $objects && [isO 12000 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 bjectHandle$var
12010 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Value]} then {..
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e                un
12030 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
12040 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  properties..
12050 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c            getAll
12060 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56  Properties $varV 12070 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d alue properties. 12080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 12090 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 120a0 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72 [list$name [arr
120b0 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65  ay get propertie
120c0 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s]]..
120d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
120e0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
120f0 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e   result [list $n 12100 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a ame$varValue]..
12110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12130 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
12140 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56          set varV
12150 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20  alue [uplevel 1
12160 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61  [list set $varNa 12170 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me]].... 12180 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 if {$objects &
12190 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c  & [isObjectHandl
121a0 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68  e $varValue]} th 121b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 121c0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 121d0 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a ain properties.. 121e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41 getA 121f0 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 llProperties$va
12200 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65  rValue propertie
12210 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s....
12220 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
12230 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b  [list $varName [ 12240 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 array get proper 12250 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 ties]].. 12260 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 12270 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 12280 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 result [list$va
12290 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d  rName $varValue] 122a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 122b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 122c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 122d0 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
122e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e  .....    proc en
122f0 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b  umerableToList {
12300 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d   enumerable } {.
12310 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
12320 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  t [list]....
12330 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
12340 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65  ngth $enumerable 12350 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 ] == 0 ||$enume
12360 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d  rable eq "null"}
12370 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12380 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. 12390 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 123a0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 123b0 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e -alias item$en
123c0 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20  umerable {..
123d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
123e0 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20  length $item] > 123f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 12400 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res 12410 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 ult [$item ToStr
12420 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing]..        }.
12430 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12440 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 12450 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 12460 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 proc catchAndRet 12470 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 urn { script {st 12480 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 ackTrace false} 12490 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 {strict true} } 124a0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 124b0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 124c0 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 te the script pr 124d0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 124e0 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f ller in their co 124f0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 ntext,.. # 12500 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 capturing 12510 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 both the result 12520 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 and the return c 12530 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ode... #.. 12540 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 set code [c 12550 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 atch {uplevel 1 12560 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d$script} result]
12570 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12580 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74     # NOTE: Did t
12590 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64  he script provid
125a0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
125b0 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72   NOT raise an er
125c0 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ror?..      #..
125d0 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74       if {$strict 125e0 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c &&$code == 0 |
125f0 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63  | !$strict &&$c
12600 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b  ode != 1} then {
12610 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
12620 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63       # NOTE: Suc
12630 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20  cess.  Return a
12640 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
12650 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68  turn code and th
12660 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  e result...
12670 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
12680 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 12690 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
126a0 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63   } elseif {$stac 126b0 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a kTrace} then {.. 126c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 126d0 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu 126e0 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 re. Our caller 126f0 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 wants a full sta 12700 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 ck trace (if app 12710 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 licable),.. 12720 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 # retur 12730 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 12740 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e e return code an 12750 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 d the result ver 12760 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 12770 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 12780 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 n [list$code $r 12790 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 esult].. } 127a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 127b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 127c0 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 E: Failure. Our 127d0 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 caller does not 127e0 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 want a full sta 127f0 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 ck trace (if.. 12800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 12810 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 plicable), retur 12820 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 12830 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 e return code, t 12840 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 he error.. 12850 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 # code f 12860 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 or the interpret 12870 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f er, and the erro 12880 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 r message up to 12890 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 128a0 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 point where 128b0 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 the stack trace 128c0 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a should start... 128d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 128e0 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 128f0 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f$code $::errorCo 12900 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 de \.. 12910 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d [extractSystem 12920 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 DataSQLiteExcept 12930 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 ionMessage$resu
12940 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  lt]]..      }..
12950 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
12960 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57  c compileCSharpW
12970 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ith {..
12980 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73     text memory s
12990 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65  ymbols strict re
129a0 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72  sultsVarName err
129b0 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e  orsVarName fileN
129c0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..
129d0 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20    args } {..
129e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
129f0 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 20  E: Since we are
12a00 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 69  going to use thi
12a10 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 20  s method name a
12a20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20 74  lot, assign it t
12a30 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  o a..      #
12a40 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72 73     variable firs
12a50 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
12a60 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65 72     set add Refer
12a70 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e  encedAssemblies.
12a80 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  Add....      #..
12a90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72        # NOTE: Cr
12aa0 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63 6f  eate the base co
12ab0 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74  mmand to evaluat
12ac0 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 72  e and add the pr
12ad0 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 0d  operty settings.
12ae0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
12af0 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  hat are almost a
12b00 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79 20  lways needed by
12b10 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20 28  our unit tests (
12b20 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d 0d  i.e. the System.
12b30 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
12b40 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61  nd System.Data a
12b50 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63  ssembly referenc
12b60 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  es)...      #..
12b70 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64       set command
12b80 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
12b90 20 20 20 20 63 6f 6d 70 69 6c 65 43 53 68 61 72      compileCShar
12ba0 70 20 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 20  p $text$memory
12bb0 24 73 79 6d 62 6f 6c 73 20 24 73 74 72 69 63 74  $symbols$strict
12bc0 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors
12bd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64  \..          $ad 12be0 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 d System.dll$ad
12bf0 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c  d System.Data.dl
12c00 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 54 72  l $add System.Tr 12c10 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c ansactions.dll \ 12c20 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64 64 ..$add
12c30 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d   System.Xml.dll]
12c40 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12c50 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 61     # NOTE: Add a
12c60 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  ll the provided
12c70 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61 73  file names as as
12c80 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65  sembly reference
12c90 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
12ca0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
12cb0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b  ame $fileNames { 12cc0 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e .. lappen 12cd0 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b d command$add [
12ce0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
12cf0 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  e $fileName].. 12d00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 12d10 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12d20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61 72 Add the extra ar 12d30 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c guments, if any, 12d40 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 to the command 12d50 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 to evaluate... 12d60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 #.. eva 12d70 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e l lappend comman 12d80 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 d$args....
12d90 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
12da0 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d 70  : Alias the comp
12db0 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c  iler local resul
12dc0 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76 61  ts and errors va
12dd0 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a  riables to the..
12de0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
12df0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f  riable names pro
12e00 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
12e10 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
12e20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
12e30 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 73   length $results 12e40 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 VarName] > 0} th 12e50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 12e60 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56 61 var 1$resultsVa
12e70 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20  rName results..
12e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12e90 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
12ea0 74 68 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d  th $errorsVarNam 12eb0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 12ec0 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 upvar 1 12ed0 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65$errorsVarName e
12ee0 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 7d 0d 0a  rrors..      }..
12ef0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12f00 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74   # NOTE: Evaluat
12f10 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65  e the constructe
12f20 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  d [compileCSharp
12f30 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65  ] command and re
12f40 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  turn the..
12f50 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d  #       result..
12f60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12f70 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20  eval $command.. 12f80 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 12f90 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 c isMemoryDb { f 12fa0 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 ileName } {.. 12fb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 12fc0 54 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 TE: Is the speci 12fd0 66 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 fied database fi 12fe0 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 le name really a 12ff0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data 13000 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a base?.. #.. 13010 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 13020 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 pr {$fileName eq
13030 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c   ":memory:" || \
13040 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
13050 69 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e  ing range $fileN 13060 61 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 ame 0 12] eq "fi 13070 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a le::memory:"}].. 13080 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 13090 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b oc isTableInDb { 130a0 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 name {varName d 130b0 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d b} } {.. #. 130c0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 130d0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 130e0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 130f0 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 13100 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 13110 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13120 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 caller. It cont 13130 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 ains the databas 13140 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 13150 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 dle that will be 13160 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13170 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 used to execute 13180 74 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74 the query used t 13190 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 o determine if t 131a0 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 he named table i 131b0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 131c0 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 present in that 131d0 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 database... 131e0 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 131f0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
13200 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13210 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
13220 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
13230 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  able to determin
13240 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74  e if the named t
13250 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23  able is..      #
13260 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69         present i
13270 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d  n the database..
13280 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13290 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20  set sql {..
132a0 20 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 28     SELECT COUNT(
132b0 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  *) FROM sqlite_m
132c0 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
132d0 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e   = 'table' AND n
132e0 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20  ame = ?;..
132f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
13300 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
13310 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
13320 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69  he named table i
13330 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20  s present...
13340 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
13350 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20  n [expr {..
13360 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20     [sql execute
13370 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar
13380 24 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20 70  $db$sql [list p
13390 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61  aram1 String $na 133a0 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 me]] > 0.. 133b0 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }].. }..... 133c0 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61 proc getDbDefa 133d0 75 6c 74 50 61 67 65 53 69 7a 65 20 7b 7d 20 7b ultPageSize {} { 133e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 133f0 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 22 ch {executeSql " 13400 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 PRAGMA page_size 13410 3b 22 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c ;" scalar} resul 13420 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 13430 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 13440 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d$result..      }
13450 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
13460 20 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 20 20   return 0..
13470 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
13480 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61    proc getDbDefa
13490 75 6c 74 43 61 63 68 65 53 69 7a 65 20 7b 7d 20  ultCacheSize {}
134a0 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
134b0 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20  tch {executeSql
134c0 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
134d0 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20 72 65 73  ze;" scalar} res
134e0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
134f0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
13500 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20  n $result.. 13510 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 13520 20 20 20 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 return 0.. 13530 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 13540 20 20 20 20 70 72 6f 63 20 75 73 65 4c 65 67 61 proc useLega 13550 63 79 44 62 50 61 67 65 41 6e 64 43 61 63 68 65 cyDbPageAndCache 13560 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d 65 20 Sizes { varName 13570 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 13580 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 13590 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 135a0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 135b0 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 . "db") in the c 135c0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 ontext of our.. 135d0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 135e0 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e ler. It contain 135f0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 s the database c 13600 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle 13610 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 that will be.. 13620 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 13630 64 20 74 6f 20 65 78 65 63 75 74 65 20 71 75 65 d to execute que 13640 72 69 65 73 20 75 73 65 64 20 74 6f 20 73 65 74 ries used to set 13650 20 74 68 65 20 70 61 67 65 20 61 6e 64 20 63 61 the page and ca 13660 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 20 20 che sizes... 13670 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 13680 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
13690 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63  ..      sql exec
136a0 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 20  ute $db {.. 136b0 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 PRAGMA page_s 136c0 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 20 20 ize = 1024;.. 136d0 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 PRAGMA cach 136e0 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b 0d 0a e_size = 2000;.. 136f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 13700 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0d return [list \. 13710 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 . [sql 13720 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute 13730 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 scalar$db "PRA
13740 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d  GMA page_size;"]
13750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
13760 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
13770 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db " 13780 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a PRAGMA cache_siz 13790 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d e;"]].. }.... 137a0 0a 20 20 20 20 70 72 6f 63 20 65 78 74 72 61 63 . proc extrac 137b0 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 tSystemDataSQLit 137c0 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 eExceptionMessag 137d0 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 e { value } {.. 137e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 137f0 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 73 74 72 NOTE: If the str 13800 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 ing conforms to 13810 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 6e 6f format of the no 13820 72 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e 0d 0a rmal exception.. 13830 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 # er 13840 72 6f 72 20 73 74 72 69 6e 67 73 2c 20 65 78 74 ror strings, ext 13850 72 61 63 74 20 61 6e 64 20 72 65 74 75 72 6e 20 ract and return 13860 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f 72 20 6d only the error m 13870 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 23 20 essage.. # 13880 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 69 74 portion it 13890 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23 0d 0a self... #.. 138a0 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 set patter 138b0 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 ns [list \.. 138c0 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c {System\.Data\ 138d0 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 .SQLite\.SQLiteE 138e0 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 30 xception $$0x800 138f0 30 34 30 30 35 5c 29 3a 20 28 2e 2b 3f 29 20 20 04005$$: (.+?) 13900 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 (?: )?at} \.. 13910 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 {System\.Data 13920 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 \.SQLite\.SQLite 13930 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 Exception: (.+?) 13940 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 (?: )?at} \.. 13950 20 20 20 20 20 7b 45 61 67 6c 65 5c 2e 5f 43 6f {Eagle\._Co 13960 6d 70 6f 6e 65 6e 74 73 5c 2e 50 75 62 6c 69 63 mponents\.Public 13970 5c 2e 53 63 72 69 70 74 45 78 63 65 70 74 69 6f \.ScriptExceptio 13980 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f n: (.+?) (?: )? 13990 61 74 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f at}].... fo 139a0 72 65 61 63 68 20 70 61 74 74 65 72 6e 20 24 70 reach pattern$p
139b0 61 74 74 65 72 6e 73 20 7b 0d 0a 20 20 20 20 20  atterns {..
139c0 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d     if {[regexp -
139d0 2d 20 24 70 61 74 74 65 72 6e 20 24 76 61 6c 75  - $pattern$valu
139e0 65 20 64 75 6d 6d 79 20 6d 65 73 73 61 67 65 5d  e dummy message]
139f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13a00 20 20 20 20 73 65 74 20 6d 65 73 73 61 67 65 20      set message
13a10 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
13a20 74 20 5c 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69  t \r\n \n] [stri
13a30 6e 67 20 74 72 69 6d 20 24 6d 65 73 73 61 67 65  ng trim $message 13a40 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 ]].. se 13a50 74 20 6c 69 6e 65 73 20 5b 73 70 6c 69 74 20 24 t lines [split$
13a60 6d 65 73 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20  message \n]....
13a70 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c           if {[ll
13a80 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d 20 3d 3d  ength $lines] == 13a90 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 2} then {.. 13aa0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 69 6e if {[lin 13ab0 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 65 71 dex$lines 0] eq
13ac0 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20   [lindex $lines 13ad0 31 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1]} then {.. 13ae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 13af0 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 [lindex$lines
13b00 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0]..
13b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
13b20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41   return [appendA
13b30 72 67 73 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e  rgs [lindex $lin 13b40 65 73 20 30 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 es 0] " -- " [li 13b50 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 5d 0d ndex$lines 1]].
13b60 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
13b70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13b80 20 24 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20   $message.. 13b90 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 13ba0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 . return$v
13bb0 61 6c 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alue..    }.....
13bc0 20 20 20 20 70 72 6f 63 20 74 72 69 6d 53 71 6c      proc trimSql
13bd0 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20   { sql } {..
13be0 20 20 72 65 74 75 72 6e 20 5b 72 65 67 73 75 62    return [regsub
13bf0 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b   -all -- {\s+} [
13c00 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 71 6c  string trim $sql 13c10 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ] " "].. }... 13c20 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 .. proc execu 13c30 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 teSql { sql {exe 13c40 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d cute none} {form 13c50 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 at none} {fileNa 13c60 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 13c70 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 13c80 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 ngth$fileName]
13c90 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20  == 0} then {set
13ca0 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79  fileName :memory
13cb0 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44  :}..      setupD
13cc0 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" " 13cd0 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 " "" "" "" false 13ce0 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c false false fal 13cf0 73 65 20 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 se db true.... 13d00 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 try {.. 13d10 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 return [uplev 13d20 65 6c 20 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 el 1 [list \.. 13d30 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 sql ex 13d40 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 ecute -execute$
13d50 65 78 65 63 75 74 65 20 2d 66 6f 72 6d 61 74 20  execute -format
13d60 24 66 6f 72 6d 61 74 20 24 64 62 20 24 73 71 6c  $format$db $sql 13d70 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 ]].. } fina 13d80 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 lly {.. s 13d90 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 et connection [g 13da0 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d etDbConnection]. 13db0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b ... try { 13dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6c 65 61 .. clea 13dd0 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 nupDb$fileName
13de0 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66  db false false f
13df0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20  alse..        }
13e00 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20  finally {..
13e10 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6c 61 67       object flag
13e20 73 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 4e  s $connection -N 13e30 6f 44 69 73 70 6f 73 65 3b 20 66 72 65 65 44 62 oDispose; freeDb 13e40 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 Connection.. 13e50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 13e60 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 13e70 6f 63 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b 20 oc hasNoFlags { 13e80 76 61 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b varName none } { 13e90 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 13ea0 24 76 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d 0a$varName flags..
13eb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
13ec0 66 6f 20 65 78 69 73 74 73 20 66 6c 61 67 73 5d  fo exists flags]
13ed0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13ee0 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
13ef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13f00 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
13f10 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d  th $flags] == 0} 13f20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13f30 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 13f40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 13f50 66 20 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c 61 f {$none && $fla 13f60 67 73 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74 68 gs eq "None"} th 13f70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 13f80 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 13f90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 13fa0 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 13fb0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 13fc0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 ConnectionFlags 13fd0 7b 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 { fileName flags 13fe0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 13ff0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 14000 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 # NOTE: Figur 14010 65 20 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 e out which data 14020 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f base file name o 14030 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 r connection str 14040 69 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 ing these.. 14050 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 # connect 14060 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 ion flags will a 14070 63 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f ctually apply to 14080 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e . This is not n 14090 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 ecessary.. 140a0 23 20 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 # in quiet 140b0 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 mode because th 140c0 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 is information i 140d0 73 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 s only used for 140e0 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 logging.. # 140f0 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 and repor 14100 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a ting purposes... 14110 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 14120 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
14130 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
14140 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $14150 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 14160 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14170 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 set database [a 14180 70 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 ppendArgs "file 14190 6e 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 name \""$fileNa
141a0 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20  me \"]..
141b0 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
141c0 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75  exists ::dataSou
141d0 72 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  rce] && \..
141e0 20 20 20 20 20 20 20 21 5b 61 72 72 61 79 20 65         ![array e
141f0 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72  xists ::dataSour
14200 63 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ce]} then {..
14210 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62         set datab
14220 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ase [appendArgs
14230 22 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22  "data source \""
14240 20 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c   $::dataSource \ 14250 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c "].. } el 14260 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 14270 73 65 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e set database <un 14280 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 known>.. 14290 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 142a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 142b0 4f 54 45 3a 20 45 76 65 6e 20 74 68 6f 75 67 68 OTE: Even though 142c0 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f there is only o 142d0 6e 65 20 73 6f 75 72 63 65 20 6f 66 20 66 6c 61 ne source of fla 142e0 67 73 20 73 6f 20 66 61 72 2c 20 74 68 65 79 0d gs so far, they. 142f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d . # m 14300 75 73 74 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 ust be combined 14310 75 73 69 6e 67 20 74 68 65 20 63 6f 72 72 65 63 using the correc 14320 74 20 73 79 6e 74 61 78 20 66 6f 72 20 65 6e 75 t syntax for enu 14330 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20 23 merated.. # 14340 20 20 20 20 20 20 20 66 6c 61 67 20 76 61 6c 75 flag valu 14350 65 73 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 es for the .NET 14360 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 Framework... 14370 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 #.. set f 14380 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 lags [combineFla 14390 67 73 20 24 66 6c 61 67 73 20 22 22 5d 0d 0a 0d gs$flags ""]...
143a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
143b0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e  # NOTE: Show (an
143c0 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61 6c  d log) the local
143d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
143e0 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f 63 69  s and the associ
143f0 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  ated..      #
14400 20 20 20 20 64 61 74 61 20 73 6f 75 72 63 65 20      data source
14410 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  or file name...
14420 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
14430 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 14440 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 14450 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 14460 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 o(emitLocalFlags 14470 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 14480 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 (![info exi 14490 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 sts ::no(emitLoc 144a0 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 alFlagsIfNone)] 144b0 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 144c0 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 ![hasNoFlags 144d0 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 flags false])} t 144e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 144f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
14500 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
14510 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
14520 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20      "---- local
14530 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14540 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database 14550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14560 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 " are: " [expr 14570 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 {![hasNoFlags f 14580 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d lags false] ? \. 14590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 145a0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 appendArgs \"$f
145b0 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e  lags \"] : "<non
145c0 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  e>"}] \n]..
145d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
145e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
145f0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e  # NOTE: Show (an
14600 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61 72 65  d log) the share
14610 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  d connection fla
14620 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gs...      #..
14630 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 14640 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14650 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 14660 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 14670 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 invoke System.Da 14680 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 14690 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61 72 65 Connection Share 146a0 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 dFlags.. 146b0 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d 20 3d } sharedFlags] = 146c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 146d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 146e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 146f0 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20 itSharedFlags)] 14700 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 14710 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 (![info exis 14720 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 ts ::no(emitShar 14730 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 edFlagsIfNone)] 14740 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 14750 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 ![hasNoFlag 14760 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 s sharedFlags tr 14770 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ue])} then {.. 14780 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 14790 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
147a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
147c0 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e  ---- shared conn
147d0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72  ection flags for
147e0 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a   " $database \.. 147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14800 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b " are: " [expr { 14810 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 ![hasNoFlags sha 14820 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 20 3f redFlags true] ? 14830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14840 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 [appendArgs 14850 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67 73 20 \"$sharedFlags
14860 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d  \"] : "<none>"}]
14870 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
14880 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
14890 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  e {..          i
148a0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
148b0 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64   ::no(emitShared
148c0 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Flags)] && \..
148d0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e              ![in
148e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
148f0 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 66  mitSharedFlagsIf
14900 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d 20 74  Unavailable)]} t
14910 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14920 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 14930 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 14940 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 14950 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 "---- sh 14960 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ared connection 14970 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 flags for "$dat
14980 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20  abase \..
14990 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20           " are:
149a0 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c 6e 22  <unavailable>\n"
149b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
149c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
149d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
149e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
149f0 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20  w (and log) the
14a00 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61 6c 20  detected global
14a10 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14a20 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...
14a30 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$14a40 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 14a50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 14a60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 14a70 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29 5d 20 itGlobalFlags)] 14a80 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 14a90 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 (![info exists 14aa0 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c ::no(emitGlobal 14ab0 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c FlagsIfNone)] || 14ac0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14ad0 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a ![hasNoFlags :: 14ae0 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags 14af0 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b false])} then { 14b00 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 14b10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14b20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
14b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
14b40 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e  ---- global conn
14b50 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65  ection flags are
14b60 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
14b70 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b 68 61       [expr {![ha
14b80 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65  sNoFlags ::conne
14b90 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73  ction_flags fals
14ba0 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] ? \..
14bb0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
14bc0 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  s \" $::connecti 14bd0 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 on_flags \"] : " 14be0 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 <none>"}] \n].. 14bf0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 14c00 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 14c10 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 # NOTE: If t 14c20 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f here are any glo 14c30 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 75 bal (per test ru 14c40 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c n) connection fl 14c50 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 ags currently.. 14c60 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set 14c70 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28 , use them now ( 14c80 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e i.e. by combinin 14c90 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 20 g them with the 14ca0 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20 ones for this.. 14cb0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 14cc0 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 nection)... 14cd0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 14ce0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e nfo exists ::con 14cf0 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d 20 nection_flags]} 14d00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14d10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 14d20 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f E: Combine and/o 14d30 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f r replace the co 14d40 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 nnection flags a 14d50 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 nd then show the 14d60 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14d70 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 new value... 14d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 14d90 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 set flags [comb 14da0 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 ineFlags$flags
14db0 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c  $::connection_fl 14dc0 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ags].... 14dd0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 14de0 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 E: Show (and log 14df0 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 ) the new effect 14e00 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ive connection f 14e10 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 lags... # 14e20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
14e30 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
14e40 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
14e50 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
14e60 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67  emitCombinedFlag
14e70 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
14e80 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20          (![info
14e90 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74  exists ::no(emit
14ea0 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49 66 4e  CombinedFlagsIfN
14eb0 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20  one)] || \..
14ec0 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73             ![has
14ed0 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61  NoFlags flags fa
14ee0 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  lse])} then {..
14ef0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14f00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 14f10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14f30 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 "---- combined c 14f40 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 14f50 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 for "$database
14f60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14f70 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70     " are: " [exp
14f80 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20  r {![hasNoFlags
14f90 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c  flags false] ? \
14fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14fb0 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22    [appendArgs \"
14fc0 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c   $flags \"] : "< 14fd0 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 none>"}] \n].. 14fe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14ff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 15000 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 . return$f
15010 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  lags..    }.....
15020 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c 61 67      proc getFlag
15030 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c 61  sProperty { {fla
15040 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61  gs ""} {quiet fa
15050 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
15060 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
15070 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61 74 20   Determine what
15080 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28 67 6c  the combined (gl
15090 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 20  obal and local)
150a0 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..
150b0 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 73 20    #       flags
150c0 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73 69  should be, possi
150d0 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20 20  bly quietly...
150e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
150f0 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65   flags [getConne
15100 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66  ctionFlags "" $f 15110 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a lags$quiet]....
15120 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
15130 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c 6f   NOTE: If no glo
15140 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e  bal or local con
15150 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 65  nection flags we
15160 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  re specified, th
15170 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
15180 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
15190 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  ion flags should
151a0 20 62 65 20 75 73 65 64 3b 20 74 68 65 72 65 66   be used; theref
151b0 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20 20  ore, return..
151c0 20 20 20 23 20 20 20 20 20 20 20 61 6e 20 65 6d     #       an em
151d0 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20 74 68  pty string in th
151e0 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 20  at case...
151f0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
15200 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61  ring length $fla 15210 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b gs] == 0} then { 15220 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 15230 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a "".. }.... 15240 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 15250 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72 20 NOTE: In order 15260 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 to check if the 15270 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 default connecti 15280 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 65 69 on flags are bei 15290 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 ng used.. # 152a0 20 20 20 20 20 20 20 69 74 20 69 73 20 6e 65 63 it is nec 152b0 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 6d 70 essary to attemp 152c0 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 t a conversion t 152d0 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 6e 75 o the actual enu 152e0 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20 23 merated.. # 152f0 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 46 61 type. Fa 15300 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 65 20 iling that, the 15310 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 74 68 check against th 15320 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 15330 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # 15340 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d skipped.. 15350 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15360 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 15370 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 20 set error 15380 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 44 0d null; # IGNORED. 15390 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 ... objec 153a0 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 t invoke Utility 153b0 20 54 72 79 50 61 72 73 65 46 6c 61 67 73 45 6e TryParseFlagsEn 153c0 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 um "" \.. 153d0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 153e0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f .SQLite.SQLiteCo 153f0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 nnectionFlags "" 15400 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72 75$flags null tru
15410 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
15420 20 74 72 75 65 20 74 72 75 65 20 65 72 72 6f 72   true true error
15430 0d 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d  ..      } value]
15440 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15450 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
15460 4f 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 20  OTE: Attempting
15470 74 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f 6e  to parse the con
15480 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 61  nection flags ca
15490 75 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a 20  used a script..
154a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65         #       e
154b0 72 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 61  rror.  Emit a wa
154c0 72 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65 73  rning to the tes
154d0 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 63  t log file and c
154e0 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20  ontinue..
154f0 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 61   #       using a
15500 6e 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20 69  n emtpy string i
15510 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  nstead...
15520 20 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f 67   #..        tlog
15530 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
15540 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
15550 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
15560 64 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65  d to parse conne
15570 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72  ction flags, err
15580 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
15590 20 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65       \n\t $value 155a0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 155b0 73 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 set value "".. 155c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 155d0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 155e0 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 If the combined 155f0 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f 75 flags string cou 15600 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 ld not actually 15610 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 be converted.. 15620 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 # to t 15630 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79 he enumerated ty 15640 70 65 20 69 74 20 69 73 20 74 68 65 20 64 65 66 pe it is the def 15650 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 6e ault value, then 15660 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20 20 just use.. 15670 20 23 20 20 20 20 20 20 20 69 74 20 76 65 72 62 # it verb 15680 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c atim; otherwise, 15690 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 just return an 156a0 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 49 empty string. I 156b0 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 n that.. # 156c0 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 65 20 case, the 156d0 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 default connecti 156e0 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 on flags will be 156f0 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d used... #. 15700 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 15710 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 ng length$value
15720 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65  ] == 0 || $value 15730 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20 74 ne "Default"} t 15740 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 15750 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 52 4e .. # WARN 15760 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72 6e ING: This return 15770 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c s the string val 15780 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e ue of the combin 15790 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 ed flags, not.. 157a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 157b0 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 the enumerated 157c0 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 value. This is 157d0 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20 73 by design and s 157e0 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 hould not.. 157f0 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 65 # be 15800 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75 74 changed without 15810 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 careful conside 15820 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 ration (e.g. it 15830 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 would.. # 15840 20 20 20 20 20 20 20 20 20 20 70 72 65 76 65 6e preven 15850 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e t the SQLiteConn 15860 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f ection class fro 15870 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c m allowing inval 15880 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 id.. # 15890 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61 6c ["magical 158a0 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d "] meta-flags).. 158b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 158c0 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 return [appe 158d0 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22 20 ndArgs "Flags=" 158e0 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20$flags \;]..
158f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
15900 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c  urn ""..    }...
15910 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65  ..    proc getTe
15920 73 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 7b  stProperties { {
15930 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74  flags ""} {quiet
15940 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
15950 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15960 54 45 3a 20 53 74 61 72 74 20 77 69 74 68 20 22  TE: Start with "
15970 46 6c 61 67 73 22 20 70 72 6f 70 65 72 74 79 20  Flags" property
15980 66 6f 72 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e  for the new conn
15990 65 63 74 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 0d  ection, if any..
159a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
159b0 73 65 74 20 72 65 73 75 6c 74 20 5b 67 65 74 46  set result [getF
159c0 6c 61 67 73 50 72 6f 70 65 72 74 79 20 24 66 6c  lagsProperty $fl 159d0 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 ags$quiet]....
159e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
159f0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61  NOTE: Add the na
15a00 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  me of the curren
15a10 74 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20  t test file, if
15a20 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73  available.  This
15a30 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   is..      #
15a40 20 20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72     only used for
15a50 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20   debugging...
15a60 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
15a70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
15a80 65 73 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20  est_file]} then
15a90 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
15aa0 64 20 72 65 73 75 6c 74 20 54 65 73 74 46 69 6c  d result TestFil
15ab0 65 3d 20 24 3a 3a 74 65 73 74 5f 66 69 6c 65 20  e= $::test_file 15ac0 5c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 \;.. }.... 15ad0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 15ae0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 NOTE: Add the na 15af0 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e me of the curren 15b00 74 20 74 65 73 74 2c 20 69 66 20 61 76 61 69 6c t test, if avail 15b10 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 20 6f able. This is o 15b20 6e 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 nly.. # 15b30 20 20 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 used for debu 15b40 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d gging... #. 15b50 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 15b60 20 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f exists ::eagle_ 15b70 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61 6d tests(CurrentNam 15b80 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 15b90 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu 15ba0 6c 74 20 54 65 73 74 4e 61 6d 65 3d 20 24 3a 3a lt TestName=$::
15bb0 65 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72  eagle_tests(Curr
15bc0 65 6e 74 4e 61 6d 65 29 20 5c 3b 0d 0a 20 20 20  entName) \;..
15bd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
15be0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 15bf0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 15c00 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 enableSharedCac 15c10 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 he { channel ena 15c20 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ble {quiet false 15c30 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 15c40 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 15c50 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 15c60 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 15c70 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 15c80 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 15c90 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 15ca0 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 15cb0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 15cc0 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 enable_shared_ca 15cd0 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24 65 che [expr int($e
15ce0 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d  nable)]..      }
15cf0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
15d00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
15d10 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 15d20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 15d30 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
15d40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15d50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
15d60 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61  call sqlite3_ena
15d70 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
15d80 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20  (" $enable \.. 15d90 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e ").. 15da0 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 . ok: "$result
15db0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
15dc0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
15dd0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 15de0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 15df0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
15e00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
15e10 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
15e20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
15e30 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
15e40 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61  red_cache(" $ena 15e50 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ble \.. 15e60 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 ")... error 15e70 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 : " \n\t$result
15e80 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
15e90 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
15ea0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74  ....    proc set
15eb0 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20  upDb {..
15ec0 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f      fileName {mo
15ed0 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65  de ""} {dateTime
15ee0 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65  Format ""} {date
15ef0 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c  TimeKind ""} {fl
15f00 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20  ags ""}..
15f10 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20       {extra ""}
15f20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b  {qualify true} {
15f30 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72  delete true} {ur
15f40 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20  i false}..
15f50 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79        {temporary
15f60 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20   true} {varName
15f70 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65  db} {quiet false
15f80 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
15f90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
15fa0 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20  rst, see if our
15fb0 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
15fc0 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
15fd0 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
15fe0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
15ff0 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
16000 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 16010 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 16020 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f # NOTE: For no 16030 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 w, all test data 16040 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 bases used by th 16050 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 e test suite are 16060 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 placed.. # 16070 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 into the 16080 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f database directo 16090 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 ry. Each databa 160a0 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 se and related f 160b0 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # 160c0 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65 used by a te 160d0 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 st should be cle 160e0 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 aned up by that 160f0 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a test using the.. 16100 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63 # "c 16110 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 leanupDb" proced 16120 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 ure, below... 16130 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 16140 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 !$isMemory && $q 16150 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a ualify} then {.. 16160 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 16170 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 16180 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 [getDatabaseDire 16190 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 ctory] [file tai 161a0 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 l$fileName]]..
161b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
161c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
161d0 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c   By default, del
161e0 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73  ete any pre-exis
161f0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69  ting database wi
16200 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  th the same file
16210 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16220 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65  name if it curre
16230 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20  ntly exists...
16240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
16250 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
16260 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20  delete && [file
16270 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 16280 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16290 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 162a0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 162b0 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d delete any pre- 162c0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 existing databas 162d0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 e with the same 162e0 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 file.. # 162f0 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 name... 16300 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16310 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 if {[catch {file 16320 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d delete$fileNam
16330 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  e} error]} then
16340 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
16350 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
16360 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69  : We somehow fai
16370 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68  led to delete th
16380 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77  e file, report w
16390 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hy...          #
163a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
163b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 163c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 163d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
163e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
163f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16400 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
16410 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
16420 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file
16430 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 16440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16450 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 "\" during setu 16460 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 p, error: " \n\t 16470 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
16480 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16490 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
164a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
164b0 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
164c0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
164d0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
164e0 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
164f0 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
16500 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
16510 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
16520 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61  he opened databa
16530 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  se will be store
16540 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
16550 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
16560 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a   $varName db.... 16570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16580 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 NOTE: Start bui 16590 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 lding the connec 165a0 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 tion string. Th 165b0 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 e only required 165c0 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 portion.. # 165d0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f of the co 165e0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 nnection string 165f0 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 is the data sour 16600 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 ce, which contai 16610 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ns the.. # 16620 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 database f 16630 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e ile name itself. 16640 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 If our caller 16650 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 wants to use a U 16660 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 RI as.. # 16670 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73 6f the data so 16680 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 urce, use the Fu 16690 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e llUri connection 166a0 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 string property 166b0 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 to.. # 166c0 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 prevent the d 166d0 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e ata source strin 166e0 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e g from being man 166f0 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a gled... #.. 16700 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 if {$uri}
16710 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16720 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b  set connection {
16730 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61  FullUri=${fileNa 16740 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c me}}.. } el 16750 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se 16760 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 t connection {Da 16770 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 ta Source=${file
16780 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  Name}}..      }.
16790 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
167a0 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20    # NOTE: Since
167b0 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 68  this procedure h
167c0 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e  as no special kn
167d0 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20  owledge of what
167e0 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20  the default..
167f0 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69     #       setti
16800 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f  ng is for the To
16810 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74  FullPath connect
16820 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65  ion string prope
16830 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ry, always..
16840 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 68    #       add th
16850 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20  e value we know
16860 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e  about to the con
16870 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d  nection string..
16880 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16890 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
168a0 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24  n {;ToFullPath=$168b0 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 {qualify}}.... 168c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 168d0 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call 168e0 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 6a er specified a j 168f0 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 ournal mode, add 16900 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 the necessary p 16910 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 ortion.. # 16920 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e of the con 16930 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e nection string n 16940 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 16950 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 16960 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 length$mode] >
16970 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
16980 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
16990 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d  tion {;Journal M
169a0 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20  ode=${mode}}.. 169b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 169c0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 169d0 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp 169e0 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 ecified a DateTi 169f0 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 me format, add t 16a00 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 he necessary.. 16a10 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 # port 16a20 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 ion of the conne 16a30 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now 16a40 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 16a50 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 16a60 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f ngth$dateTimeFo
16a70 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20  rmat] > 0} then
16a80 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
16a90 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44  d connection {;D
16aa0 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b  ateTimeFormat=${ 16ab0 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d dateTimeFormat}} 16ac0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 16ad0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16ae0 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle 16af0 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 r specified a Da 16b00 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 teTimeKind, add 16b10 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f the necessary po 16b20 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 rtion.. # 16b30 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e of the conn 16b40 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f ection string no 16b50 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. 16b60 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 16b70 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b ength$dateTimeK
16b80 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ind] > 0} then {
16b90 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
16ba0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61   connection {;Da
16bb0 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74  teTimeKind=${dat 16bc0 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 eTimeKind}}.. 16bd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 16be0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 16bf0 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 igure out what t 16c00 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 he final flags f 16c10 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 or this connecti 16c20 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a on need to be... 16c30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 16c40 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e et flags [getCon 16c50 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 nectionFlags$fi
16c60 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71  leName $flags$q
16c70 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  uiet]....      #
16c80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16c90 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
16ca0 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c  ecified some SQL
16cb0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
16cc0 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20  gs, add the..
16cd0 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73     #       neces
16ce0 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20  sary portion of
16cf0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
16d00 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
16d10 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
16d20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f 16d30 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 lags] > 0} then 16d40 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 16d50 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 d connection {;F 16d60 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a lags=${flags}}..
16d70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16d80 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16d90 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
16da0 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74  specified an ext
16db0 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68  ra payload to th
16dc0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..
16dd0 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69      #       stri
16de0 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f  ng, append it no
16df0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
16e00 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
16e10 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20  ength $extra] > 16e20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 16e30 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec 16e40 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a tion \;$extra..
16e50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16e60 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16e70 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f  : Add the name o
16e80 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65  f the current te
16e90 73 74 20 66 69 6c 65 2c 20 69 66 20 61 76 61 69  st file, if avai
16ea0 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0d  lable.  This is.
16eb0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
16ec0 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 64 65 62  nly used for deb
16ed0 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  ugging...      #
16ee0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
16ef0 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
16f00 66 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  file]} then {..
16f10 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
16f20 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 65 73 74 46  nnection {;TestF
16f30 69 6c 65 3d 24 7b 3a 3a 74 65 73 74 5f 66 69 6c  ile=${::test_fil 16f40 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... 16f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16f60 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e NOTE: Add the n 16f70 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 ame of the curre 16f80 6e 74 20 74 65 73 74 2c 20 69 66 20 61 76 61 69 nt test, if avai 16f90 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 20 lable. This is 16fa0 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 only.. # 16fb0 20 20 20 20 75 73 65 64 20 66 6f 72 20 64 65 62 used for deb 16fc0 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 ugging... # 16fd0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 16fe0 6f 20 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 o exists ::eagle 16ff0 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61 _tests(CurrentNa 17000 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 me)]} then {.. 17010 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 17020 6e 65 63 74 69 6f 6e 20 7b 3b 54 65 73 74 4e 61 nection {;TestNa 17030 6d 65 3d 24 7b 3a 3a 65 61 67 6c 65 5f 74 65 73 me=${::eagle_tes
17040 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 7d  ts(CurrentName)}
17050 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
17060 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
17070 4f 54 45 3a 20 46 6f 72 20 63 6c 61 72 69 74 79  OTE: For clarity
17080 2c 20 61 70 70 65 6e 64 20 61 20 66 69 6e 61 6c  , append a final
17090 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 68   semicolon to th
170a0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
170b0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
170c0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
170d0 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20  ection \;....
170e0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
170f0 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74  TE: Open the dat
17100 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
17110 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68   now, placing th
17120 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20  e opaque handle
17130 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
17140 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61       into the va
17150 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64  riable specified
17160 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
17170 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17180 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e  set db [sql open
17190 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73   -type SQLite [s
171a0 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ubst $connection 171b0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. 171c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e # NOTE: Con 171d0 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f figure the tempo 171e0 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 rary directory f 171f0 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 or the newly ope 17200 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 ned database.. 17210 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn 17220 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 ection now unles 17230 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 s our caller for 17240 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 bids it... 17250 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 #.. if {$te
17260 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66  mporary && ![inf
17270 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65  o exists ::no(se
17280 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74  tTemporaryDirect
17290 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ory)]} then {..
172a0 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75         sql execu
172b0 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72  te $db [appendAr 172c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 172d0 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 "PRAGMA temp_s 172e0 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d tore_directory = 172f0 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 \"" [getTempora 17300 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c ryDirectory] \"\ 17310 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ;].. }.... 17320 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 17330 4e 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e NOTE: Perform an 17340 79 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e y extra per-conn 17350 65 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 ection setup for 17360 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 the newly opene 17370 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 17380 20 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e database now un 17390 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 less our caller 173a0 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 forbids it... 173b0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 173c0 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b executeOnSetup [ 173d0 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 getExecuteOnSetu 173e0 70 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b p].... if { 173f0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
17400 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20  executeOnSetup]
17410 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  > 0 && \..
17420 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74      ![info exist
17430 73 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e  s ::no(executeOn
17440 53 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d  Setup)]} then {.
17450 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
17460 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
17470 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69   command may rai
17480 73 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20  se an error; if
17490 73 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65  so, that is fine
174a0 2c 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20  , as..        #
174b0 20 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73        the enclos
174c0 69 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68  ing test will th
174d0 65 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73  en fail.  The [s
174e0 75 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  ubst] command is
174f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17500 20 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51    used on the SQ
17510 4c 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65  L in case it nee
17520 64 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73  ds to refer to s
17530 74 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20  tate in our..
17540 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
17550 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  text...        #
17560 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78  ..        sql ex
17570 65 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74  ecute $db [subst 17580 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70$executeOnSetup
17590 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
175a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
175b0 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75  OTE: Always retu
175c0 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  rn the connectio
175d0 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75  n handle upon su
175e0 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ccess...      #.
175f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64  .      return $d 17600 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 b.. }..... 17610 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 proc getDbConne 17620 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 ction { {varName 17630 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. 17640 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17650 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 17660 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 17670 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 17680 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 17690 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 176a0 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 caller. The h 176b0 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 andle to the dat 176c0 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 abase previously 176d0 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d opened via the. 176e0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 176f0 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 setupDb] procedu 17700 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f re should be sto 17710 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 red there... 17720 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 17730 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
17740 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
17750 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65   # NOTE: This re
17760 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45  turns the ADO.NE
17770 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  T IDbConnection
17780 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance
17790 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23  for the..      #
177a0 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64         specified
177b0 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e   databse handle.
177c0 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20    Since getting
177d0 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69  this object reli
177e0 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23  es upon..      #
177f0 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74         Eagle int
17800 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61  ernals, great ca
17810 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b  re should be tak
17820 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70  en to avoid disp
17830 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20  osing of..
17840 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a  #       this obj
17850 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65  ect or otherwise
17860 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f   putting it into
17870 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74   an invalid stat
17880 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
17890 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
178a0 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d  sts db]} then {.
178b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
178c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
178d0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
178e0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
178f0 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e   -objectflags +N
17900 6f 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20  oDispose -alias
17910 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
17920 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
17930 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f  Active.connectio
17940 6e 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20  ns Item $db.. 17950 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 17960 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 17970 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 17980 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 # NOTE: Succ 17990 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 ess, return the 179a0 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 opaque object ha 179b0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 ndle... 179c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 #.. re 179d0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
179e0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
179f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17a00 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
17a10 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77  ailure, report w
17a20 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hy...          #
17a30 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
17a40 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 17a50 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 17a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 17a70 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 17a80 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e iled to get conn 17a90 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f ection handle fo 17aa0 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c r database \"" \ 17ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17ac0 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20$db "\", error:
17ad0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 17ae0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 17af0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17b00 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17b10 20 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e Failure, return 17b20 20 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e an obviously in 17b30 76 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a valid opaque obj 17b40 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 17b50 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 17b60 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d rn "".. }.... 17b70 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 . proc freeDb 17b80 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 Connection { {va 17b90 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection 17ba0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 17bb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 17bc0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci 17bd0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e 17be0 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 .g. "connection" 17bf0 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 ) in the.. 17c00 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 # context 17c10 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 of our caller. 17c20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 The opaque objec 17c30 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 t handle for an 17c40 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 ADO.NET.. # 17c50 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 17c60 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 n previously ret 17c70 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 urned by [getDbC 17c80 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c onnection] shoul 17c90 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # 17ca0 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 stored there 17cb0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17cc0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
17cd0 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  me connection...
17ce0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17cf0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
17d00 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70  to remove the op
17d10 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
17d20 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65  le from the inte
17d30 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23  rpreter..      #
17d40 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69         now.  Thi
17d50 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73  s [object dispos
17d60 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74  e] call will not
17d70 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73   actually dispos
17d80 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
17d90 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69  #       underlyi
17da0 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73  ng object becaus
17db0 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65  e the +NoDispose
17dc0 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e   flag was set on
17dd0 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
17de0 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69     during creati
17df0 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  on of the opaque
17e00 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
17e10 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17e20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
17e30 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20   connection] &&
17e40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61  \..          [ca
17e50 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70  tch {object disp
17e60 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d  ose $connection} 17e70 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 17e80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 17e90 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 17ea0 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 17eb0 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 remove the hand 17ec0 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. 17ed0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 17ee0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
17ef0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
17f00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
17f10 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
17f20 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
17f30 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  move connection
17f40 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e  handle \"" $conn 17f50 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. 17f60 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 "\", error 17f70 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
17f80 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
17f90 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17fa0 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   addDbConnection
17fb0 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76   { connection {v
17fc0 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
17fd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
17fe0 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
17ff0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
18000 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
18010 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
18020 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
18030 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  #       caller..
18040 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18050 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 18060 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 18070 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 # NOTE: Cr 18080 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 eate a correctly 18090 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 formatted name 180a0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 for the database 180b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a connection to.. 180c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 180d0 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 added to the li 180e0 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 st managed by th 180f0 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre 18100 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. 18110 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a set db [obj 18120 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 18130 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 18140 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e Eagle. 18150 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 _Components.Priv 18160 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 ate.FormatOps Da 18170 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 tabaseObjectName 18180 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a$connection \..
18190 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
181a0 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65  Connection [obje
181b0 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
181c0 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive
181d0 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20  NextId]]....
181e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
181f0 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62  E: Add the datab
18200 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
18210 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
18220 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73  aller to the lis
18230 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
18240 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20   of those known
18250 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74  to the Eagle int
18260 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
18270 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74   #..      object
18280 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
18290 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70  NonPublic Interp
182a0 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e  reter.GetActive.
182b0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20  connections Add
182c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62  \..          $db 182d0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20$connection..
182e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
182f0 20 72 65 6d 6f 76 65 44 62 54 72 61 6e 73 61 63   removeDbTransac
18300 74 69 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74 69  tion { transacti
18310 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  on } {..      #.
18320 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
18330 65 6d 6f 76 65 20 74 68 65 20 64 61 74 61 62 61  emove the databa
18340 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 70  se transaction p
18350 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
18360 61 6c 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d 0a  aller from the..
18370 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69        #       li
18380 73 74 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77  st of those know
18390 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69  n to the Eagle i
183a0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
183b0 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65     #..      obje
183c0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
183d0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65   +NonPublic Inte
183e0 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
183f0 65 2e 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 5c  e.transactions \
18400 0d 0a 20 20 20 20 20 20 20 20 20 20 52 65 6d 6f  ..          Remo
18410 76 65 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d  ve $transaction. 18420 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18430 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f 6d 44 roc getRowsFromD 18440 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74 61 54 ataTable { dataT 18450 61 62 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c 62 able {valueCallb 18460 61 63 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ack ""} } {.. 18470 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 set rows [lis 18480 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f t].. set co 18490 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20 unt [$dataTable
184a0 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a  Columns.Count]..
184b0 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
184c0 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65   index 0} {$inde 184d0 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 x <$count} {inc
184e0 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20  r index} {..
184f0 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75      set dataColu
18500 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d  mn [$dataTable - 18510 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 alias Columns.ge 18520 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a t_Item$index]..
18530 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
18540 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61  s($index) [$data
18550 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d  Column ColumnNam
18560 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  e]..      }....
18570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18580 4e 4f 54 45 3a 20 53 65 74 75 70 20 73 6f 6d 65  NOTE: Setup some
18590 20 54 63 6c 20 72 65 74 75 72 6e 20 63 6f 64 65   Tcl return code
185a0 20 63 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 20   constants...
185b0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
185c0 4f 6b 20 30 3b 20 73 65 74 20 45 72 72 6f 72 20  Ok 0; set Error
185d0 31 3b 20 73 65 74 20 52 65 74 75 72 6e 20 32 3b  1; set Return 2;
185e0 20 73 65 74 20 42 72 65 61 6b 20 33 3b 20 73 65   set Break 3; se
185f0 74 20 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a  t Continue 4....
18600 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
18610 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61  each -alias data
18620 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77  Row [set dataRow
18630 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f  s [$dataTable Ro 18640 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ws]] {.. 18650 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a set row [list].. 18660 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 .. for {s 18670 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e et index 0} {$in
18680 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69  dex < $count} {i 18690 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 ncr index} {.. 186a0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 186b0 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 e [$dataRow -cre
186c0 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49  ate -alias get_I
186d0 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20  tem $index].... 186e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 186f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c ring length$val
18700 75 65 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d  ueCallback] > 0}
18710 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18720 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
18730 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
18740 20 20 20 20 20 20 24 76 61 6c 75 65 43 61 6c 6c        $valueCall 18750 62 61 63 6b 20 24 64 61 74 61 54 61 62 6c 65 20 back$dataTable
18760 24 64 61 74 61 52 6f 77 20 24 69 6e 64 65 78 20  $dataRow$index
18770 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  $value.. 18780 20 20 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d 0d } newValue]. 18790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 187a0 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d f {$code == $Ok} 187b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 187c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 187d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 187e0 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 187f0 64 20 28 6e 65 77 3f 29 20 72 6f 77 20 76 61 6c d (new?) row val 18800 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue... 18810 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18820 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 lappend row 18830 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e [list$names($in 18840 64 65 78 29 20 24 6e 65 77 56 61 6c 75 65 5d 0d dex)$newValue].
18850 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
18860 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20  lseif {$code == 18870 24 45 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a$Error} then {..
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
18890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
188a0 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 28   NOTE: Use the (
188b0 6e 65 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 76  new?) NULL row v
188c0 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  alue...
188d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
188e0 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f        lappend ro
188f0 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24  w [list $names($
18900 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20  index)]..
18910 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24       } elseif {$18920 63 6f 64 65 20 3d 3d 20 24 52 65 74 75 72 6e 7d code ==$Return}
18930 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18940 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18950 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
18960 53 6b 69 70 20 72 65 6d 61 69 6e 69 6e 67 20 76  Skip remaining v
18970 61 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20 72  alues for this r
18980 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...
18990 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
189a0 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20      break..
189b0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif
189c0 7b 24 63 6f 64 65 20 3d 3d 20 24 42 72 65 61 6b  {$code ==$Break
189d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
189e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
189f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
18a00 20 53 6b 69 70 20 70 72 6f 63 65 73 73 69 6e 67   Skip processing
18a10 20 74 68 69 73 20 72 6f 77 20 76 61 6c 75 65 2e   this row value.
18a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18a30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  #..            }
18a40 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d   elseif {$code = 18a50 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65 =$Continue} the
18a60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
18a70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
18a80 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
18a90 64 65 66 61 75 6c 74 20 72 6f 77 20 76 61 6c 75  default row valu
18aa0 65 20 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20  e handling...
18ab0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
18ac0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
18ad0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
18ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
18af0 20 63 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65 0d   code $Continue. 18b00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 18b10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 if {$c
18b20 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65  ode == $Continue 18b30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18b40 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 18b50 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d g length$value]
18b60 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20   > 0 && \..
18b70 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a             ![obj
18b80 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65  ect invoke Conve
18b90 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c  rt IsDBNull $val 18ba0 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ue]} then {.. 18bb0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 18bc0 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 nd row [list$na
18bd0 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61  mes($index) [$va
18be0 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a  lue ToString]]..
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
18c00 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18c10 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20      lappend row
18c20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e  [list $names($in
18c30 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  dex)]..
18c40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
18c50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
18c60 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
18c70 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20  rows $row.. 18c80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 18c90 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d rn$rows..    }.
18ca0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d  ....    proc dum
18cb0 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62  pRowsFromDataTab
18cc0 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77  le { channel row
18cd0 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  s } {..      set
18ce0 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20   sequence 1....
18cf0 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77       foreach row
18d00 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20   $rows {.. 18d10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
18d20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
18d30 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
18d40 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31  r {$sequence > 1 18d50 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 ? "\n" : ""}] " 18d60 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 ---- ROW #"$seq
18d70 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20  uence :\n]....
18d80 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61        foreach pa
18d90 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20  ir $row {.. 18da0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 18db0 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 h$pair] >= 2} t
18dc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
18dd0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 18de0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 l [appendArgs \t 18df0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18e00 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 [list [linde 18e10 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 x$pair 0]] ": "
18e20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $18e30 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 pair 1]] \n].. 18e40 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 18e50 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 {[llength$pair
18e60 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 1} then {..
18e70 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
18e80 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 18e90 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 ndArgs \t \.. 18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 [li 18eb0 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
18ec0 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e   0]] ": <null>\n
18ed0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  "]..          }
18ee0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
18ef0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 18f00 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 el \t<empty>\n; 18f10 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f # NOTE: No data? 18f20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 18f30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 18f40 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 incr sequenc 18f50 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 e.. }.. 18f60 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 18f70 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e leanupDb { fileN 18f80 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ame {varName db} 18f90 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 18fa0 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a {qualify true}.. 18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18fc0 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 {delete tru 18fd0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 18fe0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 18ff0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 ttempt to force 19000 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 all pending "gar 19010 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f bage" objects to 19020 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a be collected,.. 19030 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 19040 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 cluding SQLite s 19050 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 tatements and ba 19060 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 ckup objects; th 19070 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d is should allow. 19080 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 19090 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 he underlying da 190a0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 tabase file to b 190b0 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 e deleted... 190c0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
190d0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d  collect} then {.
190e0 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74  .        collect
190f0 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f  Garbage $::test_ 19100 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 19110 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 19120 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 19130 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 19140 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 19150 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 19160 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 19170 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 19180 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 19190 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 191a0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 previously opene 191b0 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 d via the.. 191c0 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 # [setupD 191d0 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f b] procedure sho 191e0 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 uld be stored th 191f0 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. 19200 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
19210 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
19220 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
19230 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e  E: Close the con
19240 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64  nection to the d
19250 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68  atabase now.  Th
19260 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20  is should allow
19270 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  us..      #
19280 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20    to delete the
19290 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
192a0 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ase file...
192b0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
192c0 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26  nfo exists db] &
192d0 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c  & [catch {sql cl
192e0 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d  ose $db} error]} 192f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 19300 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19310 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 19320 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 ailed to close t 19330 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 he database, rep 19340 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 19350 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 19360 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
19370 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
19380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
19390 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
193a0 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74  led to close dat
193b0 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c  abase \"" $db "\ 193c0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 ", error: " \.. 193d0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 193e0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
193f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
19400 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
19410 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20  rst, see if our
19420 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
19430 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
19440 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
19450 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
19460 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
19470 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 19480 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 19490 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 194a0 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f the full path to 194b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 the database fi 194c0 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f le name. For no 194d0 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 w, all test.. 194e0 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 194f0 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 ase files are st 19500 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 ored in the temp 19510 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e orary directory. 19520 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19530 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
19540 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the 19550 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 19560 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 19570 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas 19580 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil 19590 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
195a0 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
195b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
195c0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
195d0 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78  he file still ex
195e0 69 73 74 73 3b 20 69 6e 69 74 69 61 6c 6c 79 2c  ists; initially,
195f0 20 61 73 73 75 6d 65 20 61 6c 6c 20 66 69 6c 65   assume all file
19600 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 23 20  s will..      #
19610 20 20 20 20 20 20 62 65 20 64 65 6c 65 74 65 64        be deleted
19620 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 69   successfully, i
19630 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  f necessary...
19640 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
19650 20 73 75 63 63 65 73 73 20 74 72 75 65 0d 0a 0d   success true...
19660 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 19670 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 emory &&$delete
19680 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73   && [file exists
19690 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 196a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 196b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 196c0 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 Skip deleting da 196d0 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 tabase files if 196e0 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 somebody sets th 196f0 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 e global.. 19700 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 19710 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 le to prevent it 19720 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19730 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 19740 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 exists ::no(cle 19750 61 6e 75 70 44 62 46 69 6c 65 73 29 5d 7d 20 74 anupDbFiles)]} t 19760 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19770 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 19780 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 19790 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 197a0 20 57 41 4c 20 66 69 6c 65 2c 20 69 66 20 61 6e WAL file, if an 197b0 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 y, now... 197c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 197d0 73 65 74 20 77 61 6c 46 69 6c 65 4e 61 6d 65 20 set walFileName 197e0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c [appendArgs$fil
197f0 65 4e 61 6d 65 20 2d 77 61 6c 5d 0d 0a 0d 0a 20  eName -wal]....
19800 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
19810 6c 65 20 65 78 69 73 74 73 20 24 77 61 6c 46 69  le exists $walFi 19820 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 19830 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 19840 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 19850 54 45 3a 20 49 66 20 74 68 65 72 65 20 69 73 20 TE: If there is 19860 61 20 57 41 4c 20 66 69 6c 65 2c 20 69 74 20 73 a WAL file, it s 19870 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 20 62 79 hould be zero by 19880 74 65 73 20 61 74 20 74 68 69 73 0d 0a 20 20 20 tes at this.. 19890 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 198a0 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 point... 198b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 198c0 20 20 20 20 69 66 20 7b 5b 73 65 74 20 73 69 7a if {[set siz 198d0 65 20 5b 66 69 6c 65 20 73 69 7a 65 20 24 77 61 e [file size$wa
198e0 6c 46 69 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20 30  lFileName]] == 0
198f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19900 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
19910 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
19920 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
19930 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
19940 20 57 41 4c 20 66 69 6c 65 2c 20 72 65 70 6f 72   WAL file, repor
19950 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
19960 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19970 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
19980 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $19990 77 61 6c 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 walFileName} err 199a0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 199c0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
199d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
199e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
199f0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
19a00 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
19a10 65 6c 65 74 65 20 57 41 4c 20 66 69 6c 65 20 5c  elete WAL file \
19a20 22 22 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20  "" $walFileName 19a30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19a40 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin 19a50 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error 19a60 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
19a70 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n]....
19a80 20 20 20 20 20 20 20 73 65 74 20 73 75 63 63 65         set succe
19a90 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ss false..
19aa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19ab0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
19ad0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 19ae0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 19af0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19b00 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 19b10 49 4e 47 3a 20 57 41 4c 20 66 69 6c 65 20 5c 22 ING: WAL file \" 19b20 22 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20 22 "$walFileName "
19b30 5c 22 20 69 73 20 22 20 24 73 69 7a 65 20 5c 0d  \" is " $size \. 19b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19b50 20 20 20 22 20 62 79 74 65 73 20 69 6e 20 73 69 " bytes in si 19b60 7a 65 2c 20 73 6b 69 70 70 69 6e 67 20 61 6c 6c ze, skipping all 19b70 20 66 69 6c 65 20 64 65 6c 65 74 69 6f 6e 73 2e file deletions. 19b80 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ..\n"].... 19b90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 return 1 19ba0 3b 20 23 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 ; # error.. 19bb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19bc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 19bd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19be0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 19bf0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 19c00 73 74 20 53 48 4d 20 66 69 6c 65 2c 20 69 66 20 st SHM file, if 19c10 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 any, now... 19c20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 19c30 20 20 73 65 74 20 73 68 6d 46 69 6c 65 4e 61 6d set shmFileNam 19c40 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 e [appendArgs$f
19c50 69 6c 65 4e 61 6d 65 20 2d 73 68 6d 5d 0d 0a 0d  ileName -shm]...
19c60 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
19c70 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 68 6d  file exists $shm 19c80 46 69 6c 65 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a FileName] && \.. 19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 [c 19ca0 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 19cb0 65 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65 7d 20 e$shmFileName}
19cc0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
19ce0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
19cf0 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61  E: We somehow fa
19d00 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
19d10 68 65 20 53 48 4d 20 66 69 6c 65 2c 20 72 65 70  he SHM file, rep
19d20 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
19d30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19d40 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 19d50 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 19d60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 19d70 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 19d80 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 19d90 74 6f 20 64 65 6c 65 74 65 20 53 48 4d 20 66 69 to delete SHM fi 19da0 6c 65 20 5c 22 22 20 24 73 68 6d 46 69 6c 65 4e le \""$shmFileN
19db0 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
19dc0 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
19dd0 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72  g cleanup, error
19de0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 19df0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 19e00 20 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 set success f 19e10 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 19e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 19e40 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 19e50 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 elete the test d 19e60 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 atabase file now 19e70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 19e80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 19e90 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 19ea0 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 e$fileName} err
19eb0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
19ec0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19ed0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19ee0 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
19ef0 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
19f00 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
19f10 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
19f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
19f30 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 19f40 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 19f50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19f60 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 19f70 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 19f80 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file 19f90 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
19fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19fb0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
19fc0 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
19fd0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 19fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 19ff0 74 20 73 75 63 63 65 73 73 20 66 61 6c 73 65 0d t success false. 1a000 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1a010 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1a020 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1a030 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 1a040 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 how that we skip 1a050 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 ped deleting the 1a060 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... 1a070 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 #.. t 1a080 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1a090 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1a0a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a0b0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1a0c0 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
1a0d0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
1a0e0 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 1a0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1a100 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 \" during cleanu 1a110 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d p\n"].. } 1a120 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1a130 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 1a140 7b 24 73 75 63 63 65 73 73 20 3f 20 30 20 3a 20 {$success ? 0 :
1a150 31 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  1}]..    }.....
1a160 20 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69     proc saveEnvi
1a170 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
1a180 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d   { names {varNam
1a190 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
1a1a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1a1b0 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c  : For each name,
1a1c0 20 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65   does the live e
1a1d0 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
1a1e0 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a  ble exist?  If..
1a1f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f        #       so
1a200 2c 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65  , save the value
1a210 20 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65   for later; othe
1a220 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65  rwise, make sure
1a230 20 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20   the saved..
1a240 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20    #       value
1a250 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65  does not exist e
1a260 69 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65  ither.  The live
1a270 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
1a280 69 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20  iables..      #
1a290 20 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68        ARE NOT ch
1a2a0 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72  anged by this pr
1a2b0 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20  ocedure...
1a2c0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
1a2d0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72  ring length $var 1a2e0 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e Name] == 0} then 1a2f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1a300 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 varName savedEnv 1a310 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1a320 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
1a330 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a  ame savedEnv....
1a340 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
1a350 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20  me $names {.. 1a360 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1a370 78 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d xists ::env($nam
1a380 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
1a390 20 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64         set saved
1a3a0 45 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e  Env($name)$::en
1a3b0 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  v($name).. 1a3c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1a3d0 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 1a3e0 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 omplain savedEnv 1a3f0 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 ($name)..
1a400 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
1a410 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1a420 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65  NOTE: This is se
1a430 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66  lf-cleaning.  If
1a440 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f   no saved enviro
1a450 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20  nment variables
1a460 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  now..      #
1a470 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65     exist, remove
1a480 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20   the array...
1a490 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1a4a0 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65  [array size save
1a4b0 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  dEnv] == 0} then
1a4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65   {..        unse
1a4d0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61  t -nocomplain sa
1a4e0 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d  vedEnv..      }.
1a4f0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1a500 72 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72  roc restoreEnvir
1a510 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1a520 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65  { names {varName
1a530 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
1a540 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1a550 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20   For each name,
1a560 64 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 65  does the saved e
1a570 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
1a580 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a  ble exist?  If..
1a590 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f        #       so
1a5a0 2c 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 61  , restore the sa
1a5b0 76 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e  ved value and un
1a5c0 73 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73  set it; otherwis
1a5d0 65 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20  e, make sure..
1a5e0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1a5f0 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  live environment
1a600 20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e   variable does n
1a610 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 20  ot exist either
1a620 28 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20  (i.e. it..
1a630 23 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20  #       was not
1a640 73 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74  set to begin wit
1a650 68 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20  h).  Both saved
1a660 61 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e  and live environ
1a670 6d 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  ment..      #
1a680 20 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 52      variables AR
1a690 45 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  E changed by thi
1a6a0 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20  s procedure...
1a6b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1a6c0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
1a6d0 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20  $varName] == 0} 1a6e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a6f0 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 set varName save 1a700 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d dEnv.. }... 1a710 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
1a720 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76  varName savedEnv
1a730 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ....      foreac
1a740 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d  h name $names {. 1a750 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 1a760 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 45 fo exists savedE 1a770 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e nv($name)]} then
1a780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
1a790 74 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24  t ::env($name)$
1a7a0 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d  savedEnv($name). 1a7b0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 . unset 1a7c0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 -nocomplain sav 1a7d0 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 edEnv($name)..
1a7e0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1a7f0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset
1a800 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e  -nocomplain ::en
1a810 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  v($name).. 1a820 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1a830 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1a840 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 NOTE: This is s 1a850 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 elf-cleaning. I 1a860 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 f no saved envir 1a870 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 onment variables 1a880 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 now.. # 1a890 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 exist, remov 1a8a0 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 e the array... 1a8b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1a8c0 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 {[array size sav 1a8d0 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 edEnv] == 0} the 1a8e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 n {.. uns 1a8f0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 et -nocomplain s 1a900 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d avedEnv.. } 1a910 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1a920 70 72 6f 63 20 73 61 76 65 45 61 67 6c 65 53 68 proc saveEagleSh 1a930 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b ellEnvironment { 1a940 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 1a950 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 1 savedEnv save 1a960 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 dEnv.... sa 1a970 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 1a980 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 4e 6f 4d iables [list NoM 1a990 75 74 65 78 65 73 5d 20 73 61 76 65 64 45 6e 76 utexes] savedEnv 1a9a0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1a9b0 70 72 6f 63 20 72 65 73 74 6f 72 65 45 61 67 6c proc restoreEagl 1a9c0 65 53 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e eShellEnvironmen 1a9d0 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 1a9e0 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 1a9f0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1aa00 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 1aa10 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 1aa20 73 74 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 st NoMutexes] sa 1aa30 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 1aa40 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 4d .. proc saveM 1aa50 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d daConfigEnvironm 1aa60 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 1aa70 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 1aa80 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 1aa90 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 saveEnvironme 1aaa0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 1aab0 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 t COMPLUS_MDA] s 1aac0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 1aad0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 ... proc rest 1aae0 6f 72 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69 oreMdaConfigEnvi 1aaf0 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 1ab00 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 1ab10 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 1ab20 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e . restoreEn 1ab30 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 1ab40 65 73 20 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 es [list COMPLUS 1ab50 5f 4d 44 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a _MDA] savedEnv.. 1ab60 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1ab70 6f 63 20 73 61 76 65 47 65 74 53 65 74 74 69 6e oc saveGetSettin 1ab80 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e gValueEnvironmen 1ab90 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 1aba0 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 1abb0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1abc0 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 saveEnvironment 1abd0 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 Variables [list 1abe0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f 5f \.. No_ 1abf0 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 Expand No_SQLite 1ac00 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 20 GetSettingValue 1ac10 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 No_SQLiteXmlConf 1ac20 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 igFile] \.. 1ac30 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 1ac40 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1ac50 63 20 72 65 73 74 6f 72 65 47 65 74 53 65 74 74 c restoreGetSett 1ac60 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d ingValueEnvironm 1ac70 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 1ac80 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 1ac90 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 1aca0 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f restoreEnviro 1acb0 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 1acc0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1acd0 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 No_Expand No_S 1ace0 51 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 QLiteGetSettingV 1acf0 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d alue No_SQLiteXm 1ad00 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a lConfigFile] \.. 1ad10 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 savedE 1ad20 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nv.. }..... 1ad30 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c 69 74 proc saveSQLit 1ad40 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 eConnectionEnvir 1ad50 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 1ad60 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 1ad70 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 1ad80 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f saveEnviro 1ad90 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 1ada0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1adb0 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 DefaultFlags_S 1adc0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 1add0 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 No_SQLiteConnect 1ade0 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d ionNewParser] \. 1adf0 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 . saved 1ae00 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 1ae10 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 proc restoreS 1ae20 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 QLiteConnectionE 1ae30 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d nvironment {} {. 1ae40 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 . upvar 1 s 1ae50 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 avedEnv savedEnv 1ae60 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 .... restor 1ae70 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 eEnvironmentVari 1ae80 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 ables [list \.. 1ae90 20 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 Default 1aea0 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e Flags_SQLiteConn 1aeb0 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 ection No_SQLite 1aec0 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 ConnectionNewPar 1aed0 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ser] \.. 1aee0 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 savedEnv.. 1aef0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 1af00 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 aveSQLiteConvert 1af10 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b Environment {} { 1af20 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 1af30 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e savedEnv savedEn 1af40 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 v.... saveE 1af50 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1af60 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 1af70 20 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 Use_SQLit 1af80 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 eConvert_Default 1af90 44 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 DbType Use_SQLit 1afa0 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 eConvert_Default 1afb0 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 TypeName] \.. 1afc0 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d savedEnv. 1afd0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1afe0 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 roc restoreSQLit 1aff0 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d eConvertEnvironm 1b000 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 1b010 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 1b020 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 1b030 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f restoreEnviro 1b040 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 1b050 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1b060 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 Use_SQLiteConv 1b070 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70 ert_DefaultDbTyp 1b080 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 e Use_SQLiteConv 1b090 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e ert_DefaultTypeN 1b0a0 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ame] \.. 1b0b0 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 savedEnv.. 1b0c0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 1b0d0 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 etupDbInterruptC 1b0e0 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 allback { channe 1b0f0 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 l log } {.. 1b100 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1b110 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70  "---- setting up
1b120 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72   debugger interr
1b130 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20  upt callback...
1b140 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  "....      if {[
1b150 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1b160 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74   saveEnvironment
1b170 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20  Variables [list
1b180 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 71  \..            q
1b190 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65  uietFindInterpre
1b1a0 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65  terTestPath quie
1b1b0 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
1b1c0 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20  rTestPath]....
1b1d0 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20        try {..
1b1e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b1f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 72 65 76      # NOTE: Prev
1b200 65 6e 74 20 74 68 65 20 76 65 6e 64 6f 72 20 73  ent the vendor s
1b210 63 72 69 70 74 20 66 72 6f 6d 20 62 65 69 6e 67  cript from being
1b220 20 6e 6f 69 73 79 20 77 68 65 6e 20 63 72 65 61   noisy when crea
1b230 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..
1b240 23 20 20 20 20 20 20 20 74 68 65 20 69 73 6f 6c  #       the isol
1b250 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72  ated interpreter
1b260 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1b270 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
1b280 65 6e 76 28 71 75 69 65 74 46 69 6e 64 49 6e 74  env(quietFindInt
1b290 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68  erpreterTestPath
1b2a0 29 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ) 1..          s
1b2b0 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 53 65  et ::env(quietSe
1b2c0 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65  tupInterpreterTe
1b2d0 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20  stPath) 1....
1b2e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b2f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65      # NOTE: Make
1b300 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 74   sure the script
1b310 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 68   debugger and th
1b320 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
1b330 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20  preter..
1b340 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 65    #       are se
1b350 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f  tup and ready fo
1b360 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  r use...
1b370 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64    #..          d
1b380 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 20  ebug setup true
1b390 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
1b3a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1b3b0 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20   NOTE: Load the
1b3c0 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 67  necessary packag
1b3d0 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c  es into the isol
1b3e0 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72  ated interpreter
1b3f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1b400 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20            debug
1b410 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20  eval {..
1b420 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
1b430 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  ire Eagle..
1b440 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
1b450 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62  equire Eagle.Lib
1b460 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rary..
1b470 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
1b480 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20  e Eagle.Test..
1b490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1b4a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b4b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79      # NOTE: Copy
1b4c0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 76   the necessary v
1b4d0 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68  ariables into th
1b4e0 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
1b4f0 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
1b500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1b510 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73  debug invoke 0 s
1b520 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  et ::test_channe
1b530 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f  l $channel; # NO 1b540 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e TE: For [tputs]. 1b550 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 1b560 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a g invoke 0 set : 1b570 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 :test_log$log;
1b580 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f  # NOTE: For [tlo
1b590 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g].....
1b5a0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1b5b0 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68  NOTE: Install th
1b5c0 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70  e callback scrip
1b5d0 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65  t to be evaluate
1b5e0 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65  d in the isolate
1b5f0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  d..          #
1b600 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 72       interpreter
1b610 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72   when this inter
1b620 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 72  preter is interr
1b630 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 0d  upted by script.
1b640 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1b650 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c     cancellation,
1b660 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...
1b670 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65   #..          de
1b680 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70  bug callback app
1b690 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b  ly {{sender e} {
1b6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1b6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1b6c0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
1b6d0 69 73 20 64 65 62 75 67 67 65 72 20 63 61 6c 6c  is debugger call
1b6e0 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74  back is one that
1b6f0 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d   we care about..
1b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1b710 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
1b720 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 20 5b  interruptTypes [
1b730 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72  split [$e Interr 1b740 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a uptType] ", "].. 1b750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1b760 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 {"Canceled" in 1b770 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 20$interruptTypes
1b780 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
1b790 20 20 20 20 20 20 22 55 6e 77 6f 75 6e 64 22 20        "Unwound"
1b7a0 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 70  in $interruptTyp 1b7b0 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 es} then {.. 1b7c0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1b7d0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1b7e0 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 E: Make sure the 1b7f0 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman 1b800 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 d is available. 1b810 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 Since.. 1b820 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 1b830 69 73 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 is is an isolate 1b840 64 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 63 d interpreter, c 1b850 68 65 63 6b 20 66 6f 72 20 69 74 20 74 68 65 20 heck for it the 1b860 68 61 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20 hard.. 1b870 20 20 20 20 23 20 20 20 20 20 20 20 77 61 79 2e # way. 1b880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b890 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1b8a0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 if {[llength [i 1b8b0 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a nfo commands obj 1b8c0 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ect]] > 0} then 1b8d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b8e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1b8f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 # NOTE: It 1b900 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c erate through al 1b910 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 l database conne 1b920 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 ctions known to 1b930 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the.. 1b940 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 72 # par 1b950 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e ent interpreter. 1b960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b970 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1b980 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 1b990 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 ach -alias pair 1b9a0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - 1b9b0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1b9c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b9d0 20 20 20 20 20 20 20 20 24 65 20 49 6e 74 65 72$e Inter
1b9e0 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f  preter.connectio
1b9f0 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ns] {..
1ba00 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1ba20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
1ba30 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20   cancel any SQL
1ba40 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72  queries in progr
1ba50 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ess on..
1ba60 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1ba70 20 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20    this database
1ba80 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1baa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bab0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1bac0 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e 63  $pair Value.Canc 1bad0 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e el} error]} then 1bae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1baf0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1bb00 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1bb10 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a  ppendArgs \n \..
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb30 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1bb40 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1bb50 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f   cancel query fo
1bb60 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  r " \..
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1bb80 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b  connection \"" [
1bb90 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20  $pair Key] "\", 1bba0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d error: " \n\t \. 1bbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1bbc0 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20$error
1bbd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
1bbe0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1bbf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1bc00 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1bc10 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1bc20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1bc30 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1bc40 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 ndArgs \n \.. 1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1bc60 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1bc70 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e cannot cancel an 1bc80 79 20 71 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a y queries: " \.. 1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1bca0 20 20 20 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 "the \"objec 1bcb0 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e t\" command is n 1bcc0 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d ot available\n"] 1bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bce0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a .. }}.. 1bd00 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c } finall 1bd10 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 y {.. r 1bd20 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 1bd30 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 1bd40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bd50 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 quietFindInter 1bd60 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20 71 preterTestPath q 1bd70 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 uietSetupInterpr 1bd80 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 eterTestPath].. 1bd90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1bda0 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 } error] == 0} t 1bdb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 1bdc0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 ddConstraint int 1bdd0 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 erruptCallback.s 1bde0 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 qlite3.... 1bdf0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1be00 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20   yes\n..      }
1be10 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1be20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1be30 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 appendArgs "no, 1be40 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
1be50 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1be60 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1be70 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c   proc cleanupFil
1be80 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f  e { fileName {co
1be90 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f 72  llect true} {for
1bea0 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  ce false} } {..
1beb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1bec0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
1bed0 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69   force all pendi
1bee0 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a  ng "garbage" obj
1bef0 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65  ects to be colle
1bf00 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20  cted,..      #
1bf10 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53       including S
1bf20 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  QLite statements
1bf30 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65   and backup obje
1bf40 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64  cts; this should
1bf50 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20   allow..      #
1bf60 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c        the underl
1bf70 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
1bf80 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  le to be deleted
1bf90 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1bfa0 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20    if {$collect} 1bfb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bfc0 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 collectGarbage$
1bfd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
1bfe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1bff0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1c000 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66  : Check if the f
1c010 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73  ile still exists
1c020 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1c030 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
1c040 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 1c050 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 1c060 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1c070 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 : Skip deleting 1c080 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73 6f test files if so 1c090 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the 1c0a0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0d global variable. 1c0b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1c0c0 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. 1c0d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1c0e0 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c if {$force |
1c0f0 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  | ![info exists
1c100 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65  ::no(cleanupFile
1c110 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1c120 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c130 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
1c140 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  pt to delete the
1c150 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d   test file now..
1c160 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c170 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74          if {[set
1c180 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69   code [catch {fi
1c190 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN 1c1a0 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 ame} error]]} th 1c1b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1c1c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1c1d0 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some 1c1e0 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de 1c1f0 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r 1c200 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 1c210 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c220 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1c230 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1c240 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1c250 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1c260 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1c270 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73 74  d to delete test
1c280 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 1c290 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 1c2a0 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin 1c2b0 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error 1c2c0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
1c2d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1c2e0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1c2f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1c300 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1c310 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
1c320 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
1c330 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
1c340 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c350 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d     set code 0...
1c360 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
1c370 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1c380 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1c3a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski 1c3b0 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 65 pped deleting te 1c3c0 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c st file \""$fil
1c3d0 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
1c3e0 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
1c3f0 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20  g cleanup\n"]..
1c400 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c410 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1c420 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1c430 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f  OTE: The file do
1c440 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75  es not exist, su
1c450 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20  ccess!..
1c460 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
1c470 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  ode 0..      }..
1c480 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $1c490 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a code.. }..... 1c4a0 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup 1c4b0 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 Memory { varName 1c4c0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 1c4d0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 {.. if {[h 1c4e0 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 1c4f0 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 ommand] && \.. 1c500 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 1c510 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
1c520 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1c530 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c540 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
1c550 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
1c560 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
1c570 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
1c580 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
1c590 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20       context of
1c5a0 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65  our caller.  The
1c5b0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
1c5c0 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20  andle for an..
1c5d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 41 44        #       AD
1c5e0 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e  O.NET connection
1c5f0 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75   previously retu
1c600 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f  rned by [getDbCo
1c610 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20  nnection]..
1c620 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
1c630 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72  d be stored ther
1c640 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1c650 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $1c660 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 varName connecti 1c670 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 on.... if 1c680 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1c690 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1c6a0 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 oke$connection
1c6b0 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20  ReleaseMemory..
1c6c0 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
1c6d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1c6e0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1c6f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c700 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1c710 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1c720 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1c730 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1c740 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1c750 74 6f 20 72 65 6c 65 61 73 65 20 64 61 74 61 62  to release datab
1c760 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f  ase memory, erro
1c770 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
1c780 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1c790 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1c7a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1c7b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1c7c0 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 1c7d0 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 [info commands d 1c7e0 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e ebug]] > 0} then 1c7f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 1c800 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1c810 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 1c820 69 73 74 20 64 65 62 75 67 20 70 75 72 67 65 5d ist debug purge] 1c830 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 1c840 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 lt]} then {.. 1c850 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1c860 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1c870 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1c880 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1c890 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1c8b0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1c8c0 65 64 20 74 6f 20 70 75 72 67 65 20 63 61 6c 6c ed to purge call 1c8d0 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 frame, error: " 1c8e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c8f0 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
1c900 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1c910 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
1c920 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1c930 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1c940 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
1c950 64 65 62 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a  debug cleanup]..
1c960 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
1c970 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1c980 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1c990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c9a0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1c9b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1c9c0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1c9d0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1c9e0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1c9f0 20 74 6f 20 63 6c 65 61 6e 75 70 20 69 6e 74 65   to cleanup inte
1ca00 72 70 72 65 74 65 72 2c 20 65 72 72 6f 72 3a 20  rpreter, error:
1ca10 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1ca20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 1ca30 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1ca40 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1ca50 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 1ca60 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1ca70 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 1ca80 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d debug collect]. 1ca90 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c . } resul 1caa0 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 t]} then {.. 1cab0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1cac0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1cad0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1cae0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1caf0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1cb00 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1cb10 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1cb20 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 d to collect gar 1cb30 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c bage, error: " \ 1cb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cb50 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
1cb60 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1cb70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1cb80 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1cb90 20 20 20 70 72 6f 63 20 73 65 74 75 70 4d 65 6d     proc setupMem
1cba0 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 76 61  oryCounters { va
1cbb0 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20  rName } {..
1cbc0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1cbd0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1cbe0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1cbf0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 1cc00 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 counter.... 1cc10 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 set counter( 1cc20 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 1) [object creat 1cc30 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 1cc40 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1cc50 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f iagnostics.Perfo 1cc60 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 rmanceCounter Pr 1cc70 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 ocess \.. 1cc80 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 "Working Se 1cc90 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d t" [file rootnam 1cca0 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a e [file tail$::
1ccb0 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20  bin_file]]]....
1ccc0 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74         set count
1ccd0 65 72 28 32 29 20 5b 6f 62 6a 65 63 74 20 63 72  er(2) [object cr
1cce0 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20  eate -alias \..
1ccf0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1cd00 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65  m.Diagnostics.Pe
1cd10 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72  rformanceCounter
1cd20 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20   Process \..
1cd30 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67          "Working
1cd40 20 53 65 74 20 50 65 61 6b 22 20 5b 66 69 6c 65   Set Peak" [file
1cd50 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file
1cd60 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65  tail $::bin_file 1cd70 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ]]].... s 1cd80 65 74 20 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f et counter(3) [o 1cd90 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c bject create -al 1cda0 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 1cdb0 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f System.Diagno 1cdc0 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 stics.Performanc 1cdd0 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73 eCounter Process 1cde0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cdf0 22 50 72 69 76 61 74 65 20 42 79 74 65 73 22 20 "Private Bytes" 1ce00 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b [file rootname [ 1ce10 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e file tail$::bin
1ce20 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20  _file]]]..
1ce30 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
1ce40 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
1ce50 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 4d      proc reportM
1ce60 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20  emoryCounters {
1ce70 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20  channel varName
1ce80 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20  prefix } {..
1ce90 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1cea0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
1ceb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1cec0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 1ced0 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 e counter.... 1cee0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1cef0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1cf00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1cf10 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22  ---- " $prefix " 1cf20 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a counter \"" \.. 1cf30 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 1cf40 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e ect invoke$coun
1cf50 74 65 72 28 31 29 20 43 6f 75 6e 74 65 72 4e 61  ter(1) CounterNa
1cf60 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73  me] "\" value is
1cf70 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1cf80 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
1cf90 20 24 63 6f 75 6e 74 65 72 28 31 29 20 52 61 77   $counter(1) Raw 1cfa0 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 Value] \n].... 1cfb0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1cfc0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1cfd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1cfe0 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20  "---- " $prefix 1cff0 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d " counter \"" \. 1d000 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 . [ob 1d010 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 ject invoke$cou
1d020 6e 74 65 72 28 32 29 20 43 6f 75 6e 74 65 72 4e  nter(2) CounterN
1d030 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69  ame] "\" value i
1d040 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  s " \..
1d050 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b     [object invok
1d060 65 20 24 63 6f 75 6e 74 65 72 28 32 29 20 52 61  e $counter(2) Ra 1d070 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 wValue] \n].... 1d080 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1d090 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1d0a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1d0b0 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78   "---- " $prefix 1d0c0 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c " counter \"" \ 1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f .. [o 1d0e0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
1d0f0 75 6e 74 65 72 28 33 29 20 43 6f 75 6e 74 65 72  unter(3) Counter
1d100 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20  Name] "\" value
1d110 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  is " \..
1d120 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f      [object invo
1d130 6b 65 20 24 63 6f 75 6e 74 65 72 28 33 29 20 52  ke $counter(3) R 1d140 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 awValue] \n].. 1d150 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1d160 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 . proc collec 1d170 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e tGarbage { chann 1d180 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 el {milliseconds 1d190 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 1000} {quiet tr 1d1a0 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ue} } {.. i 1d1b0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1d1c0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 1d1d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 1d1e0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1d1f0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1d200 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 1d210 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 emory false.. 1d220 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 1d230 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1d240 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1d250 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1d260 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1d270 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1d280 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1d290 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f "---- memo 1d2a0 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the 1d2b0 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c CLR before coll 1d2c0 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 ection... " \.. 1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1d2e0 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e  result " bytes\n
1d2f0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
1d300 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
1d310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1d320 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1d330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1d340 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1d350 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1d360 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1d370 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1d380 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d  d to get CLR mem
1d390 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72  ory usage, error
1d3a0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
1d3b0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 1d3c0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1d3d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1d3e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1d3f0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 1d400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d430 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 1d440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1d450 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 NOTE: Repeatedly 1d460 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c attempt to coll 1d470 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 ect garbage unti 1d480 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e l the allotted n 1d490 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 umber.. # 1d4a0 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 of millisec 1d4b0 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 onds has elapsed 1d4c0 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 . Always attemp 1d4d0 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 t to collect gar 1d4e0 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 bage.. # 1d4f0 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 at least onc 1d500 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 1d510 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1d520 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1d530 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d540 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f set start [clo 1d550 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 ck seconds].. 1d560 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 set stop [e 1d570 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 xpr {$start + ($1d580 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 milliseconds / 1 1d590 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 000)}].... 1d5a0 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 do {.. 1d5b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1d5c0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1d5d0 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 o force a full g 1d5e0 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f arbage collectio 1d5f0 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 n now. Report a 1d600 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ny.. # 1d610 20 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 error that 1d620 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 is encountered 1d630 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 if we fail... 1d640 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1d650 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1d660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 1d670 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 1d680 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 etTotalMemory tr 1d690 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } 1d6a0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1d6c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1d6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1d6e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1d6f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1d710 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1d720 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 iled full garbag 1d730 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 e collection, er 1d740 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 1d750 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 1d760 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
1d770 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1d780 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d790 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c       set now [cl
1d7a0 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20  ock seconds]..
1d7b0 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24        } while {$1d7c0 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 start <=$now &&
1d7d0 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a   $now <$stop}..
1d7e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d7f0 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
1d800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d830 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....
1d840 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1d850 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1d860 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1d870 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1d880 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1d890 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54  t invoke GC GetT
1d8a0 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65  otalMemory false
1d8b0 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
1d8c0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
1d8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1d8e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1d8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1d900 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1d910 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1d920 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1d930 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
1d940 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 20  y the CLR after
1d950 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20  collection... "
1d960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d970 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74     $result " byt 1d980 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 1d990 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 1d9a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1d9b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1d9c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1d9d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1d9e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1da00 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1da10 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 ailed to get CLR 1da20 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 memory usage, e 1da30 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. 1da40 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 1da50 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1da60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1da70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1da80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1da90 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65   getSQLiteHandle
1daa0 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c  Counts { channel
1dab0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
1dac0 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
1dad0 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
1dae0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
1daf0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
1db00 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  d] && \..
1db10 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65     [haveSQLiteDe
1db20 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55  fineConstant COU
1db30 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e  NT_HANDLE]} then
1db40 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1db50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
1db60 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c  dd each critical
1db70 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f   handle count to
1db80 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c   the resulting l
1db90 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ist...        #.
1dba0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
1dbb0 20 6e 61 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20   name [list \..
1dbc0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
1dbd0 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65  ctionCount state
1dbe0 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70  mentCount backup
1dbf0 43 6f 75 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 5d  Count blobCount]
1dc00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1dc10 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1dc20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1dc30 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1dc40 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1dc50 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1dc60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65  m.Data.SQLite.De
1dc70 62 75 67 44 61 74 61 20 24 6e 61 6d 65 0d 0a 20  bugData $name.. 1dc80 20 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 } value 1dc90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1dca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1dcb0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1dcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1dcd0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1dce0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1dd00 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 ---- critical ha 1dd10 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 ndle count \""$
1dd20 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76  name "\" is " $v 1dd30 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 alue \n].. 1dd40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1dd50 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 lappend r 1dd60 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 esult$value..
1dd70 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1dd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1dd90 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1dda0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ddb0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1ddc0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dde0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1ddf0 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 72  failed to get cr
1de00 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
1de10 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  unt \"" \..
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61               $na 1de30 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 me "\", error: " 1de40 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d \n\t$value \n]
1de50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1de60 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1de70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1de80 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74   elseif {!$quiet 1de90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1dea0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1deb0 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 OTE: The actual 1dec0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 handle counts ar 1ded0 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b e not available; 1dee0 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 therefore, just 1def0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1df00 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 return an empt 1df10 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 y list... 1df20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 1df30 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1df40 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
1df50 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61   counts unavaila
1df60 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d  ble\n"..      }.
1df70 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
1df80 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 1df90 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 ... proc shut 1dfa0 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 downSQLite { cha 1dfb0 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 nnel {force fals 1dfc0 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d e} {quiet false} 1dfd0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 1dfe0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 1dff0 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 e sure that SQLi 1e000 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 1e010 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 is completely sh 1e020 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 utdown. This.. 1e030 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 1e040 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 used by tests th 1e050 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 at change config 1e060 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 uration options 1e070 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 and/or those.. 1e080 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 1e090 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 need to make su 1e0a0 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e re logging is in 1e0b0 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 itialized (i.e. 1e0c0 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 just in case.. 1e0d0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1e0e0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1e0f0 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 ary was initiali 1e100 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 zed in the proce 1e110 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 ss prior to.. 1e120 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 1e130 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 QLiteLog class b 1e140 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 eing able to set 1e150 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 up its logging c 1e160 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 allback)... 1e170 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c # Normall 1e180 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f y, this should o 1e190 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 1e1a0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 1e1b0 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 aded and.. 1e1c0 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f # ready fo 1e1d0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 1e1e0 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 1e1f0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f #.. if {$fo
1e200 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65  rce || [isSQLite
1e210 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
1e220 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1e230 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61 6b     # BUGFIX: Mak
1e240 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79 20  e sure that any
1e250 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61 63  "leaked" transac
1e260 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e  tions and/or con
1e270 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
1e280 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65 20    #         are
1e290 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f 72  cleaned up befor
1e2a0 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61  e calling the na
1e2b0 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75  tive shutdown fu
1e2c0 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...
1e2d0 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
1e2e0 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ach transaction
1e2f0 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 6f  [info transactio
1e300 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ns] {..
1e310 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
1e320 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ch \..
1e330 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 23      System#Data#
1e340 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72 61  SQLite#SQLiteTra
1e350 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e  nsaction#* $tran 1e360 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b saction]} then { 1e370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1e380 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1e390 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74 72 sql tr 1e3a0 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 ansaction rollba 1e3b0 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d ck$transaction.
1e3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1e3d0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
1e3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e3f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1e400 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e410 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1e420 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1e430 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1e440 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
1e450 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b 65  olled back leake
1e460 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22  d transaction \"
1e470 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1e480 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61           $transa 1e490 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 ction \"\n].. 1e4a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1e4b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1e4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e4d0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1e4e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1e4f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1e500 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1e510 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1e520 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1e530 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1e540 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 o rollback leake 1e550 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 d transaction \" 1e560 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1e570 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61$transa
1e580 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72  ction "\", error
1e590 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1e5a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 1e5b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e5c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e5d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1e5e0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d 1e5f0 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 b [info connecti 1e600 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. 1e610 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 1e620 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 tch \.. 1e630 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 System#Data 1e640 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f #SQLite#SQLiteCo 1e650 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d nnection#*$db]}
1e660 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e670 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1e680 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20  {sql close $db} 1e690 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1e6a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e6b0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1e6c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1e6d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1e6e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1e6f0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1e700 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1e710 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 61 closed leaked da 1e720 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 5c tabase \""$db \
1e730 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
1e740 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1e750 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1e760 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1e770 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e790 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1e7a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e7c0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1e7d0 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
1e7e0 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65   leaked database
1e7f0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
1e800 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db 1e810 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 1e820 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1e840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1e850 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1e860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1e870 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
1e880 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c  GFIX: Before cal
1e890 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ling the native
1e8a0 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f  shutdown functio
1e8b0 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74  n, make sure bot
1e8c0 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  h..        #
1e8d0 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 47       of the PRAG
1e8e0 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63  MA related direc
1e8f0 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66  tory names are f
1e900 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  reed...        #
1e910 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
1e920 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
1e930 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75  ies $channel tru 1e940 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 e.... if 1e950 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1e960 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1e970 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1e980 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1e990 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1e9a0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1e9b0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 1e9c0 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 ite3_shutdown.. 1e9d0 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1e9e0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1e9f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1ea00 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1ea10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1ea20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1ea30 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ea40 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 1ea50 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ll sqlite3_shutd 1ea60 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 own()... ok: "$
1ea70 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
1ea80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1ea90 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1eaa0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1eab0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1eac0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1ead0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1eae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1eaf0 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
1eb00 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
1eb10 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
1eb20 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 1eb30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1eb40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1eb50 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1eb60 72 6f 63 20 67 65 74 53 65 74 74 69 6e 67 52 65 roc getSettingRe 1eb70 61 64 43 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7b adCount { name { 1eb80 76 69 61 46 69 6c 65 20 66 61 6c 73 65 7d 20 7d viaFile false} } 1eb90 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 {.. if {[h 1eba0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 aveConstraint bu 1ebb0 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 1ebc0 2e 44 65 62 75 67 5d 20 26 26 20 5b 63 61 74 63 .Debug] && [catc 1ebd0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj 1ebe0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1ebf0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c s +NonPublic -al 1ec00 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 1ec10 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1ec20 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 QLite.DebugData 1ec30 47 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f GetSettingReadCo 1ec40 75 6e 74 73 20 24 76 69 61 46 69 6c 65 0d 0a 20 unts$viaFile..
1ec50 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65       } settingRe
1ec60 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20  adCounts] == 0}
1ec70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ec80 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1ec90 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74  th $name] > 0} t 1eca0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ecb0 20 69 66 20 7b 5b 24 73 65 74 74 69 6e 67 52 65 if {[$settingRe
1ecc0 61 64 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56  adCounts TryGetV
1ecd0 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65  alue $name value 1ece0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1ecf0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1ed00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1ed10 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1ed30 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e  - setting \"" $n 1ed40 61 6d 65 20 22 5c 22 20 77 61 73 20 72 65 61 64 ame "\" was read 1ed50 20 22 20 24 76 61 6c 75 65 20 22 20 74 69 6d 65 "$value " time
1ed60 73 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  s" \..
1ed70 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 76 69        [expr {$vi 1ed80 61 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 aFile ? " from t 1ed90 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 1eda0 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e file" : ""}] \n 1edb0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 1edc0 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a return$value..
1edd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1ede0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1edf0 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d           set nam
1ee00 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67  eCount [$setting 1ee10 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 ReadCounts Count 1ee20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ].. set 1ee30 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d valueCount 0... 1ee40 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1ee50 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 1ee60 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65 pair$settingRe
1ee70 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20  adCounts {..
1ee80 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c          incr val
1ee90 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56  ueCount [$pair V 1eea0 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alue].... 1eeb0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1eec0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1eed0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1eee0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1eef0 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61  setting \"" [$pa 1ef00 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 ir Key] "\" was 1ef10 72 65 61 64 20 22 20 5b 24 70 61 69 72 20 56 61 read " [$pair Va
1ef20 6c 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  lue] \..
1ef30 20 20 20 20 20 20 20 20 22 20 74 69 6d 65 73 22          " times"
1ef40 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65   [expr {$viaFile 1ef50 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f ? " from the co 1ef60 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 1ef70 22 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 " : \.. 1ef80 20 20 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d ""}] \n]. 1ef90 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 1efa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1efb0 20 5b 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e [list$nameCoun
1efc0 74 20 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a  t $valueCount].. 1efd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1efe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 1eff0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1f000 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  name] > 0} then
1f010 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
1f020 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1f030 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1f040 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1f050 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e - setting \""$n
1f060 61 6d 65 20 22 5c 22 20 77 61 73 20 6e 6f 74 20  ame "\" was not
1f070 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69  read" [expr {$vi 1f080 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 aFile ? \.. 1f090 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 " from th 1f0a0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 e configuration 1f0b0 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d file" : ""}] \n] 1f0c0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 1f0d0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1f0e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1f0f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f100 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1f110 20 6e 6f 20 73 65 74 74 69 6e 67 73 20 77 65 72   no settings wer
1f120 65 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24  e read" [expr {$1f130 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 viaFile ? \.. 1f140 20 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 " from 1f150 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f the configuratio 1f160 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c n file" : ""}] \ 1f170 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n].. }.... 1f180 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a return -1.. 1f190 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1f1a0 6f 63 20 67 65 74 4f 74 68 65 72 43 6f 75 6e 74 oc getOtherCount 1f1b0 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 { name } {.. 1f1c0 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 if {[haveCons 1f1d0 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 traint buildConf 1f1e0 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d iguration.Debug] 1f1f0 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. 1f200 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1f210 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1f220 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 1f230 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1f240 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 1f250 65 62 75 67 44 61 74 61 20 47 65 74 4f 74 68 65 ebugData GetOthe 1f260 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d rCounts.. } 1f270 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d 3d otherCounts] == 1f280 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1f290 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 1f2a0 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 length$name] >
1f2b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1f2c0 20 20 20 20 20 69 66 20 7b 5b 24 6f 74 68 65 72       if {[$other 1f2d0 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c Counts TryGetVal 1f2e0 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d ue$name value]}
1f2f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1f300 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1f310 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1f320 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1f330 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1f340 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 other counter \" 1f350 22 20 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 "$name "\" has
1f360 76 61 6c 75 65 20 22 20 24 76 61 6c 75 65 20 5c  value " $value \ 1f370 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... 1f380 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d return$value.
1f390 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1f3a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1f3b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61            set na
1f3c0 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43  meCount [$otherC 1f3d0 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 ounts Count].. 1f3e0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 1f3f0 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 eCount 0.... 1f400 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 1f410 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 1f420 20 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d$otherCounts {.
1f430 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63  .            inc
1f440 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70  r valueCount [$p 1f450 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 air Value].... 1f460 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1f470 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1f480 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f4a0 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74  ---- other count
1f4b0 65 72 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65  er \"" [$pair Ke 1f4c0 79 5d 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65 y] "\" has value 1f4d0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1f4e0 20 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c [$pair Val
1f4f0 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ue] \n]..
1f500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1f510 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $1f520 6e 61 6d 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 nameCount$value
1f530 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20  Count]..
1f540 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
1f550 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1f560 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20  length $name] > 1f570 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1f580 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1f590 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1f5a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1f5b0 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20      "---- other
1f5c0 63 6f 75 6e 74 65 72 20 5c 22 22 20 24 6e 61 6d  counter \"" $nam 1f5d0 65 20 22 5c 22 20 68 61 73 20 6e 6f 20 76 61 6c e "\" has no val 1f5e0 75 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 ue\n"].. } 1f5f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1f600 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1f610 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 72  annel "---- ther
1f620 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 63  e are no other c
1f630 6f 75 6e 74 65 72 73 5c 6e 22 0d 0a 20 20 20 20  ounters\n"..
1f640 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1f650 75 72 6e 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c  urn -1..    }...
1f660 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72  ..    proc repor
1f670 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73  tSQLiteResources
1f680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f690 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66  channel {quiet f
1f6a0 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 74 72 75  alse} {reset tru
1f6b0 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65  e} {collect true
1f6c0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
1f6d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
1f6e0 20 70 6f 73 73 69 62 6c 65 2c 20 61 6c 77 61 79   possible, alway
1f6f0 73 20 72 65 73 65 74 20 74 68 65 20 63 61 63 68  s reset the cach
1f700 65 64 20 61 73 73 65 6d 62 6c 79 20 64 69 72 65  ed assembly dire
1f710 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ctory..      #
1f720 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 61 63       and the cac
1f730 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72  hed XML configur
1f740 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 2e  ation file name.
1f750 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1f760 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1f770 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1f780 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f790 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1f7a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1f7b0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1f7c0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1f7d0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1f7e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
1f7f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
1f800 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f810 20 52 65 73 65 74 43 61 63 68 65 64 41 73 73 65   ResetCachedAsse
1f820 6d 62 6c 79 44 69 72 65 63 74 6f 72 79 0d 0a 20  mblyDirectory..
1f830 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20         } error]
1f840 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1f850 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1f860 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1f870 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1f880 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65  channel "---- re
1f890 73 65 74 20 63 61 63 68 65 64 20 61 73 73 65 6d  set cached assem
1f8a0 62 6c 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22  bly directory\n"
1f8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1f8c0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1f8d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1f8e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f900 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f910 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1f920 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1f930 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1f940 74 6f 20 72 65 73 65 74 20 63 61 63 68 65 64 20  to reset cached
1f950 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f  assembly directo
1f960 72 79 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ry, " \..
1f970 20 20 20 20 20 20 20 20 20 22 65 72 72 6f 72 3a           "error:
1f980 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 1f990 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1f9a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1f9b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1f9c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 1f9d0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1f9e0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1f9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 1fa00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fa10 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 1fa20 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 thods \.. 1fa30 20 20 20 20 20 20 20 52 65 73 65 74 43 61 63 68 ResetCach 1fa40 65 64 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e edXmlConfigFileN 1fa50 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 ame.. } e 1fa60 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then 1fa70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1fa80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1fa90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1faa0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 1fab0 2d 2d 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 --- reset cached 1fac0 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 XML configurati 1fad0 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d on file name\n". 1fae0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1faf0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1fb00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1fb10 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1fb20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1fb30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1fb40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1fb50 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1fb60 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1fb70 6f 20 72 65 73 65 74 20 63 61 63 68 65 64 20 58 o reset cached X 1fb80 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ML configuration 1fb90 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1fba0 20 20 20 20 20 20 22 66 69 6c 65 20 6e 61 6d 65 "file name 1fbb0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 1fbc0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
1fbd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1fbe0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
1fbf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1fc00 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62  NOTE: If availab
1fc10 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 61  le, report on (a
1fc20 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 73 65  nd possibly rese
1fc30 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a  t) the runtime..
1fc40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
1fc50 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 61 74  nfiguration stat
1fc60 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 23  istics...      #
1fc70 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
1fc80 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
1fc90 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20  mand] && \..
1fca0 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74        [haveConst
1fcb0 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69  raint buildConfi
1fcc0 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d  guration.Debug]}
1fcd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1fce0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1fcf0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
1fd00 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
1fd10 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20  onPublic -alias
1fd20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fd30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1fd40 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65  ite.DebugData Ge
1fd50 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  tSettingReadCoun
1fd60 74 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ts false..
1fd70 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43    } settingReadC
1fd80 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  ounts] == 0} the
1fd90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
1fda0 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73  et nameCount [$s 1fdb0 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 ettingReadCounts 1fdc0 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 Count].. 1fdd0 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e set valueCoun 1fde0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t 0.... 1fdf0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach 1fe00 2d 61 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 -alias pair$set
1fe10 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b  tingReadCounts {
1fe20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
1fe30 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24  cr valueCount [$1fe40 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 pair Value].... 1fe50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1fe60 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1fe80 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1fe90 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1feb0 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 --- setting \"" 1fec0 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 [$pair Key] "\"
1fed0 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20  was read " \..
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fef0 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20  [$pair Value] " 1ff00 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 times\n"].. 1ff10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ff20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1ff30 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 if {$reset} t
1ff40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ff50 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .              o
1ff70 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
1ff80 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d  ags +NonPublic -
1ff90 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
1ffa0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1ffb0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65  m.Data.SQLite.De
1ffc0 62 75 67 44 61 74 61 20 43 6c 65 61 72 53 65 74  bugData ClearSet
1ffd0 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 66  tingReadCounts f
1ffe0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..
1fff0 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d    } error] == 0}
20000 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
20010 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 20020 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 20030 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 20040 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
20050 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
20070 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e  --- reset settin
20080 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
20090 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20   the previous "
200a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
200b0 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e         $nameCoun 200c0 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 200d0 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61$valueCount " va
200e0 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20  lues read\n"]..
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20100 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
20110 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
20120 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 20130 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20140 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20150 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
20160 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
20170 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
20180 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
20190 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e   to reset settin
201a0 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
201b0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
201c0 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70            "the p
201d0 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43  revious " $nameC 201e0 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 ount " names and 201f0 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c "$valueCount \
20200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20210 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 72        " values r
20220 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  ead, error: " \n
20230 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 20240 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 20250 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 20260 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 20270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 20280 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 20290 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 202a0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 202b0 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 onPublic -alias 202c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 202d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 202e0 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 ite.DebugData Ge 202f0 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e tSettingReadCoun 20300 74 73 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 ts true.. 20310 20 7d 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 } settingFileRe 20320 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 adCounts] == 0} 20330 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 20340 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 set nameCount 20350 5b 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 [$settingFileRea
20360 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a  dCounts Count]..
20370 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
20380 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20  lueCount 0....
20390 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
203a0 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61  oreach -alias pa
203b0 69 72 20 24 73 65 74 74 69 6e 67 46 69 6c 65 52  ir $settingFileR 203c0 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 eadCounts {.. 203d0 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 203e0 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
203f0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
20400 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 20410 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 20420 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20430 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
20440 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
20450 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
20460 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69  etting \"" [$pai 20470 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 r Key] "\" was r 20480 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 20490 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 [$pai
204a0 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73  r Value] " times
204b0 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67   from the config
204c0 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d  uration file\n"]
204d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
204e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
204f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 72            if {$r 20500 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 eset} then {.. 20510 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 20520 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 20530 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 20540 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 20550 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20570 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 20580 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 43 Lite.DebugData C 20590 6c 65 61 72 53 65 74 74 69 6e 67 52 65 61 64 43 learSettingReadC 205a0 6f 75 6e 74 73 20 74 72 75 65 0d 0a 20 20 20 20 ounts true.. 205b0 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 205c0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 205e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
205f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20600 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 20610 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20630 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 "---- reset 20640 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 setting statisti 20650 63 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 cs for the previ 20660 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ous " \.. 20670 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61$na
20680 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20  meCount " names
20690 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e  and " $valueCoun 206a0 74 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 t " values read 206b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 206c0 20 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 74 "from t 206d0 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 206e0 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 file\n"].. 206f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 20700 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20720 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
20730 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
20740 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 20750 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 20760 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20770 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 20780 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 20790 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 reset setting st 207a0 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c atistics for " \ 207b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 207c0 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 "the previ 207d0 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 ous "$nameCount
207e0 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $207f0 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 valueCount \.. 20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20810 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 " values read 20820 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 from the configu 20830 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 ration file, err 20840 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 or: " \n\t \.. 20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20860 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20$error \n]..
20870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
20880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
20890 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
208a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
208b0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
208c0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
208d0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
208e0 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c  nPublic -alias \
208f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20900 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20910 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74  te.DebugData Get
20920 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20  OtherCounts..
20930 20 20 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e       } otherCoun
20940 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
20950 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
20960 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65  nameCount [$othe 20970 72 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a rCounts Count].. 20980 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 set va 20990 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 lueCount 0.... 209a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 209b0 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 209c0 69 72 20 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 ir$otherCounts
209d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
209e0 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b  ncr valueCount [
209f0 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a  $pair Value].... 20a00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 20a10 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
20a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
20a30 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 20a40 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 20a60 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 ---- other count 20a70 65 72 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 er \"" [$pair Ke
20a80 79 5d 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65  y] "\" has value
20a90 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
20aa0 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 56          [$pair V 20ab0 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 alue] \n].. 20ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 20ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 20ae0 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 if {$reset} t
20af0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20b00 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
20b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .              o
20b20 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
20b30 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d  ags +NonPublic -
20b40 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
20b50 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
20b60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65  m.Data.SQLite.De
20b70 62 75 67 44 61 74 61 20 43 6c 65 61 72 4f 74 68  bugData ClearOth
20b80 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20  erCounts..
20b90 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d        } error] =
20ba0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
20bb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
20bc0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20be0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
20bf0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20c10 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 6f 74    "---- reset ot
20c20 68 65 72 20 63 6f 75 6e 74 65 72 73 20 66 6f 72  her counters for
20c30 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20   the previous "
20c40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20c50 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e         $nameCoun 20c60 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 20c70 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61$valueCount " va
20c80 6c 75 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  lues\n"]..
20c90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20ca0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
20cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
20cc0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 20cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20ce0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
20cf0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
20d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20d10 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
20d20 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
20d30 65 73 65 74 20 6f 74 68 65 72 20 63 6f 75 6e 74  eset other count
20d40 65 72 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20  ers for " \..
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20d60 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22   "the previous "
20d70 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61   $nameCount " na 20d80 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 mes and "$value
20d90 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20  Count \..
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 76               " v
20db0 61 6c 75 65 73 2c 20 65 72 72 6f 72 3a 20 22 20  alues, error: "
20dc0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 20dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 20de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 20df0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20e00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 20e10 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 20e20 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 20e30 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 ommand] && \.. 20e40 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c [haveSQL 20e50 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan 20e60 74 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 t INTEROP_VIRTUA 20e70 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 L_TABLE] && \.. 20e80 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 [haveSQ 20e90 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 20ea0 6e 74 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f nt TRACK_MEMORY_ 20eb0 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a BYTES]} then {.. 20ec0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
20ed0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20ee0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 20ef0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 annel "---- curr 20f00 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 ent memory in us 20f10 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 e by SQLiteMemor 20f20 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 y... ".. 20f30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 20f40 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 20f50 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 20f60 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 20f70 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 20f80 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 20f90 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d a.SQLite.SQLiteM 20fa0 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 emory bytesAlloc 20fb0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ated.. } 20fc0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 20fd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20fe0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
20ff0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21000 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 21010 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
21020 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
21030 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
21040 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
21050 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65            set me
21060 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
21070 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$21080 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 21090 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 210a0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
210b0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 210c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 210d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 210e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
210f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21100 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 21110 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum 21120 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 21130 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e y SQLiteMemory.. 21140 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a . ".. }.. 21150 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 21160 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 21170 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 21180 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 21190 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 211a0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 211b0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f QLite.SQLiteMemo 211c0 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 ry maximumBytesA 211d0 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 llocated.. 211e0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 211f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21200 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
21210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21220 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 21230 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 21240 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
21250 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
21260 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
21270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
21280 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
21290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
212a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 212b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 212c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
212d0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 212e0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 212f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 21300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21310 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
21320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
21330 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 21340 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 - current memory 21350 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 21360 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d e... ".. }. 21370 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 ... if {[ha 21380 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 21390 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 213a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 213b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 213c0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 213d0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 213e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 213f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 21400 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 ite.UnsafeNative 21410 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f Methods sqlite3_ 21420 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 memory_used.. 21430 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 21440 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 21450 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21460 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21470 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 21480 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 21490 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
214a0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
214b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
214c0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
214d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
214e0 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20  NOTE: Maybe the
214f0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
21500 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ary is unavailab
21510 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le?..          #
21520 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
21530 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
21540 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
21550 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 21560 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 21570 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
21580 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 21590 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 215a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 215b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 215c0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 215d0 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 unavailable.... 215e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
215f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21600 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 21610 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 21620 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
21630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
21640 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65  ....      set re
21650 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20  sult $memory; # 21660 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d NOTE: Return mem 21670 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 ory in-use to ou 21680 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 r caller..... 21690 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
216a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
216b0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 216c0 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d ---- maximum mem 216d0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 ory in use by SQ 216e0 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 Lite... ".. 216f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 21700 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 21710 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 21720 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 21730 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 21740 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 21750 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 21760 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 21770 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 21780 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 21790 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 217a0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 217b0 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 te3_memory_highw 217c0 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20 20 20 ater 0.. 217d0 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 217e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 217f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
21800 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21810 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 21820 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
21830 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
21840 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
21850 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
21860 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
21870 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
21880 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74   Maybe the SQLit
21890 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
218a0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a  s unavailable?..
218b0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
218c0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
218d0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
218e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 218f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 21900 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
21910 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
21920 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 21930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 21940 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 21950 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 21960 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 set memory unava 21970 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 ilable.... 21980 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
21990 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
219a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 219b0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
219c0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
219d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
219e0 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 219f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 21a00 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 21a10 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 e$channel..
21a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
21a30 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21a40 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 21a50 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
21a60 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
21a70 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e   use by the CLR.
21a80 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
21a90 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
21aa0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
21ab0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
21ac0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
21ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
21ae0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47  ject invoke GC G
21af0 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61  etTotalMemory fa
21b00 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  lse..        } m
21b10 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
21b20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
21b30 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e  f {[string is in
21b40 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d  teger -strict $m 21b50 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a emory]} then {.. 21b60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 21b70 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
21b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
21b90 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 21ba0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
21bb0 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
21bc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
21bd0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
21be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
21bf0 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64  t memory invalid
21c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
21c10 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 21c20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21c30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21c40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 21c50 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 21c60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21c70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 21c80 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 21c90 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 21ca0 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 21cb0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
21cc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
21cd0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 21ce0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
21cf0 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
21d00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21d10 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
21d20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
21d30 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62  memory unavailab
21d40 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  le....        if
21d50 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 21d60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 21d70 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
21d80 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 21d90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 21da0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 21db0 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
21dc0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
21dd0 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69  roc checkForSQLi
21de0 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20  teDirectories {
21df0 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66  channel {reset f
21e00 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
21e10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
21e20 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 73  : Check if the s
21e30 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
21e40 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
21e50 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
21e60 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
21e70 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 21e80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d \.. "- 21e90 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 21ea0 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 function sqlite 21eb0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 21ec0 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ctory... ".... 21ed0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 21ee0 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 OTE: This call t 21ef0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 o the sqlite3_wi 21f00 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 21f10 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 y function uses 21f20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 21f30 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 invalid value 21f40 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 0 for the first 21f50 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 argument. This 21f60 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 code is designe 21f70 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 21f80 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c to check if cal 21f90 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f ling the functio 21fa0 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 n will raise an 21fb0 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d exception (i.e.. 21fc0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 21fd0 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 he actual result 21fe0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e of the function 21ff0 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 does not matter 22000 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a as long as no.. 22010 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 22020 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 rectory is chang 22030 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ed)... #.. 22040 20 20 20 20 20 69 66 20 7b 5b 69 73 57 69 6e 64 if {[isWind 22050 6f 77 73 5d 20 26 26 20 5b 63 61 74 63 68 20 7b ows] && [catch { 22060 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 22070 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 22080 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 22090 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 220a0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 220b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 220c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s 220d0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 220e0 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c _directory 0 nul 220f0 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 l.. }] == 0 22100 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22110 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22120 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 OTE: Calling the 22130 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 22140 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun 22150 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a ction does not.. 22160 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 22170 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 cause an excepti 22180 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 on; therefore, i 22190 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 t must be availa 221a0 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 ble (i.e... 221b0 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 # even 221c0 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 though it should 221d0 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 return a failur 221e0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e e return code in 221f0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 this.. # 22200 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 case)... 22210 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22220 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 22230 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 22240 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 t_directory.... 22250 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
22260 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20  annel yes\n....
22270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22280 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f    # NOTE: Does o
22290 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74  ur caller want t
222a0 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65  o reset the dire
222b0 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20  ctories?..
222c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
222d0 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d  {$reset} then {. 222e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 222f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 22300 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 Now make sure th 22310 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 22320 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 22330 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 ries are.. 22340 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 # rese 22350 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 t their default 22360 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 values, which sh 22370 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 ould be null for 22380 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 both... 22390 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 # Since 223a0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 223b0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 223c0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 function is avai 223d0 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 lable,.. 223e0 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 # use it 223f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 22400 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 for {s 22410 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e et index 1} {$in
22420 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69  dex < 3} {incr i
22430 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20  ndex} {..
22440 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
22450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
22460 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
22470 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
22480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22490 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
224a0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
224b0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
224d0 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f    sqlite3_win32_
224e0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69  set_directory $i 224f0 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 ndex null.. 22500 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 22510 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 22520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 22530 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
22540 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
22560 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
22570 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
22580 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a  ory(" $index \.. 22590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 225a0 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b ", null)... ok 225b0 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d : "$result \n].
225c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
225d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
225e0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 225f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22600 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22610 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 22620 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 22630 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 t_directory("$i
22640 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20  ndex \..
22650 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c            ", nul
22660 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c  l)... error: " \
22670 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 22680 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 22690 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 226a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 226b0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 226c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
226d0 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  o\n....        #
226e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
226f0 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65  : Does our calle
22700 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20  r want to reset
22710 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f  the directories?
22720 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d    This can only.
22730 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
22740 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
22750 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
22760 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20  d and ready for
22770 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d  use by the test.
22780 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
22790 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
227a0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
227b0 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c  $reset && [isSQL 227c0 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 iteReady]} then 227d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 227e0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 227f0 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 : Now make sure 22800 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 the database and 22810 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc 22820 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 tories are.. 22830 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 22840 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c set their defaul 22850 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 t values, which 22860 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 should be null f 22870 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 or both... 22880 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 # Sinc 22890 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 e the sqlite3_wi 228a0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 228b0 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 y function does 228c0 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 not.. # 228d0 20 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f appear to 228e0 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 be available, u 228f0 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 se the associate 22900 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 d PRAGMA command 22910 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 s.. # 22920 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 instead... 22930 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 22940 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 foreach di 22950 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 rectory [list da 22960 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f ta_store_directo 22970 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 ry temp_store_di 22980 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 rectory] {.. 22990 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 set sql 229a0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 [appendArgs "PRA 229b0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
229c0 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a   " = \"\";"]....
229d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
229e0 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
229f0 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d  ql $sql} result] 22a00 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 22a20 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
22a30 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
22a50 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d  -- execute PRAGM
22a60 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22  A " $directory " 22a70 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 ... ok: \"" \.. 22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22a90 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a$result \"\n]..
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
22ab0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
22ac0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 22ad0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 22ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22af0 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 "---- execut 22b00 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 e PRAGMA "$dire
22b10 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72  ctory "... error
22b20 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
22b30 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72           \n\t $r 22b40 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 22b50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 22b60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 22b70 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 22b80 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22b90 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f TE: Finally, sho 22ba0 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 w the current va 22bb0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 lue of the datab 22bc0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 22bd0 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 22be0 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 directories. T 22bf0 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 his can only be 22c00 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 22c10 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 ite is loaded.. 22c20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 # and 22c30 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 ready for use b 22c40 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 22c50 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 22c60 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 if {[isSQLiteR 22c70 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 eady]} then {.. 22c80 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d 22c90 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 irectory [list d 22ca0 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 ata_store_direct 22cb0 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 ory temp_store_d 22cc0 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 irectory] {.. 22cd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
22ce0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
22cf0 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  s "---- checking
22d00 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 22d10 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... 22d20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 set sql [appe 22d30 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 ndArgs "PRAGMA " 22d40 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d$directory \;].
22d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
22d60 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65  {[catch {execute
22d70 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d  Sql $sql scalar} 22d80 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 result] == 0} t 22d90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 22da0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
22db0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f  l [appendArgs "o
22dc0 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c  k: \"" $result \ 22dd0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 22de0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 22df0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22e00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22e10 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20   "error: " \n\t
22e20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 22e30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 22e40 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 22e50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 22e60 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 22e70 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 ettings { channe 22e80 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 l {suffix ""} {q 22e90 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 22ea0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 22eb0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 # NOTE: Skip loa 22ec0 64 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 ding the setting 22ed0 73 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65 s if their usage 22ee0 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c has been disabl 22ef0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 22f00 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 22f10 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit 22f20 65 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d eTestSettings)]} 22f30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22f40 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22f50 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 TE: Load custom 22f60 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 22f70 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 per-host test se 22f80 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 ttings now... 22f90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22fa0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 22fb0 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 ::tcl_platform( 22fc0 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a user)]} then {.. 22fd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73 set us 22fe0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 22ff0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 me [file join [g 23000 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 etCommonDirector 23010 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 y] \.. 23020 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 [appendArgs 23030 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 settings$suffix
23040 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f   . $::tcl_platfo 23050 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d rm(user) .eagle] 23060 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 23070 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 23080 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
23090 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
230a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
230b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 230c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 230d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
230e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23100 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72  ---- loading per
23110 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69  -user test setti
23120 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23140 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46    $userSettingsF 23150 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d ileName \"...\n] 23160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 23170 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 23180 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 23190 20 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 uplev 231a0 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 el 1 [list sourc 231b0 65 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 e$userSettingsF
231c0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
231d0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20        } error]}
231e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
231f0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 23200 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 23210 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 23220 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
23230 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
23250 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
23260 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75  ed to load per-u
23270 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c  ser settings fil
23280 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
23290 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73               $us 232a0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 232b0 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 me "\", error: " 232c0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
232d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
232e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
232f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
23300 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
23310 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 23320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23330 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
23340 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
23350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
23360 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
23370 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75  ed loading per-u
23380 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67  ser test setting
23390 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
233b0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 233c0 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f eName "\", it do 233d0 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] 233e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 233f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 23400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 23410 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ############# 23420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 23430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 23440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 23450 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... 23460 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 23470 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 exists ::tcl_pla 23480 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 tform(host)]} th 23490 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 234a0 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 set hostSettings 234b0 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a FileName [file j 234c0 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 oin [getCommonDi 234d0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 234e0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 234f0 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 dArgs settings$
23500 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f  suffix . $::tcl_ 23510 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e platform(host) . 23520 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eagle]].... 23530 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 23540 78 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 xists$hostSetti
23550 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  ngsFileName]} th
23560 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
23570 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 23580 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23590 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
235a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
235b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
235c0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69       "---- loadi
235d0 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74  ng per-host test
235e0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
235f0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
23600 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 23610 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 tingsFileName \" 23620 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ...\n].. 23630 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 23640 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 23650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23660 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 23670 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 source$hostSet
23680 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a  tingsFileName]..
23690 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72              } er
236a0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
236b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
236c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 236d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 236e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
236f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23710 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
23720 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
23730 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e   per-host settin
23740 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23760 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings 23770 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er 23780 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
23790 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
237a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
237b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
237c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
237d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 237e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 237f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 23800 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
23810 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
23820 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
23830 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
23840 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73   per-host test s
23850 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
23860 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23870 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69        $hostSetti 23880 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", 23890 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 238a0 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 238b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 238c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 238d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 238e0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 70 79 53 .. proc copyS 238f0 61 6d 70 6c 65 44 61 74 61 62 61 73 65 46 69 6c ampleDatabaseFil 23900 65 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 es {} {.. u 23910 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 plevel 1 {.. 23920 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 23930 20 4e 4f 54 45 3a 20 43 6f 70 79 20 28 6f 72 20 NOTE: Copy (or 23940 72 65 2d 63 6f 70 79 29 20 74 68 65 20 72 65 66 re-copy) the ref 23950 65 72 65 6e 63 65 20 64 61 74 61 62 61 73 65 20 erence database 23960 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 68 file used for th 23970 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 23980 20 20 20 20 75 6e 69 74 20 74 65 73 74 20 74 6f unit test to 23990 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 239a0 74 6f 72 79 20 69 6e 20 63 61 73 65 20 69 74 20 tory in case it 239b0 68 61 73 20 62 65 65 6e 20 63 68 61 6e 67 65 64 has been changed 239c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 239d0 20 20 62 79 20 61 20 70 72 65 76 69 6f 75 73 20 by a previous 239e0 74 65 73 74 20 72 75 6e 2e 0d 0a 20 20 20 20 20 test run... 239f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 69 #.. fi 23a00 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
23a10 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c  northwindEfDbFil
23a20 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  e \..          [
23a30 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75  file join [getBu
23a40 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c  ildDirectory fal
23a50 73 65 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  se] [file tail $23a60 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 23a70 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 e]].. }.. 23a80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 23a90 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 runSQLiteTestPr 23aa0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 ologue {} {.. 23ab0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 23ac0 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 TE: Skip running 23ad0 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c our custom prol 23ae0 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e ogue if the main 23af0 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 one has been.. 23b00 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 # ski 23b10 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a pped... #.. 23b20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 23b30 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f exists ::no(pro 23b40 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 logue.eagle)]} t 23b50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 23b60 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 23b70 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f : Load the "befo 23b80 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 re-constraints" 23b90 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 23ba0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 23bb0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 23bc0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 23bd0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 23be0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 23bf0 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 23c00 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
23c10 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
23c20 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20  before]....
23c30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
23c40 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
23c50 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d  he [object] comm
23c60 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65  and is available
23c70 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f  ; if not, add so
23c80 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #
23c90 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b      shims to mak
23ca0 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  e the test suite
23cb0 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a   run smoother...
23cc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23cd0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
23ce0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24  eObjectCommand $23cf0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 23d00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 23d10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 # NOTE: Det 23d20 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 ermine the names 23d30 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 70 of the native p 23d40 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 latform and arch 23d50 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 itecture... 23d60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 23d70 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 t platform [getB 23d80 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 uildPlatform tru 23d90 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 e].. set 23da0 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 architecture [ar 23db0 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 chitectureForPla 23dc0 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d tform$platform]
23dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
23de0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
23df0 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  how the platform
23e00 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72   and architectur
23e10 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c  e used to help l
23e20 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20  ocate the..
23e30 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
23e40 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a  e build files...
23e50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23e60 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 23e70 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 23e80 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 23e90 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f "---- platfo 23ea0 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 rm for locating 23eb0 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c native build fil 23ec0 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 es is \"" \.. 23ed0 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
23ee0 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  rm \"\n]....
23ef0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 23f00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 23f10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 23f20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 "---- archi 23f30 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 tecture for loca 23f40 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c ting native buil 23f50 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c d files is \"" \ 23f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 ..$a
23f70 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e  rchitecture \"\n
23f80 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
23f90 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
23fa0 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20  Build a list of
23fb0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
23fc0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
23fd0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
23fe0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66          set conf
23ff0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
24000 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
24010 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
24020 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d  ite.dll.config].
24030 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
24040 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
24050 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75  ild a list of au
24060 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20  xiliary Managed
24070 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74  Debugging Assist
24080 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20  ants (MDA)..
24090 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66      #       conf
240a0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20  iguration files
240b0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d  that we handle..
240c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
240d0 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69      set mdaConfi
240e0 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  gFileNames [list
240f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24100 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65  EagleShell32.exe
24110 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74  .mda.config Inst
24120 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f  aller.exe.mda.co
24130 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20  nfig \..
24140 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64 61      test.exe.mda
24150 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e 71  .config testlinq
24160 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
24170 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
24180 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63  estef6.exe.mda.c
24190 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20  onfig]....
241a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
241b0 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
241c0 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20  ist of external
241d0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
241e0 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a  ndle.  Some of..
241f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24200 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20  these files may
24210 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  be native and/or
24220 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
24230 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20  ies that are..
24240 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
24250 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72  quired to perfor
24260 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e  m various tests.
24270 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
24280 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e 61       set externa
24290 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  lFileNames [list
242a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
242b0 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74  [file join Entit
242c0 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b  yFramework lib [
242d0 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74  string map [list
242e0 20 46 78 20 22 22 5d 20 5c 0d 0a 20 20 20 20 20   Fx ""] \..
242f0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6d         [string m
24300 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35  ap [list netFx45
24310 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34  1 netFx45 netFx4
24320 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  52 netFx45 netFx
24330 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  46 \..
24340 20 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34    netFx45 netFx4
24350 36 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  61 netFx45 netFx
24360 34 36 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46  462 netFx45 netF
24370 78 34 37 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20  x47 netFx45 \..
24380 20 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78             netFx
24390 34 37 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65  471 netFx45] [ge
243a0 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45  tBuildNetFx]]] E
243b0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64  ntityFramework.d
243c0 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll]]....
243d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
243e0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73  E: Build the lis
243f0 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65  t of native asse
24400 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
24410 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
24420 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
24430 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  et nativeFileNam
24440 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
24450 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
24460 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65  d nativeFileName
24470 73 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72  s [getNativeLibr
24480 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  aryFileNamesOnly
24490 5d 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  ]..        eval
244a0 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69  lappend nativeFi
244b0 6c 65 4e 61 6d 65 73 20 5b 67 65 74 49 6e 74 65  leNames [getInte
244c0 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
244d0 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20  amesOnly]....
244e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
244f0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68  # NOTE: Build th
24500 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d  e list of mixed-
24510 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
24520 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
24530 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
24540 20 20 20 20 20 20 20 20 73 65 74 20 6d 69 78 65          set mixe
24550 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  dFileNames [list
24560 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ]....        if
24570 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  {[hasRuntimeOpti
24580 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
24590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61   {..          la
245a0 70 70 65 6e 64 20 6d 69 78 65 64 46 69 6c 65 4e  ppend mixedFileN
245b0 61 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 74 61  ames System.Data
245c0 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
245d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
245e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
245f0 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
24600 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61  ist of managed a
24610 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
24620 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20  at we handle...
24630 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24640 20 20 73 65 74 20 6d 61 6e 61 67 65 64 46 69 6c    set managedFil
24650 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
24660 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
24670 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
24680 69 6e 71 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44  inq.dll System.D
24690 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64  ata.SQLite.EF6.d
246a0 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ll]....        i
246b0 66 20 7b 21 5b 68 61 73 52 75 6e 74 69 6d 65 4f  f {![hasRuntimeO
246c0 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74  ption native]} t
246d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
246e0 20 6c 61 70 70 65 6e 64 20 6d 61 6e 61 67 65 64   lappend managed
246f0 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 65 6d  FileNames System
24700 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
24710 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
24720 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24730 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74    # NOTE: Show t
24740 68 65 20 76 61 72 69 6f 75 73 20 6c 69 73 74 73  he various lists
24750 20 6f 66 20 66 69 6c 65 20 6e 61 6d 65 73 20 74   of file names t
24760 68 61 74 20 61 72 65 20 68 61 6e 64 6c 65 64 20  hat are handled
24770 62 79 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  by this..
24780 20 23 20 20 20 20 20 20 20 70 72 6f 63 65 64 75   #       procedu
24790 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
247a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 247b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 247c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 247d0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 247e0 69 73 74 20 6f 66 20 5c 22 63 6f 6e 66 69 67 75 ist of \"configu 247f0 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 ration\" file na 24800 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20 20 mes is: " \.. 24810 20 20 20 20 20 20 20 20 20 24 63 6f 6e 66 69 67$config
24820 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d  FileNames \n]...
24830 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $24840 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 24850 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 24860 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 24870 6c 69 73 74 20 6f 66 20 5c 22 4d 44 41 20 63 6f list of \"MDA co 24880 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 nfiguration\" fi 24890 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c le names is: " \ 248a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6d ..$m
248b0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
248c0 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
248d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 248e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 248f0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 24900 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 24910 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 66 69 6c \"external\" fil 24920 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 65 e names is: "$e
24930 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
24940 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
24950 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24960 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 24970 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 24980 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 24990 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 20 6e "native\" file n 249a0 61 6d 65 73 20 69 73 3a 20 22 20 24 6e 61 74 69 ames is: "$nati
249b0 76 65 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d  veFileNames \n].
249c0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
249d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 249e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 249f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 24a00 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 69 78 65 - list of \"mixe 24a10 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 d\" file names i 24a20 73 3a 20 22 20 24 6d 69 78 65 64 46 69 6c 65 4e s: "$mixedFileN
24a30 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ames \n]....
24a40 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 24a50 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 24a60 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 24a70 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 "---- list 24a80 6f 66 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 of \"managed\" f 24a90 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 24aa0 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65$managedFileName
24ab0 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
24ac0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
24ad0 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20 74  TE: Remove any t
24ae0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  est constraints
24af0 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
24b00 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d  e native and/or.
24b10 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
24b20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
24b30 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
24b40 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f  handle unless fo
24b50 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20  rbidden from..
24b60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f        #       do
24b70 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20  ing so...
24b80 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
24b90 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
24ba0 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65 43  no(sqliteRemoveC
24bb0 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68  onstraints)]} th
24bc0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24bd0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
24be0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65   $configFileName 24bf0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 24c00 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 24c10 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 24c20 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
24c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
24c40 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
24c50 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f   fileName $mdaCo 24c60 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 24c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 24c80 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 24c90 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 24ca0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
24cb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24cc0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
24cd0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 24ce0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 24cf0 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 24d00 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 24d10 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 Args file_ [file 24d20 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
24d30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
24d40 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
24d50 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 24d60 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 24d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 24d80 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 24d90 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 24da0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
24db0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24dc0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
24dd0 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65  eName $mixedFile 24de0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 24df0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 24e00 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 24e10 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
24e20 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
24e30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
24e40 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 24e50 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 24e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 24e70 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 24e80 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 24e90 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 _$fileName]..
24ea0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
24eb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
24ec0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
24ed0 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73 74  E: Skip all Syst
24ee0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
24ef0 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e 64  elated file hand
24f00 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d  ling (deleting,.
24f10 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
24f20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f   copying, and lo
24f30 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72 75  ading) if instru
24f40 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  cted...        #
24f50 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
24f60 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
24f70 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  (sqliteFiles)]}
24f80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24f90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
24fa0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
24fb0 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79  ng to delete any
24fc0 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75   files if instru
24fd0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
24fe0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
24ff0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
25000 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
25010 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
25020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25030 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
25040 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
25050 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20  eConfigFiles)]}
25060 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
25070 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
25080 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69  leName $configFi 25090 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 250a0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 250b0 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
250c0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
250d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
250e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
250f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
25100 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
25110 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65 72  eleteSqliteExter
25120 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  nalFiles)]} then
25130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25140 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
25150 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c  me $mdaConfigFil 25160 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 25170 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 25180 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69 eteBuildFile$fi
25190 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20  leName false..
251a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
251b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
251c0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
251d0 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d  $externalFileNam 251e0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 251f0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB 25200 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e inaryFile$fileN
25210 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
25220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
25230 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
25240 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25250 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
25260 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65  SqliteNativeFile
25270 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
25280 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
25290 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
252a0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d  o(deleteSqliteIm
252b0 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c 65  plicitNativeFile
252c0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
252e0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 252f0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 25300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25310 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 25320 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
25330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
25350 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
25360 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
25370 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
25380 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  teSqliteNonImpli
25390 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
253a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
253b0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
253c0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
253d0 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  eSqlitePlatformF
253e0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25400 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
25410 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 25420 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 25430 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 25440 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
25450 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25470 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
25480 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
25490 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
254a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
254c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
254d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
254e0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
254f0 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74  eSqliteArchitect
25500 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ureFiles)] && \.
25510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25520 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
25530 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 25540 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25560 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 25570 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
25580 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
25590 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
255a0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 255b0 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 leName$architec
255c0 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..
255d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
255e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
255f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
25600 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25610 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
25620 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
25630 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d  no(deleteSqliteM
25640 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65  ixedFiles)]} the
25650 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
25660 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
25670 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
25680 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
25690 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 65  ime option is se
256a0 74 2c 20 64 65 6c 65 74 65 20 69 6d 70 6c 69 63  t, delete implic
256b0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..
256c0 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d    #       mixed-
256d0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
256e0 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 68  les as well.  Th
256f0 69 73 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  is runtime optio
25700 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
25710 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20 69   #       check i
25720 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20 62  s handled when b
25730 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73 74  uilding the list
25740 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a   of mixed-mode..
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
25760 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66        assembly f
25770 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20  ile names...
25780 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
25790 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
257a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
257b0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d  o(deleteSqliteIm
257c0 70 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73  plicitMixedFiles
257d0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
257e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
257f0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69  ach fileName $mi 25800 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a xedFileNames {.. 25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25820 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 25830 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 bly$fileName..
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25860 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
25870 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25880 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
25890 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
258a0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
258b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
258c0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
258d0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
258e0 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
258f0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
25910 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 25920 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 25930 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25940 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 25950 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 fileName$mixedF
25960 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25980 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
25990 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  y $fileName$pla
259a0 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
259b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
259c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
259d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
259e0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
259f0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
25a00 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65  liteArchitecture
25a10 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a30 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
25a40 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20   $architecture] 25a50 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 25a70 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 25a80 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
25a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
25aa0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
25ab0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 25ac0 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 me$architecture
25ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25ae0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
25af0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
25b00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
25b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25b20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
25b30 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
25b40 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61 67  eleteSqliteManag
25b50 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  edFiles)]} then
25b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
25b70 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
25b80 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  e $managedFileNa 25b90 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 25ba0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 25bb0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
25bc0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
25bd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
25be0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
25bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
25c00 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
25c10 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
25c20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e  "autoSelect" run
25c30 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66  time option.  If
25c40 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20   present,..
25c50 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74       #       att
25c60 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69  empt to automati
25c70 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65  cally select the
25c80 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65   first available
25c90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
25ca0 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72      build (or "r
25cb0 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69  elease") of SQLi
25cc0 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61  te and System.Da
25cd0 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  ta.SQLite..
25ce0 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
25cf0 20 75 73 65 20 77 69 74 68 20 74 68 65 20 74 65   use with the te
25d00 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
25d10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25d20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d    if {[hasRuntim
25d30 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65  eOption autoSele
25d40 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ct]} then {..
25d50 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63           if {![c
25d60 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69  heckForSQLiteBui
25d70 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  lds $::test_chan 25d80 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 nel true]} then 25d90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25da0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 checkForSQLiteR 25db0 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f eleases$::test_
25dc0 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20  channel true..
25dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
25de0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25df0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25e00 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
25e10 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66 79  trying to verify
25e20 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
25e30 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63 74  tory if instruct
25e40 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ed;..          #
25e50 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
25e60 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61  , make sure it a
25e70 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f  ctually exists o
25e80 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72  r halt the entir
25e90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
25ea0 20 20 20 20 20 74 65 73 74 69 6e 67 20 70 72 6f       testing pro
25eb0 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73 20  cess if it does
25ec0 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20  not exist...
25ed0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25ee0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25ef0 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79  ists ::no(verify
25f00 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d  BuildDirectory)]
25f10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25f20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25f30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20       # NOTE: At
25f40 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20  this point, the
25f50 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
25f60 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61 0d  MUST exist as a.
25f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
25f80 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65 63       valid direc
25f90 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65 73  tory for the tes
25fa0 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20  ting process to
25fb0 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20  continue...
25fc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25fd0 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
25fe0 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72  ory [getBuildDir
25ff0 65 63 74 6f 72 79 20 66 61 6c 73 65 5d 0d 0a 0d  ectory false]...
26000 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
26010 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $26020 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d directory] || \. 26030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26040 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 ![file isdirect 26050 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d ory$directory]}
26060 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
26070 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
26080 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
26090 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63  Just prior to ac
260a0 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74  tually halting t
260b0 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
260c0 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss,..
260d0 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 61     #       add a
260e0 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74  n error to the t
260f0 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20  est log file...
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
26120 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 26130 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 26140 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26150 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 "---- could 26160 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c not verify buil 26170 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 d directory \"" 26180 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
261a0 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67  "\", all testing
261b0 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20   halted\n"]....
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
261e0 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20  NOTE: Raising a
261f0 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f  script error fro
26200 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f  m this point sho
26210 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20  uld halt..
26220 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26230 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63  the testing proc
26240 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...
26250 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
26260 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
26270 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
26280 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
26290 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75  ld not verify bu
262a0 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22  ild directory \"
262b0 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  " $directory \.. 262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 262d0 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 "\", all testi 262e0 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 ng halted"].. 262f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 26300 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 26310 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 26320 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 26330 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e rying to copy an 26340 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 y files if instr 26350 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 26360 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 26370 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 26380 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 26390 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 263a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 263b0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 263c0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f :no(copySqliteCo 263d0 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 nfigFiles)]} the 263e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 263f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
26400 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
26420 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 63 6f  --- copying \"co
26430 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69  nfiguration\" fi
26440 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20  les...\n"....
26450 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
26460 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 26470 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 26480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26490 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 tryCopyBuildFile 264a0 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65$fileName false
264b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
264c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
264d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
264e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
264f0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
26500 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d  eExternalFiles)]
26510 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26520 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26530 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
26540 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65   Copy the Manage
26550 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69  d Debugging Assi
26560 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e  stants (MDA) con
26570 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20  figuration..
26580 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
26590 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45    file for the E
265a0 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68  agle shell to th
265b0 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64  e build output d
265c0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..
265d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
265e0 20 77 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63   while using eac
265f0 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f  h of the names o
26600 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65  f the various le
26610 67 61 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20  gacy test..
26620 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
26630 20 65 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54   executables.  T
26640 68 69 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f  his will help to
26650 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that
26660 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20  all the..
26670 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c         #       l
26680 65 67 61 63 79 20 74 65 73 74 73 20 72 75 6e 20  egacy tests run
26690 77 69 74 68 20 65 78 61 63 74 6c 79 20 74 68 65  with exactly the
266a0 20 73 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e   same set of Man
266b0 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  aged..
266c0 20 20 20 20 23 20 20 20 20 20 20 20 44 65 62 75      #       Debu
266d0 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73  gging Assistants
266e0 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20   configured...
266f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
26710 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 26720 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 26730 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 26740 70 79 69 6e 67 20 5c 22 4d 44 41 20 63 6f 6e 66 pying \"MDA conf 26750 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 iguration\" file 26760 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 s...\n".... 26770 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 26780 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f fileName$mdaCo
26790 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
267a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
267b0 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69   tryCopyBinaryFi
267c0 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78  le EagleShell.ex
267d0 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 72 75  e.mda.config tru
267e0 65 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  e "" $fileName.. 267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 26800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 26810 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 26820 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 # NOTE: Copy t 26830 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 he external bina 26840 72 69 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f ries, if any, to 26850 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 the directory t 26860 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hat.. 26870 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 # conta 26880 69 6e 73 20 74 68 65 20 45 61 67 6c 65 20 73 68 ins the Eagle sh 26890 65 6c 6c 2e 20 20 54 68 69 73 20 69 73 20 74 79 ell. This is ty 268a0 70 69 63 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 pically used to 268b0 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 20 make.. 268c0 20 20 20 20 23 20 20 20 20 20 20 20 73 75 72 65 # sure 268d0 20 61 73 73 65 6d 62 6c 69 65 73 20 72 65 66 65 assemblies refe 268e0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 6f 6e renced by the on 268f0 65 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 20 es being tested 26900 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 are.. 26910 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c # avail 26920 61 62 6c 65 20 64 75 72 69 6e 67 20 74 68 65 20 able during the 26930 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e testing process. 26940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26950 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 26960 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
26970 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70  hannel "---- cop
26980 79 69 6e 67 20 5c 22 65 78 74 65 72 6e 61 6c 5c  ying \"external\
26990 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d  " files...\n"...
269a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
269b0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
269c0 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d  $externalFileNam 269d0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 269e0 20 20 20 20 20 20 74 72 79 43 6f 70 79 45 78 74 tryCopyExt 269f0 65 72 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e ernalFile$fileN
26a00 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
26a10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
26a30 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
26a40 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71  ists ::no(copySq
26a50 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29  liteNativeFiles)
26a60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26a70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
26a80 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
26a90 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 70 6c  : If the test pl
26aa0 61 74 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79  atform is likely
26ab0 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72   the default for
26ac0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20   this..
26ad0 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 63       #       mac
26ae0 68 69 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 74  hine, also try t
26af0 6f 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76  o copy the nativ
26b00 65 20 66 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a  e files to the..
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
26b20 20 20 20 20 20 20 62 69 6e 61 72 79 20 6c 6f 63        binary loc
26b30 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...
26b40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
26b50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
26b60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
26b70 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74  pySqliteImplicit
26b80 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 20 26 26  NativeFiles)] &&
26b90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26ba0 20 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74        [isDefault
26bb0 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d 20  BuildPlatform]}
26bc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
26bd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 26be0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 26bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26c00 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 "---- copyi 26c10 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22 6e 61 ng implicit \"na 26c20 74 69 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c tive\" files...\ 26c30 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n".... 26c40 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 26c50 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
26c60 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
26c70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
26c80 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 26c90 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 leName false.. 26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 26cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 26cd0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 26ce0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 26cf0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 iteNonImplicitFi 26d00 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 26d20 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 26d30 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 26d40 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 PlatformFiles)] 26d50 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 26d60 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 26d70 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
26d80 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
26d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26da0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 26db0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 26dc0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 26de0 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 --- copying \"na 26df0 74 69 76 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 tive\" files for 26e00 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d platform \"" \. 26e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26e20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
26e30 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20   \"...\n]....
26e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26e50 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
26e60 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 26e70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26e80 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 26e90 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
26ea0 65 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72  e false $platfor 26eb0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. 26ec0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 26ed0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 26ef0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 26f00 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 :no(copySqliteAr 26f10 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 26f20 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 26f30 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 26f40 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
26f50 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
26f60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
26f70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $26f80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 26f90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26fb0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e "---- copyin 26fc0 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c g \"native\" fil 26fd0 65 73 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 es for architect 26fe0 75 72 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ure \"" \.. 26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27000 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c$architecture \
27010 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  "...\n]....
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
27030 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 27040 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 27050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27060 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 tryCopyAss 27070 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
27080 66 61 6c 73 65 20 24 61 72 63 68 69 74 65 63 74  false $architect 27090 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 270a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 270b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 270c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 270d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 270e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 270f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 27100 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 69 78 65 o(copySqliteMixe 27110 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b dFiles)]} then { 27120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27130 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 27140 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 27150 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 "native" runtime 27160 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 option is set, 27170 63 6f 70 79 20 69 6d 70 6c 69 63 69 74 0d 0a 20 copy implicit.. 27180 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 27190 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 mixed-mode 271a0 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 assembly files a 271b0 73 20 77 65 6c 6c 2e 20 20 54 68 65 20 72 75 6e s well. The run 271c0 74 69 6d 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 time option.. 271d0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 271e0 20 20 20 63 68 65 63 6b 20 69 73 20 68 61 6e 64 check is hand 271f0 6c 65 64 20 77 68 65 6e 20 62 75 69 6c 64 69 6e led when buildin 27200 67 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 g the list of mi 27210 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 xed-mode.. 27220 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 27230 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 27240 6d 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 mes... 27250 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 27260 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 27270 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 27280 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 SqliteImplicitMi 27290 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e xedFiles)]} then 272a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 272b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
272c0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
272e0 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 69   "---- copying i
272f0 6d 70 6c 69 63 69 74 20 5c 22 6d 69 78 65 64 5c  mplicit \"mixed\
27300 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d  " files...\n"...
27310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
27320 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
27330 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65  e $mixedFileName 27340 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 27350 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 tryCopyAs 27360 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
27370 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
27380 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
27390 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
273a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
273b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
273c0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e  no(copySqliteNon
273d0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
273e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
273f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
27400 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
27410 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f  copySqlitePlatfo
27420 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a  rmFiles)] && \..
27430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27440 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
27450 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > 27460 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 27470 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 27480 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
27490 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
274a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
274b0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
274c0 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22 20  pying \"mixed\"
274d0 66 69 6c 65 73 20 66 6f 72 20 70 6c 61 74 66 6f  files for platfo
274e0 72 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  rm \"" \..
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27500 24 70 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c  $platform \"...\ 27510 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... 27520 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 27530 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 fileName$mixedF
27540 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27560 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
27570 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20  $fileName false 27580 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20$platform..
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
275b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
275c0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
275d0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
275e0 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75  SqliteArchitectu
275f0 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a  reFiles)] && \..
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27610 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
27620 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65  th $architecture 27630 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27650 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
27660 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
27670 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
27680 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
27690 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65  - copying \"mixe
276a0 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72  d\" files for ar
276b0 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c  chitecture \"" \
276c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
276d0 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 276e0 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a cture \"...\n].. 276f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27700 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 27710 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e Name$mixedFileN
27720 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
27730 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
27740 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 27750 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 63 eName false$arc
27760 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20  hitecture..
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27790 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
277a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
277b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
277c0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
277d0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
277e0 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d  teManagedFiles)]
277f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
27800 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 27810 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d :test_channel "- 27820 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 61 --- copying \"ma 27830 6e 61 67 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e naged\" files... 27840 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n".... 27850 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 27860 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 eName$managedFi
27870 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
27880 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
27890 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 278a0 4e 61 6d 65 20 74 72 75 65 0d 0a 20 20 20 20 20 Name true.. 278b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 278c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 278d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 278e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 278f0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 27900 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 ying to load any 27910 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 27920 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 27930 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 27940 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 27950 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 ::no(loadSqliteF 27960 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 27970 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 27980 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 27990 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 no(loadSqliteImp 279a0 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 279b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 279c0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 279d0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 279e0 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 SQLite.dll.. 279f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 27a00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 27a10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 27a20 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 loadSqliteLinqFi 27a30 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 27a50 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 27a60 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 27a70 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 Linq.dll.. 27a80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 27a90 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 27aa0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 27ab0 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 adSqliteEf6Files 27ac0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 27ad0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 27ae0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 27af0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 27b00 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 27b10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 27b20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 27b30 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 27b40 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 27b50 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 27b70 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 27b80 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 ::no(loadSqliteP 27b90 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 27ba0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 27bb0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 27bc0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
27bd0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27bf0 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
27c00 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
27c10 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  .dll $platform.. 27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 27c30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 27c40 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 27c50 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 27c60 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 teArchitectureFi 27c70 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 27c90 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
27ca0 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
27cb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
27cc0 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
27cd0 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
27ce0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll
27cf0 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 27d10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 27d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 27d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 27d40 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 27d50 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c eOnly$nativeFil
27d60 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
27d70 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
27d80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $27d90 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 27da0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 27dc0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 27dd0 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d of \""$fileNam
27de0 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
27df0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27e00 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
27e10 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
27e20 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 27e30 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 ly]] \"\n].. 27e40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 27e50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f }.... fo 27e60 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 27e70 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d ly$mixedFileNam
27e80 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
27e90 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
27ea0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 27eb0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 27ec0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 27ed0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 27ee0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 27ef0 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c \""$fileNameOnl
27f00 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a  y "\"... \"" \..
27f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
27f30 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
27f40 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d   $fileNameOnly]] 27f50 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 27f60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 27f70 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 27f80 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 h fileNameOnly$
27f90 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
27fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61   {..          ca
27fb0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
27fc0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 27fd0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 27fe0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 27ff0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 28000 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 28010 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 "$fileNameOnly
28020 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20  "\"... \"" \..
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
28040 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74  ile version [get
28050 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $28060 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c fileNameOnly]] \ 28070 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 28080 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 28090 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 280a0 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
280b0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  form] > 0} then
280c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
280d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
280e0 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  y $nativeFileNam 280f0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 28100 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 28110 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
28120 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
28130 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28150 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
28160 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66  on of \"" $platf 28170 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 28180 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 /$file
28190 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20  NameOnly "\"...
281a0 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  \"" [file versio
281b0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
281c0 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
281d0 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN 281e0 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 ameOnly$platfor
281f0 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  m]] \"\n]..
28200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
28210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
28220 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
28230 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69  ameOnly $mixedFi 28240 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 28250 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 28270 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
28280 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
28290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
282a0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
282b0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $282c0 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 platform \.. 282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 / 282e0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c$fileNameOnly "\
282f0 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76  "... \"" [file v
28300 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
28310 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
28320 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $28330 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c fileNameOnly$pl
28340 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a  atform]] \"\n]..
28350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
28360 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
28370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
28380 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
28390 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 283a0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 283b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 283c0 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 h fileNameOnly$
283d0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
283e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
283f0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
28400 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 28410 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 28420 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 28430 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 28440 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 28450 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 of \""$architec
28460 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  ture \..
28470 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c            / $fil 28480 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e eNameOnly "\"... 28490 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 284a0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 284b0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 284c0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
284d0 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74  NameOnly $archit 284e0 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a ecture]] \"\n].. 284f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 28500 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 28510 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 28520 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 fileNameOnly$mi
28530 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
28540 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
28550 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
28560 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 28570 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 28580 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 28590 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 285a0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 285b0 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 \""$architectur
285c0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
285d0 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61         / $fileNa 285e0 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 meOnly "\"... \" 285f0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 28600 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28610 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 28620 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
28630 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74  eOnly $architect 28640 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 ure]] \"\n].. 28650 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 28660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 28670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 28680 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 28690 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f Grab the list o 286a0 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 f managed assemb 286b0 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 lies for the cur 286c0 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20 20 rent process.. 286d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 286e0 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 d report on the 286f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 28700 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e te related ones. 28710 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 28720 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 28730 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 28740 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 28750 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 set assemb 28760 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 lies [object inv 28770 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 oke AppDomain.Cu 28780 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 rrentDomain GetA 28790 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 ssemblies].... 287a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 287b0 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20 oreach assembly 287c0 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20$assemblies {..
287d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
287e0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53  string match \{S
287f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
28800 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74  e* $assembly]} t 28810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 28820 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
28830 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
28840 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
28850 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
28860 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61  - found loaded a
28870 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65  ssembly: " $asse 28880 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mbly \n].. 28890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 288a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 288b0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 288c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 288d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
288e0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
288f0 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e       "---- defin
28900 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  e constants for
28910 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
28920 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20  Lite\"... "....
28930 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
28940 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
28950 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
28960 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
28970 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
28980 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
28990 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
289a0 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73   DefineConstants
289b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 64 65  ..          } de
289c0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d  fineConstants] =
289d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
289e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $289f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 28a00 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d appendArgs [form 28a10 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d atList [lsort \. 28a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 28a30 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
28a40 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  s] <none>] \n]..
28a50 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
28a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
28a70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 28a80 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 28a90 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 28aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 28ab0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 28ac0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
28ad0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
28af0 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 73 69 6f  -- source versio
28b00 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61  n of \"System.Da
28b10 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e  ta.SQLite.dll\".
28b20 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
28b30 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
28b40 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
28b50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
28b60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
28b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
28b80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
28b90 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
28ba0 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 69  on ProviderVersi
28bb0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  on..          }
28bc0 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
28bd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
28be0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
28bf0 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20  ength $version] 28c00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 28c10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 28c20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 version null.. 28c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 28c40 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
28c50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
28c60 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72 73  appendArgs $vers 28c70 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ion \n].. 28c80 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 28c90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
28ca0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
28cb0 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
28cc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
28cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
28ce0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
28cf0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 28d00 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 28d10 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 "---- sour 28d20 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c ce checkout of \ 28d30 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 28d40 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a ite.dll\"... ".. 28d50 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 28d60 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 28d70 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 28d80 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 28d90 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 28da0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 28db0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 28dc0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f teConnection Pro 28dd0 76 69 64 65 72 53 6f 75 72 63 65 49 64 0d 0a 20 viderSourceId.. 28de0 20 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63 } sourc 28df0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 28e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 28e10 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 28e20 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 h$sourceId] ==
28e30 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
28e40 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75           set sou
28e50 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20  rceId null..
28e60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
28e70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 28e80 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 28e90 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65 pendArgs$source
28ea0 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  Id \n]..
28eb0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
28ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 28ed0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e :test_channel un 28ee0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 known\n.. 28ef0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 28f00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 28f10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 28f20 73 65 74 20 63 61 63 68 65 64 20 22 62 72 65 61 set cached "brea 28f30 6b 20 69 6e 74 6f 20 64 65 62 75 67 67 65 72 22 k into debugger" 28f40 20 73 65 74 74 69 6e 67 20 73 6f 20 74 68 61 74 setting so that 28f50 20 69 74 20 63 61 6e 20 62 65 0d 0a 20 20 20 20 it can be.. 28f60 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used 28f70 20 64 75 72 69 6e 67 20 74 68 65 20 74 65 73 74 during the test 28f80 20 66 69 6c 65 2c 20 69 66 20 6e 65 65 64 65 64 file, if needed 28f90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 28fa0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 28fb0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 72 65 73 exists ::no(res 28fc0 65 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 etBreakIntoDebug 28fd0 67 65 72 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ger)] && \.. 28fe0 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c [haveSQL 28ff0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 29000 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 29010 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 29020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 29030 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 29040 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 29050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29060 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 29070 4c 69 74 65 2e 48 65 6c 70 65 72 4d 65 74 68 6f Lite.HelperMetho 29080 64 73 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 ds ResetBreakInt 29090 6f 44 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 oDebugger.. 290a0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 290b0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 290c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
290d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
290e0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
290f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
29100 2d 2d 2d 20 63 61 6c 6c 20 52 65 73 65 74 42 72  --- call ResetBr
29110 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 28  eakIntoDebugger(
29120 29 2e 2e 2e 20 6f 6b 5c 6e 22 5d 0d 0a 20 20 20  )... ok\n"]..
29130 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
29140 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
29150 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 29160 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 29170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29180 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 52 65 73 "---- call Res 29190 65 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 etBreakIntoDebug 291a0 67 65 72 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 ger()... error: 291b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 291c0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
291d0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
291e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
291f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29200 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
29210 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20  k the available
29220 62 75 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c  builds (and "rel
29230 65 61 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74  eases") of SQLit
29240 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23  e and..        #
29250 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
29260 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20  ta.SQLite...
29270 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
29280 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69  heckForSQLiteBui
29290 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  lds $::test_chan 292a0 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 nel.. che 292b0 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 ckForSQLiteRelea 292c0 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ses$::test_chan
292d0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
292e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
292f0 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74  : Now, we need t
29300 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51  o know if the SQ
29310 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
29320 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a  y is available..
29330 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
29340 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68  (i.e. because th
29350 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53  e managed-only S
29360 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
29370 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a  e assembly can..
29380 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
29390 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b  load without it;
293a0 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e   however, it can
293b0 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  not do anything
293c0 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a  useful without..
293d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
293e0 69 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20  it).  If we are
293f0 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d  using the mixed-
29400 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e  mode assembly an
29410 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20  d we already..
29420 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
29430 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20  und it (above),
29440 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61  this should alwa
29450 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20  ys succeed...
29460 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
29470 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69  checkForSQLiteLi
29480 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68  brary $::test_ch 29490 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 294a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 294b0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 294c0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 SQLite interop 294d0 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69 assembly is avai 294e0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... 294f0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 29500 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 ForSQLiteInterop 29510 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
29520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
29530 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
29540 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20  heck the SQLite
29550 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
29560 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
29570 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
29580 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
29590 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
295a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 295b0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 295c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 295d0 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 Attempt to deter 295e0 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 mine if various 295f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 29600 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d ions needed for. 29610 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 29620 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 test constraint 29630 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 s were enabled f 29640 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 or the managed a 29650 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d ssembly. There. 29660 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 29670 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c are some compil 29680 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 e-time options t 29690 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 hat must also ha 296a0 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d ve been enabled. 296b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 296c0 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 for the interop 296d0 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 assembly in ord 296e0 65 72 20 74 6f 20 62 65 20 65 66 66 65 63 74 69 er to be effecti 296f0 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a ve. For those.. 29700 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 29710 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c options, it will 29720 20 62 65 20 61 73 73 75 6d 65 64 20 74 68 61 74 be assumed that 29730 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 it was enabled 29740 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d for the interop. 29750 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 29760 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20 assembly if it 29770 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 was enabled for 29780 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 the managed asse 29790 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 mbly... # 297a0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 297b0 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 h defineConstant 297c0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 297d0 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 CHECK_STAT 297e0 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 E COUNT_HANDLE D 297f0 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 EBUG INTEROP_COD 29800 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 EC INTEROP_DEBUG 29810 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29820 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f INTEROP_EXTENSIO 29830 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 N_FUNCTIONS INTE 29840 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 ROP_FTS5_EXTENSI 29850 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. 29860 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 INTEROP_INCLUD 29870 45 5f 43 45 52 4f 44 20 49 4e 54 45 52 4f 50 5f E_CEROD INTEROP_ 29880 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 20 49 4e INCLUDE_EXTRA IN 29890 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 TEROP_INCLUDE_SE 298a0 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 E \.. 298b0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 INTEROP_INCLUDE 298c0 5f 5a 49 50 56 46 53 20 49 4e 54 45 52 4f 50 5f _ZIPVFS INTEROP_ 298d0 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 JSON1_EXTENSION 298e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 \.. I 298f0 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c NTEROP_LEGACY_CL 29900 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 OSE INTEROP_LOG 29910 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 INTEROP_PERCENTI 29920 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a LE_EXTENSION \.. 29930 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE 29940 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e ROP_REGEXP_EXTEN 29950 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 53 45 53 SION INTEROP_SES 29960 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 5c SION_EXTENSION \ 29970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 29980 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e TEROP_SHA1_EXTEN 29990 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 SION INTEROP_TES 299a0 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 T_EXTENSION \.. 299b0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 299c0 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 OP_TOTYPE_EXTENS 299d0 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 ION INTEROP_VIRT 299e0 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 UAL_TABLE \.. 299f0 20 20 20 20 20 20 20 20 20 4e 45 54 5f 32 30 20 NET_20 29a00 4e 45 54 5f 33 35 20 4e 45 54 5f 34 30 20 4e 45 NET_35 NET_40 NE 29a10 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 T_45 NET_451 NET 29a20 5f 34 35 32 20 4e 45 54 5f 34 36 20 4e 45 54 5f _452 NET_46 NET_ 29a30 34 36 31 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 461 \.. 29a40 20 20 20 4e 45 54 5f 34 36 32 20 4e 45 54 5f 34 NET_462 NET_4 29a50 37 20 4e 45 54 5f 34 37 31 20 4e 45 54 5f 43 4f 7 NET_471 NET_CO 29a60 4d 50 41 43 54 5f 32 30 20 50 4c 41 54 46 4f 52 MPACT_20 PLATFOR 29a70 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f M_COMPACTFRAMEWO 29a80 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 RK \.. 29a90 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 PRELOAD_NATIVE 29aa0 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47 45 _LIBRARY RETARGE 29ab0 54 41 42 4c 45 20 53 51 4c 49 54 45 5f 53 54 41 TABLE SQLITE_STA 29ac0 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20 20 20 20 NDARD \.. 29ad0 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 THROW_ON_DI 29ae0 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52 41 SPOSED TRACE TRA 29af0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 CE_CONNECTION TR 29b00 41 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 5c 0d ACE_DETECTION \. 29b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 . TRA 29b20 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45 5f CE_HANDLE TRACE_ 29b30 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53 48 PRELOAD TRACE_SH 29b40 41 52 45 44 20 54 52 41 43 45 5f 53 54 41 54 45 ARED TRACE_STATE 29b50 4d 45 4e 54 20 5c 0d 0a 20 20 20 20 20 20 20 20 MENT \.. 29b60 20 20 20 20 54 52 41 43 45 5f 57 41 52 4e 49 4e TRACE_WARNIN 29b70 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 G TRACK_MEMORY_B 29b80 59 54 45 53 20 55 53 45 5f 45 4e 54 49 54 59 5f YTES USE_ENTITY_ 29b90 46 52 41 4d 45 57 4f 52 4b 5f 36 20 5c 0d 0a 20 FRAMEWORK_6 \.. 29ba0 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 USE_I 29bb0 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 NTEROP_DLL USE_P 29bc0 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 REPARE_V2 WINDOW 29bd0 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 S] {.. 29be0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 29bf0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 29c00 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f e compile-time o 29c10 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 ption is listed 29c20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a in the list of.. 29c30 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 29c40 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 "define consta 29c50 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20 nts" kept track 29c60 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65 of by the manage 29c70 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 29c80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 29c90 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 29ca0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 29cb0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
29cc0 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant 29cd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 29ce0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 29cf0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 29d00 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 if the System.Da 29d10 74 61 2e 53 51 4c 69 74 65 20 70 72 6f 76 69 64 ta.SQLite provid 29d20 65 72 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 er was compiled 29d30 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 with.. # 29d40 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f support fo 29d50 72 20 61 6e 79 20 65 6e 63 72 79 70 74 65 64 20 r any encrypted 29d60 64 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 databases... 29d70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 29d80 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65 f {[haveSQLiteDe 29d90 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 fineConstant INT 29da0 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c EROP_CODEC] || \ 29db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 .. [h 29dc0 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 aveSQLiteDefineC 29dd0 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f onstant INTEROP_ 29de0 49 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 INCLUDE_SEE]} th 29df0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 29e00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 29e10 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20 67 65 OTE: Yes, add ge 29e20 6e 65 72 69 63 20 63 6f 6e 73 74 72 61 69 6e 74 neric constraint 29e30 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 for use by the 29e40 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 test suite... 29e50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 29e60 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 29e70 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ 29e80 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d Lite.Encryption. 29e90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 29ea0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 29eb0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 29ec0 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 he current build 29ed0 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c year. Basicall 29ee0 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 y, this indicate 29ef0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 29f00 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e which version 29f10 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f of MSBuild and/ 29f20 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f or Visual Studio 29f30 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 was used to.. 29f40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 29f50 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62 mpile the assemb 29f60 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 ly binaries unde 29f70 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 r test... 29f80 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 29f90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
29fa0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
29fb0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
29fc0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
29fd0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61  SQLite build yea
29fe0 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  r... "....
29ff0 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42    set year [getB
2a000 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20  uildYear]..
2a010 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
2a020 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69   [appendArgs bui
2a030 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a  ldYear. $year].. 2a040 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2a050 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
2a060 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65  ppendArgs \" $ye 2a070 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 ar \"\n].... 2a080 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2a090 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 2a0a0 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e current build . 2a0b0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 NET Framework. 2a0c0 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d Basically, this. 2a0d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a0e0 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 indicates which 2a0f0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 version of the 2a100 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 .NET Framework i 2a110 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 s being.. 2a120 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 # used by 2a130 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 the assembly bi 2a140 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 naries under tes 2a150 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 2a160 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2a170 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2a180 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2a190 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
2a1a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2a1b0 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61  e build .NET Fra
2a1c0 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20  mework... "....
2a1d0 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 78         set netFx
2a1e0 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d   [getBuildNetFx]
2a1f0 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
2a200 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2a210 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f  rgs buildFramewo
2a220 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20  rk. $netFx].. 2a230 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2a240 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2a250 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78  ndArgs \" $netFx 2a260 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 2a270 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a280 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 OTE: Check the c 2a290 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e urrent build con 2a2a0 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 figuration. Thi 2a2b0 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c s should normall 2a2c0 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 2a2d0 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65 be either "De 2a2e0 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 bug" or "Release 2a2f0 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 "... #.. 2a300 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2a310 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2a320 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2a330 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
2a340 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2a350 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72  e build configur
2a360 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  ation... "....
2a370 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67        set config
2a380 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c  uration [getBuil
2a390 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d  dConfiguration].
2a3a0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
2a3b0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2a3c0 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72  gs buildConfigur
2a3d0 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72  ation. $configur 2a3e0 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ation].. 2a3f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2a400 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2a410 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74  s \" $configurat 2a420 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ion \"\n].... 2a430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a440 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 # NOTE: Try to s 2a450 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 etup an interrup 2a460 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 t callback using 2a470 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 the script debu 2a480 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 gger.. # 2a490 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 that will 2a4a0 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 cancel all SQL q 2a4b0 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 ueries in progre 2a4c0 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 ss for all datab 2a4d0 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ase.. # 2a4e0 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 connections 2a4f0 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 known to this i 2a500 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 2a510 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a520 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2a530 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 s ::no(sqliteInt 2a540 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d erruptCallback)] 2a550 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a560 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 setupDbInter 2a570 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a ruptCallback$::
2a580 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a  test_channel $:: 2a590 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 test_log.. 2a5a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 2a5b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2a5c0 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 : Check for the 2a5d0 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f native runtime o 2a5e0 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 ption, which wou 2a5f0 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a ld mean we are.. 2a600 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2a610 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d using the mixed- 2a620 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a mode assembly... 2a630 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2a640 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 checkForRunti 2a650 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 meOption$::test
2a660 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d  _channel native.
2a670 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2a680 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
2a690 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20  eck if the test
2a6a0 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75  suite should cou
2a6b0 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  nt the number of
2a6c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20   connections..
2a6d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f        #       "o
2a6e0 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73  pened" and "clos
2a6f0 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f  ed" from the poo
2a700 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69  l when determini
2a710 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20  ng if a test..
2a720 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61        #       pa
2a730 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67  ssed.  Disabling
2a740 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69   this behavior i
2a750 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65  s sometimes nece
2a760 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20  ssary (e.g...
2a770 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72       #       dur
2a780 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20  ing the release
2a790 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29  testing process)
2a7a0 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
2a7b0 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20  re several..
2a7c0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
2a7d0 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74  s that rely on t
2a7e0 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20  he "opened from
2a7f0 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e  pool" count bein
2a800 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20  g greater..
2a810 20 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20     #       than
2a820 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73  zero.  These tes
2a830 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20  ts may fail due
2a840 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72  to the non-deter
2a850 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20  ministic..
2a860 20 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69    #       behavi
2a870 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43  or of the CLR GC
2a880 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72  , even when ther
2a890 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74  e is no bug in t
2a8a0 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20  he code..
2a8b0 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74   #       being t
2a8c0 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ested...
2a8d0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
2a8e0 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  ForRuntimeOption
2a8f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2a900 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d noPoolCounts... 2a910 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a920 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 2a930 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 k if the test su 2a940 69 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 ite should use s 2a950 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 hared-cache mode 2a960 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2a970 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 checkForRu 2a980 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 ntimeOption$::t
2a990 65 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72  est_channel shar
2a9a0 65 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20  edCache....
2a9b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2a9c0 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65  NOTE: Report the
2a9d0 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20   resource usage
2a9e0 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67  prior to running
2a9f0 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20   any tests...
2aa00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2aa10 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
2aa20 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 2aa30 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 2aa40 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2aa50 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 TE: Grab the lis 2aa60 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 t of native modu 2aa70 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 les for the curr 2aa80 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d ent process and. 2aa90 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2aaa0 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 report on the S 2aab0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2aac0 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d e related ones.. 2aad0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2aae0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 2aaf0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 2ab00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2ab10 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 set modules 2ab20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 2ab30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ab40 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 System.Diagnost 2ab50 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 ics.Process.GetC 2ab60 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f urrentProcess Mo 2ab70 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 dules].... 2ab80 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea 2ab90 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 ch -alias module 2aba0 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20$modules {..
2abb0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2abc0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2abd0 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20  The module file
2abe0 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62  name here must b
2abf0 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20  e normalized...
2ac00 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
2ac10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69            set fi
2ac20 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72  leName [file nor
2ac30 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20  malize [$module 2ac40 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 FileName]].. 2ac50 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 2ac60 4e 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 NameOnly [file t 2ac70 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a ail$fileName]..
2ac80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ac90 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63   {[lsearch -exac
2aca0 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a  t -nocase -- \..
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2acc0 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72  [getNativeLibrar
2acd0 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20  yFileNamesOnly]
2ace0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21  $fileNameOnly] ! 2acf0 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 = -1} then {.. 2ad00 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 2ad10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2ad20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
2ad30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2ad40 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
2ad50 6f 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74  oaded SQLite nat
2ad60 69 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75  ive library modu
2ad70 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  le: " \..
2ad80 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65             $file 2ad90 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 Name \n].. 2ada0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 2adb0 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 [lsearch -exact 2adc0 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 -nocase -- \.. 2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 2ade0 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 2adf0 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 2ae00 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21$fileNameOnly] !
2ae10 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2ae30 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2ae40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 2ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2ae60 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 2ae70 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 oaded SQLite int 2ae80 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f erop assembly mo 2ae90 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 dule: " \.. 2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69$fi
2aeb0 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20  leName \n]..
2aec0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
2aed0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2aee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
2aef0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
2af00 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2af10 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 2af20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com 2af30 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 2af40 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 s for SQLite cor 2af50 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a e library... ".. 2af60 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 2af70 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 2af80 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 2af90 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 2afa0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 2afb0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 2afc0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 2afd0 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c te3 SQLiteCompil 2afe0 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 eOptions.. 2aff0 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 } compileOpt 2b000 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ions] == 0} then 2b010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2b020 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2b030 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2b040 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c  s [formatList [l
2b050 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  sort \..
2b060 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65          $compile 2b070 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d Options] <none>] 2b080 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 2b090 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2b0a0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2b0b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e  est_channel unkn
2b0c0 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  own\n..
2b0d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2b0e0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
2b0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
2b100 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2b110 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2b120 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 "---- compile 2b130 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f -time options fo 2b140 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 r SQLite interop 2b150 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a assembly... ".. 2b160 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 2b170 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 2b180 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 2b190 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 2b1a0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 2b1b0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 2b1c0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 2b1d0 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 te3 InteropCompi 2b1e0 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 leOptions.. 2b1f0 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 } compileOp 2b200 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tions] == 0} the 2b210 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2b220 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b230 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2b240 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
2b250 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
2b260 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c           $compil 2b270 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e eOptions] <none> 2b280 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 2b290 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 2b2a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2b2b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b  test_channel unk
2b2c0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20  nown\n..
2b2d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2b2e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2b2f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
2b300 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73  w the active tes
2b310 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a  t constraints...
2b320 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2b330 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2b340 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 2b350 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 Args "---- const 2b360 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 raints: " \.. 2b370 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 [format 2b380 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 List [lsort [get 2b390 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e Constraints]] <n 2b3a0 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 one>] \n].... 2b3b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2b3c0 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 # NOTE: Save the 2b3d0 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 test constraint 2b3e0 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 s for use by thr 2b3f0 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 eads created in 2b400 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 2b410 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f applicatio 2b420 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 n domain. This 2b430 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 is necessary bec 2b440 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 ause all the Eag 2b450 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 2b460 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 "test contex 2b470 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 t" information i 2b480 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 s per-thread... 2b490 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2b4a0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 2b4b0 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 sts ::test_const 2b4c0 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d raints]} then {. 2b4d0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 2b4e0 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 :test_constraint 2b4f0 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 s$::eagle_tests
2b500 28 43 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20  (Constraints)..
2b510 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2b520 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2b530 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20   NOTE: Load the
2b540 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e  "after-constrain
2b550 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75  ts" custom per-u
2b560 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68  ser and/or per-h
2b570 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ost..        #
2b580 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e       test settin
2b590 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
2b5a0 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65   #..        uple
2b5b0 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64  vel 1 [list load
2b5c0 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e  SQLiteTestSettin
2b5d0 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  gs $::test_chann 2b5e0 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 el .after].... 2b5f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2b600 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 # NOTE: If nece 2b610 73 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 ssary, enable sh 2b620 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 ared-cache mode 2b630 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 2b640 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 . if {[ha 2b650 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 sRuntimeOption s 2b660 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 haredCache]} the 2b670 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 n {.. e 2b680 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 nableSharedCache 2b690 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2b6a0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d   true..        }
2b6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2b6c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
2b6d0 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
2b6e0 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61  ts actually bega
2b6f0 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  n (now)...
2b700 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
2b710 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 2b720 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 2b730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 2b740 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 2b750 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 SQLite tests beg 2b760 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 an at " \.. 2b770 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 2b780 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 2b790 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 nds]] \n].. 2b7a0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 2b7b0 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 proc runSQLite 2b7c0 54 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 TestFilesPrologu 2b7d0 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e {} {.. #. 2b7e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 2b7f0 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 kip running our 2b800 63 75 73 74 6f 6d 20 66 69 6c 65 73 20 70 72 6f custom files pro 2b810 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 2b820 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 2b830 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 2b840 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 2b850 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 2b860 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 o exists ::no(pr 2b870 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ologue.eagle)]} 2b880 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2b890 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 uplevel 1 {.. 2b8a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2b8b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 # NOTE: Setu 2b8c0 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 p the variables 2b8d0 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 that refer to th 2b8e0 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 e various non-da 2b8f0 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 ta files.. 2b900 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 # requ 2b910 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 ired by the test 2b920 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d s in this file.. 2b930 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 2b940 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 set enti 2b950 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 2b960 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2b970 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 2b980 65 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d eName EntityFram 2b990 65 77 6f 72 6b 2e 64 6c 6c 20 66 61 6c 73 65 5d ework.dll false] 2b9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2b9b0 74 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 t installerExeFi 2b9c0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2b9d0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 2b9e0 65 4e 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e eName Installer. 2b9f0 65 78 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 exe false].... 2ba00 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 69 set sqli 2ba10 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c teDesignerDllFil 2ba20 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 2ba30 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 [getBuildFile 2ba40 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 69 Name SQLite.Desi 2ba50 67 6e 65 72 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d gner.dll false]. 2ba60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2ba70 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 2ba80 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 eDllFile \.. 2ba90 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 2baa0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 2bab0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 2bac0 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 ll false].... 2bad0 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 set syste 2bae0 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 mDataSQLiteLinqD 2baf0 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 2bb00 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil 2bb10 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d dFileName System 2bb20 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 2bb30 71 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a q.dll false].... 2bb40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 79 set sy 2bb50 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 stemDataSQLiteEf 2bb60 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 6DllFile \.. 2bb70 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 2bb80 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 2bb90 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 em.Data.SQLite.E 2bba0 46 36 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d F6.dll false]... 2bbb0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 . set t 2bbc0 65 73 74 45 78 65 46 69 6c 65 20 5b 67 65 74 42 estExeFile [getB 2bbd0 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 uildFileName tes 2bbe0 74 2e 65 78 65 20 66 61 6c 73 65 5d 0d 0a 20 20 t.exe false].. 2bbf0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2bc00 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 65 74 LinqExeFile [get 2bc10 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 BuildFileName te 2bc20 73 74 6c 69 6e 71 2e 65 78 65 20 66 61 6c 73 65 stlinq.exe false 2bc30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ].. set 2bc40 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 2bc50 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 2bc60 65 20 74 65 73 74 65 66 36 2e 65 78 65 20 66 61 e testef6.exe fa 2bc70 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 2bc80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 2bc90 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 NOTE: Setup the 2bca0 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 variables that 2bcb0 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 refer to the var 2bcc0 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d ious data files. 2bcd0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 2bce0 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20 74 required by t 2bcf0 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 he tests in this 2bd00 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... 2bd10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 2bd20 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 et testLinqOutFi 2bd30 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 2bd40 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 2bd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2bd60 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 2bd70 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 6e 71 taPath] testlinq 2bd80 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .out]].... 2bd90 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e set northwin 2bda0 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 dEfDbFile [file 2bdb0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2bdc0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2bdd0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 [file dir 2bde0 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 2bdf0 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 me [getSQLiteTes 2be00 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a tDataPath]]] \.. 2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 te 2be20 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 stlinq northwind 2be30 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 EF.db]].... 2be40 20 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 set nonWalD 2be50 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 bFile [file nati 2be60 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 2be70 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2be80 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 2be90 74 44 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61 tDataPath] nonWa 2bea0 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 l.db]].... 2beb0 20 20 20 20 73 65 74 20 77 61 6c 44 62 46 69 6c set walDbFil 2bec0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2bed0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2bee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2bef0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2bf00 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 5d 5d 0d aPath] wal.db]]. 2bf10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 2bf20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 2bf30 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e : The various in 2bf40 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 stall/uninstall 2bf50 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 log files used t 2bf60 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 o test the.. 2bf70 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 # de 2bf80 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e sign-time compon 2bf90 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a ent installer... 2bfa0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2bfb0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 2bfc0 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 2bfd0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2bfe0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2bff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c000 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 2c010 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 2c020 65 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c er_Test_Vs2005.l 2c030 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2c040 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 2c050 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b lVs2008LogFile [ 2c060 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 2c070 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 2c080 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2c090 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 2c0a0 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 2c0b0 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d st_Vs2008.log]]. 2c0c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2c0d0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 2c0e0 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 10LogFile [file 2c0f0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2c100 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2c110 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2c120 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 2c130 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2c140 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2010.log]].... 2c150 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2c160 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 InstallVs2012Log 2c170 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 2c180 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 2c190 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c1a0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 2c1b0 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c DataPath] Instal 2c1c0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e ler_Test_Vs2012. 2c1d0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 2c1e0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 set testInsta 2c1f0 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 llVs2013LogFile 2c200 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2c210 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2c230 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2c240 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 2c250 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d est_Vs2013.log]] 2c260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2c270 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 t testInstallVs2 2c280 30 31 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 015LogFile [file 2c290 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2c2a0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2c2b0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2c2c0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2c2d0 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 Installer_Test_V 2c2e0 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2015.log]].... 2c2f0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 set tes 2c300 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f tInstallVs2017Lo 2c310 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 2c320 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 2c330 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2c340 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 2c350 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 tDataPath] Insta 2c360 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 ller_Test_Vs2017 2c370 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 2c380 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e set testUnin 2c390 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 stallVs2005LogFi 2c3a0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 2c3b0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 2c3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c3d0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 2c3e0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 2c3f0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e ler_Test_Vs2005. 2c400 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 2c410 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 set testUnins 2c420 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 2c430 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2c440 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2c450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2c460 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2c470 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 2c480 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c er_Test_Vs2008.l 2c490 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2c4a0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 set testUninst 2c4b0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 2c4c0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 2c4d0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 2c4f0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 2c500 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 Path] Uninstalle 2c510 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f r_Test_Vs2010.lo 2c520 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 g]].... 2c530 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 2c540 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 llVs2012LogFile 2c550 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2c560 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 2c570 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2c580 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2c590 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 ath] Uninstaller 2c5a0 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 _Test_Vs2012.log 2c5b0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ]].... 2c5c0 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 2c5d0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b lVs2013LogFile [ 2c5e0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 2c5f0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 2c600 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2c610 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 2c620 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f th] Uninstaller_ 2c630 54 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d Test_Vs2013.log] 2c640 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ].... s 2c650 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c et testUninstall 2c660 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5b 66 Vs2015LogFile [f 2c670 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 2c680 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 2c690 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 2c6a0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 2c6b0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 2c6c0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d est_Vs2015.log]] 2c6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2c6e0 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 t testUninstallV 2c6f0 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 s2017LogFile [fi 2c700 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2c710 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2c720 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 2c730 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 2c740 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 2c750 73 74 5f 56 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d st_Vs2017.log]]. 2c760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 23 23 ... ### 2c770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2c780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2c790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2c7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2c7b0 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ##.... 2c7c0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2c7d0 73 20 3a 3a 6e 6f 28 63 68 65 63 6b 46 6f 72 53 s ::no(checkForS 2c7e0 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 2c7f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2c800 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2c810 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2c820 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2c830 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2c840 65 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72 e tail$entityFr
2c850 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d  ameworkDllFile]]
2c860 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2c870 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
2c880 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 2c890 6e 65 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 nel$entityFrame
2c8a0 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  workDllFile..
2c8b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2c8c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2c8d0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2c8e0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2c8f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2c900 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2c910 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 installerExeFile 2c920 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2c930 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2c940 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2c950 61 6e 6e 65 6c 20 24 69 6e 73 74 61 6c 6c 65 72  annel $installer 2c960 45 78 65 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 ExeFile Installe 2c970 72 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20 r.exe.. 2c980 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2c990 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2c9a0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2c9b0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2c9d0 69 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65 ile tail$sqlite
2c9e0 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d  DesignerDllFile]
2c9f0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2ca00 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2ca10 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2ca20 6e 6e 65 6c 20 24 73 71 6c 69 74 65 44 65 73 69 nnel$sqliteDesi
2ca30 67 6e 65 72 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  gnerDllFile..
2ca40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2ca50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2ca60 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2ca70 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2ca80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2ca90 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2caa0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 2cab0 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e DllFile]]]} then 2cac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2cad0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2cae0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79  test_channel $sy 2caf0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c stemDataSQLiteDl 2cb00 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 lFile.. 2cb10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2cb20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2cb30 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2cb40 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2cb60 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d ile tail$system
2cb70 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c  DataSQLiteLinqDl
2cb80 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  lFile]]]} then {
2cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2cba0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2cbb0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 st_channel$syst
2cbc0 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71  emDataSQLiteLinq
2cbd0 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
2cbe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2cbf0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2cc00 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2cc10 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cc30 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74  [file tail $syst 2cc40 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 2cc50 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 llFile]]]} then 2cc60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2cc70 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2cc80 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73  est_channel $sys 2cc90 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 temDataSQLiteEf6 2cca0 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 2ccb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2ccc0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2ccd0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2cce0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2cd00 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
2cd10 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  ExeFile]]]} then
2cd20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2cd30 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2cd40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
2cd50 73 74 45 78 65 46 69 6c 65 20 74 65 73 74 2e 65  stExeFile test.e
2cd60 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xe..
2cd70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
2cd80 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
2cd90 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
2cda0 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
2cdb0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
2cdc0 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45   tail $testLinqE 2cdd0 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 xeFile]]]} then 2cde0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2cdf0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2ce00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 2ce10 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 74 65 73 tLinqExeFile tes 2ce20 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 20 20 20 20 tlinq.exe.. 2ce30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2ce40 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 2ce50 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 2ce60 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 2ce70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2ce80 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
2ce90 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d  stEf6ExeFile]]]}
2cea0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2ceb0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2cec0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2ced0 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c l$testEf6ExeFil
2cee0 65 20 74 65 73 74 65 66 36 2e 65 78 65 0d 0a 20  e testef6.exe..
2cef0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2cf10 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2cf20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2cf30 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2cf40 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
2cf50 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c   $testLinqOutFil 2cf60 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2cf70 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 2cf80 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2cf90 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71  hannel $testLinq 2cfa0 4f 75 74 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 OutFile.. 2cfb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2cfc0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2cfd0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2cfe0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d000 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 [file tail$nort
2d010 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d  hwindEfDbFile]]]
2d020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2d030 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2d040 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 2d050 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 el$northwindEfD
2d060 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  bFile..
2d070 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2d080 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2d090 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2d0a0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2d0c0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c  ile tail $nonWal 2d0d0 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 DbFile]]]} then 2d0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d0f0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2d100 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e  est_channel $non 2d110 57 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 WalDbFile.. 2d120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2d130 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 2d140 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 2d150 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 2d160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d170 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61 [file tail$wa
2d180 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  lDbFile]]]} then
2d190 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2d1a0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2d1b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 77 61 test_channel$wa
2d1c0 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  lDbFile..
2d1d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2d1e0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2d1f0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2d200 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d220 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2d230 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 InstallVs2005Log 2d240 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2d250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2d260 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2d270 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 2d280 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 2d290 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 2d2a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 2d2b0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2d2c0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2d2d0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2d2f0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
2d300 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
2d310 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
2d320 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
2d330 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2d340 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
2d350 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 0d  llVs2008LogFile.
2d360 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d380 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
2d390 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
2d3a0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
2d3b0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2d3c0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 2d3d0 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2010LogFile]]]} 2d3e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2d3f0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2d400 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2d410 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 2d420 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2010LogFile.. 2d430 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2d440 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2d450 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2d460 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2d470 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d480 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2d490 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
2d4a0 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  2LogFile]]]} the
2d4b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2d4c0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
2d4d0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
2d4e0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32  estInstallVs2012
2d4f0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
2d500 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2d510 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2d520 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2d530 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d550 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2d560 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 2d570 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2d580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2d590 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2d5a0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 2d5b0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 2d5c0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 2d5d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 2d5e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2d5f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2d600 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2d610 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2d620 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
2d630 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
2d640 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
2d650 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
2d660 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2d670 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
2d680 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 0d  llVs2015LogFile.
2d690 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d6b0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
2d6c0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
2d6d0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
2d6e0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2d6f0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 2d700 73 32 30 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2017LogFile]]]} 2d710 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2d720 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2d730 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2d740 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 2d750 32 30 31 37 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2017LogFile.. 2d760 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2d770 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2d780 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2d790 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2d7a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d7b0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2d7c0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2d7d0 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
2d7e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2d7f0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2d800 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2d810 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2d820 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2005LogFile..
2d830 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2d840 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2d850 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2d860 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2d870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2d880 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2d890 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2d8a0 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 008LogFile]]]} t 2d8b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2d8c0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2d8d0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2d8e0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2d8f0 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2008LogFile.. 2d900 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2d910 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2d920 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2d930 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2d940 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d950 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2d960 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2d970 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  010LogFile]]]} t
2d980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2d990 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2d9a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2d9b0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2d9c0 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2010LogFile..
2d9d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2d9e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2d9f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2da00 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2da10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2da20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2da30 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2da40 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 012LogFile]]]} t 2da50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2da60 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2da70 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2da80 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2da90 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2012LogFile.. 2daa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2dab0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2dac0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2dad0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2dae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2daf0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2db00 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2db10 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
2db20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2db30 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2db40 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2db50 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2db60 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2013LogFile..
2db70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2db80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2db90 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2dba0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2dbb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2dbc0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2dbd0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2dbe0 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 015LogFile]]]} t 2dbf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2dc00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2dc10 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2dc20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2dc30 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2015LogFile.. 2dc40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2dc50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2dc60 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2dc70 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2dc80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2dc90 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2dca0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2dcb0 30 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  017LogFile]]]} t
2dcc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2dcd0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2dce0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2dcf0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2dd00 32 30 31 37 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2017LogFile..
2dd10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2dd20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2dd30 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
2dd40 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
2dd50 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c  runSQLiteTestFil
2dd60 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d  esEpilogue {} {.
2dd70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2dd80 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e  # NOTE: Skip run
2dd90 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20  ning our custom
2dda0 66 69 6c 65 73 20 65 70 69 6c 6f 67 75 65 20 69  files epilogue i
2ddb0 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
2ddc0 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
2ddd0 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
2dde0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2ddf0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2de00 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e  s ::no(epilogue.
2de10 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
2de20 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c  .        uplevel
2de30 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   1 {..
2de40 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
2de50 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
2de60 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c     testUninstall
2de70 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 74 65  Vs2017LogFile te
2de80 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2de90 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20  5LogFile \..
2dea0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e            testUn
2deb0 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  installVs2013Log
2dec0 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61  File testUninsta
2ded0 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20  llVs2012LogFile
2dee0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2def0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
2df00 32 30 31 30 4c 6f 67 46 69 6c 65 20 74 65 73 74  2010LogFile test
2df10 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c  UninstallVs2008L
2df20 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  ogFile \..
2df30 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e          testUnin
2df40 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
2df50 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
2df60 32 30 31 37 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2017LogFile \..
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2df80 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  tInstallVs2015Lo
2df90 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c  gFile testInstal
2dfa0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c  lVs2013LogFile \
2dfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2dfc0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
2dfd0 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73  2LogFile testIns
2dfe0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
2dff0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
2e000 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73     testInstallVs
2e010 32 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74  2008LogFile test
2e020 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  InstallVs2005Log
2e030 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  File....
2e040 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
2e050 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ain \..
2e060 20 20 20 20 20 6e 6f 72 74 68 77 69 6e 64 45 66       northwindEf
2e070 44 62 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f  DbFile testLinqO
2e080 75 74 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  utFile \..
2e090 20 20 20 20 20 20 20 20 77 61 6c 44 62 46 69 6c          walDbFil
2e0a0 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a  e nonWalDbFile..
2e0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
2e0c0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
2e0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2e0e0 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65  estEf6ExeFile te
2e0f0 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d  stLinqExeFile \.
2e100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2e110 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65  estExeFile syste
2e120 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c  mDataSQLiteEf6Dl
2e130 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  lFile \..
2e140 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 74         systemDat
2e150 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
2e160 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  le systemDataSQL
2e170 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20  iteDllFile \..
2e180 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
2e190 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c  teDesignerDllFil
2e1a0 65 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69  e installerExeFi
2e1b0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2e1c0 20 20 20 20 65 6e 74 69 74 79 46 72 61 6d 65 77      entityFramew
2e1d0 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20  orkDllFile..
2e1e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
2e1f0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
2e200 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
2e210 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20  Epilogue {} {..
2e220 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2e230 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69  NOTE: Skip runni
2e240 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70  ng our custom ep
2e250 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61  ilogue if the ma
2e260 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d  in one has been.
2e270 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
2e280 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
2e290 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
2e2a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
2e2b0 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
2e2c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2e2d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2e2e0 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
2e2f0 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
2e300 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20   ended (now)...
2e310 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2e320 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2e330 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2e340 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 2e350 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 2e360 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 2e370 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a s ended at " \.. 2e380 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 2e390 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 2e3a0 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 2e3b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2e3c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 # NOTE: Loa 2e3d0 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 d the "epilogue" 2e3e0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 custom per-user 2e3f0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 and/or per-host 2e400 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 2e410 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 settings 2e420 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 2e430 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 2e440 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 1 [list loadSQL 2e450 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 iteTestSettings 2e460 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2e470 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20  .epilogue]....
2e480 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2e490 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72   # BUGFIX: Befor
2e4a0 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66  e checking the f
2e4b0 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69  inal resources i
2e4c0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c  n use by SQLite,
2e4d0 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23   make..        #
2e4e0 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f           sure bo
2e4f0 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  th of the PRAGMA
2e500 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f   related directo
2e510 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65  ry names are fre
2e520 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
2e530 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2e540 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
2e550 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2e560 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 l true.... 2e570 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2e580 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 OTE: Also report 2e590 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 the resource us 2e5a0 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e age after runnin 2e5b0 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 g the tests... 2e5c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2e5d0 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 reportSQLiteRes 2e5e0 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 ources$::test_c
2e5f0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
2e600 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2e610 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20  OTE: Report the
2e620 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
2e630 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e  counts after run
2e640 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d  ning the tests..
2e650 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2e660 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e      getSQLiteHan
2e670 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73  dleCounts $::tes 2e680 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 2e690 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2e6a0 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 # NOTE: If neces 2e6b0 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 sary, disable sh 2e6c0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 ared-cache mode 2e6d0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 2e6e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 . if {[ha 2e6f0 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 sRuntimeOption s 2e700 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 haredCache]} the 2e710 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 n {.. e 2e720 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 nableSharedCache 2e730 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2e740 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
2e750 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
2e760 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23  }.....    ######
2e770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e7b0 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
2e7c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e7d0 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67  ######## END Eag
2e7e0 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  le ONLY ########
2e7f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e800 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
2e810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2e850 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a  #######..  }....
2e860 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53    #..  # NOTE: S
2e870 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ave the name of
2e880 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
2e890 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
2e8a0 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b  le...  #..  if {
2e8b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f  ![info exists co
2e8c0 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d  mmon_directory]}
2e8d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
2e8e0 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
2e8f0 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
2e900 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a  [info script]]..
2e910 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
2e920 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68  NOTE: Provide th
2e930 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
2e940 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67  Lite test packag
2e950 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
2e960 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
2e970 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79  ckage provide Sy
2e980 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2e990 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a        .Test 1.0..}..