System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 01fca0bf121222804699cb62f8e33a8ecb64dcf0:

• File lib/System.Data.SQLite/common.eagle — part of check-in [0c447952e6] at 2017-11-17 20:07:07 on branch trunk — Bump version to 1.0.107.0. Add preliminary support for the .NET Framework 4.7.1. Update version history docs. (user: mistachkin size: 185453)

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 65 6e 61 62 6c  ..    proc enabl
15920 65 53 68 61 72 65 64 43 61 63 68 65 20 7b 20 63  eSharedCache { c
15930 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71  hannel enable {q
15940 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
15950 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
15960 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
15970 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
15980 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
15990 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
159a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
159b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
159c0 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
159d0 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65    sqlite3_enable
159e0 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b 65  _shared_cache [e
159f0 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65 29  xpr int($enable) 15a00 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c ].. } resul 15a10 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 15a20 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
15a30 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
15a40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 15a50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 15a60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 15a70 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 15a80 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 15a90 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e ared_cache("$en
15aa0 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..
15ab0 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20        ")... ok:
15ac0 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  " $result \n].. 15ad0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 15ae0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 15af0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
15b00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15b10 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15b20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 15b40 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 15b50 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 enable_shared_ca 15b60 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d che("$enable \.
15b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
15b80 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
15b90 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 15ba0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15bb0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 15bc0 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b proc setupDb { 15bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi 15be0 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d leName {mode ""} 15bf0 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 {dateTimeFormat 15c00 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 ""} {dateTimeKi 15c10 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 nd ""} {flags "" 15c20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b }.. { 15c30 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 extra ""} {quali 15c40 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 fy true} {delete 15c50 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 true} {uri fals 15c60 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e}.. 15c70 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d {temporary true} 15c80 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 {varName db} {q 15c90 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 15ca0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15cb0 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 # NOTE: First, s 15cc0 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 ee if our caller 15cd0 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 has requested a 15ce0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data 15cf0 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. 15d00 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f set isMemo 15d10 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 ry [isMemoryDb$
15d20 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
15d30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15d40 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c  TE: For now, all
15d50 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73 20   test databases
15d60 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73 74  used by the test
15d70 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 65   suite are place
15d80 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
15d90 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
15da0 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45  se directory.  E
15db0 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e 64  ach database and
15dc0 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a   related files..
15dd0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
15de0 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68 6f  ed by a test sho
15df0 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75  uld be cleaned u
15e00 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20 75  p by that test u
15e10 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..
15e20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70  #       "cleanup
15e30 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62  Db" procedure, b
15e40 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  elow...      #..
15e50 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 15e60 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 mory &&$qualify
15e70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15e80 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
15e90 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
15ea0 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
15eb0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil 15ec0 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d eName]].. } 15ed0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15ee0 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 # NOTE: By de 15ef0 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e fault, delete an 15f00 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 y pre-existing d 15f10 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 atabase with the 15f20 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 same file.. 15f30 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 # name i 15f40 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 f it currently e 15f50 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d xists... #. 15f60 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d . if {!$isM
15f70 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65  emory && $delete 15f80 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 && [file exists 15f90 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65$fileName]} the
15fa0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
15fb0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15fc0 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
15fd0 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69  e any pre-existi
15fe0 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68  ng database with
15ff0 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a   the same file..
16000 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16010 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
16020 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
16030 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
16040 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72  e $fileName} err 16050 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 16060 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 16070 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 16080 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 16090 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file 160a0 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 160b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 160c0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
160d0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
160e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 160f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 16100 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 16110 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 16120 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 16130 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 d to delete data 16140 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 base file \""$f
16150 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
16160 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
16170 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72  uring setup, err
16180 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 16190 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 161a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 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 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 161e0 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 161f0 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 16200 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 16210 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 16220 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 caller. The h 16230 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 andle to the ope 16240 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 69 6c ned database wil 16250 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 l be stored ther 16260 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 16270 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
16280 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20  ame db....
16290 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
162a0 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20   Start building
162b0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
162c0 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79  tring.  The only
162d0 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f   required portio
162e0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
162f0 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
16300 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  on string is the
16310 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68   data source, wh
16320 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ich contains the
16330 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16340 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
16350 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f  me itself.  If o
16360 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20  ur caller wants
16370 74 6f 20 75 73 65 20 61 20 55 52 49 20 61 73 0d  to use a URI as.
16380 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
16390 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20  he data source,
163a0 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20  use the FullUri
163b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
163c0 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20  g property to..
163d0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65       #       pre
163e0 76 65 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f  vent the data so
163f0 75 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d  urce string from
16400 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d   being mangled..
16410 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16420 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b  if {$uri} then { 16430 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f .. set co 16440 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 nnection {FullUr 16450 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a i=${fileName}}..
16460 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
16470 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e          set conn
16480 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75  ection {Data Sou
16490 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d  rce=${fileName}} 164a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 164b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 164c0 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 TE: Since this p 164d0 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 rocedure has no 164e0 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 special knowledg 164f0 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 e of what the de 16500 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 fault.. # 16510 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 setting is 16520 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 for the ToFullPa 16530 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 th connection st 16540 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c ring propery, al 16550 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ways.. # 16560 20 20 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 add the valu 16570 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 e we know about 16580 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f to the connectio 16590 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 n string... 165a0 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 #.. append 165b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f connection {;To 165c0 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 FullPath=${quali
165d0 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  fy}}....      #.
165e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
165f0 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
16600 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c  cified a journal
16610 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e   mode, add the n
16620 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e  ecessary portion
16630 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16640 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
16650 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
16660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
16670 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
16680 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65   $mode] > 0} the 16690 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app 166a0 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { 166b0 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b ;Journal Mode=${
166c0 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  mode}}..      }.
166d0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
166e0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72    # NOTE: If our
166f0 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65   caller specifie
16700 64 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72  d a DateTime for
16710 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63  mat, add the nec
16720 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20  essary..      #
16730 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66        portion of
16740 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
16750 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20  string now...
16760 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
16770 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $16780 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 dateTimeFormat] 16790 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 167a0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn 167b0 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d ection {;DateTim 167c0 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 eFormat=${dateTi
167d0 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20  meFormat}}..
167e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
167f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
16800 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63   our caller spec
16810 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65  ified a DateTime
16820 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65  Kind, add the ne
16830 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d  cessary portion.
16840 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
16850 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
16860 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
16870 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
16880 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
16890 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e  $dateTimeKind] > 168a0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 168b0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 168c0 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 ction {;DateTime 168d0 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b Kind=${dateTimeK
168e0 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ind}}..      }..
168f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16900 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
16910 6f 75 74 20 77 68 61 74 20 74 68 65 20 66 69 6e  out what the fin
16920 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69  al flags for thi
16930 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65  s connection nee
16940 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20  d to be...
16950 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61  #..      set fla
16960 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f  gs [getConnectio
16970 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d 65  nFlags $fileName 16980 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d$flags $quiet]. 16990 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 169a0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 169b0 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 169c0 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e d some SQLiteCon 169d0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 nectionFlags, ad 169e0 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 d the.. # 169f0 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 necessary p 16a00 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f ortion of the co 16a10 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 nnection string 16a20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 now... #.. 16a30 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 16a40 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 length$flags]
16a50 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
16a60 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
16a70 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24  ection {;Flags=$16a80 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 {flags}}.. 16a90 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 16aa0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o 16ab0 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif 16ac0 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 ied an extra pay 16ad0 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e load to the conn 16ae0 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 ection.. # 16af0 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 string, ap 16b00 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 pend it now... 16b10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 16b20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 16b30 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65$extra] > 0} the
16b40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70  n {..        app
16b50 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  end connection \
16b60 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20  ; $extra.. 16b70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 16b80 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 16b90 63 6c 61 72 69 74 79 2c 20 61 70 70 65 6e 64 20 clarity, append 16ba0 61 20 66 69 6e 61 6c 20 73 65 6d 69 63 6f 6c 6f a final semicolo 16bb0 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 n to the connect 16bc0 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 ion string... 16bd0 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 #.. appe 16be0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b nd connection \; 16bf0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 16c00 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 # NOTE: Open 16c10 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con 16c20 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 nection now, pla 16c30 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 cing the opaque 16c40 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 handle value.. 16c50 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f # into 16c60 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 the variable sp 16c70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 ecified by our c 16c80 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 16c90 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 . set db [s 16ca0 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 ql open -type SQ 16cb0 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e Lite [subst$con
16cc0 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20  nection]]....
16cd0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
16ce0 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68  TE: Configure th
16cf0 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  e temporary dire
16d00 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65  ctory for the ne
16d10 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62  wly opened datab
16d20 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ase..      #
16d30 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f     connection no
16d40 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c  w unless our cal
16d50 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d  ler forbids it..
16d60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16d70 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26  if {$temporary & 16d80 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 & ![info exists 16d90 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 ::no(setTemporar 16da0 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 yDirectory)]} th 16db0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 en {.. sq 16dc0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 l execute$db [a
16dd0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
16de0 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41           "PRAGMA
16df0 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
16e00 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74  ctory = \"" [get
16e10 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f  TemporaryDirecto
16e20 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20  ry] \"\;]..
16e30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
16e40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72       # NOTE: Per
16e50 66 6f 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70  form any extra p
16e60 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65  er-connection se
16e70 74 75 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c  tup for the newl
16e80 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20  y opened..
16e90 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  #       database
16ea0 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20   now unless our
16eb0 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69  caller forbids i
16ec0 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
16ed0 20 20 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e     set executeOn
16ee0 53 65 74 75 70 20 5b 67 65 74 45 78 65 63 75 74  Setup [getExecut
16ef0 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20  eOnSetup]....
16f00 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
16f10 65 6e 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e  ength $executeOn 16f20 53 65 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d Setup] > 0 && \. 16f30 0a 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 . ![inf 16f40 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 o exists ::no(ex 16f50 65 63 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 ecuteOnSetup)]} 16f60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16f70 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 16f80 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 E: This command 16f90 6d 61 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 may raise an err 16fa0 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 or; if so, that 16fb0 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 is fine, as.. 16fc0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 16fd0 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 enclosing test 16fe0 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 will then fail. 16ff0 20 54 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d The [subst] com 17000 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 mand is.. 17010 20 23 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e # used on 17020 20 74 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 the SQL in case 17030 20 69 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 it needs to ref 17040 65 72 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f er to state in o 17050 75 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ur.. # 17060 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 context... 17070 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17080 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 sql execute$db
17090 20 5b 73 75 62 73 74 20 24 65 78 65 63 75 74 65   [subst $execute 170a0 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 OnSetup].. 170b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 170c0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 # NOTE: Alwa 170d0 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f ys return the co 170e0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle 170f0 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 upon success... 17100 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 17110 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d turn$db..    }.
17120 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
17130 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b  DbConnection { {
17140 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
17150 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17160 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
17170 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
17180 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
17190 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
171a0 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
171b0 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
171c0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20    The handle to
171d0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65  the database pre
171e0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76  viously opened v
171f0 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ia the..      #
17200 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20        [setupDb]
17210 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
17220 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
17230 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17240 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 17250 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 17260 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 17270 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 This returns the 17280 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e ADO.NET IDbConn 17290 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e ection object in 172a0 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a stance for the.. 172b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 # sp 172c0 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 ecified databse 172d0 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 handle. Since g 172e0 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 etting this obje 172f0 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a ct relies upon.. 17300 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 17310 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 gle internals, g 17320 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 reat care should 17330 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f be taken to avo 17340 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d id disposing of. 17350 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 17360 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 his object or ot 17370 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 herwise putting 17380 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c it into an inval 17390 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 id state... 173a0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 173b0 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 nfo exists db]} 173c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 173d0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 173e0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 173f0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 17400 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 nPublic -objectf 17410 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 lags +NoDispose 17420 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 17430 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 Interpre 17440 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f ter.GetActive.co 17450 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 nnections Item$
17460 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  db..        } re
17470 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
17480 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
17490 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
174a0 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75  E: Success, retu
174b0 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62  rn the opaque ob
174c0 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  ject handle...
174d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
174e0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 174f0 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 ult.. } e 17500 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 17510 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 17520 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 NOTE: Failure, r 17530 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 17540 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17550 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
17560 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
17570 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17580 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
17590 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
175a0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  et connection ha
175b0 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  ndle for databas
175c0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
175d0 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20         $db "\", 175e0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
175f0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
17600 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
17610 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17620 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c  # NOTE: Failure,
17630 20 72 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f   return an obvio
17640 75 73 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61  usly invalid opa
17650 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
17660 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
17670 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
17680 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17690 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f   freeDbConnectio
176a0 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e  n { {varName con
176b0 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20  nection} } {..
176c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
176d0 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
176e0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
176f0 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e  able (e.g. "conn
17700 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d  ection") in the.
17710 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
17720 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
17730 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75  ller.  The opaqu
17740 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20  e object handle
17750 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a  for an ADO.NET..
17760 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
17770 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75  nnection previou
17780 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20  sly returned by
17790 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
177a0 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  ] should be..
177b0 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65     #       store
177c0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
177d0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
177e0 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63   $varName connec 177f0 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d tion.... #. 17800 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 17810 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 ttempt to remove 17820 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 17830 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 ct handle from t 17840 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a he interpreter.. 17850 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f # no 17860 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 w. This [object 17870 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 dispose] call w 17880 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 ill not actually 17890 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d dispose of the. 178a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u 178b0 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 nderlying object 178c0 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f because the +No 178d0 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 Dispose flag was 178e0 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 set on it.. 178f0 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 # during 17900 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 creation of the 17910 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h 17920 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d andle... #. 17930 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 17940 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 exists connecti 17950 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 on] && \.. 17960 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 [catch {obje 17970 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e ct dispose$conn
17980 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20  ection} error]}
17990 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
179a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
179b0 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61  E: We somehow fa
179c0 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74  iled to remove t
179d0 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72  he handle, repor
179e0 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
179f0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
17a00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 17a10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 17a20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 17a30 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 17a40 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e d to remove conn 17a50 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 ection handle \" 17a60 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d "$connection \.
17a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
17a80 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
17a90 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 17aa0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 17ab0 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e proc addDbCon 17ac0 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 nection { connec 17ad0 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 tion {varName db 17ae0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 17af0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 17b00 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci 17b10 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e 17b20 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the 17b30 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. 17b40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 17b50 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 17b60 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
17b70 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
17b80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
17b90 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f  OTE: Create a co
17ba0 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65  rrectly formatte
17bb0 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  d name for the d
17bc0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
17bd0 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  on to..      #
17be0 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f       be added to
17bf0 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65   the list manage
17c00 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69  d by the Eagle i
17c10 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
17c20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
17c30 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  db [object invok
17c40 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
17c50 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
17c60 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e   Eagle._Componen
17c70 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61  ts.Private.Forma
17c80 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a  tOps DatabaseObj
17c90 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74  ectName $connect 17ca0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 17cb0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f SQLiteConnectio 17cc0 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 n [object invoke 17cd0 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 17ce0 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d Active NextId]]. 17cf0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17d00 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 # NOTE: Add th 17d10 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne 17d20 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 ction provided b 17d30 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 y our caller to 17d40 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 the list.. 17d50 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 # of those 17d60 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 known to the Ea 17d70 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e gle interpreter. 17d80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17d90 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 17da0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 17db0 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 17dc0 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f Active.connectio 17dd0 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 ns Add \.. 17de0 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74$db $connect 17df0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ion.. }..... 17e00 20 20 20 70 72 6f 63 20 72 65 6d 6f 76 65 44 62 proc removeDb 17e10 54 72 61 6e 73 61 63 74 69 6f 6e 20 7b 20 74 72 Transaction { tr 17e20 61 6e 73 61 63 74 69 6f 6e 20 7d 20 7b 0d 0a 20 ansaction } {.. 17e30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 17e40 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 74 68 65 NOTE: Remove the 17e50 20 64 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 database transa 17e60 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 ction provided b 17e70 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 72 6f y our caller fro 17e80 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 m the.. # 17e90 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74 68 6f list of tho 17ea0 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 se known to the 17eb0 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 Eagle interprete 17ec0 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 17ed0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 17ee0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 17ef0 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ic Interpreter.G 17f00 65 74 41 63 74 69 76 65 2e 74 72 61 6e 73 61 63 etActive.transac 17f10 74 69 6f 6e 73 20 5c 0d 0a 20 20 20 20 20 20 20 tions \.. 17f20 20 20 20 52 65 6d 6f 76 65 20 24 74 72 61 6e 73 Remove$trans
17f30 61 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c  action..    }...
17f40 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 6f  ..    proc getRo
17f50 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20  wsFromDataTable
17f60 7b 20 64 61 74 61 54 61 62 6c 65 20 7b 76 61 6c  { dataTable {val
17f70 75 65 43 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d  ueCallback ""} }
17f80 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f   {..      set ro
17f90 77 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20  ws [list]..
17fa0 20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74   set count [$dat 17fb0 61 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 aTable Columns.C 17fc0 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 ount].... f 17fd0 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d or {set index 0} 17fe0 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e {$index < $coun 17ff0 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 t} {incr index} 18000 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 {.. set d 18010 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 ataColumn [$data
18020 54 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c  Table -alias Col
18030 75 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69  umns.get_Item $i 18040 6e 64 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 ndex].. s 18050 65 74 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 et names($index)
18060 20 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f   [$dataColumn Co 18070 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 lumnName].. 18080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 18090 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 # NOTE: Set 180a0 75 70 20 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 up some Tcl retu 180b0 72 6e 20 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 rn code constant 180c0 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 180d0 20 20 20 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 set Ok 0; set 180e0 20 45 72 72 6f 72 20 31 3b 20 73 65 74 20 52 65 Error 1; set Re 180f0 74 75 72 6e 20 32 3b 20 73 65 74 20 42 72 65 61 turn 2; set Brea 18100 6b 20 33 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 k 3; set Continu 18110 65 20 34 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a e 4.... obj 18120 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 ect foreach -ali 18130 61 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 as dataRow [set 18140 64 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 dataRows [$dataT
18150 61 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20  able Rows]] {..
18160 20 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b         set row [
18170 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  list]....
18180 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index
18190 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f  0} {$index <$co
181a0 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  unt} {incr index
181b0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  } {..          s
181c0 65 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52  et value [$dataR 181d0 6f 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 ow -create -alia 181e0 73 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 s get_Item$inde
181f0 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  x]....
18200 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
18210 74 68 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63  th $valueCallbac 18220 6b 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a k] > 0} then {.. 18230 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 18240 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 code [catch {.. 18250 20 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61$va
18260 6c 75 65 43 61 6c 6c 62 61 63 6b 20 24 64 61 74  lueCallback $dat 18270 61 54 61 62 6c 65 20 24 64 61 74 61 52 6f 77 20 aTable$dataRow
18280 24 69 6e 64 65 78 20 24 76 61 6c 75 65 0d 0a 20  $index$value..
18290 20 20 20 20 20 20 20 20 20 20 20 7d 20 6e 65 77             } new
182a0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
182b0 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20        if {$code 182c0 3d 3d 20 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a ==$Ok} then {..
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
182e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
182f0 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
18300 70 65 63 69 66 69 65 64 20 28 6e 65 77 3f 29 20  pecified (new?)
18310 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  row value...
18320 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18330 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
18340 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61  nd row [list $na 18350 6d 65 73 28 24 69 6e 64 65 78 29 20 24 6e 65 77 mes($index) $new 18360 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 Value].. 18370 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 } elseif {$c
18380 6f 64 65 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74  ode == $Error} t 18390 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 183a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 183b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 183c0 65 20 74 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c e the (new?) NUL 183d0 4c 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 L row value... 183e0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 lap 18400 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 pend row [list$
18410 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a  names($index)].. 18420 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 18430 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 seif {$code == $18440 52 65 74 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a Return} then {.. 18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 18460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18470 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 NOTE: Skip rema 18480 69 6e 69 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 ining values for 18490 20 74 68 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 this row... 184a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 184b0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b break 184c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 184d0 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d elseif {$code ==
184e0 20 24 42 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d   $Break} then {. 184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18510 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f # NOTE: Skip pro 18520 63 65 73 73 69 6e 67 20 74 68 69 73 20 72 6f 77 cessing this row 18530 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... 18540 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18550 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 18560 24 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e$code == $Contin 18570 75 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ue} then {.. 18580 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 18590 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 185a0 45 3a 20 55 73 65 20 64 65 66 61 75 6c 74 20 72 E: Use default r 185b0 6f 77 20 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e ow value handlin 185c0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g... 185d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 185e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 }.. } 185f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 18600 20 20 20 20 73 65 74 20 63 6f 64 65 20 24 43 6f set code$Co
18610 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20  ntinue..
18620 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
18630 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43   if {$code ==$C
18640 6f 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d  ontinue} then {.
18650 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
18660 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
18670 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c  $value] > 0 && \ 18680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18690 20 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ![object invok 186a0 65 20 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 e Convert IsDBNu 186b0 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e ll$value]} then
186c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
186d0 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c    lappend row [l
186e0 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65  ist $names($inde
186f0 78 29 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72  x) [$value ToStr 18700 69 6e 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 ing]].. 18710 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 18720 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 18730 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 nd row [list$na
18740 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20  mes($index)].. 18750 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 18760 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c }.... l 18780 61 70 70 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 append rows$row
18790 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
187a0 20 20 20 72 65 74 75 72 6e 20 24 72 6f 77 73 0d     return $rows. 187b0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 187c0 72 6f 63 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d roc dumpRowsFrom 187d0 44 61 74 61 54 61 62 6c 65 20 7b 20 63 68 61 6e DataTable { chan 187e0 6e 65 6c 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 nel rows } {.. 187f0 20 20 20 20 73 65 74 20 73 65 71 75 65 6e 63 65 set sequence 18800 20 31 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 1.... fore 18810 61 63 68 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d ach row$rows {.
18820 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $18830 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18840 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 18850 20 20 20 5b 65 78 70 72 20 7b 24 73 65 71 75 65 [expr {$seque
18860 6e 63 65 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a  nce > 1 ? "\n" :
18870 20 22 22 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20   ""}] "---- ROW
18880 23 22 20 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e  #" $sequence :\n 18890 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 ].... for 188a0 65 61 63 68 20 70 61 69 72 20 24 72 6f 77 20 7b each pair$row {
188b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
188c0 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20  [llength $pair] 188d0 3e 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 >= 2} then {.. 188e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 188f0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
18900 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20  Args \t \..
18910 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74             [list
18920 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30   [lindex $pair 0 18930 5d 5d 20 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c ]] ": " [list [l 18940 69 6e 64 65 78 20 24 70 61 69 72 20 31 5d 5d 20 index$pair 1]]
18950 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
18960 20 65 6c 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74   elseif {[llengt
18970 68 20 24 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74  h $pair] == 1} t 18980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18990 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
189a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74  l [appendArgs \t
189b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
189c0 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65      [list [linde
189d0 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c  x $pair 0]] ": < 189e0 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 null>\n"].. 189f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 18a00 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 18a10 20 24 63 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70$channel \t<emp
18a20 74 79 3e 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e  ty>\n; # NOTE: N
18a30 6f 20 64 61 74 61 3f 0d 0a 20 20 20 20 20 20 20  o data?..
18a40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
18a50 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20  ...        incr
18a60 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 20 20  sequence..
18a70 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
18a80 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20   proc cleanupDb
18a90 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e  { fileName {varN
18aa0 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74  ame db} {collect
18ab0 20 74 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20   true} {qualify
18ac0 74 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20  true}..
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c              {del
18ae0 65 74 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ete true} } {..
18af0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18b00 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
18b10 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69   force all pendi
18b20 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a  ng "garbage" obj
18b30 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65  ects to be colle
18b40 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20  cted,..      #
18b50 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53       including S
18b60 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  QLite statements
18b70 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65   and backup obje
18b80 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64  cts; this should
18b90 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20   allow..      #
18ba0 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c        the underl
18bb0 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
18bc0 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  le to be deleted
18bd0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
18be0 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20    if {$collect} 18bf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18c00 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 collectGarbage$
18c10 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
18c20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18c30 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18c40 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
18c50 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
18c60 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
18c70 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
18c80 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
18c90 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
18ca0 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61  handle to the da
18cb0 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c  tabase previousl
18cc0 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  y opened via the
18cd0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
18ce0 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64  [setupDb] proced
18cf0 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74  ure should be st
18d00 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
18d10 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
18d20 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. 18d30 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 18d40 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 # NOTE: Close 18d50 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 the connection t 18d60 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e o the database n 18d70 6f 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 ow. This should 18d80 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 allow us.. 18d90 20 23 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 # to dele 18da0 74 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e te the underlyin 18db0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e g database file. 18dc0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 18dd0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 18de0 73 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 s db] && [catch 18df0 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 {sql close$db}
18e00 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
18e10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18e20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
18e30 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
18e40 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61  close the databa
18e50 73 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  se, report why..
18e60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
18e70 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 18e80 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 18e90 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 18ea0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 18eb0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c NG: failed to cl 18ec0 6f 73 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 ose database \"" 18ed0 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a$db "\", error:
18ee0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
18ef0 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e    \n\t $error \n 18f00 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 18f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 18f20 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see 18f30 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha 18f40 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i 18f50 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas 18f60 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 18f70 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory 18f80 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
18f90 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
18fa0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
18fb0 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20   Build the full
18fc0 70 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61  path to the data
18fd0 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20  base file name.
18fe0 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
18ff0 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  st..      #
19000 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73    database files
19010 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
19020 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  he temporary dir
19030 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23  ectory...      #
19040 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is 19050 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 Memory &&$quali
19060 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  fy} then {..
19070 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
19080 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
19090 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
190a0 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  y] [file tail $f 190b0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. 190c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 190d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 190e0 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 ck if the file s 190f0 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 till exists... 19100 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 19110 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $19120 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 delete && [file 19130 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
19140 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
19150 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
19160 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74  NOTE: Skip delet
19170 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
19180 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73  es if somebody s
19190 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ets the global..
191a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
191b0 76 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76  variable to prev
191c0 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  ent it...
191d0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
191e0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
191f0 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65  no(cleanupDbFile
19200 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
19210 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19220 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
19230 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  pt to delete the
19240 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20 66   test database f
19250 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ile now...
19260 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
19270 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b   if {[set code [
19280 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
19290 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 192a0 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ror]]} then {.. 192b0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 192c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 192d0 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai 192e0 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th 192f0 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w 19300 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... 19310 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19320 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19330 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19340 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19350 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
19360 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
19370 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69  lete database fi
19380 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 19390 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 193a0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 193b0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " 193c0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
193d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
193e0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
193f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
19400 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19410 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
19420 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
19430 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
19440 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19450 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20  set code 0....
19460 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 19470 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 19480 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 19490 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 194a0 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 WARNING: skippe 194b0 64 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 d deleting datab 194c0 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ase file \""$fi
194d0 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
194e0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
194f0 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a  ng cleanup\n"]..
19500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19510 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19520 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
19530 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64  NOTE: The file d
19540 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73  oes not exist, s
19550 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20  uccess!..
19560 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
19570 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d  code 0..      }.
19580 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
19590 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $code.. }.... 195a0 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 6e . proc saveEn 195b0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 195c0 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e es { names {varN 195d0 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ame ""} } {.. 195e0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 195f0 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d TE: For each nam 19600 65 2c 20 64 6f 65 73 20 74 68 65 20 6c 69 76 65 e, does the live 19610 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 19620 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 iable exist? If 19630 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 19640 73 6f 2c 20 73 61 76 65 20 74 68 65 20 76 61 6c so, save the val 19650 75 65 20 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 ue for later; ot 19660 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 herwise, make su 19670 72 65 20 74 68 65 20 73 61 76 65 64 0d 0a 20 20 re the saved.. 19680 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 # valu 19690 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 e does not exist 196a0 20 65 69 74 68 65 72 2e 20 20 54 68 65 20 6c 69 either. The li 196b0 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 ve environment v 196c0 61 72 69 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 ariables.. 196d0 23 20 20 20 20 20 20 20 41 52 45 20 4e 4f 54 20 # ARE NOT 196e0 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 changed by this 196f0 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 procedure... 19700 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 19710 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
19720 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68  arName] == 0} th
19730 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
19740 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45  t varName savedE
19750 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  nv..      }....
19760 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 19770 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a rName savedEnv.. 19780 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 19790 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 name$names {..
197a0 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
197b0 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e   exists ::env($n 197c0 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ame)]} then {.. 197d0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 61 76 set sav 197e0 65 64 45 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a edEnv($name) $:: 197f0 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 env($name)..
19800 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
19810 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
19820 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
19830 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20  nv($name).. 19840 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 19850 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 19860 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 # NOTE: This is 19870 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 self-cleaning. 19880 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 If no saved envi 19890 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 198a0 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 s now.. # 198b0 20 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f exist, remo 198c0 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 ve the array... 198d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 198e0 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 {[array size sa 198f0 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 vedEnv] == 0} th 19900 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e en {.. un 19910 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 19920 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 savedEnv.. 19930 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 19940 20 70 72 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 proc restoreEnv 19950 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 19960 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 s { names {varNa 19970 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 19980 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 19990 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 E: For each name 199a0 2c 20 64 6f 65 73 20 74 68 65 20 73 61 76 65 64 , does the saved 199b0 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 199c0 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 iable exist? If 199d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 199e0 73 6f 2c 20 72 65 73 74 6f 72 65 20 74 68 65 20 so, restore the 199f0 73 61 76 65 64 20 76 61 6c 75 65 20 61 6e 64 20 saved value and 19a00 75 6e 73 65 74 20 69 74 3b 20 6f 74 68 65 72 77 unset it; otherw 19a10 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a ise, make sure.. 19a20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 19a30 65 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 e live environme 19a40 6e 74 20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 nt variable does 19a50 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 not exist eithe 19a60 72 20 28 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 r (i.e. it.. 19a70 20 20 23 20 20 20 20 20 20 20 77 61 73 20 6e 6f # was no 19a80 74 20 73 65 74 20 74 6f 20 62 65 67 69 6e 20 77 t set to begin w 19a90 69 74 68 29 2e 20 20 42 6f 74 68 20 73 61 76 65 ith). Both save 19aa0 64 20 61 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 d and live envir 19ab0 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 onment.. # 19ac0 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 20 variables 19ad0 41 52 45 20 63 68 61 6e 67 65 64 20 62 79 20 74 ARE changed by t 19ae0 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a his procedure... 19af0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 19b00 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 19b10 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 h$varName] == 0
19b20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19b30 20 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61    set varName sa
19b40 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d  vedEnv..      }.
19b50 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  ...      upvar 1
19b60 20 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45   $varName savedE 19b70 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 nv.... fore 19b80 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 ach name$names
19b90 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
19ba0 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76 65  info exists save
19bb0 64 45 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68  dEnv($name)]} th 19bc0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19bd0 73 65 74 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 set ::env($name)
19be0 20 24 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65   $savedEnv($name
19bf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73  )..          uns
19c00 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73  et -nocomplain s
19c10 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a  avedEnv($name).. 19c20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 19c30 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 .. unse 19c40 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a t -nocomplain :: 19c50 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 env($name)..
19c60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
19c70 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
19c80 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73   # NOTE: This is
19c90 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20   self-cleaning.
19ca0 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76   If no saved env
19cb0 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
19cc0 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20  es now..      #
19cd0 20 20 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d        exist, rem
19ce0 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a  ove the array...
19cf0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19d00 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73  f {[array size s
19d10 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74  avedEnv] == 0} t
19d20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
19d30 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
19d40 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20   savedEnv..
19d50 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
19d60 20 20 70 72 6f 63 20 73 61 76 65 4d 64 61 43 6f    proc saveMdaCo
19d70 6e 66 69 67 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  nfigEnvironment
19d80 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
19d90 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
19da0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73  edEnv....      s
19db0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
19dc0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f  riables [list CO
19dd0 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64  MPLUS_MDA] saved
19de0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  Env..    }.....
19df0 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 4d     proc restoreM
19e00 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d  daConfigEnvironm
19e10 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ent {} {..
19e20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76  upvar 1 savedEnv
19e30 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20   savedEnv....
19e40 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f     restoreEnviro
19e50 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b  nmentVariables [
19e60 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 41  list COMPLUS_MDA
19e70 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20  ] savedEnv..
19e80 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
19e90 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c  aveGetSettingVal
19ea0 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d  ueEnvironment {}
19eb0 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   {..      upvar
19ec0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64  1 savedEnv saved
19ed0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76  Env....      sav
19ee0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
19ef0 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  ables [list \..
19f00 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70 61           No_Expa
19f10 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53  nd No_SQLiteGetS
19f20 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53  ettingValue No_S
19f30 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69  QLiteXmlConfigFi
19f40 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le] \..
19f50 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d   savedEnv..    }
19f60 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65  .....    proc re
19f70 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67 56  storeGetSettingV
19f80 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  alueEnvironment
19f90 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
19fa0 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
19fb0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72  edEnv....      r
19fc0 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e  estoreEnvironmen
19fd0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
19fe0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f   \..          No
19ff0 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74  _Expand No_SQLit
1a000 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65  eGetSettingValue
1a010 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e   No_SQLiteXmlCon
1a020 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20  figFile] \..
1a030 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a        savedEnv..
1a040 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1a050 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e  oc saveSQLiteCon
1a060 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65  nectionEnvironme
1a070 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1a080 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1a090 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1a0a0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
1a0b0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1a0c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65   \..          De
1a0d0 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74  faultFlags_SQLit
1a0e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53  eConnection No_S
1a0f0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e  QLiteConnectionN
1a100 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20  ewParser] \..
1a110 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d         savedEnv.
1a120 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1a130 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74  roc restoreSQLit
1a140 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72  eConnectionEnvir
1a150 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20  onment {} {..
1a160 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64     upvar 1 saved
1a170 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a  Env savedEnv....
1a180 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76        restoreEnv
1a190 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
1a1a0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
1a1b0 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67       DefaultFlag
1a1c0 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  s_SQLiteConnecti
1a1d0 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e  on No_SQLiteConn
1a1e0 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d  ectionNewParser]
1a1f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61   \..          sa
1a200 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c  vedEnv..    }...
1a210 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53  ..    proc saveS
1a220 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69  QLiteConvertEnvi
1a230 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1a240 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1a250 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1a260 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72  .      saveEnvir
1a270 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1a280 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
1a290 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e     Use_SQLiteCon
1a2a0 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79  vert_DefaultDbTy
1a2b0 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e  pe Use_SQLiteCon
1a2c0 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65  vert_DefaultType
1a2d0 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20  Name] \..
1a2e0 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20     savedEnv..
1a2f0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1a300 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e  restoreSQLiteCon
1a310 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  vertEnvironment
1a320 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1a330 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1a340 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72  edEnv....      r
1a350 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e  estoreEnvironmen
1a360 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1a370 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73   \..          Us
1a380 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f  e_SQLiteConvert_
1a390 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 73  DefaultDbType Us
1a3a0 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f  e_SQLiteConvert_
1a3b0 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d  DefaultTypeName]
1a3c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61   \..          sa
1a3d0 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c  vedEnv..    }...
1a3e0 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
1a3f0 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  DbInterruptCallb
1a400 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f  ack { channel lo
1a410 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  g } {..      tpu
1a420 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 1a430 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 - setting up deb 1a440 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 ugger interrupt 1a450 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d callback... "... 1a460 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 1a470 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 76 h {.. sav 1a480 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 eEnvironmentVari 1a490 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 ables [list \.. 1a4a0 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 74 quiet 1a4b0 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 FindInterpreterT 1a4c0 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 74 estPath quietSet 1a4d0 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 upInterpreterTes 1a4e0 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 tPath].... 1a4f0 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 1a500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a510 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 # NOTE: Prevent 1a520 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 70 the vendor scrip 1a530 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69 t from being noi 1a540 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 sy when creating 1a550 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1a560 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 64 the isolated 1a570 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1a580 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1a590 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 set ::env( 1a5a0 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 quietFindInterpr 1a5b0 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 0d eterTestPath) 1. 1a5c0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 1a5d0 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49 :env(quietSetupI 1a5e0 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 nterpreterTestPa 1a5f0 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 th) 1.... 1a600 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a610 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 # NOTE: Make sur 1a620 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 e the script deb 1a630 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 ugger and the is 1a640 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 1a650 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 er.. # 1a660 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 20 are setup 1a670 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 1a680 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e... #. 1a690 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 1a6a0 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65 setup true true 1a6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 1a6c0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1a6d0 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 E: Load the nece 1a6e0 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 ssary packages i 1a6f0 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 nto the isolated 1a700 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1a710 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1a720 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c debug eval 1a730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a740 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require 1a750 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 Eagle.. 1a760 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 package requi 1a770 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 re Eagle.Library 1a780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 .. pa 1a790 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 ckage require Ea 1a7a0 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 gle.Test.. 1a7b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1a7c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a7d0 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 # NOTE: Copy the 1a7e0 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61 necessary varia 1a7f0 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 bles into the is 1a800 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 1a810 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 1a820 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 1a830 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a g invoke 0 set : 1a840 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 :test_channel$c
1a850 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20  hannel; # NOTE:
1a860 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20  For [tputs]...
1a870 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
1a880 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
1a890 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f  t_log $log; # NO 1a8a0 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d TE: For [tlog].. 1a8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1a8c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1a8d0 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 : Install the ca 1a8e0 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f llback script to 1a8f0 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e be evaluated in 1a900 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 the isolated.. 1a910 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1a920 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 interpreter whe 1a930 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 n this interpret 1a940 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 er is interrupte 1a950 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 d by script.. 1a960 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 1a970 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 ancellation, etc 1a980 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1a990 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 1a9a0 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b callback apply { 1a9b0 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 {sender e} {.. 1a9c0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1a9d0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1a9e0 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 64 Check if this d 1a9f0 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 6b ebugger callback 1aa00 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 is one that we 1aa10 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 care about... 1aa20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1aa30 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 65 set inte 1aa40 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c 69 rruptTypes [spli 1aa50 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 t [$e InterruptT
1aa60 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20  ype] ", "]....
1aa70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 43            if {"C
1aa80 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e 74  anceled" in $int 1aa90 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 5c erruptTypes || \ 1aaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1aab0 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24 "Unwound" in$
1aac0 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d 20  interruptTypes}
1aad0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1aae0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1aaf0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
1ab00 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62  ake sure the [ob
1ab10 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  ject] command is
1ab20 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e   available.  Sin
1ab30 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..
1ab40 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 69    #       this i
1ab50 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e  s an isolated in
1ab60 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b  terpreter, check
1ab70 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 64   for it the hard
1ab80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ab90 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20  #       way...
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
1abc0 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info
1abd0 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d  commands object]
1abe0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1ac00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ac10 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74    # NOTE: Iterat
1ac20 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61  e through all da
1ac30 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1ac40 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d  ns known to the.
1ac50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ac60 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20   #       parent
1ac70 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1ac90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1aca0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
1acb0 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a  -alias pair [obj
1acc0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1acd0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1acf0 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65 74      $e Interpret 1ad00 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 er.connections] 1ad10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ad20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ad30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1ad40 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e : Attempt to can 1ad50 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 cel any SQL quer 1ad60 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 ies in progress 1ad70 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 1ad80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 1ad90 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e is database conn 1ada0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 ection... 1adb0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1add0 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 if {[catch {$pai
1ade0 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20  r Value.Cancel}
1adf0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae10 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1ae20 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1ae30 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 dArgs \n \.. 1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ae50 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1ae60 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e G: failed to can 1ae70 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20 cel query for " 1ae80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ae90 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e "conn 1aea0 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 ection \"" [$pai
1aeb0 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f  r Key] "\", erro
1aec0 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20  r: " \n\t \..
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aee0 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d       $error \n]. 1aef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1af00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1af10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1af20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1af40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1af50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1af60 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20  gs \n \..
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1af80 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e  == WARNING: cann
1af90 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75  ot cancel any qu
1afa0 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20  eries: " \..
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1afc0 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20  "the \"object\"
1afd0 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61  command is not a
1afe0 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20  vailable\n"]..
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b000 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1b010 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20          }}..
1b020 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d      } finally {.
1b030 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74 6f  .          resto
1b040 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  reEnvironmentVar
1b050 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75                qu
1b070 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74  ietFindInterpret
1b080 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74  erTestPath quiet
1b090 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72  SetupInterpreter
1b0a0 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 20  TestPath]..
1b0b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72     }..      } er
1b0c0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ror] == 0} then
1b0d0 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  {..        addCo
1b0e0 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75  nstraint interru
1b0f0 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74  ptCallback.sqlit
1b100 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  e3....        tp
1b110 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes 1b120 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 \n.. } else 1b130 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 1b140 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1b150 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f  ndArgs "no, erro
1b160 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1b170 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 1b180 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1b190 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 c cleanupFile { 1b1a0 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 fileName {collec 1b1b0 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 t true} {force f 1b1c0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 1b1d0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1b1e0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 : Attempt to for 1b1f0 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 ce all pending " 1b200 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 garbage" objects 1b210 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 to be collected 1b220 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ,.. # 1b230 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 including SQLit 1b240 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 e statements and 1b250 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b backup objects; 1b260 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c this should all 1b270 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ow.. # 1b280 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 the underlying 1b290 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 database file t 1b2a0 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 o be deleted... 1b2b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1b2c0 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e {$collect} then
1b2d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c   {..        coll
1b2e0 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65  ectGarbage $::te 1b2f0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 st_channel.. 1b300 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 1b310 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1b320 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 eck if the file 1b330 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 still exists... 1b340 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1b350 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
1b360 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
1b370 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1b380 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
1b390 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74  ip deleting test
1b3a0 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f   files if somebo
1b3b0 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62  dy sets the glob
1b3c0 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  al variable..
1b3d0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
1b3e0 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20  prevent it...
1b3f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b400 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b  if {$force || ![ 1b410 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1b420 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 (cleanupFile)]} 1b430 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b440 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1b450 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1b460 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 o delete the tes 1b470 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 t file now... 1b480 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b490 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 if {[set cod 1b4a0 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 e [catch {file d 1b4b0 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
1b4c0 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b   error]]} then {
1b4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1b4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1b4f0 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
1b500 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
1b510 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72   the file, repor
1b520 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
1b530 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1b540 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1b550 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1b560 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1b570 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1b580 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1b590 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c delete test fil 1b5a0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
1b5b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b5c0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
1b5d0 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20  eanup, error: "
1b5e0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1b5f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b600 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1b610 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1b620 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 1b630 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 how that we skip 1b640 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 ped deleting the 1b650 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... 1b660 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 1b670 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 et code 0.... 1b680 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1b690 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1b6a0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1b6b0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1b6c0 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64  WARNING: skipped
1b6d0 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66   deleting test f
1b6e0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 1b6f0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1b700 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1b710 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 eanup\n"].. 1b720 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 1b730 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 1b740 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1b750 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e The file does n 1b760 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 ot exist, succes 1b770 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s!.. #.. 1b780 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 set code 1b790 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 0.. }.... 1b7a0 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 return$code
1b7b0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1b7c0 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f  proc cleanupMemo
1b7d0 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75  ry { varName {qu
1b7e0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
1b7f0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1b800 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1b810 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
1b820 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
1b830 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 1b840 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b850 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1b860 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 1b870 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 1b880 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e able (e.g. "conn 1b890 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d ection") in the. 1b8a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1b8b0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 1b8c0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 caller. The opa 1b8d0 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 1b8e0 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20 e for an.. 1b8f0 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e 45 # ADO.NE 1b900 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 T connection pre 1b910 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 viously returned 1b920 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 by [getDbConnec 1b930 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23 tion].. # 1b940 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 should be 1b950 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a stored there... 1b960 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1b970 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
1b980 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ame connection..
1b990 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1b9a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1b9b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1b9c0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65  $connection Rele 1b9d0 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 aseMemory.. 1b9e0 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 } result]} th 1b9f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ba00 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1ba10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1ba20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1ba30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1ba40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1ba50 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1ba60 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 1ba70 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 20 elease database 1ba80 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22 memory, error: " 1ba90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1baa0 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
1bab0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1bac0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1bad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
1bae0 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
1baf0 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67  o commands debug
1bb00 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ]] > 0} then {..
1bb10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1bb20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1bb30 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
1bb40 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 20  debug purge]..
1bb50 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1bb60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bb70 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1bb80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bb90 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1bba0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1bbb0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1bbc0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1bbd0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1bbe0 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 61  o purge call fra
1bbf0 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  me, error: " \..
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bc10 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 1bc20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1bc30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1bc40 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1bc50 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 .. uple 1bc60 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 vel 1 [list debu 1bc70 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20 g cleanup].. 1bc80 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 1bc90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1bca0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1bcb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1bcc0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1bcd0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bce0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1bcf0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1bd00 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1bd10 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 65 cleanup interpre 1bd20 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ter, error: " \. 1bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1bd40 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
1bd50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1bd60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1bd70 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1bd80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c  {..          upl
1bd90 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62  evel 1 [list deb
1bda0 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20  ug collect]..
1bdb0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
1bdc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1bdd0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1bde0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1bdf0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1be00 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1be10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1be20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1be30 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1be40 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
1be50 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
1be70 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 1be80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1be90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1bea0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1beb0 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 43 roc setupMemoryC 1bec0 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 6d ounters { varNam 1bed0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 e } {.. if 1bee0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1bef0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 1bf00 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 {.. upva 1bf10 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 r 1$varName cou
1bf20 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nter....
1bf30 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 5b  set counter(1) [
1bf40 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
1bf50 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
1bf60 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e      System.Diagn
1bf70 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e  ostics.Performan
1bf80 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73  ceCounter Proces
1bf90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1bfa0 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b   "Working Set" [
1bfb0 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66  file rootname [f
1bfc0 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f  ile tail $::bin_ 1bfd0 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 file]]].... 1bfe0 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 32 set counter(2 1bff0 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 ) [object create 1c000 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 -alias \.. 1c010 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 System.Di 1c020 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 agnostics.Perfor 1c030 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f manceCounter Pro 1c040 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 cess \.. 1c050 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 "Working Set 1c060 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f Peak" [file roo 1c070 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail 1c080 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d$::bin_file]]].
1c090 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
1c0a0 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 63  ounter(3) [objec
1c0b0 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias
1c0c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
1c0d0 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
1c0e0 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75  s.PerformanceCou
1c0f0 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a  nter Process \..
1c100 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 69              "Pri
1c110 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 6c  vate Bytes" [fil
1c120 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
1c130 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c   tail $::bin_fil 1c140 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d e]]].. }... 1c150 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 . return "" 1c160 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1c170 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72 proc reportMemor 1c180 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 6e yCounters { chan 1c190 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 66 nel varName pref 1c1a0 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 ix } {.. if 1c1b0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1c1c0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1c1d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 1c1e0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f ar 1$varName co
1c1f0 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  unter....
1c200 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1c210 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1c220 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1c230 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 "$prefix " cou
1c240 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20  nter \"" \..
1c250 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
1c260 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28  invoke $counter( 1c270 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 1) CounterName] 1c280 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c "\" value is " \ 1c290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f .. [o 1c2a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
1c2b0 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c 75  unter(1) RawValu
1c2c0 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  e] \n]....
1c2d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1c2e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1c300 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
1c310 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
1c320 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
1c330 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 1c340 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (2) CounterName] 1c350 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 1c360 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1c370 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
1c380 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 6c  ounter(2) RawVal
1c390 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ue] \n]....
1c3a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1c3b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1c3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 1c3d0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 -- "$prefix " c
1c3e0 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20  ounter \"" \..
1c3f0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
1c400 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65  t invoke $counte 1c410 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 r(3) CounterName 1c420 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 ] "\" value is " 1c430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c440 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
1c450 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56 61  counter(3) RawVa
1c460 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  lue] \n]..
1c470 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1c480 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72   proc collectGar
1c490 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  bage { channel {
1c4a0 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30  milliseconds 100
1c4b0 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20  0} {quiet true}
1c4c0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
1c4d0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
1c4e0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
1c4f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1c500 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1c510 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1c520 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
1c530 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  y false..
1c540 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
1c550 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c560 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1c570 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c580 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1c590 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1c5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c5b0 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69    "---- memory i
1c5c0 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52  n use by the CLR
1c5d0 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69   before collecti
1c5e0 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  on... " \..
1c5f0 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 1c600 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a lt " bytes\n"].. 1c610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c620 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1c630 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1c640 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1c650 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1c660 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1c670 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1c680 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1c690 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1c6a0 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 get CLR memory 1c6b0 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 usage, error: " 1c6c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c6d0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
1c6e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1c6f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1c700 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23     }....      ##
1c710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c750 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
1c760 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1c770 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74  : Repeatedly att
1c780 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20  empt to collect
1c790 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68  garbage until th
1c7a0 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65  e allotted numbe
1c7b0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
1c7c0 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
1c7d0 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41   has elapsed.  A
1c7e0 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f  lways attempt to
1c7f0 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
1c800 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1c810 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a  at least once...
1c820 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1c830 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1c840 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1c850 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
1c860 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73  t start [clock s
1c870 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20  econds]..
1c880 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20   set stop [expr
1c890 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c  {$start + ($mill
1c8a0 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29  iseconds / 1000)
1c8b0 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f  }]....        do
1c8c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1c8d0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1c8e0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
1c8f0 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61  rce a full garba
1c900 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f  ge collection no
1c910 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a  w.  Report any..
1c920 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1c930 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20    error that is
1c940 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77  encountered if w
1c950 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20  e fail...
1c960 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1c970 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1c980 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1c990 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
1c9a0 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a  talMemory true..
1c9b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f            } erro
1c9c0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
1c9d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1c9e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1c9f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1ca00 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1ca10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1ca20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1ca30 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1ca40 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
1ca50 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a  llection, error:
1ca60 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1ca70 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72          \n\t $er 1ca80 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1ca90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1caa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1cab0 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 set now [clock 1cac0 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 seconds].. 1cad0 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 } while {$star
1cae0 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f  t <= $now &&$no
1caf0 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20  w < $stop}.. 1cb00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 }.... ### 1cb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1cb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1cb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1cb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1cb50 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 1cb60 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 1cb70 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 1cb80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1cb90 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1cba0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1cbb0 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c voke GC GetTotal 1cbc0 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 Memory false.. 1cbd0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 1cbe0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1cbf0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1cc00 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1cc10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1cc20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1cc30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1cc40 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d "---- mem 1cc50 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 ory in use by th 1cc60 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c e CLR after coll 1cc70 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 ection... " \.. 1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1cc90 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e  result " bytes\n
1cca0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
1ccb0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
1ccc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1ccd0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1cce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1ccf0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1cd00 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1cd20 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1cd30 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d  d to get CLR mem
1cd40 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72  ory usage, error
1cd50 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
1cd60 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 1cd70 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1cd80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1cd90 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 1cda0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 1cdb0 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e SQLiteHandleCoun 1cdc0 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 ts { channel {qu 1cdd0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 1cde0 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 1cdf0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 1ce00 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1ce10 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 ObjectCommand] & 1ce20 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 1ce30 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 1ce40 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54 5f 48 Constant COUNT_H 1ce50 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a ANDLE]} then {.. 1ce60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1ce70 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 # NOTE: Add e 1ce80 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e ach critical han 1ce90 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 dle count to the 1cea0 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e resulting list. 1ceb0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1cec0 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d foreach nam 1ced0 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 e [list \.. 1cee0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 1cef0 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 nCount statement 1cf00 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e Count backupCoun 1cf10 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d 0a t blobCount] {.. 1cf20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 1cf30 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1cf40 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1cf50 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 1cf60 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 1cf70 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 1cf80 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 1cf90 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 ata$name..
1cfa0 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d       } value] ==
1cfb0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1cfc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1cfd0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1cfe0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1cff0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1d000 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d010 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1d020 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
1d030 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65   count \"" $name 1d040 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 "\" is "$value
1d050 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1d060 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1d070 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
1d080 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  t $value.. 1d090 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1d0a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1d0b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1d0d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1d0e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1d100 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1d110 65 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 63 ed to get critic 1d120 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 1d130 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 1d140 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 22$name "
1d150 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
1d160 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20  t $value \n].. 1d170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1d180 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1d190 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1d1a0 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 eif {!$quiet} th
1d1b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1d1c0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1d1d0 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64   The actual hand
1d1e0 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f  le counts are no
1d1f0 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65  t available; the
1d200 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20  refore, just..
1d210 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
1d220 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69  turn an empty li
1d230 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
1d240 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1d250 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 hannel "---- cri 1d260 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 1d270 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c nts unavailable\ 1d280 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n".. }.... 1d290 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
1d2a0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
1d2b0 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e     proc shutdown
1d2c0 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c  SQLite { channel
1d2d0 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b   {force false} {
1d2e0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
1d2f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1d300 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75   # NOTE: Make su
1d310 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 63  re that SQLite c
1d320 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 63  ore library is c
1d330 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f  ompletely shutdo
1d340 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20  wn.  This..
1d350 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65 64   #       is used
1d360 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20 63   by tests that c
1d370 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74  hange configurat
1d380 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f  ion options and/
1d390 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20  or those..
1d3a0 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 65  #       that nee
1d3b0 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c  d to make sure l
1d3c0 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61  ogging is initia
1d3d0 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74  lized (i.e. just
1d3e0 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20   in case..
1d3f0 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
1d400 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
1d410 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  was initialized
1d420 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 70  in the process p
1d430 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23  rior to..      #
1d440 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
1d450 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67  eLog class being
1d460 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69   able to setup i
1d470 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  ts logging callb
1d480 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20  ack)...      #
1d490 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74       Normally, t
1d4a0 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20  his should only
1d4b0 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
1d4c0 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
1d4d0 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20   and..      #
1d4e0 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 73      ready for us
1d4f0 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
1d500 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ite...      #..
1d510 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20       if {$force 1d520 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 || [isSQLiteRead 1d530 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 1d540 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1d550 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 BUGFIX: Make su 1d560 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61 re that any "lea 1d570 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e ked" transaction 1d580 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 s and/or connect 1d590 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ions.. # 1d5a0 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 61 are clea 1d5b0 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 61 ned up before ca 1d5c0 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 lling the native 1d5d0 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 shutdown functi 1d5e0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a on... #.. 1d5f0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1d600 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 transaction [inf 1d610 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 o transactions] 1d620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 1d630 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c {[string match \ 1d640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d650 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 System#Data#SQLi 1d660 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63 te#SQLiteTransac 1d670 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 tion#*$transact
1d680 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ion]} then {..
1d690 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
1d6a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1d6b0 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61        sql transa
1d6c0 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24  ction rollback $1d6d0 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 transaction.. 1d6e0 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 1d6f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1d710 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1d720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1d730 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d740 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1d760 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 "---- rolle 1d770 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 d back leaked tr 1d780 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d ansaction \"" \. 1d790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1d7a0 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f$transactio
1d7b0 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  n \"\n]..
1d7c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d7d0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1d7f0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1d800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d810 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1d820 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1d830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d840 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1d850 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f  NG: failed to ro
1d860 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72  llback leaked tr
1d870 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d  ansaction \"" \.
1d880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d890 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f       $transactio 1d8a0 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 n "\", error: " 1d8b0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1d8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1d8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d8e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1d8f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d900 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69     foreach db [i
1d910 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  nfo connections]
1d920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1d930 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
1d940 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d950 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c   System#Data#SQL
1d960 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite#SQLiteConnec
1d970 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65  tion#* $db]} the 1d980 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1d990 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c if {[catch {sql 1d9a0 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f close$db} erro
1d9b0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
1d9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1d9d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1d9e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d9f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1da00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1da10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1da20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73        "---- clos
1da30 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61  ed leaked databa
1da40 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d  se \"" $db \"\n] 1da50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1da60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1da70 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1da80 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1da90 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1dab0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1dac0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1dae0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1daf0 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 led to close lea 1db00 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 ked database \"" 1db10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1db20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c$db "\",
1db30 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $1db40 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 1db50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1db60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1db70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1db80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 1db90 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 # BUGFIX 1dba0 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 : Before calling 1dbb0 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 the native shut 1dbc0 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d down function, m 1dbd0 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 ake sure both.. 1dbe0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 1dbf0 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 of the PRAGMA r 1dc00 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 elated directory 1dc10 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 names are freed 1dc20 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1dc30 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 1dc40 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 LiteDirectories 1dc50 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d$channel true...
1dc60 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1dc70 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1dc80 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
1dc90 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1dca0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1dcb0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
1dcc0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
1dcd0 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33  eMethods sqlite3
1dce0 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20  _shutdown..
1dcf0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
1dd00 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1dd10 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1dd20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1dd30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1dd40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1dd50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1dd60 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
1dd70 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
1dd80 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75  )... ok: " $resu 1dd90 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1dda0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 1ddb0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1ddc0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1ddd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1dde0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1ddf0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1de10 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 1de20 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e e3_shutdown()... 1de30 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
1de40 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
1de50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1de60 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
1de70 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1de80 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f  getSettingReadCo
1de90 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 61 46  unt { name {viaF
1dea0 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ile false} } {..
1deb0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43        if {[haveC
1dec0 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43  onstraint buildC
1ded0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62  onfiguration.Deb
1dee0 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d  ug] && [catch {.
1def0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
1df00 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
1df10 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20  onPublic -alias
1df20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
1df30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1df40 65 2e 44 65 62 75 67 44 61 74 61 20 5b 65 78 70  e.DebugData [exp
1df50 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d  r {$viaFile ? \. 1df60 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 73 65 . "se 1df70 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 ttingFileReadCou 1df80 6e 74 73 22 20 3a 20 22 73 65 74 74 69 6e 67 52 nts" : "settingR 1df90 65 61 64 43 6f 75 6e 74 73 22 7d 5d 0d 0a 20 20 eadCounts"}].. 1dfa0 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 } settingRea 1dfb0 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 dCounts] == 0} t 1dfc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1dfd0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 1dfe0 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 h$name] > 0} th
1dff0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1e000 69 66 20 7b 5b 24 73 65 74 74 69 6e 67 52 65 61  if {[$settingRea 1e010 64 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56 61 dCounts TryGetVa 1e020 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d lue$name value]
1e030 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e040 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1e050 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1e060 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1e070 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1e080 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 setting \""$na
1e090 6d 65 20 22 5c 22 20 77 61 73 20 72 65 61 64 20  me "\" was read
1e0a0 22 20 24 76 61 6c 75 65 20 22 20 74 69 6d 65 73  " $value " times 1e0b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1e0c0 20 20 20 20 20 5b 65 78 70 72 20 7b 24 76 69 61 [expr {$via
1e0d0 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 68  File ? " from th
1e0e0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
1e0f0 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d  file" : ""}] \n]
1e100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1e110 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20  return $value.. 1e120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1e130 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1e140 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 set name 1e150 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 Count [$settingR
1e160 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d  eadCounts Count]
1e170 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1e180 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a  valueCount 0....
1e190 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1e1a0 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
1e1b0 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65 61  pair $settingRea 1e1c0 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 dCounts {.. 1e1d0 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 incr valu 1e1e0 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 eCount [$pair Va
1e1f0 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue]....
1e200 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1e210 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1e220 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1e230 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 1e240 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 etting \"" [$pai
1e250 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72  r Key] "\" was r
1e260 65 61 64 20 22 20 5b 24 70 61 69 72 20 56 61 6c  ead " [$pair Val 1e270 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ue] \.. 1e280 20 20 20 20 20 20 20 22 20 74 69 6d 65 73 22 20 " times" 1e290 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65 20 [expr {$viaFile
1e2a0 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e  ? " from the con
1e2b0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 22  figuration file"
1e2c0 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   : \..
1e2d0 20 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d 0a        ""}] \n]..
1e2e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1e2f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
1e300 5b 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74  [list $nameCount 1e310 20 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20$valueCount]..
1e320 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1e330 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
1e340 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 1e350 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 1e360 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1e370 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1e380 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1e390 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1e3a0 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61   setting \"" $na 1e3b0 6d 65 20 22 5c 22 20 77 61 73 20 6e 6f 74 20 72 me "\" was not r 1e3c0 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 ead" [expr {$via
1e3d0 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20  File ? \..
1e3e0 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65        " from the
1e3f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1e400 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d  ile" : ""}] \n].
1e410 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
1e420 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1e430 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1e440 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1e450 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1e460 6e 6f 20 73 65 74 74 69 6e 67 73 20 77 65 72 65 no settings were 1e470 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 read" [expr {$v
1e480 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20  iaFile ? \..
1e490 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74          " from t
1e4a0 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
1e4b0 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e   file" : ""}] \n
1e4c0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
1e4d0 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20      return -1..
1e4e0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1e4f0 63 20 67 65 74 4f 74 68 65 72 43 6f 75 6e 74 20  c getOtherCount
1e500 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20  { name } {..
1e510 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74    if {[haveConst
1e520 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69  raint buildConfi
1e530 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20  guration.Debug]
1e540 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  && [catch {..
1e550 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1e560 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
1e570 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20  blic -alias \..
1e580 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1e590 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65  m.Data.SQLite.De
1e5a0 62 75 67 44 61 74 61 20 6f 74 68 65 72 43 6f 75  bugData otherCou
1e5b0 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f 74 68  nts..      } oth
1e5c0 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20  erCounts] == 0}
1e5d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1e5e0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1e5f0 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74  th $name] > 0} t 1e600 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e610 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f 75 6e if {[$otherCoun
1e620 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 20 24  ts TryGetValue $1e630 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68 65 name value]} the 1e640 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e650 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1e660 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1e670 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1e680 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65        "---- othe
1e690 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24 6e  r counter \"" $n 1e6a0 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61 6c 75 ame "\" has valu 1e6b0 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a e "$value \n]..
1e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1e6d0 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20  turn $value.. 1e6e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1e6f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1e700 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 1e710 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e 74 unt [$otherCount
1e720 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20  s Count]..
1e730 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75      set valueCou
1e740 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt 0....
1e750 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
1e760 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f 74   -alias pair $ot 1e770 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 herCounts {.. 1e780 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 1e790 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
1e7a0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
1e7b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1e7c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1e7d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1e7e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1e7f0 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c other counter \ 1e800 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 "" [$pair Key] "
1e810 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c  \" has value " \
1e820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e830 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20    [$pair Value] 1e840 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1e850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 .... re 1e860 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 turn [list$name
1e870 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e  Count $valueCoun 1e880 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 t].. }.. 1e890 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e8a0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 1e8b0 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 th$name] > 0} t
1e8c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
1e8d0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1e8e0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e8f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e900 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e "---- other coun 1e910 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c ter \""$name "\
1e920 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 5c 6e  " has no value\n
1e930 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  "]..      } else
1e940 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
1e950 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1e960 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20 61 72 l "---- there ar 1e970 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75 6e 74 e no other count 1e980 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d ers\n".. }. 1e990 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 1e9a0 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 -1.. }..... 1e9b0 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c proc reportSQL 1e9c0 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a iteResources {.. 1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e chan 1e9e0 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 nel {quiet false 1e9f0 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b } {reset true} { 1ea00 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 collect true} } 1ea10 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1ea20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70 6f 73 # NOTE: If pos 1ea30 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20 72 65 sible, always re 1ea40 73 65 74 20 74 68 65 20 63 61 63 68 65 64 20 61 set the cached a 1ea50 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 ssembly director 1ea60 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 1ea70 20 61 6e 64 20 74 68 65 20 63 61 63 68 65 64 20 and the cached 1ea80 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f XML configuratio 1ea90 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 n file name... 1eaa0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1eab0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1eac0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 1ead0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 1eae0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1eaf0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1eb00 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 1eb10 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 1eb20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1eb30 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 1eb40 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 73 Res 1eb60 65 74 43 61 63 68 65 64 41 73 73 65 6d 62 6c 79 etCachedAssembly 1eb70 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 1eb80 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 1eb90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1eba0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1ebb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ebc0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1ebd0 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 nel "---- reset 1ebe0 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20 cached assembly 1ebf0 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a 20 20 directory\n".. 1ec00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ec10 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1ec20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1ec30 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1ec40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1ec50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1ec60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1ec70 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1ec80 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 1ec90 65 73 65 74 20 63 61 63 68 65 64 20 61 73 73 65 eset cached asse 1eca0 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 2c 20 mbly directory, 1ecb0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1ecc0 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22 20 5c "error: " \ 1ecd0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1ece0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1ecf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ed00 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1ed10 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1ed20 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1ed30 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1ed40 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1ed50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
1ed60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1ed70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1ed80 20 20 20 52 65 73 65 74 43 61 63 68 65 64 58 6d     ResetCachedXm
1ed90 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 0d  lConfigFileName.
1eda0 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72  .        } error
1edb0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1edc0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1edd0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1ede0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1edf0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
1ee00 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c  reset cached XML
1ee10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1ee20 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 20 20  ile name\n"..
1ee30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1ee40 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1ee50 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1ee60 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1ee70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1ee80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1ee90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1eea0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1eeb0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
1eec0 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20 63  set cached XML c
1eed0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 20 5c  onfiguration " \
1eee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1eef0 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 65 72    "file name, er
1ef00 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1ef10 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1ef20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1ef30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1ef40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1ef50 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 : If available, 1ef60 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 report on (and p 1ef70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 ossibly reset) t 1ef80 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 he runtime.. 1ef90 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 # config 1efa0 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 uration statisti 1efb0 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 cs... #.. 1efc0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 1efd0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 1efe0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1eff0 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e [haveConstrain 1f000 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 t buildConfigura 1f010 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 65 tion.Debug]} the 1f020 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1f030 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1f040 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1f050 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1f060 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 blic -alias \.. 1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1f080 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1f090 44 65 62 75 67 44 61 74 61 20 73 65 74 74 69 6e DebugData settin 1f0a0 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 20 gReadCounts.. 1f0b0 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 } settingRe 1f0c0 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 adCounts] == 0} 1f0d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f0e0 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 set nameCount 1f0f0 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 [$settingReadCou
1f100 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20  nts Count]..
1f110 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43        set valueC
1f120 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20  ount 0....
1f130 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
1f140 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24  ch -alias pair $1f150 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 1f160 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 1f170 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 incr valueCount 1f180 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a [$pair Value]..
1f190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1f1a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1f1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f1c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1f1d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f1f0 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c   "---- setting \
1f200 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22  "" [$pair Key] " 1f210 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d \" was read " \. 1f220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f230 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d [$pair Value]
1f240 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20   " times\n"]..
1f250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1f260 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1f270 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74        if {$reset 1f280 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1f290 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1f2a0 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f {$settingReadCo
1f2b0 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72 6f  unts Clear} erro
1f2c0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
1f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1f2e0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1f2f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f300 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1f310 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1f320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f330 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65        "---- rese
1f340 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
1f350 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 65  tics for the pre
1f360 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20  vious " \..
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1f380 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 nameCount " name 1f390 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f s and "$valueCo
1f3a0 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 61  unt " values rea
1f3b0 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  d\n"]..
1f3c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1f3d0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1f3f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1f400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f410 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1f420 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f440 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1f450 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65  : failed to rese
1f460 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
1f470 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20  tics for " \..
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f490 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20    "the previous
1f4a0 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e  " $nameCount " n 1f4b0 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 ames and "$valu
1f4c0 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20  eCount \..
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
1f4e0 76 61 6c 75 65 73 20 72 65 61 64 2c 20 65 72 72  values read, err
1f4f0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 1f500 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 1f510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1f530 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1f540 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 1f550 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1f560 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 1f570 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1f580 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 -alias \.. 1f590 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 1f5a0 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 Data.SQLite.Debu 1f5b0 67 44 61 74 61 20 73 65 74 74 69 6e 67 46 69 6c gData settingFil 1f5c0 65 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 20 eReadCounts.. 1f5d0 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 46 69 } settingFi 1f5e0 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d leReadCounts] == 1f5f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1f600 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 1f610 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46 69 6c unt [$settingFil
1f620 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e  eReadCounts Coun
1f630 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
1f640 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
1f650 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
1f660 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
1f670 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 46  s pair $settingF 1f680 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d ileReadCounts {. 1f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 . inc 1f6a0 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 r valueCount [$p
1f6b0 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20  air Value]....
1f6c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1f6d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 1f6f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1f700 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1f720 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b  -- setting \"" [
1f730 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77  $pair Key] "\" w 1f740 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 as read " \.. 1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 1f760 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74$pair Value] " t
1f770 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f  imes from the co
1f780 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
1f790 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
1f7a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1f7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1f7c0 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 1f7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1f7e0 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69 {[catch {$setti
1f7f0 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73  ngFileReadCounts
1f800 20 43 6c 65 61 72 7d 20 65 72 72 6f 72 5d 20 3d   Clear} error] =
1f810 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1f820 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1f830 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f850 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1f860 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f880 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65    "---- reset se
1f890 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73  tting statistics
1f8a0 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75   for the previou
1f8b0 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  s " \..
1f8c0 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65             $name 1f8d0 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e Count " names an 1f8e0 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 d "$valueCount
1f8f0 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 22 20  " values read "
1f900 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f910 20 20 20 20 20 20 20 22 66 72 6f 6d 20 74 68 65         "from the
1f920 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1f930 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ile\n"]..
1f940 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f950 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f970 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1f980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f990 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1f9a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f9c0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1f9d0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
1f9e0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74  set setting stat
1f9f0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a  istics for " \..
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fa10 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f 75      "the previou
1fa20 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22  s " $nameCount " 1fa30 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 names and "$va
1fa40 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20  lueCount \..
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fa60 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 66 72  " values read fr
1fa70 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  om the configura
1fa80 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72  tion file, error
1fa90 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20  : " \n\t \..
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fab0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 1fac0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1fad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1fae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1faf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1fb00 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1fb10 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1fb20 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1fb30 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1fb50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1fb60 2e 44 65 62 75 67 44 61 74 61 20 6f 74 68 65 72 .DebugData other 1fb70 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 Counts.. 1fb80 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d } otherCounts] = 1fb90 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1fba0 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 1fbb0 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e ount [$otherCoun
1fbc0 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
1fbd0 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f       set valueCo
1fbe0 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  unt 0....
1fbf0 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
1fc00 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f  h -alias pair $o 1fc10 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 therCounts {.. 1fc20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 1fc30 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
1fc40 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
1fc50 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1fc60 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1fc70 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1fc80 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1fc90 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1fca0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1fcb0 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22  other counter \"
1fcc0 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 1fcd0 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c 0d " has value " \. 1fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1fcf0 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d [$pair Value]
1fd00 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1fd10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1fd20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1fd30 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 1fd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1fd50 20 7b 5b 63 61 74 63 68 20 7b 24 6f 74 68 65 72 {[catch {$other
1fd60 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72  Counts Clear} er
1fd70 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ror] == 0} then
1fd80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1fd90 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1fda0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1fdb0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1fdc0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1fdd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1fde0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65          "---- re
1fdf0 73 65 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65  set other counte
1fe00 72 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69  rs for the previ
1fe10 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ous " \..
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61               $na 1fe30 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 meCount " names 1fe40 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e and "$valueCoun
1fe50 74 20 22 20 76 61 6c 75 65 73 5c 6e 22 5d 0d 0a  t " values\n"]..
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fe70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1fe80 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1fe90 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1fea0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1feb0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1fec0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1fed0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1fef0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1ff00 64 20 74 6f 20 72 65 73 65 74 20 6f 74 68 65 72  d to reset other
1ff10 20 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 22 20   counters for "
1ff20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1ff30 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76         "the prev
1ff40 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e  ious " $nameCoun 1ff50 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 1ff60 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20$valueCount \..
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ff80 20 20 20 22 20 76 61 6c 75 65 73 2c 20 65 72 72     " values, err
1ff90 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 1ffa0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 1ffb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1ffc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1ffd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1ffe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1fff0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 20000 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 bjectCommand] && 20010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 \.. [h 20020 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 aveSQLiteDefineC 20030 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f onstant INTEROP_ 20040 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 VIRTUAL_TABLE] & 20050 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 20060 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 20070 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f 4d Constant TRACK_M 20080 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 EMORY_BYTES]} th 20090 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 200a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
200b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
200c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 200d0 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 - current memory 200e0 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 200f0 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 eMemory... ".. 20100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 20110 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 20120 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 20130 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 20140 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 20150 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 20160 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 20170 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 QLiteMemory byte 20180 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 sAllocated.. 20190 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d } memory] == 201a0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 201b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
201c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
201d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 201e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 201f0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
20200 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
20210 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
20220 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
20230 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
20240 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
20250 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 20260 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20270 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
20280 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 20290 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 202a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 202b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 202c0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
202d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
202e0 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d  $channel "---- m 202f0 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e aximum memory in 20300 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 use by SQLiteMe 20310 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 mory... ".. 20320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 20330 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 20340 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 20350 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 20360 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 20370 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 20380 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 20390 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d teMemory maximum 203a0 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a BytesAllocated.. 203b0 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 } memory 203c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 203d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
203e0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
203f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
20400 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 20410 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 dArgs$memory "
20420 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
20430 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
20440 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
20450 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
20460 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20  nknown....
20470 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 20480 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20490 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
204a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
204b0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 204c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 204d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 204e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
204f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
20500 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 20510 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 l "---- current 20520 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by 20530 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 SQLite... ".. 20540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 20550 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 20560 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 20570 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 20580 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 20590 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 205a0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 205b0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 205c0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 205d0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 205e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 NativeMethods sq 205f0 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 lite3_memory_use 20600 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d d.. } mem 20610 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ory] == 0} then 20620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 20630 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
20640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
20650 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 20660 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
20670 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
20680 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20690 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
206a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
206b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62      # NOTE: Mayb
206c0 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  e the SQLite cor
206d0 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61  e library is una
206e0 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20  vailable?..
206f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20700 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b    set memory unk
20710 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nown....
20720 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 20730 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 20740 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
20750 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 20760 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 20770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20780 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 20790 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d {.. set m 207a0 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c emory unavailabl 207b0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 e.... if 207c0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
207d0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
207e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 207f0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
20800 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
20810 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
20820 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f  set result $memo 20830 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 ry; # NOTE: Retu 20840 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 rn memory in-use 20850 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d to our caller.. 20860 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 ... if {!$q
20870 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
20880 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 20890 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d nnel "---- maxim 208a0 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 um memory in use 208b0 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d by SQLite... ". 208c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 208d0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 208e0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 208f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20900 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 20910 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 20920 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 20930 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 20940 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 20950 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 20960 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 20970 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20980 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 sqlite3_memory 20990 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 _highwater 0.. 209a0 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 } memory] 209b0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 209c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
209d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
209e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $209f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20a00 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
20a10 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
20a20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
20a30 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
20a40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
20a50 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65   NOTE: Maybe the
20a60 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
20a70 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61  rary is unavaila
20a80 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  ble?..
20a90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
20aa0 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d   memory unknown.
20ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
20ac0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 20ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 20ae0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
20af0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 20b00 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 20b10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 20b20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 20b30 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 20b40 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a unavailable.... 20b50 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
20b60 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20b70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 20b80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20b90 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
20ba0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
20bb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  }....      if {$20bc0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d collect} then {. 20bd0 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 . collect 20be0 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c Garbage$channel
20bf0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
20c00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 20c10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 20c20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
20c30 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d  ---- current mem
20c40 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68  ory in use by th
20c50 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20  e CLR... "..
20c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
20c70 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
20c80 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
20c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
20ca0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
20cb0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
20cc0 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d  e GC GetTotalMem
20cd0 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  ory false..
20ce0 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20     } memory] ==
20cf0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
20d00 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
20d10 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72   is integer -str
20d20 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68  ict $memory]} th 20d30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20d40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
20d50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20d60 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 20d70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 20d80 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
20d90 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
20da0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   }..          }
20db0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
20dc0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69      set memory i
20dd0 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20  nvalid....
20de0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 20df0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 20e00 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20e10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
20e20 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 20e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 20e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20e50 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 20e60 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 20e70 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 20e80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
20e90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
20ea0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
20eb0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 20ec0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
20ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
20ee0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
20ef0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
20f00 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61    set memory una
20f10 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20  vailable....
20f20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 20f30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20f40 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
20f50 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 20f60 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 20f70 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 20f80 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 . return$r
20f90 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  esult..    }....
20fa0 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46  .    proc checkF
20fb0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
20fc0 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72  ies { channel {r
20fd0 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  eset false} } {.
20fe0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
20ff0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
21000 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e   the sqlite3_win
21010 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
21020 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61   function is ava
21030 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23  ilable...      #
21040 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c 21050 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 21060 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 21070 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 ng for function 21080 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 21090 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 t_directory... " 210a0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 210b0 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 210c0 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 call to the sqli 210d0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 210e0 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 210f0 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 uses the.. 21100 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 # invalid 21110 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 value 0 for the 21120 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e first argument. 21130 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 This code is d 21140 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 esigned.. # 21150 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 to check 21160 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 if calling the f 21170 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 unction will rai 21180 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 se an exception 21190 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 (i.e... # 211a0 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 the actual 211b0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 result of the fu 211c0 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 nction does not 211d0 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 matter as long a 211e0 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 s no.. # 211f0 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 directory is 21200 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 changed)... 21210 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 21220 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 20 5b 63 isWindows] && [c 21230 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 21240 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 21250 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 21260 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 21270 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 21280 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 21290 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 thods \.. 212a0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e sqlite3_win 212b0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 212c0 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 0 null.. } 212d0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 212e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 212f0 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 # NOTE: Calli 21300 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 ng the sqlite3_w 21310 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 21320 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 ry function does 21330 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 21340 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 cause an e 21350 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 xception; theref 21360 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 ore, it must be 21370 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d available (i.e.. 21380 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 21390 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 even though it 213a0 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 should return a 213b0 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 failure return c 213c0 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 ode in this.. 213d0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas 213e0 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e)... #.. 213f0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 21400 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 raint sqlite3_wi 21410 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 21420 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 y.... tpu 21430 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
21440 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n....        #..
21450 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
21460 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20  Does our caller
21470 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68  want to reset th
21480 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a  e directories?..
21490 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
214a0 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74     if {$reset} t 214b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 214c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 214d0 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 NOTE: Now make s 214e0 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ure the database 214f0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 21500 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a irectories are.. 21510 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 21520 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 reset their de 21530 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 fault values, wh 21540 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 ich should be nu 21550 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 ll for both... 21560 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 21570 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 Since the sqlite 21580 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 21590 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 ctory function i 215a0 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 s available,.. 215b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 215c0 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 215d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 215e0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 for {set index 1 215f0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b } {$index < 3} {
21600 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {..
21610 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
21620 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
21630 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
21640 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
21650 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
21660 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
21670 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
21680 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
21690 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
216a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
216b0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
216c0 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d  ory $index null. 216d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72 . } r 216e0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 216f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21700 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21710 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
21720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21730 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
21740 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
21750 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind 21760 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. 21770 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) 21780 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c ... ok: "$resul
21790 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
217a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
217b0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
217c0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 217d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 217e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 217f0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 21800 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 21810 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21830 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f  ", null)... erro
21840 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 21850 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 21860 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 21870 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 21880 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 21890 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
218a0 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20  nnel no\n....
218b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
218c0 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72  # NOTE: Does our
218d0 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20   caller want to
218e0 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74  reset the direct
218f0 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e  ories?  This can
21900 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23   only..        #
21910 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72         be perfor
21920 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  med if SQLite is
21930 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64   loaded and read
21940 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  y for use by the
21950 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
21960 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20         suite...
21970 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21980 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20    if {$reset && 21990 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d [isSQLiteReady]} 219a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 219b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 219c0 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 # NOTE: Now make 219d0 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 sure the databa 219e0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 219f0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 directories are 21a00 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 21a10 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 reset their 21a20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 default values, 21a30 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 which should be 21a40 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a null for both... 21a50 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 21a60 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 Since the sqli 21a70 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 21a80 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 21a90 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 does not.. 21aa0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 # app 21ab0 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61 ear to be availa 21ac0 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73 ble, use the ass 21ad0 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63 ociated PRAGMA c 21ae0 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 ommands.. 21af0 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 # inste 21b00 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ad... # 21b10 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 21b20 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c ach directory [l 21b30 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 ist data_store_d 21b40 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 irectory temp_st 21b50 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b ore_directory] { 21b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 21b70 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 t sql [appendArg 21b80 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 s "PRAGMA "$dir
21b90 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b  ectory " = \"\";
21ba0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
21bb0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
21bc0 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72  ecuteSql $sql} r 21bd0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 21be0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21bf0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21c00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
21c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21c20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65     "---- execute
21c30 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63   PRAGMA " $direc 21c40 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 tory "... ok: \" 21c50 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 21c60 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c$result \
21c70 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
21c80 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
21c90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21ca0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 21cb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 21cc0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 21cd0 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 execute PRAGMA " 21ce0 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
21cf0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
21d10 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 21d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 21d30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 21d40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 21d50 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 21d60 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c # NOTE: Finall 21d70 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 y, show the curr 21d80 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 ent value of the 21d90 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 21da0 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 mporary.. # 21db0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 directori 21dc0 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e es. This can on 21dd0 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 ly be performed 21de0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 21df0 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ded.. # 21e00 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 and ready for 21e10 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 21e20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 suite... # 21e30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 .. if {[isS 21e40 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 QLiteReady]} the 21e50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 n {.. for 21e60 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b each directory [ 21e70 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f list data_store_ 21e80 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 directory temp_s 21e90 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 tore_directory] 21ea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 21eb0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
21ec0 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68  endArgs "---- ch
21ed0 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74  ecking " $direct 21ee0 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 ory "... "].... 21ef0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c set sql 21f00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 [appendArgs "PR 21f10 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 AGMA "$director
21f20 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  y \;]....
21f30 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
21f40 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73  xecuteSql $sql s 21f50 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d calar} result] = 21f60 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 21f70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
21f80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
21f90 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65  rgs "ok: \"" $re 21fa0 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 sult \"\n].. 21fb0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 21fc0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21fd0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
21fe0 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22  ndArgs "error: "
21ff0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 22000 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 22010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 22020 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 22030 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 proc loadSQLit 22040 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 eTestSettings { 22050 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 channel {suffix 22060 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ""} {quiet false 22070 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 22080 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 22090 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 ip loading the s 220a0 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 ettings if their 220b0 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 usage has been 220c0 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 disabled... 220d0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 220e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 220f0 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 (sqliteTestSetti 22100 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ngs)]} then {.. 22110 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22120 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 # NOTE: Load c 22130 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 ustom per-user a 22140 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 nd/or per-host t 22150 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 22160 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 22170 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 22180 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 exists ::tcl_pla 22190 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 tform(user)]} th 221a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 221b0 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 set userSettings 221c0 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a FileName [file j 221d0 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 oin [getCommonDi 221e0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 221f0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 22200 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 dArgs settings$
22210 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f  suffix . $::tcl_ 22220 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e platform(user) . 22230 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eagle]].... 22240 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 22250 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69 xists$userSetti
22260 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  ngsFileName]} th
22270 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22280 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 22290 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 222a0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
222b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
222c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
222d0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69       "---- loadi
222e0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74  ng per-user test
222f0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
22300 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
22310 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74          $userSet 22320 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 tingsFileName \" 22330 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ...\n].. 22340 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22350 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 22360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22370 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 22380 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 source$userSet
22390 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a  tingsFileName]..
223a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72              } er
223b0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
223c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
223d0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 223e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 223f0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
22400 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22420 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
22430 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
22440 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e   per-user settin
22450 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22470 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73     $userSettings 22480 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er 22490 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
224a0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
224b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
224c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
224d0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
224e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 224f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 22500 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 22510 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
22520 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
22530 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
22540 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
22550 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73   per-user test s
22560 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
22570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22580 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 22590 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", 225a0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 225b0 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 225c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 225d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 225e0 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 . ####### 225f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 22600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 22610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 22620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 22630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 22640 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 22650 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 cl_platform(host 22660 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 22670 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 set hostSe 22680 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b ttingsFileName [ 22690 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f file join [getCo 226a0 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c mmonDirectory] \ 226b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 226c0 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 [appendArgs sett 226d0 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 ings$suffix . $226e0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 ::tcl_platform(h 226f0 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d ost) .eagle]]... 22700 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 22710 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 file exists$hos
22720 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
22730 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
22740 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 22750 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 22760 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 22770 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
22780 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
22790 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
227a0 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73   loading per-hos
227b0 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20  t test settings
227c0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  file \"" \..
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68                $h 227e0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 227f0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 ame \"...\n].. 22800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 22810 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 22820 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 22830 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 22840 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 [list source$h
22850 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
22860 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
22870 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
22880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22890 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 228a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 228b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
228c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
228d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
228e0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
228f0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
22900 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20  o load per-host
22910 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
22920 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
22930 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65           $hostSe 22940 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 22950 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 22960 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
22970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
22980 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
22990 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
229a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
229b0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 229c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 229d0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
229e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22a00 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c   "---- skipped l
22a10 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20  oading per-host
22a20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
22a30 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
22a40 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 22a50 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 22a60 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e e "\", it does n 22a70 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 22a80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 22a90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 22aa0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 22ab0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 22ac0 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62 copySampleDatab 22ad0 61 73 65 46 69 6c 65 73 20 7b 7d 20 7b 0d 0a 20 aseFiles {} {.. 22ae0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b uplevel 1 { 22af0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 22b00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop 22b10 79 20 28 6f 72 20 72 65 2d 63 6f 70 79 29 20 74 y (or re-copy) t 22b20 68 65 20 72 65 66 65 72 65 6e 63 65 20 64 61 74 he reference dat 22b30 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 abase file used 22b40 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 for this.. 22b50 20 20 23 20 20 20 20 20 20 20 75 6e 69 74 20 74 # unit t 22b60 65 73 74 20 74 6f 20 74 68 65 20 62 75 69 6c 64 est to the build 22b70 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20 63 61 directory in ca 22b80 73 65 20 69 74 20 68 61 73 20 62 65 65 6e 20 63 se it has been c 22b90 68 61 6e 67 65 64 0d 0a 20 20 20 20 20 20 20 20 hanged.. 22ba0 23 20 20 20 20 20 20 20 62 79 20 61 20 70 72 65 # by a pre 22bb0 76 69 6f 75 73 20 74 65 73 74 20 72 75 6e 2e 0d vious test run.. 22bc0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 22bd0 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 file copy -f 22be0 6f 72 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 orce$northwindE
22bf0 66 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  fDbFile \..
22c00 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
22c10 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f  [getBuildDirecto
22c20 72 79 20 66 61 6c 73 65 5d 20 5b 66 69 6c 65 20  ry false] [file
22c30 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45  tail $northwindE 22c40 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 20 20 20 fDbFile]].. 22c50 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 22c60 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 proc runSQLite 22c70 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 TestPrologue {} 22c80 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 22c90 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 # NOTE: Skip r 22ca0 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f unning our custo 22cb0 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 m prologue if th 22cc0 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 e main one has b 22cd0 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 een.. # 22ce0 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 skipped... 22cf0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 22d00 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 22d10 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c no(prologue.eagl 22d20 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 22d30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22d40 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 22d50 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61 "before-constra 22d60 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 ints" custom per 22d70 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 -user and/or per 22d80 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 -host.. # 22d90 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 test sett 22da0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ings now... 22db0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 #.. up 22dc0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f level 1 [list lo 22dd0 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 adSQLiteTestSett 22de0 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ings$::test_cha
22df0 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d  nnel .before]...
22e00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
22e10 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
22e20 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 74  k if the [object
22e30 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61  ] command is ava
22e40 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c 20  ilable; if not,
22e50 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20  add some..
22e60 20 20 23 20 20 20 20 20 20 20 73 68 69 6d 73 20    #       shims
22e70 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73 74  to make the test
22e80 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f 74   suite run smoot
22e90 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  her...        #.
22ea0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
22eb0 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  rSQLiteObjectCom
22ec0 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 61  mand $::test_cha 22ed0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 22ee0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 22ef0 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 E: Determine the 22f00 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 names of the na 22f10 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e tive platform an 22f20 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d d architecture.. 22f30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 22f40 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform 22f50 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 22f60 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 rm true].. 22f70 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 set architectu 22f80 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 re [architecture 22f90 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 ForPlatform$pla
22fa0 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
22fb0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
22fc0 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c  OTE: Show the pl
22fd0 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69  atform and archi
22fe0 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f 20  tecture used to
22ff0 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d  help locate the.
23000 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
23010 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69   native build fi
23020 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  les...        #.
23030 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $23040 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 23050 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 23060 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 23070 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 platform for loc 23080 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 23090 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 230a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
230b0 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a  platform \"\n]..
230c0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
230d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 230e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 230f0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 23100 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 23110 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 r locating nativ 23120 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 e build files is 23130 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 23140 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72$architectur
23150 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  e \"\n]....
23160 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
23170 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69  NOTE: Build a li
23180 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74  st of configurat
23190 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77  ion files that w
231a0 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...
231b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
231c0 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  t configFileName
231d0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
231e0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
231f0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f  ta.SQLite.dll.co
23200 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nfig]....
23210 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
23220 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74  TE: Build a list
23230 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61   of auxiliary Ma
23240 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20  naged Debugging
23250 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29  Assistants (MDA)
23260 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23270 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration
23280 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
23290 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
232a0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 64  ..        set md
232b0 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  aConfigFileNames
232c0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
232d0 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
232e0 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  32.exe.mda.confi
232f0 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e  g Installer.exe.
23300 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20  mda.config \..
23310 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e 65            test.e
23320 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65  xe.mda.config te
23330 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63  stlinq.exe.mda.c
23340 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
23350 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 65       testef6.exe
23360 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a  .mda.config]....
23370 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23380 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
23390 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74   the list of ext
233a0 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74  ernal files that
233b0 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d   we handle.  Som
233c0 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20  e of..        #
233d0 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c 65        these file
233e0 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20  s may be native
233f0 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61  and/or managed a
23400 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61  ssemblies that a
23410 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
23420 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f 20      required to
23430 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20  perform various
23440 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
23450 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65  #..        set e
23460 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
23470 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
23480 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
23490 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   EntityFramework
234a0 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70   lib [string map
234b0 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5c 0d   [list Fx ""] \.
234c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74  .            [st
234d0 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 6e  ring map [list n
234e0 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 20  etFx451 netFx45
234f0 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 34 35  netFx452 netFx45
23500 20 6e 65 74 46 78 34 36 20 5c 0d 0a 20 20 20 20   netFx46 \..
23510 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 35 20          netFx45
23520 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 34 35  netFx461 netFx45
23530 20 6e 65 74 46 78 34 36 32 20 6e 65 74 46 78 34   netFx462 netFx4
23540 35 20 6e 65 74 46 78 34 37 20 6e 65 74 46 78 34  5 netFx47 netFx4
23550 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5 \..
23560 20 6e 65 74 46 78 34 37 31 20 6e 65 74 46 78 34   netFx471 netFx4
23570 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46  5] [getBuildNetF
23580 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65  x]]] EntityFrame
23590 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  work.dll]]....
235a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
235b0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
235c0 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76  he list of nativ
235d0 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73  e assembly files
235e0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
235f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23600 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46       set nativeF
23610 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d  ileNames [list].
23620 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  ...        eval
23630 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69  lappend nativeFi
23640 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 69  leNames [getNati
23650 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d  veLibraryFileNam
23660 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 20  esOnly]..
23670 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61   eval lappend na
23680 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67  tiveFileNames [g
23690 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c  etInteropAssembl
236a0 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d  yFileNamesOnly].
236b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
236c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
236d0 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
236e0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
236f0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
23700 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...
23710 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
23720 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73  t mixedFileNames
23730 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
23740 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
23750 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d  meOption native]
23760 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23770 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78 65      lappend mixe
23780 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 65  dFileNames Syste
23790 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
237a0 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
237b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
237c0 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
237d0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e   the list of man
237e0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69  aged assembly fi
237f0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
23800 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
23810 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61          set mana
23820 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  gedFileNames [li
23830 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
23840 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
23850 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 79  Lite.Linq.dll Sy
23860 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
23870 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .EF6.dll]....
23880 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52 75       if {![hasRu
23890 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
238a0 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
238b0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d         lappend m
238c0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
238d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
238e0 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te.dll..
238f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
23900 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
23910 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75 73  Show the various
23920 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20 6e   lists of file n
23930 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68 61  ames that are ha
23940 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a 20  ndled by this..
23950 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
23960 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20  rocedure...
23970 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
23980 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 23990 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 239a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 239b0 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 63 ---- list of \"c 239c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 onfiguration\" f 239d0 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 239e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
239f0 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
23a00 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  \n]....        t
23a10 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 23a20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 23a30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23a40 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 "---- list of \" 23a50 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f MDA configuratio 23a60 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 n\" file names i 23a70 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 s: " \.. 23a80 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46 69$mdaConfigFi
23a90 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20  leNames \n]....
23aa0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 23ab0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 23ac0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 23ad0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 "---- li 23ae0 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c st of \"external 23af0 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 \" file names is 23b00 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69 6c : "$externalFil
23b10 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  eNames \n]....
23b20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 23b30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 23b40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 23b50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 23b60 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22 20 t of \"native\" 23b70 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 23b80 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
23b90 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
23ba0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 23bb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 23bc0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 23bd0 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 23be0 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20 6e \"mixed\" file n 23bf0 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78 65 ames is: "$mixe
23c00 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a  dFileNames \n]..
23c10 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
23c20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 23c30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 23c40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 23c50 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61 67 list of \"manag 23c60 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 ed\" file names 23c70 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46 69 is: "$managedFi
23c80 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20  leNames \n]....
23c90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23ca0 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65    # NOTE: Remove
23cb0 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72   any test constr
23cc0 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 72  aints that refer
23cd0 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61   to the native a
23ce0 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23  nd/or..        #
23cf0 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61         managed a
23d00 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
23d10 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c  at we handle unl
23d20 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72  ess forbidden fr
23d30 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  om..        #
23d40 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20      doing so...
23d50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23d60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
23d70 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52  sts ::no(sqliteR
23d80 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73  emoveConstraints
23d90 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
23da0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
23db0 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69  leName $configFi 23dc0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 23dd0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 23de0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 23df0 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
23e00 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
23e10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
23e20 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
23e30 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61  $mdaConfigFileNa 23e40 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 23e50 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 23e60 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 23e70 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
23e80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
23e90 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
23ea0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74  ch fileName $ext 23eb0 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b ernalFileNames { 23ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 23ed0 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 23ee0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 23ef0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
23f00 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20  eName]]..
23f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
23f20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
23f30 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 23f40 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 23f50 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 23f60 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 23f70 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
23f80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
23f90 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
23fa0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 23fb0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 23fc0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 23fd0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 23fe0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
23ff0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
24000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24010 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
24020 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65  ame $managedFile 24030 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 24040 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 24050 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 24060 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
24070 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
24080 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
24090 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
240a0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c   # NOTE: Skip al
240b0 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  l System.Data.SQ
240c0 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c  Lite related fil
240d0 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65  e handling (dele
240e0 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23  ting,..        #
240f0 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20         copying,
24100 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20  and loading) if
24110 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
24120 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24130 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
24140 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c  s ::no(sqliteFil
24150 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
24160 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24170 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
24180 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65  p trying to dele
24190 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  te any files if
241a0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
241b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
241c0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
241d0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
241e0 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  eSqliteFiles)]}
241f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24200 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
24210 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
24220 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c  eSqliteConfigFil
24230 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
24240 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
24250 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f  ach fileName $co 24260 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 24270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 24280 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 tryDeleteBinary 24290 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a File$fileName..
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
242b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
242c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
242d0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
242e0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
242f0 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d  eExternalFiles)]
24300 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
24310 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
24320 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e  fileName $mdaCon 24330 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24350 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 24360 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c le$fileName fal
24370 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..
24380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
24390 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
243a0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 243b0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 243c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 243d0 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 243e0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
243f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24400 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24410 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
24420 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
24430 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69  deleteSqliteNati
24440 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
24450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
24460 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
24470 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
24480 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 69  liteImplicitNati
24490 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
244a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
244b0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
244c0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 244d0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 244e0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 244f0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
24500 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
24510 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
24520 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24530 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
24540 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
24550 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f  o(deleteSqliteNo
24560 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  nImplicitFiles)]
24570 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
24580 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
24590 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
245a0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61  (deleteSqlitePla
245b0 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20  tformFiles)] &&
245c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
245d0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
245e0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 245f0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24610 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 24620 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
24630 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
24640 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
24650 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 24660 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a Name$platform..
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24680 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
24690 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
246a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
246b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
246c0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63  (deleteSqliteArc
246d0 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d  hitectureFiles)]
246e0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
246f0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
24700 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69  ng length $archi 24710 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 tecture] > 0} th 24720 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 24730 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 24740 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
24750 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24770 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
24780 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
24790 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
247b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
247c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
247d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
247e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
247f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
24800 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
24810 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29  qliteMixedFiles)
24820 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24830 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
24840 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
24850 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65  : If the "native
24860 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
24870 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65 20   is set, delete
24880 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 20  implicit..
24890 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
248a0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
248b0 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 6c  bly files as wel
248c0 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d 65  l.  This runtime
248d0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..
248e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
248f0 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20  heck is handled
24900 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68  when building th
24910 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d  e list of mixed-
24920 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  mode..
24930 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
24940 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e  mbly file names.
24950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24960 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
24970 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
24980 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
24990 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65  liteImplicitMixe
249a0 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
249b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
249c0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
249d0 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 249e0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 249f0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 24a00 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
24a10 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
24a20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24a30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24a40 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
24a50 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
24a60 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49  deleteSqliteNonI
24a70 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
24a80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24a90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
24aa0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
24ab0 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66  eleteSqlitePlatf
24ac0 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
24ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24ae0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
24af0 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 24b00 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 24b20 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
24b30 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
24b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24b50 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
24b60 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 24b70 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 e$platform..
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24ba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
24bb0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
24bc0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
24bd0 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74  leteSqliteArchit
24be0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26  ectureFiles)] &&
24bf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24c00 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
24c10 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63  length $architec 24c20 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ture] > 0} then 24c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24c40 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 24c50 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
24c60 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
24c80 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24  DeleteAssembly $24c90 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 fileName$archit
24ca0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
24cb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24d00 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
24d10 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
24d20 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d  eManagedFiles)]}
24d30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
24d40 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
24d50 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed 24d60 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 24d80 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 DeleteAssembly$
24d90 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
24da0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
24db0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
24dc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24dd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
24de0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
24df0 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63  r the "autoSelec
24e00 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  t" runtime optio
24e10 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d  n.  If present,.
24e20 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
24e30 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75     attempt to au
24e40 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65  tomatically sele
24e50 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 61  ct the first ava
24e60 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..
24e70 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
24e80 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f  (or "release") o
24e90 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73  f SQLite and Sys
24ea0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d  tem.Data.SQLite.
24eb0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
24ec0 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 20     for use with
24ed0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
24ee0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
24ef0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
24f00 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75  RuntimeOption au
24f10 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20  toSelect]} then
24f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
24f30 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c  f {![checkForSQL
24f40 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 24f50 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d t_channel true]} 24f60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24f70 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 24f80 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
24f90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72  :test_channel tr
24fa0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
24fb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
24fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
24fd0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
24fe0 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
24ff0 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c 64  verify the build
25000 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e   directory if in
25010 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20  structed;..
25020 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68       #       oth
25030 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72  erwise, make sur
25040 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78  e it actually ex
25050 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65  ists or halt the
25060 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20   entire..
25070 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 69     #       testi
25080 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 74  ng process if it
25090 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e   does not exist.
250a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
250b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
250c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
250d0 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 63  verifyBuildDirec
250e0 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tory)]} then {..
250f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
25100 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
25110 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  E: At this point
25120 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  , the build dire
25130 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74  ctory MUST exist
25140 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20   as a..
25150 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 64     #       valid
25160 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
25170 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
25180 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d  ss to continue..
25190 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
251a0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
251b0 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75  directory [getBu
251c0 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c  ildDirectory fal
251d0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se]....
251e0 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
251f0 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 25200 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 25210 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 25220 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
25230 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
25260 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
25270 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
25280 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
25290 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
252a0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
252b0 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
252c0 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
252d0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
252e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
252f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 25300 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 25310 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 25320 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 25330 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 25340 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 y build director 25350 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 y \""$directory
25360 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25370 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74        "\", all t
25380 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22  esting halted\n"
25390 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
253a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
253b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73      # NOTE: Rais
253c0 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72  ing a script err
253d0 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69  or from this poi
253e0 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a  nt should halt..
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
25400 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e        the testin
25410 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  g process...
25420 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
25430 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25440 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25460 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72    "could not ver
25470 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
25480 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 25490 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 254a0 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 254b0 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 testing halted" 254c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 254d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 254e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 254f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 25500 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 Skip trying to c 25510 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 opy any files if 25520 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 25530 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25540 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 25550 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 25560 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 25570 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 25580 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 25590 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 255a0 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 255b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 255c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
255d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
255e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
255f0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e      "---- copyin
25600 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 6f  g \"configuratio
25610 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d  n\" files...\n".
25620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
25630 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
25640 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 25650 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 25660 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui 25670 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ldFile$fileName
25680 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
25690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
256a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
256b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
256c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
256d0 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46  ySqliteExternalF
256e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
256f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
25700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
25710 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20   NOTE: Copy the
25720 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e  Managed Debuggin
25730 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44  g Assistants (MD
25740 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  A) configuration
25750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25760 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72  #       file for
25770 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
25780 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75   to the build ou
25790 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d  tput directory,.
257a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
257b0 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69         while usi
257c0 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  ng each of the n
257d0 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69  ames of the vari
257e0 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d  ous legacy test.
257f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
25800 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c         executabl
25810 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68  es.  This will h
25820 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  elp to make sure
25830 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20   that all the..
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
25850 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74       legacy test
25860 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74  s run with exact
25870 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20  ly the same set
25880 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20  of Managed..
25890 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
258a0 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69    Debugging Assi
258b0 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65  stants configure
258c0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...
258d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
258e0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 258f0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 25910 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d 44 --- copying \"MD 25920 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c A configuration\ 25930 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d " files...\n"... 25940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 25950 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 25960 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61$mdaConfigFileNa
25970 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
25980 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69         tryCopyBi
25990 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68  naryFile EagleSh
259a0 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
259b0 69 67 20 74 72 75 65 20 22 22 20 24 66 69 6c 65  ig true "" $file 259c0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 259d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 259e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 259f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 25a00 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 Copy the externa 25a10 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 l binaries, if a 25a20 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 ny, to the direc 25a30 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 tory that.. 25a40 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 25a50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 contains the Ea 25a60 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 gle shell. This 25a70 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 is typically us 25a80 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 ed to make.. 25a90 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 25aa0 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 sure assemblie 25ab0 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 s referenced by 25ac0 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 the ones being t 25ad0 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 ested are.. 25ae0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 25af0 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e available durin 25b00 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 g the testing pr 25b10 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ocess... 25b20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25b30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
25b40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d  test_channel "--
25b50 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 74  -- copying \"ext
25b60 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e 2e  ernal\" files...
25b70 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n"....
25b80 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
25b90 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 25ba0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 25bb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 25bc0 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 opyExternalFile 25bd0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
25be0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
25bf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25c00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
25c10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
25c20 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65  copySqliteNative
25c30 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
25c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
25c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25c60 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  # NOTE: If the t
25c70 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20  est platform is
25c80 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75  likely the defau
25c90 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20  lt for this..
25ca0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
25cb0 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f     machine, also
25cc0 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65   try to copy the
25cd0 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f   native files to
25ce0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
25cf0 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61      #       bina
25d00 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...
25d10 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
25d30 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
25d40 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d  :no(copySqliteIm
25d50 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c 65  plicitNativeFile
25d60 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
25d70 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 44              [isD
25d80 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66  efaultBuildPlatf
25d90 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
25db0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 25dc0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 25dd0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 25de0 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 copying implici 25df0 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c t \"native\" fil 25e00 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 25e10 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 25e20 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
25e30 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
25e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25e50 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
25e60 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c  ly $fileName fal 25e70 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se.. 25e80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 25e90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25ea0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 25eb0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 25ec0 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c opySqliteNonImpl 25ed0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 25ee0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 25ef0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 25f00 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 25f10 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 SqlitePlatformFi 25f20 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25f40 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
25f50 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74  platform] > 0} t
25f60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25f70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $25f80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 25f90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25fb0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e "---- copyin 25fc0 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c g \"native\" fil 25fd0 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 es for platform 25fe0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c$pl
26000 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d  atform \"...\n].
26010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
26020 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
26030 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 26040 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 26060 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
26070 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70  ileName false $p 26080 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 26090 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 260b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 260c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 260d0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 260e0 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 liteArchitecture 260f0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26110 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 26120 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
26130 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26150 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26160 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26170 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26180 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 26190 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76 65 copying \"native 261a0 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 \" files for arc 261b0 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d hitecture \"" \. 261c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 261d0 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
261e0 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d  ture \"...\n]...
261f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26200 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
26210 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 26220 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 26230 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 26240 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
26250 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 63  eName false $arc 26260 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 hitecture.. 26270 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 26280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26290 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 262a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 262b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 262c0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 262d0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 262e0 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 teMixedFiles)]} 262f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26300 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26310 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 26320 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 f the "native" r 26330 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 untime option is 26340 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c 69 set, copy impli 26350 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 cit.. 26360 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 # mixed 26370 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 -mode assembly f 26380 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 iles as well. T 26390 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f he runtime optio 263a0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 263b0 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20 69 # check i 263c0 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 s handled when b 263d0 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73 74 uilding the list 263e0 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a of mixed-mode.. 263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 26400 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 assembly f 26410 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 ile names... 26420 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 26430 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 26440 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 26450 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c o(copySqliteImpl 26460 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29 5d icitMixedFiles)] 26470 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26480 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 26490 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
264a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
264b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
264c0 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22  ying implicit \"
264d0 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e  mixed\" files...
264e0 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n"....
264f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
26500 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69  ileName $mixedFi 26510 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 26520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 26530 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 CopyAssembly$fi
26540 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20  leName false..
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
26570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
26580 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
26590 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
265a0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
265b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
265d0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
265e0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
265f0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
26600 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
26610 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
26620 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 26630 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 26640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26650 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
26660 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
26670 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
26690 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69  --- copying \"mi
266a0 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20  xed\" files for
266b0 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a  platform \"" \..
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
266d0 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform 266e0 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 \"...\n].... 266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 26700 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
26710 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
26720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26730 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
26740 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 26750 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d false$platform.
26760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26770 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26780 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
26790 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
267a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
267b0 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
267c0 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
267d0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
267e0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
267f0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 26800 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 26810 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26820 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
26830 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
26840 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26860 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
26870 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20  \"mixed\" files
26880 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
26890 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61                $a 268b0 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e rchitecture \".. 268c0 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n].... 268d0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 268e0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 h fileName$mixe
268f0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26910 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
26920 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73  y $fileName fals 26930 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d e$architecture.
26940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26950 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26960 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
26970 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
26980 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
26990 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
269a0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
269b0 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46  pySqliteManagedF
269c0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
269e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 269f0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e nel "---- copyin 26a00 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 g \"managed\" fi 26a10 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 les...\n".... 26a20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 26a30 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e ch fileName$man
26a40 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  agedFileNames {.
26a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26a60 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
26a70 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d   $fileName true. 26a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 26a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 26aa0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 26ab0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 26ac0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 26ad0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f kip trying to lo 26ae0 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 ad any files if 26af0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 26b00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 26b10 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 26b20 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 26b30 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 26b40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 26b50 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 26b60 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 26b70 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 iteImplicitFiles 26b80 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 26b90 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 26ba0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 26bb0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 26bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 26bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 26be0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 26bf0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 26c00 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 LinqFiles)]} the 26c10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26c20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 26c30 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 26c40 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a QLite.Linq.dll.. 26c50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 26c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 26c70 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 26c80 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 :no(loadSqliteEf 26c90 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 6Files)]} then { 26ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26cb0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 26cc0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 26cd0 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 te.EF6.dll.. 26ce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 26cf0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 26d00 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 26d10 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 loadSqliteNonImp 26d20 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 26d30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 26d40 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 26d50 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 26d60 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 26d70 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 26d80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 26d90 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
26da0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
26db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
26dc0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
26dd0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
26de0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74  SQLite.dll $plat 26df0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. 26e00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26e10 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 26e20 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 26e30 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 adSqliteArchitec 26e40 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 26e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26e60 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 26e70 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
26e80 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26ea0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
26eb0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
26ec0 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74  e.dll $architect 26ed0 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 26ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 26ef0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 26f00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 26f10 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 26f20 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 ileNameOnly$nat
26f30 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
26f40 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
26f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
26f60 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26f70 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26f80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26f90 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 26fa0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 ersion of \""$f
26fb0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e  ileNameOnly "\".
26fc0 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  .. \"" \..
26fd0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
26fe0 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
26ff0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 27000 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d NameOnly]] \"\n] 27010 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 27020 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27030 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 27040 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 NameOnly$mixedF
27050 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
27060 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
27070 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
27080 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 27090 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 270b0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 270c0 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e on of \""$fileN
270d0 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c  ameOnly "\"... \
270e0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
270f0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
27100 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
27110 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 27120 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 Only]] \"\n].. 27130 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 27140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 27150 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 27160 4f 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 69 6c Only$managedFil
27170 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
27180 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
27190 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $271a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 271b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 271d0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 271e0 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d of \""$fileNam
271f0 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
27200 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27210 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
27220 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
27230 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 27240 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 ly]] \"\n].. 27250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 27260 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 27270 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 27280 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
27290 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
272a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
272b0 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46  ameOnly $nativeF 272c0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 272d0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 272e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 272f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27300 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
27310 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27320 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
27330 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
27340 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20  $platform \.. 27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / 27360 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22$fileNameOnly "
27370 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20  \"... \"" [file
27380 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
273a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
273b0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70  $fileNameOnly$p
273c0 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d  latform]] \"\n].
273d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
273e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
273f0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
27400 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d   fileNameOnly $m 27410 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 27420 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 . cat 27430 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 27440 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
27450 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
27460 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
27470 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
27480 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
27490 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 274a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 274b0 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f /$fileNameO
274c0 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
274d0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
274f0 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
27500 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 27510 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ly$platform]] \
27520 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
27530 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
27540 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
27550 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
27560 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69  ng length $archi 27570 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 tecture] > 0} th 27580 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 27590 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 275a0 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 Only$nativeFile
275b0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
275c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
275d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
275e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 275f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 27600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 27610 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 27620 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 rsion of \""$ar
27630 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20  chitecture \..
27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27650 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  / $fileNameOnly 27660 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 27670 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 27690 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 276a0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24$fileNameOnly $276b0 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c architecture]] \ 276c0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 276d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 276e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f .... fo 276f0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 27700 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d ly$mixedFileNam
27710 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
27720 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
27730 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $27740 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 27750 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27770 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 27780 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
27790 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24               / $277b0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 277c0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 ... \"" [file ve 277d0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 277e0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 277f0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
27800 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63  ileNameOnly $arc 27810 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e hitecture]] \"\n 27820 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 27830 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 27840 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27850 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 27860 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the 27870 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 list of managed 27880 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 assemblies for t 27890 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce 278a0 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ss.. # 278b0 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f and report o 278c0 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 n the System.Dat 278d0 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 278e0 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ones... 278f0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 27900 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 27910 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 27920 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 27930 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 assemblies [obje 27940 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d ct invoke AppDom 27950 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 ain.CurrentDomai 27960 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d n GetAssemblies] 27970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 27980 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 ject foreach ass 27990 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 embly$assemblie
279a0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
279b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
279c0 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61  ch \{System.Data
279d0 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62  .SQLite* $assemb 279e0 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ly]} then {.. 279f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 27a00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
27a10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27a30 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
27a40 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22  aded assembly: "
27a50 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a   $assembly \n].. 27a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 27a70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 27a80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 27a90 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 27aa0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
27ab0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
27ac0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
27ad0 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
27ae0 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44  s for \"System.D
27af0 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20  ata.SQLite\"...
27b00 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
27b10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
27b20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
27b30 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
27b40 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
27b50 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
27b60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
27b70 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
27b80 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..
27b90 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61    } defineConsta
27ba0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
27bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
27bc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 27bd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 27be0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 27bf0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 27c00 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f$defineCo
27c10 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d  nstants] <none>]
27c20 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
27c30 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
27c40 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 27c50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 27c60 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 27c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 27c80 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 27c90 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 27ca0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
27cb0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
27cc0 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
27cd0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
27ce0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
27cf0 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
27d00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
27d10 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
27d20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
27d30 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
27d40 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
27d50 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
27d60 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
27d70 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
27d80 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  rVersion..
27d90 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
27da0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
27db0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
27dc0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver 27dd0 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 27de0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27df0 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 set version nu 27e00 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 27e10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 27e20 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27e30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
27e40 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20   $version \n].. 27e50 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 27e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 27e70 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27e80 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
27e90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
27ea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27eb0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
27ec0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 27ed0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 27ee0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 27ef0 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 - source checkou 27f00 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 t of \"System.Da 27f10 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 27f20 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 27f30 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 27f40 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 27f50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 27f60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 27f80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 27f90 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 27fa0 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 on ProviderSourc 27fb0 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d eId.. } 27fc0 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d sourceId] == 0} 27fd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 27fe0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 27ff0 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
28000 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
28010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
28020 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
28030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28040 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
28050 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 28060 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
28070 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20  sourceId \n]..
28080 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
28090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
280a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 280b0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 280c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 280d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 280e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 280f0 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 TE: Check the av 28100 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 ailable builds ( 28110 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 and "releases") 28120 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 of SQLite and.. 28130 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 28140 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 28150 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 28160 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 28170 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
28180 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
28190 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
281a0 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 281b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 281c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 281d0 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 # NOTE: Now, w 281e0 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 e need to know i 281f0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 f the SQLite cor 28200 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 e library is ava 28210 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 ilable.. 28220 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 # (i.e. be 28230 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 cause the manage 28240 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 d-only System.Da 28250 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 ta.SQLite assemb 28260 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 ly can.. 28270 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 # load wit 28280 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 hout it; however 28290 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 , it cannot do a 282a0 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 nything useful w 282b0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 ithout.. 282c0 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 # it). If 282d0 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 we are using th 282e0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 282f0 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 embly and we alr 28300 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 eady.. # 28310 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 found it ( 28320 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f above), this sho 28330 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 uld always succe 28340 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 28350 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 28360 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a SQLiteLibrary$:
28370 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
28380 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
28390 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
283a0 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
283b0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
283c0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
283d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
283e0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
283f0 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74  eInterop $::test 28400 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 28410 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 28420 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 28430 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 SQLite database 28440 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 28450 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 irectories... 28460 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 28470 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 28480 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
28490 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
284a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
284b0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
284c0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
284d0 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d  various compile-
284e0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65  time options nee
284f0 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..
28500 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f   #       test co
28510 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65  nstraints were e
28520 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
28530 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
28540 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20    There..
28550 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d   #       are som
28560 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
28570 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74  ptions that must
28580 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20   also have been
28590 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20  enabled..
285a0 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
285b0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
285c0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
285d0 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72   effective.  For
285e0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20   those..
285f0 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c  #       options,
28600 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75   it will be assu
28610 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20  med that it was
28620 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
28630 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  interop..
28640 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
28650 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62  y if it was enab
28660 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
28670 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
28680 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28690 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65    foreach define
286a0 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c  Constant [list \
286b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48  ..            CH
286c0 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f  ECK_STATE COUNT_
286d0 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54  HANDLE DEBUG INT
286e0 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52  EROP_CODEC INTER
286f0 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20  OP_DEBUG \..
28700 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
28710 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
28720 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35  ONS INTEROP_FTS5
28730 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
28740 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
28750 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20  P_INCLUDE_CEROD
28760 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
28770 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e  EXTRA INTEROP_IN
28780 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20  CLUDE_SEE \..
28790 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
287a0 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20  _INCLUDE_ZIPVFS
287b0 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
287c0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
287d0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c         INTEROP_L
287e0 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45  EGACY_CLOSE INTE
287f0 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f  ROP_LOG INTEROP_
28800 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
28810 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
28820 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
28830 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
28840 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54  EROP_SESSION_EXT
28850 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ENSION \..
28860 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 48        INTEROP_SH
28870 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  A1_EXTENSION INT
28880 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
28890 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
288a0 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50     INTEROP_TOTYP
288b0 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45  E_EXTENSION INTE
288c0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
288d0 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  E \..
288e0 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e   NET_20 NET_35 N
288f0 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54  ET_40 NET_45 NET
28900 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54  _451 NET_452 NET
28910 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20  _46 NET_461 \..
28920 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34             NET_4
28930 36 32 20 4e 45 54 5f 34 37 20 4e 45 54 5f 34 37  62 NET_47 NET_47
28940 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30  1 NET_COMPACT_20
28950 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43   PLATFORM_COMPAC
28960 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20  TFRAMEWORK \..
28970 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41            PRELOA
28980 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59  D_NATIVE_LIBRARY
28990 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51   RETARGETABLE SQ
289a0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d  LITE_STANDARD \.
289b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52  .            THR
289c0 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54  OW_ON_DISPOSED T
289d0 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45  RACE TRACE_CONNE
289e0 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54 45  CTION TRACE_DETE
289f0 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  CTION \..
28a00 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c       TRACE_HANDL
28a10 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20  E TRACE_PRELOAD
28a20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41  TRACE_SHARED TRA
28a30 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a  CE_STATEMENT \..
28a40 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43              TRAC
28a50 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f  E_WARNING TRACK_
28a60 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45  MEMORY_BYTES USE
28a70 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52  _ENTITY_FRAMEWOR
28a80 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  K_6 \..
28a90 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44     USE_INTEROP_D
28aa0 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  LL USE_PREPARE_V
28ab0 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20  2 WINDOWS] {..
28ac0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
28ad0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
28ae0 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c  ck if the compil
28af0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
28b00 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c   listed in the l
28b10 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ist of..
28b20 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e    #       "defin
28b30 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70  e constants" kep
28b40 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68  t track of by th
28b50 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  e managed assemb
28b60 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ly...          #
28b70 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
28b80 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65  kForSQLiteDefine
28b90 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74  Constant $::test 28ba0 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 _channel$define
28bb0 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20  Constant..
28bc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
28bd0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
28be0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53  : Check if the S
28bf0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
28c00 65 20 70 72 6f 76 69 64 65 72 20 77 61 73 20 63  e provider was c
28c10 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20  ompiled with..
28c20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
28c30 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 6e  pport for any en
28c40 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
28c50 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
28c60 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65         if {[have
28c70 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
28c80 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 43 4f 44  tant INTEROP_COD
28c90 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  EC] || \..
28ca0 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74        [haveSQLit
28cb0 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
28cc0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
28cd0 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  SEE]} then {..
28ce0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
28cf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
28d00 2c 20 61 64 64 20 67 65 6e 65 72 69 63 20 63 6f  , add generic co
28d10 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75 73 65  nstraint for use
28d20 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
28d30 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  te...          #
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
28d50 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d  onstraint System
28d60 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63  .Data.SQLite.Enc
28d70 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  ryption..
28d80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
28d90 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28da0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
28db0 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20  nt build year.
28dc0 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20  Basically, this
28dd0 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20  indicates..
28de0 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68     #       which
28df0 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75   version of MSBu
28e00 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61  ild and/or Visua
28e10 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 65  l Studio was use
28e20 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  d to..        #
28e30 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68        compile th
28e40 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72  e assembly binar
28e50 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d  ies under test..
28e60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
28e70 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 28e80 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 28e90 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 28ea0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 28eb0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b 28ec0 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a uild year... ".. 28ed0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 .. set ye 28ee0 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 ar [getBuildYear 28ef0 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f ].. addCo 28f00 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 28f10 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 Args buildYear. 28f20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20$year]..
28f30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 28f40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 28f50 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d s \"$year \"\n]
28f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
28f70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
28f80 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
28f90 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d   build .NET Fram
28fa0 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c  ework.  Basicall
28fb0 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  y, this..
28fc0 20 23 20 20 20 20 20 20 20 69 6e 64 69 63 61 74   #       indicat
28fd0 65 73 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e  es which version
28fe0 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 72 61   of the .NET Fra
28ff0 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d  mework is being.
29000 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29010 20 75 73 65 64 20 62 79 20 74 68 65 20 61 73 73   used by the ass
29020 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75  embly binaries u
29030 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20  nder test...
29040 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
29050 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 29060 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 29070 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 29080 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da 29090 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build 290a0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e .NET Framework.. 290b0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 . ".... s 290c0 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 75 69 et netFx [getBui 290d0 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 ldNetFx].. 290e0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 290f0 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil 29100 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 dFramework.$net
29110 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75  Fx]..        tpu
29120 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 29130 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 29140 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a "$netFx \"\n]..
29150 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
29160 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
29170 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62  ck the current b
29180 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
29190 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64  on.  This should
291a0 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20   normally..
291b0 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69     #       be ei
291c0 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20  ther "Debug" or
291d0 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20  "Release"...
291e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
291f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 29200 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 29210 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 29220 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da 29230 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build 29240 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e configuration... 29250 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ".... se 29260 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 t configuration 29270 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 [getBuildConfigu 29280 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 ration].. 29290 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b addConstraint [ 292a0 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 appendArgs build 292b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 Configuration.$
292c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a  configuration]..
292d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 292e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 292f0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f ppendArgs \"$co
29300 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e  nfiguration \"\n
29310 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
29320 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
29330 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20  Try to setup an
29340 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61  interrupt callba
29350 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63 72  ck using the scr
29360 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20  ipt debugger..
29370 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
29380 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61  at will cancel a
29390 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20 69  ll SQL queries i
293a0 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61  n progress for a
293b0 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ll database..
293c0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
293d0 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74  nections known t
293e0 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74  o this interpret
293f0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
29400 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
29410 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
29420 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43 61  qliteInterruptCa
29430 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b  llback)]} then {
29440 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 75  ..          setu
29450 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  pDbInterruptCall
29460 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61  back $::test_cha 29470 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 nnel$::test_log
29480 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
29490 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
294a0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
294b0 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 72  for the native r
294c0 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77  untime option, w
294d0 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20  hich would mean
294e0 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  we are..
294f0 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68  #       using th
29500 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
29510 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  embly...
29520 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
29530 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  ForRuntimeOption
29540 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 29550 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 native.... 29560 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 29570 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 29580 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68 he test suite sh 29590 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e ould count the n 295a0 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 umber of connect 295b0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ions.. # 295c0 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61 "opened" a 295d0 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d nd "closed" from 295e0 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 the pool when d 295f0 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 etermining if a 29600 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 test.. # 29610 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 44 passed. D 29620 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65 isabling this be 29630 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 havior is someti 29640 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 65 mes necessary (e 29650 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 .g... # 29660 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 20 during the 29670 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20 release testing 29680 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 65 process) because 29690 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 72 there are sever 296a0 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # 296b0 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 72 tests that r 296c0 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e ely on the "open 296d0 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f ed from pool" co 296e0 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 65 unt being greate 296f0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 29700 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 than zero. T 29710 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 66 hese tests may f 29720 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e ail due to the n 29730 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 on-deterministic 29740 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 29750 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 behavior of th 29760 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 e CLR GC, even w 29770 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 hen there is no 29780 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d bug in the code. 29790 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 297a0 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a being tested... 297b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 297c0 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 checkForRunti 297d0 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 meOption$::test
297e0 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43  _channel noPoolC
297f0 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20  ounts....
29800 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29810 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
29820 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75   test suite shou
29830 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d 63 61  ld use shared-ca
29840 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  che mode...
29850 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
29860 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74  eckForRuntimeOpt
29870 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ion $::test_chan 29880 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 65 0d nel sharedCache. 29890 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 298a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 298b0 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 port the resourc 298c0 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f e usage prior to 298d0 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 running any tes 298e0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 298f0 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 reportSQ 29900 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a LiteResources$:
29910 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
29920 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29930 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62      # NOTE: Grab
29940 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74   the list of nat
29950 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20  ive modules for
29960 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
29970 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ess and..
29980 20 23 20 20 20 20 20 20 20 72 65 70 6f 72 74 20   #       report
29990 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  on the System.Da
299a0 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65  ta.SQLite relate
299b0 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20  d ones...
299c0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
299d0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
299e0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
299f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
29a00 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74   modules [object
29a10 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20   invoke \..
29a20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
29a30 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63  Diagnostics.Proc
29a40 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72  ess.GetCurrentPr
29a50 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a  ocess Modules]..
29a60 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
29a70 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
29a80 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65  s module $module 29a90 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 29aa0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 29ab0 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 # NOTE: The modu 29ac0 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 le file name her 29ad0 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c e must be normal 29ae0 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 ized... 29af0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 29b00 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 29b10 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b file normalize [ 29b20 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65$module FileName
29b30 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]]..
29b40 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  set fileNameOnly
29b50 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil 29b60 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 eName].... 29b70 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 if {[lsear 29b80 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 ch -exact -nocas 29b90 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 e -- \.. 29ba0 20 20 20 20 20 20 20 20 5b 67 65 74 4e 61 74 69 [getNati 29bb0 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d veLibraryFileNam 29bc0 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d esOnly]$fileNam
29bd0 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68  eOnly] != -1} th
29be0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
29bf0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29c00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 29c10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 29c20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 29c30 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 found loaded SQ 29c40 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 Lite native libr 29c50 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d ary module: " \. 29c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 29c70 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d$fileName \n]
29c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
29c90 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 63 68  elseif {[lsearch
29ca0 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20   -exact -nocase
29cb0 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  -- \..
29cc0 20 20 20 20 20 20 5b 67 65 74 49 6e 74 65 72 6f        [getIntero
29cd0 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d  pAssemblyFileNam
29ce0 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d  esOnly] $fileNam 29cf0 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 eOnly] != -1} th 29d00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 29d10 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
29d20 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
29d30 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
29d40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
29d50 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51   found loaded SQ
29d60 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
29d70 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20  embly module: "
29d80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
29d90 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c       $fileName \ 29da0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 29db0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 29dc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 29dd0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 29de0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
29df0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
29e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
29e10 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ---- compile-tim
29e20 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51  e options for SQ
29e30 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
29e40 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
29e50 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
29e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
29e70 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
29e80 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
29e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
29ea0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
29eb0 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69  ite.SQLite3 SQLi
29ec0 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  teCompileOptions
29ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f  ..          } co
29ee0 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d  mpileOptions] ==
29ef0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
29f00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 29f10 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 29f20 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 ppendArgs [forma 29f30 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a tList [lsort \.. 29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29f50 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d$compileOptions]
29f60 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20   <none>] \n]..
29f70 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
29f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
29f90 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 29fa0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 29fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 29fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 29fd0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 29fe0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
29ff0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
2a000 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2a010 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
2a020 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65  tions for SQLite
2a030 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
2a040 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
2a050 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
2a060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
2a070 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
2a080 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
2a090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2a0a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2a0b0 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65  ite.SQLite3 Inte
2a0c0 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  ropCompileOption
2a0d0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63  s..          } c
2a0e0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d  ompileOptions] =
2a0f0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
2a100 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $2a110 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 2a120 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d appendArgs [form 2a130 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d atList [lsort \. 2a140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a150 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73$compileOptions
2a160 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20  ] <none>] \n]..
2a170 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
2a180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
2a190 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2a1a0 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a nnel unknown\n.. 2a1b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2a1c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2a1d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a1e0 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 OTE: Show the ac 2a1f0 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 tive test constr 2a200 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 aints... 2a210 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 2a220 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2a230 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d   [appendArgs "--
2a240 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20  -- constraints:
2a250 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
2a260 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73   [formatList [ls
2a270 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69  ort [getConstrai
2a280 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e  nts]] <none>] \n
2a290 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
2a2a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2a2b0 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63 6f  Save the test co
2a2c0 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73  nstraints for us
2a2d0 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72 65  e by threads cre
2a2e0 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20  ated in this..
2a2f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70        #       ap
2a300 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e  plication domain
2a310 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73  .  This is neces
2a320 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c  sary because all
2a330 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
2a340 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65 73      #       "tes
2a350 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72  t context" infor
2a360 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68  mation is per-th
2a370 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  read...        #
2a380 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
2a390 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
2a3a0 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d  st_constraints]}
2a3b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2a3c0 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f     set ::test_co
2a3d0 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67  nstraints $::eag 2a3e0 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61 le_tests(constra 2a3f0 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d ints).. } 2a400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2a410 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c # NOTE: L 2a420 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d 63 oad the "after-c 2a430 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 onstraints" cust 2a440 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 2a450 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 or per-host.. 2a460 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 2a470 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d t settings now.. 2a480 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a490 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 2a4a0 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 ist loadSQLiteTe 2a4b0 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 stSettings$::te
2a4c0 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65  st_channel .afte
2a4d0 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  r]....        #.
2a4e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2a4f0 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 65   If necessary, e
2a500 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63  nable shared-cac
2a510 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20  he mode now...
2a520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2a530 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
2a540 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63  Option sharedCac
2a550 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  he]} then {..
2a560 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61         enableSha
2a570 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74  redCache $::test 2a580 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 _channel true.. 2a590 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2a5a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2a5b0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e NOTE: Show when 2a5c0 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 our tests actua 2a5d0 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e lly began (now). 2a5e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2a5f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2a600 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2a610 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
2a620 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74        "---- Syst
2a630 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
2a640 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20  ests began at "
2a650 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2a660 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c  clock format [cl
2a670 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e  ock seconds]] \n
2a680 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
2a690 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
2a6a0 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65  unSQLiteTestFile
2a6b0 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a  sPrologue {} {..
2a6c0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
2a6d0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2a6e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
2a6f0 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65  tup the variable
2a700 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to
2a710 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d  the various non-
2a720 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20  data files..
2a730 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75      #       requ
2a740 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74  ired by the test
2a750 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d  s in this file..
2a760 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2a770 20 20 20 20 73 65 74 20 65 6e 74 69 74 79 46 72      set entityFr
2a780 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c  ameworkDllFile \
2a790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
2a7a0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
2a7b0 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e  EntityFramework.
2a7c0 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20  dll false]....
2a7d0 20 20 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c        set instal
2a7e0 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20  lerExeFile \..
2a7f0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
2a800 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74  ildFileName Inst
2a810 61 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 65 5d  aller.exe false]
2a820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
2a830 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c  sqliteDesignerDl
2a840 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  lFile \..
2a850 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69       [getBuildFi
2a860 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65  leName SQLite.De
2a870 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61 6c 73 65  signer.dll false
2a880 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
2a890 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
2a8a0 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  eDllFile \..
2a8b0 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
2a8c0 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  dFileName System
2a8d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
2a8e0 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20   false]....
2a8f0 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74     set systemDat
2a900 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
2a910 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2a920 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
2a930 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
2a940 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20  SQLite.Linq.dll
2a950 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  false]....
2a960 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
2a970 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65  SQLiteEf6DllFile
2a980 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2a990 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
2a9a0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
2a9b0 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 61 6c  Lite.EF6.dll fal
2a9c0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  se]....        s
2a9d0 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b  et testExeFile [
2a9e0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
2a9f0 20 74 65 73 74 2e 65 78 65 20 66 61 6c 73 65 5d   test.exe false]
2aa00 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
2aa10 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67  stLinqExeFile [g
2aa20 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
2aa30 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 66 61 6c  testlinq.exe fal
2aa40 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  se]..        set
2aa50 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20   testEf6ExeFile
2aa60 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
2aa70 65 20 74 65 73 74 65 66 36 2e 65 78 65 20 66 61  e testef6.exe fa
2aa80 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse]....
2aa90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2aaa0 45 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72  E: Setup the var
2aab0 69 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65  iables that refe
2aac0 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73  r to the various
2aad0 20 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20   data files..
2aae0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71       #       req
2aaf0 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73  uired by the tes
2ab00 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e  ts in this file.
2ab10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2ab20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e       set testLin
2ab30 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e  qOutFile [file n
2ab40 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
2ab50 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
2ab60 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
2ab70 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73 74  stDataPath] test
2ab80 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20  linq.out]]....
2ab90 20 20 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77        set northw
2aba0 69 6e 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c  indEfDbFile [fil
2abb0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
2abc0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
2abd0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72         [file dir
2abe0 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61  name [file dirna
2abf0 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73  me [getSQLiteTes
2ac00 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a  tDataPath]]] \..
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
2ac20 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46  linq northwindEF
2ac30 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .db]]....
2ac40 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c   set nonWalDbFil
2ac50 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
2ac60 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
2ac70 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
2ac80 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
2ac90 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d  ath] nonWal.db]]
2aca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
2acb0 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20  walDbFile [file
2acc0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2acd0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2ace0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
2acf0 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c  estDataPath] wal
2ad00 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .db]]....
2ad10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2ad20 54 45 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20  TE: The various
2ad30 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c  install/uninstal
2ad40 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64  l log files used
2ad50 20 74 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20   to test the..
2ad60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65        #       de
2ad70 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e  sign-time compon
2ad80 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a  ent installer...
2ad90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ada0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
2adb0 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20  llVs2005LogFile
2adc0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
2add0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
2ade0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
2adf0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
2ae00 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73  h] Installer_Tes
2ae10 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2005.log]]..
2ae20 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
2ae30 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c  stInstallVs2008L
2ae40 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
2ae50 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
2ae60 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
2ae70 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
2ae80 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
2ae90 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e  ler_Test_Vs2008.
2aea0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2aeb0 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c   set testInstall
2aec0 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66  Vs2010LogFile [f
2aed0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
2aee0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
2aef0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
2af00 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
2af10 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
2af20 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2010.log]]....
2af30 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
2af40 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  InstallVs2012Log
2af50 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
2af60 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
2af70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2af80 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
2af90 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65  taPath] Installe
2afa0 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f  r_Test_Vs2012.lo
2afb0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
2afc0 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
2afd0 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2013LogFile [fil
2afe0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
2aff0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
2b000 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
2b010 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
2b020 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
2b030 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2013.log]]....
2b040 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e        set testIn
2b050 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69  stallVs2015LogFi
2b060 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2b070 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2b080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
2b090 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
2b0a0 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
2b0b0 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d  Test_Vs2015.log]
2b0c0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
2b0d0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
2b0e0 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  17LogFile [file
2b0f0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2b100 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2b110 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
2b120 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73  estDataPath] Ins
2b130 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
2b140 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  17.log]]....
2b150 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
2b160 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
2b170 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2b180 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2b190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
2b1a0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
2b1b0 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
2b1c0 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f  r_Test_Vs2005.lo
2b1d0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
2b1e0 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
2b1f0 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66  Vs2008LogFile [f
2b200 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
2b210 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
2b220 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
2b230 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
2b240 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
2b250 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2008.log]]..
2b260 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
2b270 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2b280 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  0LogFile [file n
2b290 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
2b2a0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
2b2b0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
2b2c0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
2b2d0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
2b2e0 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  010.log]]....
2b2f0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
2b300 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46  nstallVs2012LogF
2b310 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2b320 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2b330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2b340 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2b350 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
2b360 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c  er_Test_Vs2012.l
2b370 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2b380 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  set testUninstal
2b390 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b  lVs2013LogFile [
2b3a0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2b3b0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2b3c0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
2b3d0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2b3e0 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65  ] Uninstaller_Te
2b3f0 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d  st_Vs2013.log]].
2b400 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
2b410 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
2b420 31 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  15LogFile [file
2b430 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2b440 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2b450 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
2b460 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
2b470 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
2b480 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2015.log]]....
2b490 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
2b4a0 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67  installVs2017Log
2b4b0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
2b4c0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
2b4d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2b4e0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
2b4f0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
2b500 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e  ler_Test_Vs2017.
2b510 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2b520 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
2b530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b560 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
2b570 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2b580 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2b590 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2b5a0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2b5b0 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d  tail $entityFram 2b5c0 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d eworkDllFile]]]} 2b5d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2b5e0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 2b5f0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65$test_channel $e 2b600 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c ntityFrameworkDl 2b610 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d lFile.. } 2b620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 2b630 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2b640 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2b650 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2b660 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e [file tail$in
2b670 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d  stallerExeFile]]
2b680 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2b690 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2b6a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2b6b0 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c$installerExeFil
2b6c0 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d  e Installer.exe.
2b6d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2b6e0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2b6f0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2b700 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2b710 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2b720 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65  e tail $sqliteDe 2b730 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d signerDllFile]]] 2b740 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2b750 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2b760 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2b770 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c sqliteDesignerDl 2b780 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d lFile.. } 2b790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 2b7a0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2b7b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2b7c0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2b7d0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 [file tail$sy
2b7e0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c  stemDataSQLiteDl
2b7f0 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  lFile]]]} then {
2b800 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
2b810 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2b820 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 hannel$systemDa
2b830 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d  taSQLiteDllFile.
2b840 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2b850 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2b860 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2b870 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2b880 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2b890 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61  e tail $systemDa 2b8a0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 2b8b0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 2b8c0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2b8d0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2b8e0 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61  nnel $systemData 2b8f0 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c SQLiteLinqDllFil 2b900 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 2b910 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 2b920 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 2b930 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 2b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 2b950 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d ile tail$system
2b960 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
2b970 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2b980 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2b990 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2b9a0 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 annel$systemDat
2b9b0 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
2b9c0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
2b9d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2b9e0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2b9f0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
2ba10 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78  ile tail $testEx 2ba20 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b eFile]]]} then { 2ba30 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 2ba40 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2ba50 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46  hannel $testExeF 2ba60 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 ile test.exe.. 2ba70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2ba80 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2ba90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2baa0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2bab0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2bac0 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 ail$testLinqExe
2bad0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2bae0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2baf0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2bb00 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 annel$testLinqE
2bb10 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e  xeFile testlinq.
2bb20 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  exe..        }..
2bb30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
2bb40 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2bb50 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2bb60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2bb70 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2bb80 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 Ef6ExeFile]]]} t 2bb90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2bba0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2bbb0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 2bbc0 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 tEf6ExeFile test 2bbd0 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 ef6.exe.. 2bbe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 2bbf0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2bc00 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2bc10 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2bc20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2bc30 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d  testLinqOutFile]
2bc40 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2bc50 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
2bc60 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 2bc70 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c$testLinqOutFil
2bc80 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
2bc90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2bca0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2bcb0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2bcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
2bcd0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77  ile tail $northw 2bce0 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 indEfDbFile]]]} 2bcf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2bd00 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2bd10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f  test_channel $no 2bd20 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d rthwindEfDbFile. 2bd30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 2bd40 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2bd50 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2bd60 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2bd70 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2bd80 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 e tail$nonWalDb
2bd90 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2bda0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2bdb0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2bdc0 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 annel$nonWalDbF
2bdd0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
2bde0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
2bdf0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2be00 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2be10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2be20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44  [file tail $walD 2be30 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b bFile]]]} then { 2be40 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 2be50 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2be60 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c  hannel $walDbFil 2be70 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 2be80 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 2be90 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 2bea0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 2beb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 2bec0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
2bed0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
2bee0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
2bef0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
2bf00 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 2bf10 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
2bf20 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2005LogFile..
2bf30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2bf40 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2bf50 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2bf60 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2bf70 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2bf80 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 2bf90 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d lVs2008LogFile]] 2bfa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2bfb0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2bfc0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2bfd0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2bfe0 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 08LogFile.. 2bff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2c000 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2c010 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2c020 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2c030 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2c040 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
2c050 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  010LogFile]]]} t
2c060 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2c070 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2c080 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
2c090 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  tInstallVs2010Lo
2c0a0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
2c0b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
2c0c0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2c0d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2c0e0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2c0f0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2c100 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 2c110 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 2c120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 2c130 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
2c140 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73  channel $testIns 2c150 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c tallVs2012LogFil 2c160 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 2c170 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 2c180 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 2c190 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 2c1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 2c1b0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
2c1c0 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
2c1d0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
2c1e0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
2c1f0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 2c200 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
2c210 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2013LogFile..
2c220 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2c230 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2c240 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2c250 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2c260 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2c270 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 2c280 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d lVs2015LogFile]] 2c290 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2c2a0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2c2b0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2c2c0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2c2d0 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 15LogFile.. 2c2e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2c2f0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2c300 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2c310 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2c320 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2c330 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
2c340 30 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  017LogFile]]]} t
2c350 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2c360 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2c370 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
2c380 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f  tInstallVs2017Lo
2c390 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
2c3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
2c3b0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2c3c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2c3d0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2c3e0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2c3f0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 2c400 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 5LogFile]]]} the 2c410 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 2c420 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2c430 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2c440 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f ninstallVs2005Lo 2c450 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 2c460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 2c470 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2c480 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2c490 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2c4a0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
2c4b0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
2c4c0 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
2c4d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
2c4e0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2c4f0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2c500 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  ninstallVs2008Lo
2c510 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
2c520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
2c530 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2c540 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2c550 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2c560 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2c570 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2c580 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 0LogFile]]]} the 2c590 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 2c5a0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2c5b0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2c5c0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f ninstallVs2010Lo 2c5d0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 2c5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 2c5f0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2c600 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2c610 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2c620 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
2c630 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2c640 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  2LogFile]]]} the
2c650 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
2c660 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2c670 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2c680 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  ninstallVs2012Lo
2c690 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
2c6a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
2c6b0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2c6c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2c6d0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2c6e0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2c6f0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2c700 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 3LogFile]]]} the 2c710 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 2c720 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2c730 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2c740 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f ninstallVs2013Lo 2c750 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 2c760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 2c770 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2c780 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2c790 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2c7a0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
2c7b0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
2c7c0 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  5LogFile]]]} the
2c7d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
2c7e0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2c7f0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2c800 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  ninstallVs2015Lo
2c810 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
2c820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
2c830 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2c840 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2c850 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2c860 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2c870 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2c880 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 7LogFile]]]} the 2c890 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 2c8a0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2c8b0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2c8c0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f ninstallVs2017Lo 2c8d0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 2c8e0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 2c8f0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 ..... proc ru 2c900 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 nSQLiteTestFiles 2c910 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Epilogue {} {.. 2c920 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b uplevel 1 { 2c930 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 .. unset 2c940 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 -nocomplain \.. 2c950 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 testU 2c960 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f ninstallVs2017Lo 2c970 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 gFile testUninst 2c980 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 2c990 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c9a0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2c9b0 30 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 013LogFile testU 2c9c0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f ninstallVs2012Lo 2c9d0 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 gFile \.. 2c9e0 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 testUninsta 2c9f0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 2ca00 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2ca10 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 008LogFile \.. 2ca20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e testUn 2ca30 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 installVs2005Log 2ca40 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c File testInstall 2ca50 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 5c 0d Vs2017LogFile \. 2ca60 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 2ca70 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 2ca80 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 2ca90 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 2caa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 2cab0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 2cac0 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 ogFile testInsta 2cad0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 2cae0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 2caf0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 estInstallVs2008 2cb00 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 2cb10 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 2cb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 .... unse 2cb30 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d t -nocomplain \. 2cb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 . nor 2cb50 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 thwindEfDbFile t 2cb60 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c estLinqOutFile \ 2cb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 .. wa 2cb80 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 2cb90 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 2cba0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 2cbb0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2cbc0 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 2cbd0 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 testLinqExeFile 2cbe0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 2cbf0 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 estExeFile syste 2cc00 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 2cc10 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 2cc20 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 systemDataS 2cc30 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 2cc40 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 2cc50 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 eDllFile \.. 2cc60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 sqliteDe 2cc70 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e signerDllFile in 2cc80 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c stallerExeFile \ 2cc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e .. en 2cca0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 2ccb0 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 File.. }.. 2ccc0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 2ccd0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 c runSQLiteTestE 2cce0 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 pilogue {} {.. 2ccf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2cd00 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 2cd10 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 g our custom epi 2cd20 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 2cd30 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 2cd40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 2cd50 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 2cd60 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 2cd70 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 o exists ::no(ep 2cd80 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ilogue.eagle)]} 2cd90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2cda0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2cdb0 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 2cdc0 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 2cdd0 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 ended (now)... 2cde0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2cdf0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2ce00 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2ce10 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2ce20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
2ce30 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
2ce40 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20   ended at " \..
2ce50 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
2ce60 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
2ce70 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d  seconds]] \n]...
2ce80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2ce90 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
2cea0 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20   the "epilogue"
2ceb0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
2cec0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20  and/or per-host
2ced0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
2cee0 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e        settings n
2cef0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
2cf00 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
2cf10 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
2cf20 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $2cf30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 2cf40 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 epilogue].... 2cf50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2cf60 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 2cf70 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 checking the fi 2cf80 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e nal resources in 2cf90 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 use by SQLite, 2cfa0 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 make.. # 2cfb0 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 sure bot 2cfc0 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 h of the PRAGMA 2cfd0 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 2cfe0 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 2cff0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 2d000 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 2d010 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 2d020 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2d030 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
2d040 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2d050 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20  TE: Also report
2d060 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61  the resource usa
2d070 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  ge after running
2d080 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20   the tests...
2d090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2d0a0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
2d0b0 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 2d0c0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 2d0d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2d0e0 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 TE: Report the c 2d0f0 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 2d100 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e ounts after runn 2d110 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a ing the tests... 2d120 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2d130 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 getSQLiteHand 2d140 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 leCounts$::test
2d150 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
2d160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2d170 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73   NOTE: If necess
2d180 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61  ary, disable sha
2d190 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
2d1a0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
2d1b0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
2d1c0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
2d1d0 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
2d1e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
2d1f0 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
2d200 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  \$::test_channel
2d210 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
2d220 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2d230 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23  .....    #######
2d240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d280 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
2d290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d2a0 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c  ####### END Eagl
2d2b0 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23  e ONLY #########
2d2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d2d0 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
2d2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d2f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d320 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20  ######..  }....
2d330 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61   #..  # NOTE: Sa
2d340 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ve the name of t
2d350 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
2d360 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  taining this fil
2d370 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21  e...  #..  if {!
2d380 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d  [info exists com
2d390 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
2d3a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
2d3b0 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
2d3c0 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
2d3d0 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20  info script]]..
2d3e0 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
2d3f0 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65  OTE: Provide the
2d400 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2d410 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  ite test package
2d420 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
2d430 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63  ter...  #..  pac
2d440 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73  kage provide Sys
2d450 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2d460 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a           Test 1.0..}..