System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 835f34b4c5c85134a0dd0cd101e8acffd38c88ea:

• File lib/System.Data.SQLite/common.eagle — part of check-in [babe22b817] at 2017-08-02 17:20:46 on branch vs2017 — Add preliminary support for Visual Studio 2017 and the .NET Framework 4.7. (user: mistachkin size: 181676)

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 0d 0a 20  eturn netFx47..
23b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
23c0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
23d0: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t {..
23e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33     return netFx3
23f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20  5; # TODO: Good
2400: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75  "fallback" defau
2410: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt?..
2420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2430: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
2440: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2450: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
2460: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
2470: 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 6e   should return n
2480: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63  on-zero if the c
2490: 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d 0a  onfigured test..
24a0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74      #       plat
24b0: 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 6b  form is most lik
24c0: 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 20  ely the default
24d0: 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65  for this machine
24e0: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 72  ...    #..    pr
24f0: 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 6c  oc isDefaultBuil
2500: 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 72  dPlatform { {ver
2510: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  bose true} } {..
2520: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2530: 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f   NOTE: Running o
2540: 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 65 72  n WoW64 is never
2550: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61   the default pla
2560: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  tform...      #.
2570: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75  .      if {[isRu
2580: 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 68 65  nningWoW64]} the
2590: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
25a0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then 25b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 25c0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
25d0: 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
25e0: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74      "---- detect
25f0: 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 70  ed non-default p
2600: 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 29 5c  latform (WoW64)\
2610: 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n"..        }...
2620: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
2630: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  false..      }..
2640: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
2650: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61   # NOTE: This ha
2660: 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20  s a good chance
2670: 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66  of being the def
2680: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a  ault platform...
2690: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
26a0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the 26b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 26c0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
26d0: 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65  el "---- detecte
26e0: 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f  d default platfo
26f0: 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rm\n"..      }..
2700: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74  ..      return t
2710: 72 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  rue..    }.....
2720: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2730: 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76  Platform { nativ
2740: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  e } {..      if
2750: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
2760: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26  test_platform] &
2770: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
2780: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 2790: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 :test_platform] 27a0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27c0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 27d0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 specified test p 27e0: 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 latform. If thi 27f0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 2800: 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 t set,.. 2810: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 # the defa 2820: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 2830: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d e based on the m 2840: 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 achine architect 2850: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ure... #. 2860: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 2870: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
2880: 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72   $::test_platfor 2890: 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 m : ""}].. 28a0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 28b0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 exists ::test_ma 28c0: 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 chine] && \.. 28d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 28e0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 ength$::test_ma
28f0: 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e  chine] > 0} then
2900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
2910: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
2920: 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73  or native builds
2930: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61  , return the pla
2940: 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65  tform name corre
2950: 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20  sponding to..
2960: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2970: 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72   test machine ar
2980: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
2990: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
29a0: 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20   empty..
29b0: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d  #       string..
29c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
29e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e   {..          $n 29f0: 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 ative ? [machine 2a00: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 ToPlatform$::te
2a10: 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22  st_machine] : ""
2a20: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20  ..        }]..
2a30: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
2a40: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c  nfo exists ::tcl
2a50: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e  _platform(machin
2a60: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
2a70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2a80: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69  # NOTE: For nati
2a90: 76 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72  ve builds, retur
2aa0: 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e  n the platform n
2ab0: 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ame correspondin
2ac0: 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  g to..        #
2ad0: 20 20 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e        the machin
2ae0: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20  e architecture;
2af0: 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72  otherwise, retur
2b00: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  n an empty strin
2b10: 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  g...        #..
2b20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65         return [e
2b30: 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  xpr {..
2b40: 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68   $native ? [mach 2b50: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a ineToPlatform$:
2b60: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
2b70: 63 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20  chine)] : ""..
2b80: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20        }]..
2b90: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
2ba0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2bb0: 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20  OTE: No machine
2bc0: 61 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20  architecture is
2bd0: 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72  available, retur
2be0: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  n an empty strin
2bf0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  g...        #
2c00: 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74      It is import
2c10: 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ant to return an
2c20: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65   empty string he
2c30: 72 65 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a  re because the..
2c40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2c50: 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70  result of this p
2c60: 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 20  rocedure may be
2c70: 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20  used with [file
2c80: 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20  join]...
2c90: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2ca0: 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n ""..      }..
2cb0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
2cc0: 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67  c getBuildConfig
2cd0: 75 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20  uration {} {..
2ce0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
2cf0: 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20  OTE: See if the
2d00: 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20  "configuration"
2d10: 73 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e  setting has been
2d20: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74   overridden by t
2d30: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
2d40: 20 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20    user (e.g. on
2d50: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
2d60: 29 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63  ).  This helps c
2d70: 6f 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a  ontrol exactly..
2d80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
2d90: 69 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72  ich set of binar
2da0: 69 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69  ies we are testi
2db0: 6e 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62  ng (i.e. those b
2dc0: 75 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20  uilt in the..
2dd0: 20 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75     #       "Debu
2de0: 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20  g" or "Release"
2df0: 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
2e00: 69 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72  ions).  To overr
2e10: 69 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20  ide this..
2e20: 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69  #       value vi
2e30: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  a the command li
2e40: 6e 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d  ne, enter a comm
2e50: 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f  and similar to o
2e60: 6e 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20  ne of..      #
2e70: 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69       the followi
2e80: 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c  ng (all on one l
2e90: 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a  ine):..      #..
2ea0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
2eb0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e  gleShell.exe -an
2ec0: 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74  yInitialize "set
2ed0: 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74   test_configurat
2ee0: 69 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20  ion Debug"..
2ef0: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
2f00: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
2f10: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
2f20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
2f30: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e  gleShell.exe -an
2f40: 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74  yInitialize "set
2f50: 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74   test_configurat
2f60: 69 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20  ion Release"..
2f70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
2f80: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
2f90: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
2fa0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2fb0: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
2fc0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
2fd0: 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73  ll.eagle -preTes
2fe0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
2ff0: 20 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d     "unset -nocom
3000: 70 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69  plain test_confi
3010: 67 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20  guration"..
3020: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
3030: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
3040: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d  t_configuration]
3050: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
3060: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
3070: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72  $::test_configur 3080: 61 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e ation] > 0} then 3090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 30a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 30b0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 30c0: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 test configurat 30d0: 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c ion. The defaul 30e0: 74 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 t value used.. 30f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo 3100: 72 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 r this variable 3110: 69 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 is typically "Re 3120: 6c 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 lease", as set b 3130: 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 y the test.. 3140: 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 # suit 3150: 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 e itself... 3160: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 3170: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e turn$::test_con
3180: 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20  figuration..
3190: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
31a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
31b0: 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c   NOTE: Normally,
31c0: 20 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68   we will never h
31d0: 69 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63  it this case bec
31e0: 61 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ause the value o
31f0: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  f the..        #
3200: 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66         test conf
3210: 69 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62  iguration variab
3220: 6c 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74  le is always set
3230: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
3240: 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
3250: 20 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65      itself; howe
3260: 76 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f  ver, it can be o
3270: 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20  verridden using
3280: 74 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e  the unset comman
3290: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
32a0: 20 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65     from the -pre
32b0: 54 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74  Test option to t
32c0: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
32d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
32e0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67     return $::eag 32f0: 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 le_platform(conf 3300: 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 iguration).. 3310: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 3320: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 3330: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b Configurations { 3340: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 3350: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 # NOTE: See 3360: 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 if the list of t 3370: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 3380: 6e 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ns has been over 3390: 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 ridden by.. 33a0: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 # the use 33b0: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 r (e.g. on the c 33c0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 ommand line)... 33d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 33e0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 33f0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 3400: 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ions] && \.. 3410: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
3420: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
3430: 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e  tions] > 0} then
3440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3450: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
3460: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
3470: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f   list of test co
3480: 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20  nfigurations...
3490: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
34a0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74    return $::test 34b0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d _configurations. 34c0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 34d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 34e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 34f0: 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 the default list 3500: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 of test configu 3510: 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 rations... 3520: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 3530: 75 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 urn [list Debug 3540: 52 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 Release].. 3550: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 3560: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 proc getBuildBa 3570: 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b seDirectory {} { 3580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3590: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 # NOTE: Figure 35a0: 6f 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72 out the base dir 35b0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c ectory where all 35c0: 20 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 the builds shou 35d0: 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ld be.. # 35e0: 20 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 located. T 35f0: 68 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 his will be the 3600: 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 directory that c 3610: 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 ontains the actu 3620: 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 al.. # 3630: 20 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 build output d 3640: 69 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 irectory (e.g. p 3650: 61 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e arent of "bin"). 3660: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3670: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 3680: 73 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 s ::build_base_d 3690: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 36a0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 36b0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c g length$::buil
36c0: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79  d_base_directory
36d0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
36e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
36f0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
3700: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75  cation of the bu
3710: 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f  ild base directo
3720: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
3730: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
3740: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
3750: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61  re, use it verba
3760: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
3770: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3780: 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69  $::build_base_di 3790: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 37a0: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 37b0: 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 xists ::common_d 37c0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 37d0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 37e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d g length$::comm
37f0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  on_directory] >
3800: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
3810: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
3820: 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c  NOTE: Next, fall
3830: 62 61 63 6b 20 74 6f 20 74 68 65 20 67 72 61 6e  back to the gran
3840: 64 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72  dparent director
3850: 79 20 6f 66 20 74 68 65 20 6f 6e 65 0d 0a 20 20  y of the one..
3860: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
3870: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
3880: 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e  le (i.e. "common
3890: 2e 65 61 67 6c 65 22 29 2c 20 69 66 20 61 76 61  .eagle"), if ava
38a0: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  ilable...
38b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
38c0: 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  rn [file dirname
38d0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $38e0: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f ::common_directo 38f0: 72 79 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ry]].. } el 3900: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 3910: 74 73 20 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d ts ::path] && \. 3920: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 3930: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74 ng length$::pat
3940: 68 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  h] > 0} then {..
3950: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3960: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c     # NOTE: Final
3970: 6c 79 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20  ly, fallback to
3980: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63  the parent direc
3990: 74 6f 72 79 20 6f 66 20 74 68 65 20 45 61 67 6c  tory of the Eagl
39a0: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23  eTest..        #
39b0: 20 20 20 20 20 20 20 70 61 74 68 2e 20 20 54 68         path.  Th
39c0: 65 20 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b  e EagleTest pack
39d0: 61 67 65 20 67 75 61 72 61 6e 74 65 65 73 20 74  age guarantees t
39e0: 68 61 74 20 74 68 69 73 20 76 61 72 69 61 62 6c  hat this variabl
39f0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
3a00: 20 20 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74     will be set t
3a10: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  o the directory
3a20: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
3a30: 69 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20  irst file to..
3a40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78        #       ex
3a50: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65  ecute the [runTe
3a60: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69  stPrologue] scri
3a70: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65  pt library proce
3a80: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  dure...        #
3a90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3aa0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $3ab0: 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ::path].. } 3ac0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 3ad0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3ae0: 54 45 3a 20 4e 6f 20 70 61 74 68 20 69 73 20 61 TE: No path is a 3af0: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e vailable, return 3b00: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3b10: 2e 20 20 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20 . This point.. 3b20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 3b30: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 61 hould not be rea 3b40: 63 68 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 ched... # 3b50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 3b60: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 "".. }.. 3b70: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3b80: 20 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 getSQLiteTestDa 3b90: 74 61 50 61 74 68 20 7b 7d 20 7b 0d 0a 20 20 20 taPath {} {.. 3ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3bb0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 3bc0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 3bd0: 72 65 20 61 6c 6c 20 74 68 65 20 74 65 73 74 20 re all the test 3be0: 64 61 74 61 20 66 69 6c 65 73 20 73 68 6f 75 6c data files shoul 3bf0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 3c00: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 be located. Th 3c10: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 is should be the 3c20: 20 22 64 61 74 61 22 20 64 69 72 65 63 74 6f 72 "data" director 3c30: 79 20 62 65 6e 65 61 74 68 20 74 68 65 0d 0a 20 y beneath the.. 3c40: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 3c50: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e ectory containin 3c60: 67 20 74 68 65 20 61 63 74 75 61 6c 20 74 65 73 g the actual tes 3c70: 74 20 73 63 72 69 70 74 73 2e 0d 0a 20 20 20 20 t scripts... 3c80: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 3c90: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a n [file join$::
3ca0: 70 61 74 68 20 64 61 74 61 5d 0d 0a 20 20 20 20  path data]..
3cb0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
3cc0: 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 20 7b 7d  sRunningWoW64 {}
3cd0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
3ce0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
3cf0: 6f 77 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ow, just use the
3d00: 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 63   existing test c
3d10: 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 64 65  onstraint for de
3d20: 74 65 63 74 69 6e 67 0d 0a 20 20 20 20 20 20 23  tecting..      #
3d30: 20 20 20 20 20 20 20 61 20 57 6f 57 36 34 20 70         a WoW64 p
3d40: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23  rocess...      #
3d50: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
3d60: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 77  haveConstraint w
3d70: 6f 77 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  ow64]..    }....
3d80: 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65  .    proc isMixe
3d90: 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20  dModeAssembly {
3da0: 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d  fileName {varNam
3db0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
3dc0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
3dd0: 3a 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75  : First, make su
3de0: 72 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74  re the test suit
3df0: 65 20 69 6e 66 72 61 73 74 72 75 63 74 75 72 65  e infrastructure
3e00: 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a   is allowed to..
3e10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
3e20: 65 20 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d  e the [exec] com
3e30: 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  mand...      #..
3e40: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
3e50: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65   exists ::no(exe
3e60: 63 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78  c)] && ![info ex
3e70: 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61  ists ::no(corFla
3e80: 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  gs)]} then {..
3e90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3ea0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
3eb0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46  location of CorF
3ec0: 6c 61 67 73 20 69 73 20 70 72 65 73 65 6e 74 20  lags is present
3ed0: 69 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65  in the environme
3ee0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  nt,..        #
3ef0: 20 20 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68       use it; oth
3f00: 65 72 77 69 73 65 20 61 73 73 75 6d 65 20 69 74  erwise assume it
3f10: 20 69 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e   is in the PATH.
3f20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
3f30: 20 20 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67       set corFlag
3f40: 73 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20  s [expr {..
3f50: 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74       [info exist
3f60: 73 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73  s ::env(CorFlags
3f70: 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46  )] ? $::env(CorF 3f80: 6c 61 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 lags) : "CorFlag 3f90: 73 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a s".. }].. 3fa0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3fb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 3fc0: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 empt to execute 3fd0: 43 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 CorFlags on the 3fe0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d specified file.. 3ff0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4000: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 4010: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 78 65 63 .. exec 4020: 20 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 --$corFlags [f
4030: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24  ile nativename $4040: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 4050: 20 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d } exec] == 0} 4060: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4070: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 4080: 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 # NOTE: If reque 4090: 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c sted by our call 40a0: 65 72 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 er, attempt to d 40b0: 65 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 etermine the.. 40c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 40d0: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 platform for the 40e0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file 40f0: 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 as well... 4100: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 4110: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 4120: 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 gth$varName] >
4130: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
4140: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4150: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74        # NOTE: St
4160: 6f 72 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  ore the platform
4170: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61   in the named va
4180: 72 69 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20  riable in the..
4190: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
41a0: 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
41b0: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...
41c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
41d0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 41e0: 61 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d arName platform. 41f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 4200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 4210: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 4220: 20 65 78 74 72 61 63 74 20 74 68 65 20 50 45 20 extract the PE 4230: 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 line from the ca 4240: 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 ptured.. 4250: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 # outp 4260: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c ut. If this val 4270: 75 65 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 ue is "PE32" or 4280: 22 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 "PE32+", the.. 4290: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 42a0: 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 assembly file 42b0: 69 73 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d is 32-bit or 64- 42c0: 62 69 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c bit, respectivel 42d0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y;.. 42e0: 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 # otherwis 42f0: 65 2c 20 69 74 73 20 74 79 70 65 20 69 73 20 75 e, its type is u 4300: 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 nknown... 4310: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4320: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4330: 7b 5e 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 {^PE : (P 4340: 45 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d E32|PE32\+)\s+$}
4350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
4360: 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e  if {[regexp -lin
4370: 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65  e -- $pattern$e
4380: 78 65 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d  xec dummy pe32]}
4390: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
43a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
43b0: 20 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20          # HACK:
43c0: 54 68 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73  This [switch] as
43d0: 73 75 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69  sumes that 32-bi
43e0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72  t executables ar
43f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
4400: 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20   #       always
4410: 78 38 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d  x86 and that 64-
4420: 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20  bit executables
4430: 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  are always..
4440: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4450: 20 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20    x64...
4460: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4470: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65         switch -e
4480: 78 61 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d  xact -- $pe32 {. 4490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 44a0: 20 50 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 PE32 {.. 44b0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p 44c0: 6c 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 latform Win32.. 44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 44e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 44f0: 20 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 PE32+ {.. 4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 4510: 20 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 platform x64.. 4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 4530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 4540: 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 default {.. 4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 4560: 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a et platform "".. 4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4580: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 4590: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 45a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 45b0: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 set plat 45c0: 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 form "".. 45d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 45e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 45f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 4600: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 4610: 20 65 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f extract the ILO 4620: 4e 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 NLY line from th 4630: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 e captured.. 4640: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 # ou 4650: 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 tput. If this v 4660: 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 alue is zero, th 4670: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 e specified file 4680: 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 must.. 4690: 20 23 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 # be a mi 46a0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 46b0: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 y; otherwise, it 46c0: 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a contains only.. 46d0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 46e0: 20 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e managed compon 46f0: 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 ents... 4700: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 4710: 74 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e t pattern {^ILON 4720: 4c 59 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b LY : (0|1)\s+ 4730: 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20$}....
4740: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69  if {![regexp -li
4750: 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24  ne -- $pattern$
4760: 65 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c  exec dummy ilOnl
4770: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
4780: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
4790: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..
47a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
47b0: 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65  f {!$ilOnly} the 47c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 47d0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 47e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 47f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 4800: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4810: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 # NOTE: If the t 4820: 65 73 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 est suite cannot 4830: 20 75 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 use [exec] or e 4840: 78 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 xecution of CorF 4850: 6c 61 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 lags.. # 4860: 20 20 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 failed, retu 4870: 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 rn false... 4880: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 4890: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c false.. }... 48a0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 4e 61 .. proc getNa 48b0: 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e tiveLibraryFileN 48c0: 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 amesOnly {} {.. 48d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 48e0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 NOTE: First, che 48f0: 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f ck if the list o 4900: 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 f native library 4910: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 file names has 4920: 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 4930: 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 manually ove 4940: 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20 20 rridden... 4950: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 4960: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 61 74 69 fo exists ::nati 4970: 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f ve_library_file_ 4980: 6e 61 6d 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 names] && \.. 4990: 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 [llength 49a0: 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72$::native_librar
49b0: 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20  y_file_names] >
49c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
49d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
49e0: 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f  NOTE: The list o
49f0: 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  f native library
4a00: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20   file names has
4a10: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4a20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4a30: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
4a40: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20   it verbatim...
4a50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4a60: 20 20 72 65 74 75 72 6e 20 24 3a 3a 6e 61 74 69    return $::nati 4a70: 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f ve_library_file_ 4a80: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4a90: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4aa0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4ab0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4ac0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ad0: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4ae0: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4af0: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4b00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4b10: 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22 2e 0d 0a "sqlite3.dll"... 4b20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4b30: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 4b40: 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 sqlite3.dll].. 4b50: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 4b60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4b70: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 # NOTE: Otherwi 4b80: 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 se, return both 4b90: 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 the generic POSI 4ba0: 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 X file name and 4bb0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 4bc0: 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 Mac OS X fi 4bd0: 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 le name, since w 4be0: 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 e do not current 4bf0: 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d ly have an easy. 4c00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4c10: 20 77 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 way to detect w 4c20: 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c hich of those pl 4c30: 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 atforms we are r 4c40: 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 unning on... 4c50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 4c60: 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 73 eturn [list libs 4c70: 71 6c 69 74 65 33 2e 64 79 6c 69 62 20 6c 69 62 qlite3.dylib lib 4c80: 73 71 6c 69 74 65 33 2e 73 6f 5d 0d 0a 20 20 20 sqlite3.so].. 4c90: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 4ca0: 20 20 20 20 70 72 6f 63 20 67 65 74 49 6e 74 65 proc getInte 4cb0: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 4cc0: 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 amesOnly {} {.. 4cd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 4ce0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 NOTE: First, che 4cf0: 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f ck if the list o 4d00: 66 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 f interop assemb 4d10: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 ly file names ha 4d20: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 4d30: 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f manually o 4d40: 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 verridden... 4d50: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 4d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 69 6e info exists ::in 4d70: 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 terop_assembly_f 4d80: 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d ile_names] && \. 4d90: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e . [llen 4da0: 67 74 68 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 gth$::interop_a
4db0: 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d  ssembly_file_nam
4dc0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
4dd0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4de0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4df0: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20  list of interop
4e00: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61  assembly file na
4e10: 6d 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  mes has been ove
4e20: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20  rridden;..
4e30: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
4e40: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62  ore, use it verb
4e50: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
4e60: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4e70: 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65   $::interop_asse 4e80: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d mbly_file_names. 4e90: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 4ea0: 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 {[isWindows]} th 4eb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 4ec0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4ed0: 20 4f 74 68 65 72 77 69 73 65 2c 20 6f 6e 20 57 Otherwise, on W 4ee0: 69 6e 64 6f 77 73 2c 20 61 6c 77 61 79 73 20 75 indows, always u 4ef0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 se the default f 4f00: 69 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 ile name.. 4f10: 20 20 23 20 20 20 20 20 20 20 22 53 51 4c 69 74 # "SQLit 4f20: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 2e 0d e.Interop.dll".. 4f30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4f40: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list 4f50: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 4f60: 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c dll].. } el 4f70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 4f80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4f90: 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 Otherwise, retu 4fa0: 72 6e 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 rn both the gene 4fb0: 72 69 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e ric POSIX file n 4fc0: 61 6d 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 ame and the.. 4fd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 # Mac 4fe0: 20 4f 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c OS X file name, 4ff0: 20 73 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 since we do not 5000: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 currently have 5010: 61 6e 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 an easy.. 5020: 20 23 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 # way to 5030: 64 65 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 detect which of 5040: 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 those platforms 5050: 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f we are running o 5060: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 n... #.. 5070: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 5080: 69 73 74 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e ist libSQLite.In 5090: 74 65 72 6f 70 2e 64 79 6c 69 62 20 6c 69 62 53 terop.dylib libS 50a0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 73 6f QLite.Interop.so 50b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 50c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 50d0: 65 74 43 6f 72 65 45 78 74 65 6e 73 69 6f 6e 42 etCoreExtensionB 50e0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 inaryFileName { 50f0: 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b {default ""} } { 5100: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file 5110: 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 42 69 6e Name [getCoreBin 5120: 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a aryFileName].... 5130: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 5140: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
5150: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
5160: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e     return $fileN 5170: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ame.. }.... 5180: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 return$de
5190: 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  fault..    }....
51a0: 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c  .    proc isBuil
51b0: 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74  dAvailable { nat
51c0: 69 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76  ive directory {v
51d0: 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
51e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
51f0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
5200: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
5210: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
5220: 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d  he primary assem
5230: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
5240: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68     containing th
5250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
5260: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d  Lite managed com
5270: 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20  ponents.  It..
5280: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
5290: 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74  ld be noted that
52a0: 20 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66   this assembly f
52b0: 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e  ile may also con
52c0: 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  tain the..
52d0: 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63  #       native c
52e0: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20  omponents, if a
52f0: 6e 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20  native build is
5300: 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23  in use...      #
5310: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
5320: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5330: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5340: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5350: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 5360: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d Data.SQLite.dll] 5370: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 5380: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5390: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
53a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
53b0: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  false..      }..
53c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
53d0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
53e0: 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
53f0: 79 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20  y detect if the
5400: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79  primary assembly
5410: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5420: 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74  contains any nat
5430: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20  ive components,
5440: 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20  if necessary...
5450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
5460: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
5470: 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20   $native] == 0} 5480: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5490: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 54a0: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 th$varName] > 0
54b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
54c0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 54d0: 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 Name$varName..
54e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
54f0: 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b      set native [
5500: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
5510: 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76  bly $fileName$v
5520: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  arName]..      }
5530: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
5540: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
5550: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62  e primary assemb
5560: 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  ly also contains
5570: 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70   the native comp
5580: 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23  onents,..      #
5590: 20 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65         we have e
55a0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65  verything we nee
55b0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
55c0: 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20     if {$native} 55d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 55e0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 55f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 5600: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 5610: 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 f the machine na 5620: 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c me is unavailabl 5630: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 e, there is noth 5640: 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 ign else we.. 5650: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 # can d 5660: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. 5670: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 5680: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf 5690: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t 56a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 56b0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. 56c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 56d0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 . # NOTE: W 56e0: 68 61 74 20 69 73 20 74 68 65 20 61 72 63 68 69 hat is the archi 56f0: 74 65 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 tecture for this 5700: 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20 machine?.. 5710: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 72 #.. set ar 5720: 63 68 69 74 65 63 74 75 72 65 20 5b 6d 61 63 68 chitecture [mach 5730: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a ineToPlatform$:
5740: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
5750: 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a  chine) true]....
5760: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5770: 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74   NOTE: What is t
5780: 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20  he platform for
5790: 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20  this machine?..
57a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
57b0: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68  t platform [mach
57c0: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a  ineToPlatform $: 57d0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 57e0: 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 chine)].... 57f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 5800: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 5810: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 5820: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 69 6e name for the in 5830: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a terop assembly.. 5840: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 5850: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73 ntaining the Sys 5860: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 5870: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 native component 5880: 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 s. If this.. 5890: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 58a0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 58b0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 58c0: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 g we need... 58d0: 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 #.. forea 58e0: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 ch fileNameOnly 58f0: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d [getInteropAssem 5900: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 blyFileNamesOnly 5910: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ] {.. set 5920: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 5930: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 5940: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
5950: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
5960: 24 61 72 63 68 69 74 65 63 74 75 72 65 20 24 66  $architecture$f
5970: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
5980: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69  .        if {[fi
5990: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 59a0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 59b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 59c0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a rue.. }.. 59d0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi 59e0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 59f0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 5a00: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
5a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c  .            $pl 5a20: 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 atform$fileName
5a30: 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  Only]]....
5a40: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
5a50: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 5a60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 5a70: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 5a80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5a90: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5aa0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5ab0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
5ac0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
5ad0: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f        $fileNameO 5ae0: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nly]].... 5af0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 5b00: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
5b10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
5b20: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
5b30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
5b40: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5b50: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
5b60: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
5b70: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f  ied file name fo
5b80: 72 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  r the SQLite cor
5b90: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
5ba0: 20 6c 69 62 72 61 72 79 2e 20 20 49 66 20 74 68   library.  If th
5bb0: 69 73 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20  is file exists,
5bc0: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65  we should have e
5bd0: 76 65 72 79 74 68 69 6e 67 20 77 65 0d 0a 20 20  verything we..
5be0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64      #       need
5bf0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5c00: 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
5c10: 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76  meOnly [getNativ
5c20: 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65  eLibraryFileName
5c30: 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20  sOnly] {..
5c40: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
5c50: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
5c60: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire 5c70: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 5c80: 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75$architectu
5c90: 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  re $fileNameOnly 5ca0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ]].... if 5cb0: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
5cc0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
5cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  {..          ret
5ce0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
5cf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
5d00: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
5d10: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
5d20: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 5d30: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 5d40: 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c$platform $fil 5d50: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5d60: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5d70: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5d80: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5d90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5da0: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
5db0: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5dc0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5dd0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5de0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5df0: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
5e00: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20  NameOnly]]....
5e10: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
5e20: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 5e30: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 5e40: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 5e50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 5e60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 5e70: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f . # NOTE: O 5e80: 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 ne or more nativ 5e90: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 e components nee 5ea0: 64 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44 61 ded by System.Da 5eb0: 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 ta.SQLite.. 5ec0: 20 23 20 20 20 20 20 20 20 61 72 65 20 6d 69 73 # are mis 5ed0: 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a sing... #.. 5ee0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 5ef0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... 5f00: 20 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73 65 proc isRelease 5f10: 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 Available { dire 5f20: 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 ctory {varName " 5f30: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 "} } {.. if 5f40: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 5f50: 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20$varName] > 0}
5f60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5f70: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 5f80: 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20$varName..
5f90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
5fa0: 72 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 6c  rn [isBuildAvail
5fb0: 61 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 6f  able "" $directo 5fc0: 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 ry$varName]..
5fd0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5fe0: 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74   joinBuildDirect
5ff0: 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 74  ory { native pat
6000: 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d 20  h year platform
6010: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7d 20  configuration }
6020: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
6030: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
6040: 20 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 65   out and then re
6050: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 71  turn the fully q
6060: 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 6f  ualified path to
6070: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20   the build..
6080: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
6090: 6f 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c  ory based on all
60a0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 70   the arguments p
60b0: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
60c0: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
60d0: 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69  .      if {$nati 60e0: 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ve} then {.. 60f0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 6100: 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 join$path bin
6110: 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20  $year$platform
6120: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d  $configuration]. 6130: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 6140: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6150: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 [file join$path
6160: 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66   bin $year$conf
6170: 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a  iguration bin]..
6180: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
6190: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
61a0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20  uildDirectory {
61b0: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7d 20 7b 0d  managedOnly } {.
61c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
61d0: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74  # NOTE: See if t
61e0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
61f0: 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62  ime option has b
6200: 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c  een set.  If so,
6210: 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..
6220: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  #       director
6230: 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d  y for the mixed-
6240: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61  mode assembly (a
6250: 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65  .k.a. the native
6260: 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20   interop..
6270: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
6280: 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68  ).  To enable th
6290: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
62a0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20  e command line,
62b0: 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23  enter a..      #
62c0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73         command s
62d0: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66  imilar to one of
62e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28   the following (
62f0: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29  all on one line)
6300: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  :..      #..
6310: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53    #       EagleS
6320: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61  hell.exe -initia
6330: 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74  lize -runtimeOpt
6340: 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  ion native..
6350: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
6360: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
6370: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
6380: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f        #       To
6390: 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74   enable this opt
63a0: 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  ion via the comm
63b0: 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74  and line prior t
63c0: 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d  o the "beta 16".
63d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
63e0: 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c  elease of Eagle,
63f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
6400: 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75  ommand must be u
6410: 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20  sed instead..
6420: 20 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f     #       (also
6430: 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65   all on one line
6440: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
6450: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
6460: 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69  Shell.exe -initi
6470: 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69  alize -postIniti
6480: 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20  alize..      #
6490: 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69         "object i
64a0: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
64b0: 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52  r.GetActive AddR
64c0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
64d0: 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ive"..      #
64e0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
64f0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
6500: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6510: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
6520: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f   ::build_directo
6530: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
6540: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
6550: 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65  th $::build_dire 6560: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 6570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6580: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 6590: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 65a0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 65b0: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ry has been over 65c0: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 ridden;.. 65d0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 65e0: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 re, use it verba 65f0: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 6600: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6610: 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f$::build_directo
6620: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
6630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
6640: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
6650: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
6660: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  untime option is
6670: 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d   set, the mixed-
6680: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mode assembly..
6690: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
66a0: 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20  s being tested.
66b0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74   In that case, t
66c0: 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62  he path to the b
66d0: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a  uild directory..
66e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
66f0: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
6700: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61   platform name a
6710: 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72  nd all the binar
6720: 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a  ies under test..
6730: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6740: 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e  should be presen
6750: 74 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74  t in that direct
6760: 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61  ory.  If the "na
6770: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20  tive" runtime..
6780: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
6790: 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74  ption is not set
67a0: 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  , the build dire
67b0: 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f  ctory will be co
67c0: 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a  nsidered to be..
67d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
67e0: 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61  "platform-neutra
67f0: 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74  l", with the not
6800: 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f  able exception o
6810: 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20  f any native..
6820: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
6830: 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51  sembly (e.g. "SQ
6840: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
6850: 22 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20  ") copied there
6860: 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  during the..
6870: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c      #       buil
6880: 64 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66  d process itself
6890: 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20  .  If the build
68a0: 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20  process somehow
68b0: 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  does not..
68c0: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74    #       copy t
68d0: 68 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62  he native assemb
68e0: 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74  ly for this plat
68f0: 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68  form, most of th
6900: 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20  e tests..
6910: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20   #       in the
6920: 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c  suite will simpl
6930: 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47  y be skipped.  G
6940: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e  enerally speakin
6950: 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20  g, there..
6960: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77    #       are tw
6970: 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20  o ways to build
6980: 74 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65  the binaries whe
6990: 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72  n preparing to r
69a0: 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  un the..
69b0: 23 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69  #       test sui
69c0: 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  te:..        #..
69d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69e0: 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70  1. Build the sep
69f0: 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e  arate managed an
6a00: 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  d native assembl
6a10: 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a  ies using some..
6a20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6a30: 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69     commands simi
6a40: 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20  lar to:..
6a50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
6a60: 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74         build.bat
6a70: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ${Configuration 6a80: 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 }ManagedOnly${P
6a90: 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20  latform}..
6aa0: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
6ab0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 6ac0: 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c ration}NativeOnl 6ad0: 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 y${Platform}..
6ae0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6af0: 20 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65    #          Whe
6b00: 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  re ${Configurati 6b10: 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 on} is either "D 6b20: 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 ebug" or "Releas 6b30: 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 e" and.. 6b40: 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 #${Pla
6b50: 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72  tform} is either
6b60: 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34   "Win32" or "x64
6b70: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
6b80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32         #       2
6b90: 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65  . Build the mixe
6ba0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
6bb0: 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20  using a command
6bc0: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20  similar to:..
6bd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6be0: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  #          build
6bf0: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61  .bat ${Configura 6c00: 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d tion}${Platform
6c10: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  }..        #..
6c20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6c30: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75   Where ${Configu 6c40: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 ration} is eithe 6c50: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 6c60: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 lease" and.. 6c70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24 #$
6c80: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69  {Platform} is ei
6c90: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20  ther "Win32" or
6ca0: 22 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20  "x64".  If this
6cb0: 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20  command is..
6cc0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75      #          u
6cd0: 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73  sed, various tes
6ce0: 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  ts that require
6cf0: 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61  supplementary ma
6d00: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23  naged..        #
6d10: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
6d20: 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29  lies (e.g. LINQ)
6d30: 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20   may be skipped
6d40: 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e  unless those bin
6d50: 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23  aries..        #
6d60: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75            are su
6d70: 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65  bsequently copie
6d80: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65  d into the corre
6d90: 63 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  ct directory (i.
6da0: 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  e. by..        #
6db0: 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f            "test_
6dc0: 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20  all.bat")...
6dd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6de0: 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74         Note that
6df0: 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c   all of the buil
6e00: 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65  d commands above
6e10: 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f   will default to
6e20: 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   using..
6e30: 23 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65  #       the late
6e40: 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  st version of MS
6e50: 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20  Build available
6e60: 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65  and the "test_ye
6e70: 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20  ar" may..
6e80: 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f   #       need to
6e90: 20 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63   be adjusted acc
6ea0: 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75  ordingly to actu
6eb0: 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73  ally run the tes
6ec0: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
6ed0: 20 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20    #       Refer
6ee0: 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20  to the comments
6ef0: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  in [getBuildYear
6f00: 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  ] for more infor
6f10: 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20  mation on..
6f20: 20 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74     #       how t
6f30: 6f 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61  o set this varia
6f40: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble...        #.
6f50: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74  .        set nat
6f60: 69 76 65 20 5b 65 78 70 72 20 7b 21 24 6d 61 6e  ive [expr {!$man 6f70: 61 67 65 64 4f 6e 6c 79 20 26 26 20 5b 68 61 73 agedOnly && [has 6f80: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 RuntimeOption na 6f90: 74 69 76 65 5d 7d 5d 0d 0a 0d 0a 20 20 20 20 20 tive]}].... 6fa0: 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 return [joinB 6fb0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e uildDirectory$n
6fc0: 61 74 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42  ative [getBuildB
6fd0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d  aseDirectory] \.
6fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
6ff0: 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74  tBuildYear] [get
7000: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e  BuildPlatform $n 7010: 61 74 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 ative] [getBuild 7020: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d Configuration]]. 7030: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 7040: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 7050: 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b ReleaseVersion { 7060: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 7070: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 7080: 72 65 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 re out the relea 7090: 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 se version for u 70a0: 73 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c se with the buil 70b0: 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 d directory.. 70c0: 20 20 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 # when 70d0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 checking for ava 70e0: 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e ilable releases. 70f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7100: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 7110: 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 s ::release_vers 7120: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 7130: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 7140: 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 gth$::release_v
7150: 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65  ersion] > 0} the
7160: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
7170: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7180: 54 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73  The release vers
7190: 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ion has been ove
71a0: 72 72 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f  rridden; therefo
71b0: 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20  re, use it..
71c0: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 62      #       verb
71d0: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
71e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
71f0: 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73   $::release_vers 7200: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ion.. } els 7210: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 7220: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 7230: 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 No release versi 7240: 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c on is available, 7250: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 7260: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 7270: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20 # It is 7280: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 important to ret 7290: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 72a0: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65 ing here because 72b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 72c0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 result of 72d0: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d this procedure m 72e0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 ay be used with 72f0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 [file join]... 7300: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7310: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 7320: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 7330: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 7340: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e FileName { fileN 7350: 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 ame managedOnly 7360: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 {platform ""} } 7370: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 7380: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 7390: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 73a0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 73b0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 73c0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 73d0: 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 build dire 73e0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 73f0: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 7400: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 7410: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 7420: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 7430: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 7440: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 7450: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 7460: 65 74 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 20 et result [file 7470: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 7480: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 7490: 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 in [getBuildDire 74a0: 63 74 6f 72 79 20 24 6d 61 6e 61 67 65 64 4f 6e ctory$managedOn
74b0: 6c 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d  ly] $platform \. 74c0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 . [file 74d0: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
74e0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ]]....      #..
74f0: 20 20 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65       # HACK: Whe
7500: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57  n running on WoW
7510: 36 34 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74  64, assume the t
7520: 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 73 20  est executables
7530: 61 72 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  are present..
7540: 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68 20     #       with
7550: 74 68 65 20 22 33 32 22 20 73 75 66 66 69 78 20  the "32" suffix
7560: 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20  on them...
7570: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73  #..      if {[is
7580: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26  RunningWoW64] &&
7590: 20 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e   [file extension
75a0: 20 24 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65   $result] eq ".e 75b0: 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 xe"} then {.. 75c0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 75d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 75e0: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 e rootname$resu
75f0: 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20  lt] 32.exe]..
7600: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
7610: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 7620: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 7630: 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 getExternalDire 7640: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 7650: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7660: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 7670: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 7680: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 7690: 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 e external binar 76a0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 76b0: 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 files are locat 76c0: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 76d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 76e0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 76f0: 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 e dirname [file 7700: 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 dirname [info bi 7710: 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d nary]]]].. }. 7720: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 7730: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 BinaryDirectory 7740: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 7750: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 7760: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 7770: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 7780: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 7790: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 77a0: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 77b0: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 lf (i.e. the Eag 77c0: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 le shell) is loc 77d0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 77e0: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 be used as.. 77f0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 7800: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 estination for t 7810: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d he copied System 7820: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 7830: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ive and.. # 7840: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 managed a 7850: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 ssemblies (i.e. 7860: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 because this is 7870: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 one of the few p 7880: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 laces.. # 7890: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 where the C 78a0: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 LR will actually 78b0: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 find and load t 78c0: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a hem properly)... 78d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 78e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 78f0: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 7900: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 7910: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 7920: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 th$::binary_dir
7930: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
7940: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
7950: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7960: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
7970: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63  the binary direc
7980: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
7990: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
79a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
79b0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
79c0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
79d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
79e0: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65  n $::binary_dire 79f0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 7a00: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 7a10: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 eturn [info bina 7a20: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ry].. }.. 7a30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 7a40: 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 getExternalFile 7a50: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 Name { fileName 7a60: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 7a70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 7a80: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 7a90: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 7aa0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 7ab0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 7ac0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 7ad0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 7ae0: 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 external binari 7af0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 7b00: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 7b10: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 7b20: 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 e join [getExter 7b30: 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 nalDirectory]$f
7b40: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d  ileName]]..    }
7b50: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
7b60: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
7b70: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
7b80: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  form ""} } {..
7b90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
7ba0: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65  OTE: Returns the
7bb0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
7bc0: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65  name as if it we
7bd0: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  re located in th
7be0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
7bf0: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
7c00: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e  y, discarding an
7c10: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f  y directory info
7c20: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d  rmation present.
7c30: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7c40: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  n the file name
7c50: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  as provided by o
7c60: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...
7c70: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
7c80: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
7c90: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
7ca0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
7cb0: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
7cc0: 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20  $platform [file 7cd0: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
7ce0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
7cf0: 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e   proc getCoreBin
7d00: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70  aryFileName { {p
7d10: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61  latform ""} {sta
7d20: 6e 64 61 72 64 20 22 22 7d 20 7d 20 7b 0d 0a 20  ndard ""} } {..
7d30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7d40: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
7d50: 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20  e full path for
7d60: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
7d70: 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
7d80: 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ore..      #
7d90: 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72     native librar
7da0: 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20  y code for this
7db0: 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74  platform.  First
7dc0: 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20  , check and see
7dd0: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  if..      #
7de0: 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72    the SQLite cor
7df0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
7e00: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
7e10: 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c  n loaded.  Next,
7e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7e30: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74  fallback to what
7e40: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73   the full path s
7e50: 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20  hould be, based
7e60: 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a  on whether the..
7e70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69        #       mi
7e80: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
7e90: 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  y is being used
7ea0: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of
7eb0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..
7ec0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
7ed0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
7ee0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
7ef0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
7f00: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
7f10: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
7f20: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
7f30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
7f40: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7f50: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
7f60: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  duleFileName..
7f70: 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20      } fileName]
7f80: 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20  == 0 && [string
7f90: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65  length $fileName 7fa0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 7fb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7fc0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 # NOTE: The SQ 7fd0: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 Lite core native 7fe0: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 library has alr 7ff0: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 eady been loaded 8000: 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 via.. # 8010: 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 the native 8020: 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 library pre-loa 8030: 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 der. Return tha 8040: 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e t file name now. 8050: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8060: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
8070: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  eName..      }..
8080: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8090: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
80a0: 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65  "native" runtime
80b0: 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   option has been
80c0: 20 73 65 74 2c 20 61 6c 77 61 79 73 20 72 65 74   set, always ret
80d0: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  urn the..      #
80e0: 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65         file name
80f0: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d   for the mixed-m
8100: 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
8110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
8120: 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
8130: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65  ion native]} the
8140: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
8150: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
8160: 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64  Return the mixed
8170: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66  -mode assembly f
8180: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
8190: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
81a0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
81b0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
81c0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
81d0: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
81e0: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53  ory] $platform S 81f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 8200: 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d e.dll]].. } 8210: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8220: 20 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 # NOTE: Are w 8230: 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 e attempting to 8240: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 automatically de 8250: 74 65 63 74 20 77 68 65 74 68 65 72 20 6f 72 20 tect whether or 8260: 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 20 20 23 not the.. # 8270: 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70 20 61 interop a 8280: 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 ssembly should b 8290: 65 20 75 73 65 64 3f 0d 0a 20 20 20 20 20 20 23 e used?.. # 82a0: 0d 0a 20 20 20 20 20 20 73 65 74 20 61 75 74 6f .. set auto 82b0: 6d 61 74 69 63 20 5b 65 78 70 72 20 7b 5b 73 74 matic [expr {[st 82c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 74 61 ring length$sta
82d0: 6e 64 61 72 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 0d  ndard] == 0}]...
82e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
82f0: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 69  # NOTE: First, i
8300: 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61  n either "automa
8310: 74 69 63 22 20 6f 72 20 22 6e 6f 6e 2d 73 74 61  tic" or "non-sta
8320: 6e 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74  ndard" modes, at
8330: 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 23 20 20  tempt..      #
8340: 20 20 20 20 20 74 6f 20 66 69 6e 64 20 74 68 65       to find the
8350: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
8360: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  erop assembly...
8370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
8380: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || 8390: 20 21 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 !$standard} the
83a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
83b0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
83c0: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  Attempt to deter
83d0: 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d  mine the native-
83e0: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
83f0: 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20  embly file..
8400: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
8410: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
8420: 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75  rm and then retu
8430: 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  rn it...
8440: 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  #..        forea
8450: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
8460: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
8470: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
8480: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] {..          s
8490: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
84a0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
84c0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
84d0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 84e0: 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d latform$fileNam
84f0: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
8500: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
8510: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 8520: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
8540: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
8550: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
8560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
8570: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8580: 3a 20 54 68 65 6e 2c 20 69 6e 20 65 69 74 68 65  : Then, in eithe
8590: 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72  r "automatic" or
85a0: 20 22 73 74 61 6e 64 61 72 64 22 20 6d 6f 64 65   "standard" mode
85b0: 73 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  s, attempt to..
85c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6e       #       fin
85d0: 64 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 53  d the standard S
85e0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a  QLite library...
85f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
8600: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || 8610: 20 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e$standard} then
8620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
8630: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
8640: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
8650: 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f  ine the native-o
8660: 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c  nly standard SQL
8670: 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20  ite library..
8680: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
8690: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20  e name for this
86a0: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
86b0: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
86c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
86d0: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
86e0: 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  eOnly [getNative
86f0: 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
8700: 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  Only] {..
8710: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
8720: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
8730: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8740: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
8750: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
8760: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c  ] $platform$fil
8770: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20  eNameOnly]]....
8780: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
8790: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 87a0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 87b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 87c0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
87d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
87e0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
87f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
8800: 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 20 6d 61  NOTE: Was the ma
8810: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 63  naged assembly c
8820: 6f 6d 70 69 6c 65 64 20 65 78 70 65 63 74 69 6e  ompiled expectin
8830: 67 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 74  g to deal with t
8840: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
8850: 20 20 73 74 61 6e 64 61 72 64 20 63 6f 72 65 20    standard core
8860: 6c 69 62 72 61 72 79 3f 0d 0a 20 20 20 20 20 20  library?..
8870: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  #..      if {[ha
8880: 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
8890: 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 53 54  nstant SQLITE_ST
88a0: 41 4e 44 41 52 44 5d 7d 20 74 68 65 6e 20 7b 0d  ANDARD]} then {.
88b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
88c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c      # NOTE: Fall
88d0: 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e  back to returnin
88e0: 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c  g the native-onl
88f0: 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  y standard SQLit
8900: 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20  e library..
8910: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file
8920: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 6c 61  name for the pla
8930: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20  tform...
8940: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  #..        set f
8950: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65  ileNamesOnly [ge
8960: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
8970: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a  leNamesOnly]....
8980: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65          if {[lle
8990: 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f  ngth $fileNamesO 89a0: 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nly] == 0} then 89b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret 89c0: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 urn "".. 89d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.... ret 89e0: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 89f0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 8a00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 8a10: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto 8a20: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c ry]$platform [l
8a30: 69 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73  index $fileNames 8a40: 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 Only 0]]].. 8a50: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 8a60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8a70: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 NOTE: Fallback t 8a80: 6f 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 o returning the 8a90: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 native-only inte 8aa0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c rop assembly fil 8ab0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 8ac0: 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 name for the 8ad0: 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 platform... 8ae0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 8af0: 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 t fileNamesOnly 8b00: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d [getInteropAssem 8b10: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 blyFileNamesOnly 8b20: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 8b30: 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e {[llength$fileN
8b40: 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20  amesOnly] == 0}
8b50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8b60: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
8b70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
8b80: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
8b90: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
8ba0: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
8bb0: 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 69      [getBinaryDi
8bc0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f  rectory] $platfo 8bd0: 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 rm [lindex$file
8be0: 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a  NamesOnly 0]]]..
8bf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
8c00: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
8c10: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b  ommonDirectory {
8c20: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
8c30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
8c40: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
8c50: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ns the directory
8c60: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20   where the test
8c70: 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23  scripts..      #
8c80: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
8c90: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
8ca0: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
8cb0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67   returns the Eag
8cc0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
8cd0: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f    binary directo
8ce0: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
8cf0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
8d00: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
8d10: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
8d20: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
8d30: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo 8d40: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 8d50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8d60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 8d70: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 8d80: 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 n of the common 8d90: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 8da0: 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 en set;.. 8db0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 8dc0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... 8dd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8de0: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e return$::common
8df0: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
8e00: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
8e10: 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f  o exists ::vendo
8e20: 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  r_directory] &&
8e30: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
8e40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76  ring length $::v 8e50: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] 8e60: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 8e70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8e80: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 8e90: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e ation of the ven 8ea0: 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 dor directory ha 8eb0: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 s been set;.. 8ec0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 8ed0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 8ee0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8ef0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 return$::ve
8f00: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a  ndor_directory..
8f10: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
8f20: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
8f30: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c  cl_library] && \
8f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
8f50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc 8f60: 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 l_library] > 0 & 8f70: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 8f80: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 8f90: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d$::tcl_library]
8fa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8fb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
8fc0: 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c  OTE: The variabl
8fd0: 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74  e with the locat
8fe0: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70  ion of the scrip
8ff0: 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20  t library is..
9000: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
9010: 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f  t and appears to
9020: 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63   be a real direc
9030: 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65  tory (i.e. not e
9040: 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20  mbedded..
9050: 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20   #       within
9060: 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f  a file); therefo
9070: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
9080: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9090: 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69  return $::tcl_li 90a0: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 brary.. } e 90b0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 90c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 90d0: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 : Fallback to th 90e0: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont 90f0: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 aining the execu 9100: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 table... 9110: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 9120: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. 9130: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 9140: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 9150: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 DatabaseDirector 9160: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 9170: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 9180: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 9190: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 91a0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 91b0: 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 st databases.. 91c0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 91d0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 91e0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 91f0: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 9200: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 9210: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 9220: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 9230: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 9240: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9250: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9260: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 9270: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 9280: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 9290: 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f gth$::database_
92a0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
92b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
92c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
92d0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
92e0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
92f0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
9300: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
9310: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9320: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
9330: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
9340: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 9350: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 9360: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 9370: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 9380: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 s ::scratch_dire 9390: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 93a0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 93b0: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 ength$::scratch
93c0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
93d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
93e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
93f0: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
9400: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20   of the scratch
9410: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
9420: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
9430: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9440: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
9450: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
9460: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 9470: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 9480: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 9490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 94a0: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 rn [getTemporary 94b0: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Path].. }.. 94c0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 94d0: 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 oc getTemporaryD 94e0: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 94f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 9500: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 9510: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 9520: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 9530: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 the temporary f 9540: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # 9550: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 9560: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 9570: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 9580: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 9590: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 95a0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 95b0: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 95c0: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 95d0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 95e0: 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 exists ::tempora 95f0: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && 9600: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 9610: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
9620: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
9630: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
9640: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9650: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
9660: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
9670: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
9680: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
9690: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
96a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
96b0: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
96c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
96d0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70    return $::temp 96e0: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d orary_directory. 96f0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 9700: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 9710: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 9720: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 9730: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 9740: 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 h$::scratch_dir
9750: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
9760: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
9770: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9780: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
9790: 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65  the scratch dire
97a0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
97b0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
97c0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
97d0: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
97e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
97f0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72     return $::scr 9800: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a atch_directory.. 9810: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 9820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 9830: 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 getTemporaryPath 9840: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 9850: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 9860: 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 etExecuteOnSetup 9870: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 {} {.. if 9880: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 9890: 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 execute_on_setup 98a0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 98b0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 98c0: 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73$::execute_on_s
98d0: 65 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20  etup] > 0} then
98e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
98f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
9900: 74 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75  turn the configu
9910: 72 65 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75  red SQL to execu
9920: 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  te during the co
9930: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..
9940: 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20    #       setup
9950: 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20  procedure (i.e.
9960: 66 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 64  for every test d
9970: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
9980: 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  on)...        #.
9990: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
99a0: 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65  $::execute_on_se 99b0: 74 75 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 tup.. } els 99c0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 99d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 99e0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 By default, ther 99f0: 65 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 e is no SQL to e 9a00: 78 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 xecute during th 9a10: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. 9a20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 9a30: 74 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 tup procedure (i 9a40: 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 .e. for every te 9a50: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e st database conn 9a60: 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 ection)... 9a70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 9a80: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. 9a90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 9aa0: 72 6f 63 20 67 65 74 53 74 72 69 6e 67 4d 61 70 roc getStringMap 9ab0: 46 6f 72 54 63 6c 45 73 63 61 70 65 20 7b 7d 20 ForTclEscape {} 9ac0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {.. return 9ad0: 5b 6c 69 73 74 20 5c 5c 20 5c 5c 5c 5c 20 5c 5b [list \\ \\\\ $9ae0: 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20 5c 24 \\\[$ \\\] \$
9af0: 20 5c 5c 5c 24 5d 0d 0a 20 20 20 20 7d 0d 0a 0c   \\\$].. }... 9b00: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe 9b10: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d stOverridesPream 9b20: 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e ble { {extraVarN 9b30: 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 ames ""} } {.. 9b40: 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 set varNames 9b50: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 9b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 9b70: 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 : If available, 9b80: 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d start with the m 9b90: 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 aster list of te 9ba0: 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 st override.. 9bb0: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 9bc0: 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a bles... #.. 9bd0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9be0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 exists ::test_ov 9bf0: 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 errides] && \.. 9c00: 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 [llengt 9c10: 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 h$::test_overri
9c20: 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  des] > 0} then {
9c30: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c  ..        eval l
9c40: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20  append varNames
9c50: 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65  $::test_override 9c60: 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 s.. }.... 9c70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 9c80: 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 OTE: If requeste 9c90: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c d by our caller, 9ca0: 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f add any additio 9cb0: 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 nal variable.. 9cc0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name 9cd0: 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a s to copy now... 9ce0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 9cf0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 f {[llength$ext
9d00: 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d  raVarNames] > 0}
9d10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9d20: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61   eval lappend va
9d30: 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72  rNames $extraVar 9d40: 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a Names.. }.. 9d50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9d60: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 9d70: 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 he script fragme 9d80: 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 nt to be returne 9d90: 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 d by processing 9da0: 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 each.. # 9db0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d variable nam 9dc0: 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 e and adding the 9dd0: 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 nececessary scr 9de0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f ipt fragments fo 9df0: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 9e00: 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 each one... 9e10: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 #.. set r 9e20: 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 esult "".... 9e30: 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d foreach varNam 9e40: 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 e$varNames {..
9e50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9e60: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
9e70: 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c  the qualified gl
9e80: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61  obal variable na
9e90: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
9ea0: 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c          set full
9eb0: 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41  VarName [appendA
9ec0: 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d  rgs :: $varName] 9ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 9ee0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 9ef0: 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 oes the variable 9f00: 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 exist in this i 9f10: 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 nterpreter conte 9f20: 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a xt?.. #.. 9f30: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 9f40: 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 o exists$fullVa
9f50: 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  rName]} then {..
9f60: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
9f70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
9f80: 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66  ppend a script f
9f90: 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72  ragment to the r
9fa0: 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20  esult that will
9fb0: 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20  correctly..
9fc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
9fd0: 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20  y any contained
9fe0: 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72  value to another
9ff0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e   interpreter con
a000: 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  text...
a010: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70   #..          ap
a020: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22  pend result \n "
a030: 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61  set " $fullVarNa a040: 6d 65 20 22 20 5c 7b 22 20 5b 73 74 72 69 6e 67 me " \{" [string a050: 20 6d 61 70 20 5c 0d 0a 20 20 20 20 20 20 20 20 map \.. a060: 20 20 20 20 20 20 5b 67 65 74 53 74 72 69 6e 67 [getString a070: 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 70 65 5d MapForTclEscape] a080: 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 [set$fullVarNa
a090: 6d 65 5d 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20  me]] \}..
a0a0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
a0b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
a0c0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73  NOTE: If the res
a0d0: 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ult contains one
a0e0: 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20   or more script
a0f0: 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e  fragments, appen
a100: 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  d a..      #
a110: 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20     newline...
a120: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
a130: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $a140: 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 result] > 0} the a150: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app a160: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 end result \n.. a170: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a180: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
a190: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
a1a0: 6f 63 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74  oc moveSystemDat
a1b0: 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67  aSQLiteDllConfig
a1c0: 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73   { {restore fals
a1d0: 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65  e} {verbose true
a1e0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
a1f0: 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42   directory [getB
a200: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d  inaryDirectory].
a210: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
a220: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72  ring length $dir a230: 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 ectory] == 0} th a240: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if a250: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
a260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
a270: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a280: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a290: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a2a0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d "---- skipped m a2b0: 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 oving \"System.D a2c0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 ata.SQLite.dll.c a2d0: 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 onfig\", " \.. a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 "no a2f0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 binary directory a300: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. a310: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur a320: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... a330: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName a340: 28 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c (1) [file normal a350: 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ize \.. a360: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
a370: 65 63 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61  ectory System.Da
a380: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f  ta.SQLite.dll.co
a390: 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  nfig]]....
a3a0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20  set fileName(2)
a3b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c  [appendArgs $fil a3c0: 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d eName(1) .moved] a3d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 72 .... if {$r
a3e0: 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a  estore} then {..
a3f0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
a400: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa a410: 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a me(2)]} then {.. a420: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 file r a430: 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 ename$fileName(
a440: 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d  2) $fileName(1). a450: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if a460: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
a470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
a480: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha a490: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs a4a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a4b0: 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 "---- moved a4c0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 \""$fileName(2)
a4d0: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $a4f0: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e fileName(1) \"\n a500: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. a510: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { a520: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { a530: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
a540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
a550: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a560: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a570: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a580: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped a590: 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c moving \""$fil
a5a0: 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20  eName(2) \..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
a5c0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
a5d0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
a5e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
a5f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
a600: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
a610: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa a620: 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a me(1)]} then {.. a630: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 file r a640: 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 ename$fileName(
a650: 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d  1) $fileName(2). a660: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if a670: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
a680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
a690: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha a6a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs a6b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a6c0: 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 "---- moved a6d0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 \""$fileName(1)
a6e0: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $a700: 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e fileName(2) \"\n a710: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. a720: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { a730: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { a740: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
a750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
a760: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a770: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a780: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a790: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped a7a0: 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c moving \""$fil
a7b0: 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20  eName(1) \..
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
a7d0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
a7e0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
a7f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
a800: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
a810: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41  ...    proc getA
a820: 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65  ppDomainPreamble
a830: 20 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b   { {prefix ""} {
a840: 73 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a  suffix ""} } {..
a850: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
a860: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
a870: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20  edure returns a
a880: 74 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70  test setup scrip
a890: 74 20 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61  t fragment suita
a8a0: 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23  ble for..      #
a8b0: 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f         evaluatio
a8c0: 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65  n by an interpre
a8d0: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61  ter created in a
a8e0: 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69  n isolated appli
a8f0: 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  cation..      #
a900: 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54        domain.  T
a910: 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65  he script fragme
a920: 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  nt being returne
a930: 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75  d will be surrou
a940: 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23  nded by..      #
a950: 20 20 20 20 20 20 20 74 68 65 20 70 72 65 66 69         the prefi
a960: 78 20 61 6e 64 20 73 75 66 66 69 78 20 22 73 63  x and suffix "sc
a970: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20  ript fragments"
a980: 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72  specified by our
a990: 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20   caller,..
a9a0: 23 20 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20  #       if any.
a9b0: 20 54 68 65 20 65 6e 74 69 72 65 20 73 63 72 69   The entire scri
a9c0: 70 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  pt being returne
a9d0: 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69  d will be substi
a9e0: 74 75 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20  tuted via..
a9f0: 20 23 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d   #       [subst]
aa00: 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  , in the context
aa10: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20   of our caller,
aa20: 62 65 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74  before being ret
aa30: 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20  urned...      #
aa40: 20 20 20 20 20 20 54 68 69 73 20 73 74 65 70 20        This step
aa50: 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20  is necessary so
aa60: 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65  that some limite
aa70: 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d  d context inform
aa80: 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20  ation,..      #
aa90: 20 20 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20        primarily
aaa0: 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74  related to the t
aab0: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  esting directori
aac0: 65 73 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73  es, can be trans
aad0: 66 65 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20  ferred..      #
aae0: 20 20 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74        to the int
aaf0: 65 72 70 72 65 74 65 72 20 69 6e 20 74 68 65 20  erpreter in the
ab00: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61  isolated applica
ab10: 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b  tion domain, mak
ab20: 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20  ing it..      #
ab30: 20 20 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75        able to su
ab40: 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74  ccessfully run t
ab50: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72  ests that requir
ab60: 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  e one or more of
ab70: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
ab80: 20 20 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65      files in one
ab90: 20 6f 66 20 74 68 65 20 74 65 73 74 69 6e 67 20   of the testing
aba0: 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61  directories.  Ca
abb0: 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65  llers should kee
abc0: 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  p in..      #
abd0: 20 20 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68      mind that th
abe0: 65 20 74 65 73 74 20 73 63 72 69 70 74 20 66 72  e test script fr
abf0: 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74  agment being ret
ac00: 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c  urned cannot rel
ac10: 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  y on..      #
ac20: 20 20 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c      any script l
ac30: 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65  ibrary procedure
ac40: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70  s that are not p
ac50: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 45  rovided by the E
ac60: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  agle..      #
ac70: 20 20 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b      library pack
ac80: 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e  age (i.e. "init.
ac90: 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69  eagle"), includi
aca0: 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65  ng those provide
acb0: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  d by..      #
acc0: 20 20 20 20 74 68 65 20 45 61 67 6c 65 20 74 65      the Eagle te
acd0: 73 74 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65  st package, unle
ace0: 73 73 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74  ss the file cont
acf0: 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c  aining them is l
ad00: 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20  oaded..      #
ad10: 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69       manually vi
ad20: 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63  a some other mec
ad30: 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20  hanism (e.g. by
ad40: 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70  including approp
ad50: 72 69 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20  riate..      #
ad60: 20 20 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65       [package re
ad70: 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63  quire] or [sourc
ad80: 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74  e] commands in t
ad90: 68 65 20 70 72 65 66 69 78 20 6f 72 20 73 75 66  he prefix or suf
ada0: 66 69 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20  fix..      #
adb0: 20 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65     script fragme
adc0: 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c  nts).  Also, all
add0: 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
ade0: 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73  nces and all nes
adf0: 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ted..      #
ae00: 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65     commands (i.e
ae10: 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72  . those in squar
ae20: 65 20 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74  e brackets) cont
ae30: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e  ained in the fin
ae40: 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  al..      #
ae50: 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e    script fragmen
ae60: 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65  t will end up be
ae70: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e  ing evaluated in
ae80: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
ae90: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
aea0: 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72     calling inter
aeb0: 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74  preter and not t
aec0: 68 65 20 74 61 72 67 65 74 20 69 6e 74 65 72 70  he target interp
aed0: 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e  reter created in
aee0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
aef0: 20 20 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70      isolated app
af00: 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20  lication domain
af10: 75 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61  unless the dolla
af20: 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73  r signs and/or s
af30: 71 75 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20  quare..      #
af40: 20 20 20 20 20 62 72 61 63 6b 65 74 73 20 61 72       brackets ar
af50: 65 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74  e specially quot
af60: 65 64 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73  ed with backslas
af70: 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  hes...      #..
af80: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c       return [upl
af90: 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62  evel 1 [list sub
afa0: 73 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  st [appendArgs $afb0: 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 prefix {.. afc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N afd0: 4f 54 45 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 OTE: The $objec afe0: 74 5c 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 t$ command may aff0: 62 65 20 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f be missing in so b000: 6d 65 20 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 me Eagle core.. b010: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c # l b020: 69 62 72 61 72 79 20 63 6f 6e 66 69 67 75 72 61 ibrary configura b030: 74 69 6f 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 tions. Cloning b040: 61 6e 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 and using the pr b050: 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 20 ocedure.. b060: 20 23 20 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 # $chang b070: 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 eNativeRuntimeOp b080: 74 69 6f 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 tion$ may help b090: 74 6f 20 6d 69 74 69 67 61 74 65 20 74 68 69 73 to mitigate this b0a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. b0b0: 20 20 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 proc chang b0c0: 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 eNativeRuntimeOp b0d0: 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 tion \.. b0e0: 20 20 20 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 {[info args b0f0: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt b100: 69 6d 65 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 imeOption]} \.. b110: 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 {[inf b120: 6f 20 62 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 o body changeNat b130: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption b140: 5d 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 ]}.... ca b150: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. b160: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun b170: 74 69 6d 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 timeOption [hasR b180: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat b190: 69 76 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d ive].. }. b1a0: 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 65 73 . } [getTes b1b0: 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 tOverridesPreamb b1c0: 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 74 65 le [list path te b1d0: 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 st_channel]]$su
b1e0: 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  ffix]]]..    }..
b1f0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43  ...    proc tryC
b200: 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20  opyExternalFile
b210: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
b220: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
b230: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61  m ""} {newFileNa
b240: 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20  me ""} {verbose
b250: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
b260: 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e   set sourceFileN
b270: 61 6d 65 20 5b 67 65 74 45 78 74 65 72 6e 61 6c  ame [getExternal
b280: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa b290: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if b2a0: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {![file exists$
b2b0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d  sourceFileName]}
b2c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b2d0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t b2e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. b2f0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
b300: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
b310: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
b320: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
b330: 64 20 63 6f 70 79 69 6e 67 20 65 78 74 65 72 6e  d copying extern
b340: 61 6c 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75  al file \"" $sou b350: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" b370: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex b380: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. b390: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 }.... re b3a0: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d turn.. }... b3b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri b3c0: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 ng length$newFi
b3d0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
b3e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
b3f0: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
b400: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
b410: 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20  me $newFileName b420: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
b430: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
b440: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
b450: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
b460: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN b470: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
b480: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
b490: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63   set targetDirec
b4a0: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
b4b0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa b4c0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if b4d0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. b4e0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex b4f0: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 ists$targetDire
b500: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
b510: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d            file m
b520: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65  kdir $targetDire b530: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d ctory.. } b540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 .... file b550: 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f copy -force$so
b560: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61  urceFileName $ta b570: 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 rgetFileName.. b580: 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 }] == 0} the b590: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu b5a0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
b5b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
b5d0: 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74 65 72  --- copied exter
b5e0: 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  nal file from \"
b5f0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam b600: 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a e "\" to \"" \.. b610: 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72$tar
b620: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
b630: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
b640: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
b650: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b660: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b670: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- b680: 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 - failed to copy b690: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 external file f b6a0: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 rom \""$sourceF
b6b0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
b6c0: 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22         "\" to \"
b6d0: 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  " $targetFileNam b6e0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } b6f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... b700: 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 6e 61 proc tryCopyBina b710: 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 ryFile {.. b720: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d fileName m b730: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 anagedOnly {plat b740: 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c form ""} {newFil b750: 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 eName ""}.. b760: 20 20 20 20 20 20 20 7b 76 65 72 62 6f 73 65 20 {verbose b770: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. b780: 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e set sourceFileN b790: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi b7a0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
b7b0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20   $platform].... b7c0: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b7d0: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 exists$sourceFi
b7e0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
b7f0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65  .        if {$ve b800: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. b810: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
b820: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b830: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b840: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
b850: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e  - skipped copyin
b860: 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  g binary file \"
b870: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam b880: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. b890: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does b8a0: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. b8b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b8c0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b8d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b8e0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b8f0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b900: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b910: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b920: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46  eName [getBuildF
b930: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
b940: 20 20 20 20 20 20 20 24 6e 65 77 46 69 6c 65 4e         $newFileN b950: 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 ame$managedOnly
b960: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. b970: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. b980: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF b990: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil b9a0: 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 dFileName \.. b9b0: 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
b9c0: 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20  me $managedOnly b9d0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
b9e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74    }....      set
b9f0: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79   targetDirectory
ba00: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $ba10: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d targetFileName]. ba20: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca ba30: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 tch {.. i ba40: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists ba50: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72$targetDirector
ba60: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
ba70: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72        file mkdir
ba80: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector ba90: 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a y.. }.... baa0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 file cop bab0: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 y -force$source
bac0: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74  FileName $target bad0: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 FileName.. bae0: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. baf0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
bb00: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
bb10: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
bb20: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
bb30: 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69  copied binary fi
bb40: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou bb50: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" bb60: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. bb70: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
bb80: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
bb90: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
bba0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te bbb0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe bbc0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. bbd0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail bbe0: 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 ed to copy binar bbf0: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 y file from \"" bc00: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
bc10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
bc20: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65  \" to \"" $targe bc30: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. bc40: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. bc50: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try bc60: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d CopyBuildFile {. bc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil bc80: 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c eName managedOnl bc90: 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 y {platform ""} bca0: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d {newFileName ""} bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 .. {v bcc0: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b erbose true} } { bcd0: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 .. set sour bce0: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 ceFileName [getB bcf0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 uildFileName$fi
bd00: 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f  leName $managedO bd10: 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a nly$platform]..
bd20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
bd30: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63  le exists $sourc bd40: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e eFileName]} then bd50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { bd60: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
bd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
bd80: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe bd90: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. bda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " bdb0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 ---- skipped cop bdc0: 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 ying build file bdd0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
bde0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
bdf0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
be00: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
be10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
be20: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
be30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
be40: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
be50: 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20  h $newFileName] be60: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. be70: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF be80: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina be90: 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 ryFileName$newF
bea0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor beb0: 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 m].. } else bec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set bed0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ bee0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam bef0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla bf00: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d tform].. }. bf10: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 ... set tar bf20: 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 getDirectory [fi bf30: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 le dirname$targ
bf40: 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20  etFileName]....
bf50: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
bf60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
bf70: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61  [file exists $ta bf80: 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 rgetDirectory]} bf90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. bfa0: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 file mkdir$ta
bfb0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20  rgetDirectory..
bfc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
bfd0: 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66      file copy -f
bfe0: 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65  orce $sourceFile bff0: 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 Name$targetFile
c000: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  Name..      }] =
c010: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
c020: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te c030: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe c040: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. c050: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 "---- copi c060: 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 ed build file fr c070: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 om \""$sourceFi
c080: 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22  leName "\" to \"
c090: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
c0a0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName c0b0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 \"\n].. } c0c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. c0d0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
c0e0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
c0f0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
c100: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f   "---- failed to
c110: 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c 65   copy build file
c120: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63   from \"" $sourc c130: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 eFileName \.. c140: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 "\" to c150: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e \""$targetFileN
c160: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
c170: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
c180: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65    proc tryDelete
c190: 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c  BinaryFile { fil
c1a0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
c1b0: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75  ""} {verbose tru
c1c0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
c1d0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
c1e0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f c1f0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
c200: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  m]....      if {
c210: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  ![file exists $f c220: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { c230: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
c240: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
c250: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c260: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel c270: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- c290: 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 -- skipped delet c2a0: 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 ing binary file c2b0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
c2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
c2d0: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
c2e0: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
c2f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
c300: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
c310: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
c320: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
c330: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20   $fileName}] == c340: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. c350: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
c360: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
c370: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c380: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65      "---- delete
c390: 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  d binary file \"
c3a0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n c3b0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else c3c0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs c3d0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
c3e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
c400: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
c410: 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  te binary file \
c420: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c430: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. c440: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c450: 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi c460: 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 le {.. c470: 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 fileName manag c480: 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d edOnly {platform c490: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 ""} {verbose tr c4a0: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ue} } {.. s c4b0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 et fileName [get c4c0: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 BuildFileName$f
c4d0: 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed c4e0: 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Only$platform].
c4f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
c500: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file c510: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. c520: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
c530: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
c540: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: c550: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap c560: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. c570: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c580: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting c590: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 build file \"" c5a0: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
c5c0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
c5d0: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t\n"]..        }
c5e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
c5f0: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
c600: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
c610: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi c620: 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 leName}] == 0} t c630: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t c640: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
c650: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
c660: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c670: 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75  "---- deleted bu
c680: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ild file \"" $fi c690: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. c6a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. c6b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c6c0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c6d0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c6e0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
c6f0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75  led to delete bu
c700: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ild file \"" $fi c710: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. c720: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... c730: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop c740: 79 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 yAssembly {.. c750: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam c760: 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 e managedOnly {p c770: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 latform ""} {pdb c780: 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 true} {verbose c790: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. c7a0: 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c tryCopyBuildFil c7b0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e e$fileName $man c7c0: 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f agedOnly$platfo
c7d0: 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a  rm "" $verbose.. c7e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 .. if {$pdb
c7f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c800: 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69    tryCopyBuildFi
c810: 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  le [appendArgs \
c820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
c830: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69  ile rootname $fi c840: 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 6d leName] .pdb]$m
c850: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74  anagedOnly $plat c860: 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65 form ""$verbose
c870: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
c880: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
c890: 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
c8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
c8b0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
c8c0: 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d  m ""} {pdb true}
c8d0: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20   {verbose true}
c8e0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65  } {..      tryDe
c8f0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24  leteBinaryFile $c900: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
c910: 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20  rm $verbose.... c920: 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 if {$pdb} t
c930: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
c940: 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69  ryDeleteBinaryFi
c950: 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  le [appendArgs \
c960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
c970: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69  ile rootname $fi c980: 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 leName] .pdb]$p
c990: 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65  latform $verbose c9a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } c9b0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr c9c0: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 yLoadAssembly { c9d0: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f fileName {platfo c9e0: 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 rm ""} } {.. c9f0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ ca00: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam ca10: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla ca20: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... ca30: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. ca40: 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 set assemb ca50: 6c 79 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 ly [object load ca60: 2d 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 20 2d -loadtype File - ca70: 61 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d alias$fileName]
ca80: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
ca90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
caa0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
cab0: 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65  TE: Now, add the
cac0: 20 6e 65 63 65 73 73 61 72 79 20 74 65 73 74 20   necessary test
cad0: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20  constraint...
cae0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
caf0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66  addConstraint [f
cb00: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69  ile rootname [fi
cb10: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam cb20: 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 e]].... # cb30: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE cb40: 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 65 : Grab the image cb50: 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e runtime version cb60: 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 from the assemb cb70: 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20 ly because.. cb80: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 76 65 # seve cb90: 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f ral tests rely o cba0: 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 65 n it having a ce cbb0: 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 rtain value... cbc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cbd0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b addConstraint [ cbe0: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 appendArgs [file cbf0: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
cc00: 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   _ \..
cc10: 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61    [$assembly Ima cc20: 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e geRuntimeVersion cc30: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ]].... #. cc40: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: cc50: 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c Return the full cc60: 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 path of the loa cc70: 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 ded file... cc80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re cc90: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
cca0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
ccb0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
ccc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
ccd0: 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d 20  sSQLiteReady {}
cce0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
ccf0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
cd00: 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72 65  rocedure must re
cd10: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e  turn non-zero on
cd20: 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ly if the SQLite
cd30: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23   native..      #
cd40: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 61         library a
cd50: 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  nd the System.Da
cd60: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  ta.SQLite manage
cd70: 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20 6c  d assembly are l
cd80: 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20  oaded..      #
cd90: 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66       and ready f
cda0: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
cdb0: 73 74 20 73 75 69 74 65 2e 20 20 43 75 72 72 65  st suite.  Curre
cdc0: 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63 65  ntly, this proce
cdd0: 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  dure..      #
cde0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63 61      should be ca
cdf0: 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72 20  lled only after
ce00: 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73 65  the [tryLoadAsse
ce10: 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65 20  mbly] procedure
ce20: 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  has..      #
ce30: 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74     been called t
ce40: 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65 20  o probe for the
ce50: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
ce60: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  te managed assem
ce70: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
ce80: 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65 63     and the [chec
ce90: 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f 63  kForSQLite] proc
cea0: 65 64 75 72 65 20 68 61 73 20 62 65 65 6e 20 63  edure has been c
ceb0: 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66  alled to probe f
cec0: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  or..      #
ced0: 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74    the SQLite nat
cee0: 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74 68  ive library; oth
cef0: 65 72 77 69 73 65 2c 20 74 68 69 73 20 70 72 6f  erwise, this pro
cf00: 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d 70  cedure will simp
cf10: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ly..      #
cf20: 20 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20    always return
cf30: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  zero...      #..
cf40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
cf50: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68  pr {..        [h
cf60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 79  aveConstraint Sy
cf70: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
cf80: 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72  ] && [haveConstr
cf90: 61 69 6e 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20  aint SQLite]..
cfa0: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c      }]..    }...
cfb0: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 61 74 63 68  ..    proc match
cfc0: 50 6c 61 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66  Platform { platf
cfd0: 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  orm } {..      #
cfe0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
cff0: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string
d000: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  for the platform
d010: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the
d020: 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20  build is not..
d030: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 72 69      #       [pri
d040: 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 69 76 65  marily] a native
d050: 20 62 75 69 6c 64 3b 20 74 68 65 72 65 66 6f 72   build; therefor
d060: 65 2c 20 69 74 20 61 6c 77 61 79 73 20 6d 61 74  e, it always mat
d070: 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ches...      #..
d080: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
d090: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo d0a0: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b rm] == 0} then { d0b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return d0c0: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. d0d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. d0e0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the d0f0: 6d 61 63 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 machine name is d100: 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 unavailable, the d110: 72 65 20 69 73 20 6e 6f 74 68 69 67 6e 20 65 6c re is nothign el d120: 73 65 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 se we.. # d130: 20 20 20 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 can do... d140: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if d150: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : d160: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma d170: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d chine)]} then {. d180: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return d190: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. d1a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. d1b0: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 # NOTE: Does th d1c0: 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 e specified plat d1d0: 66 6f 72 6d 20 6d 61 74 63 68 20 75 70 20 74 6f form match up to d1e0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f the current pro d1f0: 63 65 73 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a cess?.. #.. d200: 20 20 20 20 20 20 69 66 20 7b 24 70 6c 61 74 66 if {$platf
d210: 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 6e 65 54  orm eq [machineT
d220: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c  oPlatform $::tcl d230: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin d240: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. d250: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true d260: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... d270: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO d280: 54 45 3a 20 54 68 65 20 73 70 65 63 69 66 69 65 TE: The specifie d290: 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 d platform does d2a0: 6e 6f 74 20 6d 61 74 63 68 20 75 70 20 77 69 74 not match up wit d2b0: 68 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a h the platform.. d2c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo d2d0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 r the current pr d2e0: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d ocess... #. d2f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 . return fa d300: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 lse.. }..... d310: 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c 69 proc haveSQLi d320: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 teObjectCommand d330: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. d340: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 # NOTE: Is d350: 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com d360: 6d 61 6e 64 20 63 75 72 72 65 6e 74 6c 79 20 61 mand currently a d370: 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 vailable?.. d380: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return d390: 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 [expr {[llength d3a0: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands d3b0: 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a object]] > 0}].. d3c0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr d3d0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit d3e0: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b eObjectCommand { d3f0: 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 channel } {.. d400: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
d410: 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  el "---- checkin
d420: 67 20 66 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22  g for \"object\"
d430: 20 63 6f 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e   command usage..
d440: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  . "....      if
d450: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
d460: 3a 6e 6f 28 73 71 6c 69 74 65 4f 62 6a 65 63 74  :no(sqliteObject
d470: 43 6f 6d 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a  Command)] && \..
d480: 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53            [haveS
d490: 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
d4a0: 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
d4b0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan d4c0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. d4d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. d4e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # d4f0: 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 20 77 65 20 NOTE: Unless we d500: 61 72 65 20 66 6f 72 62 69 64 64 65 6e 20 66 72 are forbidden fr d510: 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64 om doing so, add d520: 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 some constraint d530: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # d540: 20 20 20 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c that will all d550: 6f 77 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 ow most of the t d560: 65 73 74 20 73 75 69 74 65 20 74 6f 20 72 75 6e est suite to run d570: 20 28 69 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20 (i.e. those.. d580: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te d590: 73 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 sts that do not d5a0: 64 69 72 65 63 74 6c 79 20 72 65 6c 79 20 75 70 directly rely up d5b0: 6f 6e 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 on the [object] d5c0: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20 command)... d5d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if d5e0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists d5f0: 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 41 ::no(shimSQLiteA d600: 73 73 65 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e ssemblyConstrain d610: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ts)]} then {.. d620: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d630: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20 raint SQLite.. d640: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d650: 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 raint SQLiteInte d660: 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 61 rop.. a d670: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys d680: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. d690: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo d6a0: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e nstraint System. d6b0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 Data.SQLite.Encr d6c0: 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 yption.. d6d0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint d6e0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi d6f0: 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 te.Linq.... d700: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d710: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c nt [appendArgs \ d720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d730: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi d740: 74 65 2e 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69 te.dll_v [getBui d750: 6c 64 43 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a ldClrVersion]].. d760: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... d770: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info d780: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d exists ::no(shim d790: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 SQLiteDefineCons d7a0: 74 61 6e 74 43 6f 6e 73 74 72 61 69 6e 74 73 29 tantConstraints) d7b0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. d7c0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 foreach def d7d0: 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 ineConstant [lis d7e0: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. d7f0: 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e INTEROP_EXTEN d800: 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 SION_FUNCTIONS I d810: 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 NTEROP_FTS5_EXTE d820: 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 NSION \.. d830: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a INTEROP_J d840: 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 SON1_EXTENSION I d850: 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c NTEROP_PERCENTIL d860: 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 E_EXTENSION \.. d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT d880: 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45 EROP_REGEXP_EXTE d890: 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 NSION INTEROP_TE d8a0: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a ST_EXTENSION \.. d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e IN d8c0: 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e TEROP_SHA1_EXTEN d8d0: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 4f 54 SION INTEROP_TOT d8e0: 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d YPE_EXTENSION \. d8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 . I d900: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 NTEROP_VIRTUAL_T d910: 41 42 4c 45 20 55 53 45 5f 49 4e 54 45 52 4f 50 ABLE USE_INTEROP d920: 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 _DLL] {.. d930: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d940: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c nt [appendArgs \ d950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d960: 20 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 [getSQLiteDefi d970: 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 neConstantPrefix d980: 5d 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e ]$defineConstan
d990: 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t]..          }.
d9a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
d9b0: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
d9c0: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69   exists ::no(shi
d9d0: 6d 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75  mSQLiteVisualStu
d9e0: 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  dioConstraints)]
d9f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
da00: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
da10: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69  t [appendArgs vi
da20: 73 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42  sualStudio [getB
da30: 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20  uildYear]]..
da40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
da50: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel da60: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 no\n.. }.. da70: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro da80: 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 c changeNativeRu da90: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 ntimeOption { na daa0: 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 tive } {.. dab0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e if {[llength [in dac0: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 fo commands debu dad0: 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 g]] > 0 && \.. dae0: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 [llength daf0: 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e [info subcomman db00: 64 73 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 ds debug runtime db10: 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 option]] > 0 && db20: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. db30: 20 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f debug runtimeo db40: 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 ption [expr {$na
db50: 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22  tive ? "add" : "
db60: 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65  remove"}] native
db70: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
db80: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
db90: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
dba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
dbb0: 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
dbc0: 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20  jectCommand] &&
dbd0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
dbe0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
dbf0: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
dc00: 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61  ctive [expr {$na dc10: 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 tive ? \.. dc20: 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d "AddRuntim dc30: 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f eOption" : "Remo dc40: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 veRuntimeOption" dc50: 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 }] native.. dc60: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { dc70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return dc80: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. dc90: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f dca0: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... dcb0: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo dcc0: 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 rSQLiteBuilds { dcd0: 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 channel {select dce0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. dcf0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT dd00: 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 E: Check for eve dd10: 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 ry possible vali dd20: 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 d combination of dd30: 20 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 values used whe dd40: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # dd50: 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 locating out th dd60: 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 e build output d dd70: 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e irectory, showin dd80: 67 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 g each available dd90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # dda0: 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 build variation ddb0: 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a along the way... ddc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 #.. f ddd0: 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c oreach native [l dde0: 69 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 ist false true] ddf0: 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.. forea de00: 63 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c ch year [getBuil de10: 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 dYears] {.. de20: 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e foreach con de30: 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 figuration [getB de40: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio de50: 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ns] {.. de60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. de70: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure de80: 20 6f 75 74 20 74 68 65 20 65 66 66 65 63 74 69 out the effecti de90: 76 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 ve build platfor dea0: 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 m. This is.. deb0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # dec0: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 based on whethe ded0: 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 6d r or not a [prim dee0: 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 75 arily] native bu def0: 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ild.. df00: 20 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e # is bein df10: 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 g used. For [pr df20: 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 imarily] non-nat df30: 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 ive builds,.. df40: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # df50: 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20 61 6e this will be an df60: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... df70: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. df80: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p df90: 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c latform [getBuil dfa0: 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 dPlatform$nativ
dfb0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
dfc0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel dfd0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dff0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f e000: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S e010: 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22 22 20 QLite build \"" e020: 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 [expr \.. e030: 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 {$nativ
e040: 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20  e ? "native/" :
e050: 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72  ""}] [expr {[str
e060: 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20  ing length \..
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p e080: 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b latform] > 0 ? [ e090: 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c 61 74 appendArgs$plat
e0a0: 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24  form /] : ""}] $e0b0: 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 year \.. e0c0: 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 69 /$confi
e0d0: 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20  guration "\"...
e0e0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
e0f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
e100: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
e110: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
e120: 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  ed directory whe
e130: 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  re the necessary
e140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
e150: 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73        components
e160: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
e170: 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62  .SQLite should b
e180: 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20  e found...
e190: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
e1a0: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
e1b0: 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72  ry [joinBuildDir
e1c0: 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5c  ectory $native \ e1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e1e0: 20 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 [getBuildBaseD e1f0: 69 72 65 63 74 6f 72 79 5d 20 24 79 65 61 72 20 irectory]$year
e200: 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69  $platform$confi
e210: 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20  guration]....
e220: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
e230: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e240: 44 6f 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  Do the necessary
e250: 20 66 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43   files exist?  C
e260: 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68  urrently, no oth
e270: 65 72 20 73 74 65 70 73 0d 0a 20 20 20 20 20 20  er steps..
e280: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
e290: 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66  e taken to verif
e2a0: 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 73 20  y this build is
e2b0: 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e  actually viable.
e2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
e2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
e2e0: 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62  {[isBuildAvailab
e2f0: 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69 72 65  le $native$dire
e300: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
e320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
e330: 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20 22   NOTE: When in "
e340: 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61 75  select" mode, au
e350: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65  tomatically sele
e360: 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20  ct the first..
e370: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
e380: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 62 75      available bu
e390: 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e 44 61  ild of System.Da
e3a0: 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 74 68  ta.SQLite and th
e3b0: 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20  en return..
e3c0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
e3d0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 20   immediately...
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e400: 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61   {$select && [ma e410: 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 tchPlatform$pla
e420: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e440: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
e450: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 61     # NOTE: Manua
e460: 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c 6c  lly override all
e470: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
e480: 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d 0a  tory selection..
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e4a0: 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 20  #       related
e4b0: 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 6e  test settings in
e4c0: 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 20   order to force
e4d0: 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 20  this build..
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
e4f0: 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 61      of System.Da
e500: 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 20  ta.SQLite to be
e510: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  used...
e520: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e530: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
e540: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74  changeNativeRunt
e550: 69 6d 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76  imeOption $nativ e560: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp e580: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
e590: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e5b0: 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f    "no, failed to
e5c0: 20 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76   " [expr {$nativ e5d0: 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d e ? "add" : "rem e5e0: 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 ove"}] \.. e5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e600: 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65 5c 22 " the \"native\" e610: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 5c runtime option\ e620: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... e630: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return e640: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. e650: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... e660: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set e670: 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65 61 ::test_year$yea
e680: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..
e690: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c     set ::test_pl
e6a0: 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d  atform $platform e6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e6c0: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e set ::test_con e6d0: 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 figuration$conf
e6e0: 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20  iguration....
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
e700: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app e710: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " e730: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" e740: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 [expr {$native
e750: 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22  ? "native/" : ""
e760: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  }] \..
e770: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
e780: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
e790: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f  $platform] > 0 ? e7a0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e7c0: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d$platform /]
e7d0: 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 2f 20   : ""}] $year / e7e0: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22$configuration "
e7f0: 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  )\n"]....
e800: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
e810: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
e820: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
e840: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes e850: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. e860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. e870: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. e880: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
e890: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..
e8a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
e8b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
e8c0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
e8d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
e8e0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
e8f0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
e900: 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 7b 20  QLiteReleases {
e910: 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20  channel {select
e920: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
e930: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e940: 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 61 73  E: Check for pas
e950: 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 79  t releases of Sy
e960: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e970: 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72   in the director
e980: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
e990: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
e9a0: 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  e "System.Data.S
e9b0: 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65  QLite" environme
e9c0: 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69 66 0d  nt variable, if.
e9d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
e9e0: 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23  resent...      #
e9f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
ea00: 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 53  o exists ::env(S
ea10: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
ea20: 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  e)] && \..
ea30: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
ea40: 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d  th $::env(System ea50: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e .Data.SQLite)] > ea60: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. ea70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # ea80: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the ea90: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified eaa0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where eab0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a the necessary.. eac0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # ead0: 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 components for S eae0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit eaf0: 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e e should be foun eb00: 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. eb10: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 set direc eb20: 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 tory [file nativ eb30: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join eb40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. eb50: 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61$::env(System.Da
eb60: 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 74 52  ta.SQLite) [getR
eb70: 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d  eleaseVersion]]]
eb80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
eb90: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe eba0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. ebb0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec ebc0: 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. ebd0: 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 Data.SQLite rele ebe0: 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ase \"" \.. ebf0: 20 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72$director
ec00: 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  y "\"... "]....
ec10: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65         if {[isRe
ec20: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24  leaseAvailable $ec30: 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74 66 6f directory platfo ec40: 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. ec50: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri ec60: 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
ec70: 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  orm] == 0} then
ec80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
ec90: 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e  et platform unkn
eca0: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  own..          }
ecb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
ecc0: 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61   {$select && [ma ecd0: 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 tchPlatform$pla
ece0: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
ed00: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
ed10: 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a  y $directory.... ed20: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput ed30: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ed40: 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c  ndArgs "yes, sel
ed50: 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f  ected (" $platfo ed60: 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 rm ")\n"].... ed70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return ed80: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. ed90: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. eda0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
edb0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
edc0: 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f   "yes (" $platfo edd0: 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 rm ")\n"].. ede0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. edf0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. ee00: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ee10: 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20  el no\n....
ee20: 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74       foreach pat
ee30: 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61  h [lsort -decrea
ee40: 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20  sing [file list
ee50: 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b  $directory *]] { ee60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if ee70: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
ee80: 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69  path] && [file i
ee90: 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  sdirectory $path eea0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. eeb0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
eec0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
eed0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
eee0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
eef0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
ef00: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
ef10: 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  elease \"" \..
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef30: 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d  $path "\"... "]. ef40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... ef50: 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 if {[isReleaseA ef60: 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 vailable$path p
ef70: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b  latform]} then {
ef80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ef90: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
efa0: 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] efb0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 efd0: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b set platform unk efe0: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 nown.. eff0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f000: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 if {$
f010: 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68  select && [match
f020: 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f  Platform $platfo f030: 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s f050: 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 et ::build_direc f060: 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 tory$path....
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f080: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ f090: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c appendArgs "yes, f0a0: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c selected ("$pl
f0b0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d  atform ")\n"]...
f0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f0d0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0f0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
f100: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
f110: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe f120: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 ndArgs "yes ("$
f130: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d  platform ")\n"].
f140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f150: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
f160: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
f170: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
f180: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. f190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } f1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. f1b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. f1c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } f1d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. f1e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f1f0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
f200: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
f210: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
f220: 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44  iable \"System.D
f230: 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20  ata.SQLite\" is
f240: 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  not " \..
f250: 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70       "set, skipp
f260: 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65  ing check for re
f270: 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20  leases...\n"]..
f280: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
f290: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
f2a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
f2b0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c   checkForSQLiteL
f2c0: 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c  ibrary { channel
f2d0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
f2e0: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- f2f0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 checking for SQ f300: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar f310: 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... f320: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. f330: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv f340: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP f350: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. f360: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data f370: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 f380: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 SQLiteVersion.. f390: 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 } version] f3a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. f3b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f3c0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i f3d0: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 f the returned v f3e0: 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e ersion was null. f3f0: 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 If so, make it f400: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # f410: 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d to spot.. f420: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f430: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string f440: 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d length$version]
f450: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
f460: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72           set ver
f470: 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  sion null..
f480: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
f490: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
f4a0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75  E: Attempt to qu
f4b0: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
f4c0: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
f4d0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d   for the SQLite.
f4e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
f4f0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
f500: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f510: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f520: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
f530: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
f540: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
f550: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
f560: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
f570: 51 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75  QLite3 SQLiteSou
f580: 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d  rceId..        }
f590: 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e   sourceId]} then
f5a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
f5b0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
f5c0: 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20  E: We failed to
f5d0: 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c  query the Fossil
f5e0: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
f5f0: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
f610: 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e  sourceId unknown
f620: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
f630: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f640: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
f650: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned
f660: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64  Fossil source id
f670: 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c  entifier was nul
f680: 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  l.  If..
f690: 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65  #       so, make
f6a0: 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74   it easy to spot
f6b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
f6c0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
f6d0: 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source f6e0: 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { f6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set f700: 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 sourceId null.. f710: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... f720: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # f730: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 NOTE: Yes, the f740: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr f750: 61 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 ary appears to b f760: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... f770: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f780: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S f790: 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 QLite.... f7a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f7b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
f7c0: 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22   (" $version " " f7d0: 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22$sourceId ")\n"
f7e0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
f7f0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
f800: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. f810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. f820: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec f830: 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f kForSQLiteIntero f840: 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d p { channel } {. f850: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
f860: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
f870: 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20  king for SQLite
f880: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
f890: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
f8a0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
f8b0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
f8c0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
f8d0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
f8e0: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
f8f0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49  SQLite.SQLite3 I
f900: 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20  nteropVersion..
f910: 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20       } version]
f920: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
f930: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f940: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
f950: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76  f the returned v
f960: 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e  ersion was null.
f970: 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74    If so, make it
f980: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23   easy..        #
f990: 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d         to spot..
f9a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f9b0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
f9c0: 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version] f9d0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. f9e0: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 set ver f9f0: 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 sion null.. fa00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... fa10: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT fa20: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 E: Attempt to qu fa30: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 ery the Fossil s fa40: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 ource identifier fa50: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d for the SQLite. fa60: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # fa70: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a core library... fa80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fa90: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. faa0: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec fab0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags fac0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. fad0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst fae0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S faf0: 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f QLite3 InteropSo fb00: 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 urceId.. fb10: 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 } sourceId]} the fb20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # fb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO fb40: 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f TE: We failed to fb50: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 query the Fossi fb60: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif fb70: 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ier... fb80: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set fb90: 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 sourceId unknow fba0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a n.. }.... fbb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fbc0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check fbd0: 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 if the returned fbe0: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i fbf0: 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 dentifier was nu fc00: 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 ll. If.. fc10: 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b # so, mak fc20: 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f e it easy to spo fc30: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. fc40: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri fc50: 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 ng length$sourc
fc60: 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
fc70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
fc80: 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a   sourceId null..
fc90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
fca0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
fcb0: 23 20 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61  # NOTE: Before a
fcc0: 63 74 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74  ctually adding t
fcd0: 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  he test constrai
fce0: 6e 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  nt, make sure th
fcf0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
fd00: 20 20 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61     version is va
fd10: 6c 69 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75  lid (i.e. not ju
fd20: 73 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64  st that we could
fd30: 20 71 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20   query it)...
fd40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
fd50: 69 66 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20  if {$version ne fd60: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. fd70: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. fd80: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 # NOTE: Y fd90: 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 es, the SQLite i fda0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly fdb0: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 appears to be av fdc0: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ailable... fdd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. fde0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S fdf0: 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a QLiteInterop.... fe00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e set an fe10: 73 77 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 swer yes.. fe20: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. fe30: 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 set answer fe40: 20 6e 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a no.. }.. fe50: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs fe60: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
fe70: 41 72 67 73 20 24 61 6e 73 77 65 72 20 22 20 28  Args $answer " ( fe80: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 "$version " " $fe90: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d sourceId ")\n"]. fea0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. feb0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
fec0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..
fed0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
fee0: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46  .    proc checkF
fef0: 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  orSQLiteDefineCo
ff00: 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c  nstant { channel
ff10: 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20   name } {..
ff20: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel ff30: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. ff40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c ff50: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst ff60: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 em.Data.SQLite d ff70: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c efine constant \ ff80: 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 ""$name \..
ff90: 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d        "\"... "].
ffa0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
ffb0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
ffc0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
ffd0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
ffe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
fff0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
10000 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43  .SQLite3 DefineC
10010 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..
10020 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  } defineConstant
10030 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
10040 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73  .        if {[ls
10050 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  earch -exact -no
10060 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73  case $defineCons 10070 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 tants$name] !=
10080 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..
10090 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
100a0 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
100b0 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73  this define cons
100c0 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64  tant was enabled
100d0 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65   when the manage
100e0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  d..          #
100f0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61       assembly wa
10100 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20  s compiled...
10110 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10120 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
10130 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67  t [appendArgs [g
10140 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
10150 6e 73 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e  nstantPrefix] $n 10160 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ame].... 10170 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10180 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20   yes\n..
10190 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
101a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 101b0 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 el no\n.. 101c0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 101d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 101e0 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 s$channel error
101f0 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
10200 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
10210 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
10220 74 20 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74 72  t { {timeZone tr
10230 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue} } {..      #
10240 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
10250 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73  This procedure s
10260 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68  imply returns th
10270 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65  e "default" Date
10280 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64  Time format used
10290 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
102a0 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
102b0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
102c0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
102d0 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66  sts ::datetime_f
102e0 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20  ormat] && \..
102f0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
10300 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d  ength $::datetim 10310 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 e_format] > 0} t 10320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 10330 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 10340 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e : Return the man 10350 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e ually overridden 10360 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 value for the D 10370 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d ateTime format.. 10380 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 10390 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 return$::da
103a0 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20  tetime_format..
103b0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
103c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
103d0 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
103e0 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65   an ISO8601 Date
103f0 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70  Time format comp
10400 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69  atible with SQLi
10410 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  te,..        #
10420 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
10430 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69  .SQLite, and sui
10440 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d  table for round-
10450 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68  tripping with th
10460 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
10470 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73     DateTime clas
10480 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  s of the framewo
10490 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  rk.  If this val
104a0 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a  ue is changed,..
104b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
104c0 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61  various tests ma
104d0 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20  y fail...
104e0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
104f0 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  rn [appendArgs \
10500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 79  ..            "y
10510 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
10520 73 73 2e 46 46 46 46 46 46 46 22 20 5b 65 78 70  ss.FFFFFFF" [exp
10530 72 20 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20 22  r {$timeZone ? " 10540 4b 22 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 20 K" : ""}]].. 10550 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 10560 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 proc getDateT 10570 69 6d 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 65 imeTicks { value 10580 20 7b 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 66 {local ""} {def 10590 61 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 ault ""} } {.. 105a0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 105b0 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d length$value] =
105c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
105d0 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 66       return $def 105e0 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ault.. }... 105f0 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 10600 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 h {.. set 10610 20 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 dateTime [objec 10620 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 t invoke -create 10630 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10640 2d 70 61 72 61 6d 65 74 65 72 74 79 70 65 73 20 -parametertypes 10650 5b 6c 69 73 74 20 53 74 72 69 6e 67 20 53 74 72 [list String Str 10660 69 6e 67 20 49 46 6f 72 6d 61 74 50 72 6f 76 69 ing IFormatProvi 10670 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 der \.. 10680 20 20 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c System.Global 10690 69 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69 6d 65 ization.DateTime 106a0 53 74 79 6c 65 73 5d 20 44 61 74 65 54 69 6d 65 Styles] DateTime 106b0 20 50 61 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 ParseExact \.. 106c0 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75$valu
106d0 65 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f  e [getDateTimeFo
106e0 72 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73  rmat] null Adjus
106f0 74 54 6f 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20  tToUniversal]..
10700 20 20 20 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d       }]} then {.
10710 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
10720 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20  $default.. 10730 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 10740 73 74 72 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 string is boolea 10750 6e 20 2d 73 74 72 69 63 74 20 24 6c 6f 63 61 6c n -strict$local
10760 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
10770 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20     set dateTime
10780 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
10790 63 72 65 61 74 65 20 44 61 74 65 54 69 6d 65 20  create DateTime
107a0 53 70 65 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20  SpecifyKind \..
107b0 20 20 20 20 20 20 20 20 20 20 20 24 64 61 74 65             $date 107c0 54 69 6d 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 Time Utc].. 107d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 107e0 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 return [objec 107f0 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 t invoke$dateTi
10800 6d 65 20 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20  me Ticks]..
10810 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
10820 24 6c 6f 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a  $local} then {.. 10830 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 10840 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 object invoke$d
10850 61 74 65 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54  ateTime ToLocalT
10860 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20  ime.Ticks]..
10870 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10880 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65      return [obje
10890 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54  ct invoke $dateT 108a0 69 6d 65 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 ime ToUniversalT 108b0 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 ime.Ticks].. 108c0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 108d0 20 20 20 70 72 6f 63 20 67 65 74 50 72 6f 70 65 proc getPrope 108e0 72 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 rties { object v 108f0 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 arName } {.. 10900 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
10910 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d  me properties...
10920 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74  .      set count
10930 20 30 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 61   0..      set na
10940 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  mes [list]....
10950 20 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63      if {[isObjec
10960 74 48 61 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d  tHandle $object] 10970 20 26 26 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 &&$object ne "
10980 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {..
10990 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
109a0 65 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63  end names [objec
109b0 74 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20  t members \..
109c0 20 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72           -member
109d0 74 79 70 65 73 20 50 72 6f 70 65 72 74 79 20 2d  types Property -
109e0 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74  nameonly $object 109f0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 ].... eva 10a00 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 l lappend names 10a10 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 [object members 10a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 10a30 6d 65 6d 62 65 72 74 79 70 65 73 20 46 69 65 6c membertypes Fiel 10a40 64 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a d -nameonly$obj
10a50 65 63 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ect]..      }...
10a60 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e  .      foreach n
10a70 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20  ame $names {.. 10a80 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 10a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 10aa0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a ject invoke -obj 10ab0 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 ectflags +NoDisp 10ac0 6f 73 65 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d ose$object $nam 10ad0 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61 6c e.. } val 10ae0 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ue] == 0} then { 10af0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 10b00 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 [isObjectHandle 10b10 24 76 61 6c 75 65 5d 20 26 26 20 24 76 61 6c 75$value] && $valu 10b20 65 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 e ne "null"} the 10b30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 10b40 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b set error null; 10b50 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 10b60 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 10b70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10b80 20 20 20 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 -marshalflag 10b90 73 20 2b 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 s +NoHandle Inte 10ba0 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 10bb0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 10bc0 20 20 20 20 20 41 64 64 4f 62 6a 65 63 74 52 65 AddObjectRe 10bd0 66 65 72 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 ference Ok$valu
10be0 65 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20  e error....
10bf0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70         lappend p
10c00 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
10c10 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  s) [list $name$
10c20 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20  value]..
10c30 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10c40 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
10c50 70 72 6f 70 65 72 74 69 65 73 28 76 61 6c 75 65  properties(value
10c60 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  s) [list $name$
10c70 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20  value]..
10c80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
10c90 20 69 6e 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20   incr count..
10ca0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
10cb0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
10cc0 20 70 72 6f 70 65 72 74 69 65 73 28 65 72 72 6f   properties(erro
10cd0 72 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  rs) [list $name 10ce0 24 3a 3a 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20$::errorCode]..
10cf0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10d00 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
10d10 6e 20 24 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d  n $count.. }. 10d20 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 10d30 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 7b 20 AllProperties { 10d40 6f 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d object varName } 10d50 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 10d60 31 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 1$varName prope
10d70 72 74 69 65 73 0d 0a 20 20 20 20 20 20 73 65 74  rties..      set
10d80 20 76 61 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a   value $object.. 10d90 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 7b 74 .. while {t 10da0 72 75 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 rue} {.. 10db0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 10dc0 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 s properties(see 10dd0 6e 4f 62 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d nObjects)] || \. 10de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 .$va
10df0 6c 75 65 20 6e 69 20 24 70 72 6f 70 65 72 74 69  lue ni $properti 10e00 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d es(seenObjects)} 10e10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10e20 20 20 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 getProperties 10e30 20 24 76 61 6c 75 65 20 70 72 6f 70 65 72 74 69$value properti
10e40 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61  es..          la
10e50 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
10e60 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 24 76  (seenObjects) $v 10e70 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d alue.. }. 10e80 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 10e90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f [info exists pro 10ea0 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 10eb0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 10ec0 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 break.. 10ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 10ee0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 if {[llength$p
10ef0 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
10f00 73 29 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  s)] == 0} then {
10f10 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
10f20 74 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a  t properties(obj
10f30 65 63 74 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20  ects); break..
10f40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10f50 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6c 69     set value [li
10f60 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 70 72  ndex [lindex $pr 10f70 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 10f80 29 20 30 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 ) 0] end].. 10f90 20 20 20 73 65 74 20 70 72 6f 70 65 72 74 69 65 set propertie 10fa0 73 28 6f 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e s(objects) [lran 10fb0 67 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f ge$properties(o
10fc0 62 6a 65 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a  bjects) 1 end]..
10fd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10fe0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
10ff0 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65  s properties(see
11000 6e 4f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e  nObjects)]} then
11010 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   {..        fore
11020 61 63 68 20 76 61 6c 75 65 20 24 70 72 6f 70 65  ach value $prope 11030 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 11040 73 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s) {.. 11050 69 66 20 7b 24 76 61 6c 75 65 20 65 71 20 24 6f if {$value eq $o 11060 62 6a 65 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d bject} continue. 11070 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 11080 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 {object dispose 11090 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20$value}..
110a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75    }....        u
110b0 6e 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28  nset properties(
110c0 73 65 65 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20  seenObjects)..
110d0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
110e0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 56 61 72  .    proc getVar
110f0 69 61 62 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65  iables { varName
11100 73 20 7b 6f 62 6a 65 63 74 73 20 66 61 6c 73 65  s {objects false
11110 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
11120 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
11130 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
11140 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65  varName $varName 11150 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s {.. if 11160 7b 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 {[uplevel 1 [lis 11170 74 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 t array exists$
11180 76 61 72 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20  varName]]} then
11190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
111a0 20 61 72 72 61 79 4e 61 6d 65 20 24 76 61 72 4e   arrayName $varN 111b0 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ame.... 111c0 20 66 6f 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 foreach element 111d0 4e 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 Name [uplevel 1 111e0 5b 6c 69 73 74 20 61 72 72 61 79 20 6e 61 6d 65 [list array name 111f0 73 20 24 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b s$arrayName]] {
11200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
11210 74 20 6e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  t name [appendAr
11220 67 73 20 24 61 72 72 61 79 4e 61 6d 65 20 28 20  gs $arrayName ( 11230 24 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d$elementName )].
11240 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
11250 20 76 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76   varValue [uplev
11260 65 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24  el 1 [list set $11270 6e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 name]].... 11280 20 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 if {$objec
11290 74 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48  ts && [isObjectH
112a0 61 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d  andle $varValue] 112b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 112c0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 112d0 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 ocomplain proper 112e0 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ties.. 112f0 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 getAllProper 11300 74 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 ties$varValue p
11310 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20  roperties....
11320 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
11330 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list
11340 24 6e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74  $name [array get 11350 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 properties]].. 11360 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 11370 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 11380 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul 11390 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 t [list$name $v 113a0 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 arValue].. 113b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 113c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 113d0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 113e0 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 5b set varValue [ 113f0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 11400 73 65 74 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a set$varName]]..
11410 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
11420 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f  $objects && [isO 11430 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 bjectHandle$var
11440 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Value]} then {..
11450 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65              unse
11460 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72  t -nocomplain pr
11470 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..
11480 20 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70        getAllProp
11490 65 72 74 69 65 73 20 24 76 61 72 56 61 6c 75 65  erties $varValue 114a0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 properties.... 114b0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 114c0 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 nd result [list 114d0 24 76 61 72 4e 61 6d 65 20 5b 61 72 72 61 79 20$varName [array
114e0 67 65 74 20 70 72 6f 70 65 72 74 69 65 73 5d 5d  get properties]]
114f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
11500 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
11510 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
11520 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20   [list $varName 11530 24 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20$varValue]..
11540 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
11550 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
11560 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 11570 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 11580 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 proc enumerab 11590 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 leToList { enume 115a0 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 rable } {.. 115b0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 set result [lis 115c0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b t].... if { 115d0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
115e0 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30  enumerable] == 0
115f0 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20   || $enumerable 11600 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 eq "null"} then 11610 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 11620 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 n$result..
11630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65   }....      obje
11640 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
11650 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62  s item $enumerab 11660 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 le {.. if 11670 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 11680 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65$item] > 0} the
11690 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  n {..          l
116a0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$116b0 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a item ToString].. 116c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 116d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 116e0 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
116f0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
11700 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20  atchAndReturn {
11710 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61  script {stackTra
11720 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63  ce false} {stric
11730 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
11740 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11750 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65  TE: Evaluate the
11760 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64   script provided
11770 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69   by our caller i
11780 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c  n their context,
11790 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
117a0 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74  capturing both t
117b0 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68  he result and th
117c0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
117d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
117e0 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b  et code [catch {
117f0 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70  uplevel 1 $scrip 11800 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 t} result].... 11810 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11820 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 72 OTE: Did the scr 11830 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 ipt provided by 11840 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 our caller NOT r 11850 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a aise an error?.. 11860 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 11870 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 63 f {$strict && $c 11880 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 ode == 0 || !$st
11890 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d  rict && $code != 118a0 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 118b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 118c0 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20 NOTE: Success. 118d0 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 Return a list w 118e0 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c 118f0 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 ode and the resu 11900 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a lt... #.. 11910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 11920 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 list$code $resu 11930 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 lt].. } els 11940 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65 eif {$stackTrace
11950 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11960 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
11970 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f  OTE: Failure.  O
11980 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20  ur caller wants
11990 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61  a full stack tra
119a0 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c  ce (if applicabl
119b0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  e),..        #
119c0 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69       return a li
119d0 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75  st with the retu
119e0 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20  rn code and the
119f0 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e  result verbatim.
11a00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
11a10 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
11a20 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d  t $code$result]
11a30 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
11a40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
11a50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
11a60 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65  lure.  Our calle
11a70 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20  r does not want
11a80 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61  a full stack tra
11a90 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20  ce (if..
11aa0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 62  #       applicab
11ab0 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69  le), return a li
11ac0 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75  st with the retu
11ad0 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72  rn code, the err
11ae0 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
11af0 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65      code for the
11b00 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e   interpreter, an
11b10 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
11b20 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20  age up to the..
11b30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
11b40 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 73  oint where the s
11b50 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c  tack trace shoul
11b60 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20  d start...
11b70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
11b80 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20  urn [list $code 11b90 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a$::errorCode \..
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 74              [ext
11bb0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
11bc0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
11bd0 73 61 67 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a  sage $result]].. 11be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 11bf0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 ... proc comp 11c00 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d ileCSharpWith {. 11c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 . tex 11c20 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 t memory symbols 11c30 20 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 strict resultsV 11c40 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 arName errorsVar 11c50 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a Name fileNames.. 11c60 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 args 11c70 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 11c80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e # NOTE: Sin 11c90 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 ce we are going 11ca0 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 to use this meth 11cb0 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 od name a lot, a 11cc0 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 ssign it to a.. 11cd0 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 11ce0 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 iable first... 11cf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 11d00 20 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 add ReferencedA 11d10 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d ssemblies.Add... 11d20 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11d30 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 # NOTE: Create t 11d40 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 he base command 11d50 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 to evaluate and 11d60 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 add the property 11d70 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 settings.. 11d80 20 23 20 20 20 20 20 20 20 74 68 61 74 20 61 72 # that ar 11d90 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 e almost always 11da0 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e needed by our un 11db0 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 it tests (i.e. t 11dc0 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 he System.. 11dd0 20 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 # and Sys 11de0 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c tem.Data assembl 11df0 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a y references)... 11e00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 11e10 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 et command [list 11e20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f \.. co 11e30 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 mpileCSharp$tex
11e40 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f  t $memory$symbo
11e50 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 75 6c  ls $strict resul 11e60 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 ts errors \.. 11e70 20 20 20 20 20 20 20 24 61 64 64 20 53 79 73 74$add Syst
11e80 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74  em.dll $add Syst 11e90 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 em.Data.dll$add
11ea0 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 63 74   System.Transact
11eb0 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20  ions.dll \..
11ec0 20 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65        $add Syste 11ed0 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 m.Xml.dll].... 11ee0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11ef0 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 OTE: Add all the 11f00 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e provided file n 11f10 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 ames as assembly 11f20 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 references... 11f30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 #.. for 11f40 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 each fileName$f
11f50 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
11f60 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d      lappend comm
11f70 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e  and $add [getBin 11f80 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
11f90 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  eName]..      }.
11fa0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11fb0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
11fc0 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74  e extra argument
11fd0 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68  s, if any, to th
11fe0 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61  e command to eva
11ff0 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d  luate...      #.
12000 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70  .      eval lapp
12010 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67  end command $arg 12020 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 s.... #.. 12030 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 # NOTE: Alia 12040 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c s the compiler l 12050 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 ocal results and 12060 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 errors variable 12070 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 s to the.. 12080 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 12090 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 names provided 120a0 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 120b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 120c0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 120d0 68 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d h$resultsVarNam
120e0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
120f0 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20          upvar 1
12100 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20  $resultsVarName 12110 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d results.. } 12120 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 12130 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 tring length$er
12140 72 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30  rorsVarName] > 0
12150 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12160 20 20 75 70 76 61 72 20 31 20 24 65 72 72 6f 72    upvar 1 $error 12170 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d sVarName errors. 12180 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 12190 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 121a0 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 E: Evaluate the 121b0 63 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d constructed [com 121c0 70 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d pileCSharp] comm 121d0 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 and and return t 121e0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 121f0 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 result... 12200 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 #.. eval$
12210 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a  command..    }..
12220 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65  ...    proc isMe
12230 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d  moryDb { fileNam
12240 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  e } {..      #..
12250 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73        # NOTE: Is
12260 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
12270 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d  atabase file nam
12280 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d  e really an in-m
12290 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d  emory database?.
122a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
122b0 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66  return [expr {$f 122c0 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d ileName eq ":mem 122d0 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 ory:" || \.. 122e0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 [string ra 122f0 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 nge$fileName 0
12300 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65  12] eq "file::me
12310 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d  mory:"}]..    }.
12320 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54  ....    proc isT
12330 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20  ableInDb { name
12340 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b  {varName db} } {
12350 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12360 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
12370 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
12380 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
12390 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
123a0 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
123b0 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
123c0 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74  .  It contains t
123d0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
123e0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68  ection handle th
123f0 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  at will be..
12400 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74    #       used t
12410 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 71 75  o execute the qu
12420 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 65  ery used to dete
12430 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d  rmine if the nam
12440 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20  ed table is..
12450 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65     #       prese
12460 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 62  nt in that datab
12470 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase...      #..
12480 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 12490 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 124a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 124b0 45 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 E: Use the sqlit 124c0 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 e_master table t 124d0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 o determine if t 124e0 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 he named table i 124f0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 12500 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 present in the 12510 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 database... 12520 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 #.. set sq 12530 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c l {.. SEL 12540 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f ECT COUNT(*) FRO 12550 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 M sqlite_master 12560 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 WHERE type = 'ta 12570 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 ble' AND name = 12580 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ?;.. }.... 12590 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 125a0 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e NOTE: Return non 125b0 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d -zero if the nam 125c0 65 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 ed table is pres 125d0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ent... #.. 125e0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 125f0 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 r {.. [sq 12600 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 l execute -execu 12610 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 te scalar$db $s 12620 71 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 ql [list param1 12630 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e String$name]] >
12640 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20   0..      }]..
12650 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12660 20 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67   getDbDefaultPag
12670 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20  eSize {} {..
12680 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
12690 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d 41  ecuteSql "PRAGMA
126a0 20 70 61 67 65 5f 73 69 7a 65 3b 22 20 73 63 61   page_size;" sca
126b0 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  lar} result] ==
126c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
126d0 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 126e0 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 t.. } else 126f0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 12700 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 n 0.. }.. 12710 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 12720 20 67 65 74 44 62 44 65 66 61 75 6c 74 43 61 63 getDbDefaultCac 12730 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 heSize {} {.. 12740 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 if {[catch {e 12750 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d xecuteSql "PRAGM 12760 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 20 73 A cache_size;" s 12770 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d calar} result] = 12780 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 12790 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
127a0 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ult..      } els
127b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
127c0 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  urn 0..      }..
127d0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
127e0 6f 63 20 75 73 65 4c 65 67 61 63 79 44 62 50 61  oc useLegacyDbPa
127f0 67 65 41 6e 64 43 61 63 68 65 53 69 7a 65 73 20  geAndCacheSizes
12800 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20  { varName } {..
12810 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
12820 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
12830 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
12840 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
12850 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
12860 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
12870 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
12880 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  It contains the
12890 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
128a0 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ion handle that
128b0 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23  will be..      #
128c0 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65         used to e
128d0 78 65 63 75 74 65 20 71 75 65 72 69 65 73 20 75  xecute queries u
128e0 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 70  sed to set the p
128f0 61 67 65 20 61 6e 64 20 63 61 63 68 65 20 73 69  age and cache si
12900 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  zes...      #..
12910 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 12920 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 12930 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 sql execute$d
12940 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 50 52 41  b {..        PRA
12950 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20  GMA page_size =
12960 31 30 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 50  1024;..        P
12970 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
12980 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20 20 20 20   = 2000;..
12990 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
129a0 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  n [list \..
129b0 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74       [sql execut
129c0 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
129d0 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61  r $db "PRAGMA pa 129e0 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a 20 20 ge_size;"] \.. 129f0 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 [sql exe 12a00 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 cute -execute sc 12a10 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 alar$db "PRAGMA
12a20 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d 5d 0d   cache_size;"]].
12a30 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
12a40 72 6f 63 20 65 78 74 72 61 63 74 53 79 73 74 65  roc extractSyste
12a50 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
12a60 74 69 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76 61  tionMessage { va
12a70 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  lue } {..      #
12a80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12a90 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 63 6f  If the string co
12aa0 6e 66 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61 74  nforms to format
12ab0 20 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20 65   of the normal e
12ac0 78 63 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  xception..
12ad0 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 73 74  #       error st
12ae0 72 69 6e 67 73 2c 20 65 78 74 72 61 63 74 20 61  rings, extract a
12af0 6e 64 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20 74  nd return only t
12b00 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
12b10 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
12b20 70 6f 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e 0d  portion itself..
12b30 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12b40 73 65 74 20 70 61 74 74 65 72 6e 73 20 5b 6c 69  set patterns [li
12b50 73 74 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73  st \..      {Sys
12b60 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74  tem\.Data\.SQLit
12b70 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69  e\.SQLiteExcepti
12b80 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c  on \(0x80004005\
12b90 29 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f  ): (.+?)  (?: )?
12ba0 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79  at} \..      {Sy
12bb0 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69  stem\.Data\.SQLi
12bc0 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74  te\.SQLiteExcept
12bd0 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20  ion: (.+?)  (?:
12be0 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b  )?at} \..      {
12bf0 45 61 67 6c 65 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e  Eagle\._Componen
12c00 74 73 5c 2e 50 75 62 6c 69 63 5c 2e 53 63 72 69  ts\.Public\.Scri
12c10 70 74 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b  ptException: (.+
12c20 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d 0a  ?)  (?: )?at}]..
12c30 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
12c40 70 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e  pattern $pattern 12c50 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s {.. if 12c60 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 {[regexp --$pat
12c70 74 65 72 6e 20 24 76 61 6c 75 65 20 64 75 6d 6d  tern $value dumm 12c80 79 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 6e y message]} then 12c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 12ca0 74 20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e t message [strin 12cb0 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e g map [list \r\n 12cc0 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 \n] [string tri 12cd0 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 20 m$message]]..
12ce0 20 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65          set line
12cf0 73 20 5b 73 70 6c 69 74 20 24 6d 65 73 73 61 67  s [split $messag 12d00 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 e \n].... 12d10 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 12d20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74 68$lines] == 2} th
12d30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12d40 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 6c    if {[lindex $l 12d50 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e 64 ines 0] eq [lind 12d60 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 68 ex$lines 1]} th
12d70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12d80 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64      return [lind
12d90 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20 20  ex $lines 0].. 12da0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 12db0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 12dc0 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 6c n [appendArgs [l 12dd0 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 index$lines 0]
12de0 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20 24  " -- " [lindex $12df0 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20 20 lines 1]].. 12e00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12e10 20 20 20 20 72 65 74 75 72 6e 20 24 6d 65 73 73 return$mess
12e20 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  age..        }..
12e30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
12e40 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a   return $value.. 12e50 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12e60 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c oc trimSql { sql 12e70 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 } {.. retu 12e80 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 rn [regsub -all 12e90 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 -- {\s+} [string 12ea0 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d trim$sql] " "]
12eb0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
12ec0 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20  proc executeSql
12ed0 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e  { sql {execute n
12ee0 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e  one} {format non
12ef0 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d  e} {fileName ""}
12f00 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
12f10 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $12f20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 fileName] == 0} 12f30 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 then {set fileNa 12f40 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 me :memory:}.. 12f50 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c setupDb$fil
12f60 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
12f70 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65  " "" false false
12f80 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20   false false db
12f90 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72  true....      tr
12fa0 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  y {..        ret
12fb0 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  urn [uplevel 1 [
12fc0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
12fd0 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute
12fe0 2d 65 78 65 63 75 74 65 20 24 65 78 65 63 75 74  -execute $execut 12ff0 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 e -format$forma
13000 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20  t $db$sql]]..
13010 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d      } finally {.
13020 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
13030 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f  nection [getDbCo
13040 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20  nnection]....
13050 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20       try {..
13060 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20        cleanupDb
13070 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c  $fileName db fal 13080 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a se false false.. 13090 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c } finall 130a0 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f y {.. o 130b0 62 6a 65 63 74 20 66 6c 61 67 73 20 24 63 6f 6e bject flags$con
130c0 6e 65 63 74 69 6f 6e 20 2d 4e 6f 44 69 73 70 6f  nection -NoDispo
130d0 73 65 3b 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  se; freeDbConnec
130e0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tion..        }.
130f0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
13100 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 73  ....    proc has
13110 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d  NoFlags { varNam
13120 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20  e none } {..
13130 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 13140 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 me flags.... 13150 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 13160 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e sts flags]} then 13170 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 13180 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 13190 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 131a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
131b0 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ags] == 0} then
131c0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
131d0 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
131e0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 6f  ...      if {$no 131f0 6e 65 20 26 26 20 24 66 6c 61 67 73 20 65 71 20 ne &&$flags eq
13200 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a  "None"} then {..
13210 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
13220 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rue..      }....
13230 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13240 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
13250 20 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63    proc getConnec
13260 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65  tionFlags { file
13270 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 75 69 65  Name flags {quie
13280 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
13290 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
132a0 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20  OTE: Figure out
132b0 77 68 69 63 68 20 64 61 74 61 62 61 73 65 20 66  which database f
132c0 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e  ile name or conn
132d0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 68  ection string th
132e0 65 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ese..      #
132f0 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c     connection fl
13300 61 67 73 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c  ags will actuall
13310 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 54 68 69  y apply to.  Thi
13320 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61  s is not necessa
13330 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ry..      #
13340 20 20 69 6e 20 71 75 69 65 74 20 6d 6f 64 65 20    in quiet mode
13350 62 65 63 61 75 73 65 20 74 68 69 73 20 69 6e 66  because this inf
13360 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  ormation is only
13370 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e   used for loggin
13380 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  g..      #
13390 20 61 6e 64 20 72 65 70 6f 72 74 69 6e 67 20 70   and reporting p
133a0 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20  urposes...
133b0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  #..      if {!$q 133c0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 133d0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 133e0 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 g length$fileNa
133f0 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
13400 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
13410 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41  atabase [appendA
13420 72 67 73 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c  rgs "file name \
13430 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d  "" $fileName \"] 13440 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 13450 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 13460 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 20 26 ::dataSource] & 13470 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 13480 20 21 5b 61 72 72 61 79 20 65 78 69 73 74 73 20 ![array exists 13490 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 ::dataSource]} t 134a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 134b0 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 set database [a 134c0 70 70 65 6e 64 41 72 67 73 20 22 64 61 74 61 20 ppendArgs "data 134d0 73 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 source \""$::da
134e0 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20  taSource \"]..
134f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13500 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61            set da
13510 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e  tabase <unknown>
13520 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
13530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
13540 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
13550 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65  ven though there
13560 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f 75   is only one sou
13570 72 63 65 20 6f 66 20 66 6c 61 67 73 20 73 6f 20  rce of flags so
13580 66 61 72 2c 20 74 68 65 79 0d 0a 20 20 20 20 20  far, they..
13590 20 23 20 20 20 20 20 20 20 6d 75 73 74 20 62 65   #       must be
135a0 20 63 6f 6d 62 69 6e 65 64 20 75 73 69 6e 67 20   combined using
135b0 74 68 65 20 63 6f 72 72 65 63 74 20 73 79 6e 74  the correct synt
135c0 61 78 20 66 6f 72 20 65 6e 75 6d 65 72 61 74 65  ax for enumerate
135d0 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
135e0 20 66 6c 61 67 20 76 61 6c 75 65 73 20 66 6f 72   flag values for
135f0 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
13600 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ork...      #..
13610 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
13620 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c  combineFlags $fl 13630 61 67 73 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 20 ags ""].... 13640 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 13650 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) 13660 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 the local conne 13670 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and 13680 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a the associated.. 13690 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da 136a0 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c ta source or fil 136b0 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 e name... # 136c0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
136d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
136e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
136f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74  exists ::no(emit
13700 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20  LocalFlags)] &&
13710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  \..            (
13720 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
13730 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67  no(emitLocalFlag
13740 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a  sIfNone)] || \..
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68               ![h
13760 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20  asNoFlags flags
13770 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d  false])} then {.
13780 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
13790 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 137a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 137c0 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 --- local connec 137d0 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 tion flags for " 137e0 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20$database \..
137f0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
13800 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61  e: " [expr {![ha
13810 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66  sNoFlags flags f
13820 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20  alse] ? \..
13830 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
13840 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c  Args \" $flags \ 13850 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 "] : "<none>"}] 13860 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 13870 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 13880 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 13890 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) 138a0 20 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e the shared conn 138b0 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 ection flags... 138c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 138d0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
138e0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
138f0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
13900 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
13910 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
13920 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
13930 74 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73  tion SharedFlags
13940 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61 72  ..        } shar
13950 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74  edFlags] == 0} t
13960 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13970 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
13980 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72  ts ::no(emitShar
13990 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a  edFlags)] && \..
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21                (!
139b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
139c0 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67  o(emitSharedFlag
139d0 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a  sIfNone)] || \..
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
139f0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72  [hasNoFlags shar
13a00 65 64 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20  edFlags true])}
13a10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13a20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13a30 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13a40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13a50 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 13a60 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e hared connection 13a70 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 flags for "$da
13a80 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20  tabase \..
13a90 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
13aa0 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e   " [expr {![hasN
13ab0 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61  oFlags sharedFla
13ac0 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20  gs true] ? \..
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
13ae0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68  ppendArgs \" $sh 13af0 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 aredFlags \"] : 13b00 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a "<none>"}] \n].. 13b10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 13b20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 13b30 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 13b40 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 13b50 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 emitSharedFlags) 13b60 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 13b70 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 ![info exi 13b80 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 sts ::no(emitSha 13b90 72 65 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69 redFlagsIfUnavai 13ba0 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d lable)]} then {. 13bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 13bc0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
13bd0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
13be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13bf0 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63    "---- shared c
13c00 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
13c10 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20  for " $database 13c20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13c30 20 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 " are: <unava 13c40 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 ilable>\n"].. 13c50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13c60 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 13c70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 13c80 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 NOTE: Show (and 13c90 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 log) the detect 13ca0 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 ed global connec 13cb0 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 tion flags, if a 13cc0 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ny... #.. 13cd0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
13ce0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13cf0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
13d00 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62  ts ::no(emitGlob
13d10 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a  alFlags)] && \..
13d20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69              (![i
13d30 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
13d40 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49  emitGlobalFlagsI
13d50 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20  fNone)] || \..
13d60 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73             ![has
13d70 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63  NoFlags ::connec
13d80 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65  tion_flags false
13d90 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ])} then {..
13da0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 13db0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 13dc0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 13dd0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 "---- g 13de0 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e lobal connection 13df0 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d flags are: " \. 13e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 13e10 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 expr {![hasNoFla 13e20 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f gs ::connection_ 13e30 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c flags false] ? \ 13e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13e50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
13e60 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
13e70 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
13e80 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
13e90 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13ea0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13eb0 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61  NOTE: If there a
13ec0 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70  re any global (p
13ed0 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e  er test run) con
13ee0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75  nection flags cu
13ef0 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23  rrently..      #
13f00 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20         set, use
13f10 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62  them now (i.e. b
13f20 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d  y combining them
13f30 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66   with the ones f
13f40 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  or this..      #
13f50 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
13f60 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n)...      #..
13f70 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
13f80 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f  ists ::connectio
13f90 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b  n_flags]} then {
13fa0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13fb0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d       # NOTE: Com
13fc0 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c  bine and/or repl
13fd0 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ace the connecti
13fe0 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65  on flags and the
13ff0 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20  n show the..
14000 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 20      #       new
14010 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...
14020 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  #..        set f
14030 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61  lags [combineFla
14040 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e  gs $flags$::con
14050 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a  nection_flags]..
14060 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14070 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
14080 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20  w (and log) the
14090 6e 65 77 20 65 66 66 65 63 74 69 76 65 20 63 6f  new effective co
140a0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d  nnection flags..
140b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
140c0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 140d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 140e0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 140f0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f ists ::no(emitCo 14100 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 mbinedFlags)] && 14110 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14120 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 (![info exists 14130 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e ::no(emitCombin 14140 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 edFlagsIfNone)] 14150 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 14160 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 ![hasNoFlag 14170 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d s flags false])} 14180 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14190 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
141a0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
141b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
141c0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
141d0 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74  combined connect
141e0 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
141f0 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. 14200 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a 14210 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 re: " [expr {![h 14220 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 asNoFlags flags 14230 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 false] ? \.. 14240 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 [app 14250 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 endArgs \"$flag
14260 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22  s \"] : "<none>"
14270 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  }] \n]..
14280 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
14290 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
142a0 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a   return $flags.. 142b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 142c0 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 oc getFlagsPrope 142d0 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d rty { {flags ""} 142e0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 142f0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 14300 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 # NOTE: Deter 14310 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f mine what the co 14320 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 mbined (global a 14330 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 nd local) connec 14340 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 14350 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 flags should 14360 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 be, possibly qu 14370 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d ietly... #. 14380 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 . set flags 14390 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 [getConnectionF 143a0 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 lags ""$flags $143b0 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 143c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 143d0 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 If no global or 143e0 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f local connectio 143f0 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 n flags were spe 14400 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 cified, the.. 14410 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 # defau 14420 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c lt connection fl 14430 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 ags should be us 14440 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 ed; therefore, r 14450 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 eturn.. # 14460 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 an empty st 14470 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 ring in that cas 14480 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 14490 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 144a0 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d ength$flags] ==
144b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
144c0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
144d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
144e0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
144f0 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65   In order to che
14500 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c  ck if the defaul
14510 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  t connection fla
14520 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65  gs are being use
14530 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
14540 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
14550 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f   to attempt a co
14560 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20  nversion to the
14570 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65  actual enumerate
14580 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
14590 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20   type.  Failing
145a0 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20  that, the check
145b0 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61  against the defa
145c0 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
145d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
145e0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20   skipped...
145f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   #..      if {[c
14600 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
14610 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20  set error null;
14620 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20  # IGNORED....
14630 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
14640 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61  ke Utility TryPa
14650 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20  rseFlagsEnum ""
14660 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
14670 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14680 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
14690 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67  onFlags "" $flag 146a0 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 s null true \.. 146b0 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 20 true 146c0 74 72 75 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 true error.. 146d0 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e } value]} then 146e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 146f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 14700 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 ttempting to par 14710 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f se the connectio 14720 6e 20 66 6c 61 67 73 20 63 61 75 73 65 64 20 61 n flags caused a 14730 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20 script.. 14740 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 2e 20 # error. 14750 20 45 6d 69 74 20 61 20 77 61 72 6e 69 6e 67 20 Emit a warning 14760 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 to the test log 14770 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 file and continu 14780 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 14790 20 20 20 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 using an emtp 147a0 79 20 73 74 72 69 6e 67 20 69 6e 73 74 65 61 64 y string instead 147b0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 147c0 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 tlog [appe 147d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 147e0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 147f0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 ING: failed to p 14800 61 72 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 arse connection 14810 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 flags, error: " 14820 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ 14830 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a n\t$value \n]..
14840 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61  ..        set va
14850 6c 75 65 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d  lue ""..      }.
14860 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
14870 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
14880 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20   combined flags
14890 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74  string could not
148a0 20 61 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e   actually be con
148b0 76 65 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20  verted..      #
148c0 20 20 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75        to the enu
148d0 6d 65 72 61 74 65 64 20 74 79 70 65 20 69 74 20  merated type it
148e0 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  is the default v
148f0 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20  alue, then just
14900 75 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  use..      #
14910 20 20 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20     it verbatim;
14920 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20  otherwise, just
14930 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty
14940 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74  string.  In that
14950 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
14960 63 61 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c  case, the defaul
14970 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  t connection fla
14980 67 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e  gs will be used.
14990 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
149a0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
149b0 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30  gth $value] == 0 149c0 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 ||$value ne "D
149d0 65 66 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d  efault"} then {.
149e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
149f0 20 20 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54      # WARNING: T
14a00 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20  his returns the
14a10 73 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20  string value of
14a20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61  the combined fla
14a30 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  gs, not..
14a40 20 23 20 20 20 20 20 20 20 20 20 20 74 68 65 20   #          the
14a50 65 6e 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65  enumerated value
14a60 2e 20 20 54 68 69 73 20 69 73 20 62 79 20 64 65  .  This is by de
14a70 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20  sign and should
14a80 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  not..        #
14a90 20 20 20 20 20 20 20 20 62 65 20 63 68 61 6e 67          be chang
14aa0 65 64 20 77 69 74 68 6f 75 74 20 63 61 72 65 66  ed without caref
14ab0 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e  ul consideration
14ac0 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d   (e.g. it would.
14ad0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14ae0 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
14af0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14b00 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f   class from allo
14b10 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20  wing invalid..
14b20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
14b30 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74   ["magical"] met
14b40 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20  a-flags)...
14b50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
14b60 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73  turn [appendArgs
14b70 20 22 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73   "Flags=" $flags 14b80 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \;].. }... 14b90 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 . return "" 14ba0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 14bb0 70 72 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 65 proc enableShare 14bc0 64 43 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c dCache { channel 14bd0 20 65 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 66 enable {quiet f 14be0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 14bf0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 14c00 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 14c10 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 14c20 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 14c30 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 14c40 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 14c50 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 14c60 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 14c70 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 te3_enable_share 14c80 64 5f 63 61 63 68 65 20 5b 65 78 70 72 20 69 6e d_cache [expr in 14c90 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 t($enable)]..
14ca0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
14cb0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
14cc0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 14cd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14ce0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
14cf0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
14d10 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  --- call sqlite3
14d20 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
14d30 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c  ache(" $enable \ 14d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14d50 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 ")... ok: "$res
14d60 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
14d70 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
14d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
14d90 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 14da0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 14db0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
14dc0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
14dd0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
14de0 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  l sqlite3_enable
14df0 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20  _shared_cache("
14e00 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20  $enable \.. 14e10 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 ")... e 14e20 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 rror: " \n\t$re
14e30 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
14e40 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
14e50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
14e60 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20   setupDb {..
14e70 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
14e80 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65   {mode ""} {date
14e90 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b  TimeFormat ""} {
14ea0 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d  dateTimeKind ""}
14eb0 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20   {flags ""}..
14ec0 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20           {extra
14ed0 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ""} {qualify tru
14ee0 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d  e} {delete true}
14ef0 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20   {uri false}..
14f00 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f            {tempo
14f10 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e  rary true} {varN
14f20 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20 66  ame db} {quiet f
14f30 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
14f40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14f50 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
14f60 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
14f70 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
14f80 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
14f90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14fa0 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
14fb0 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 14fc0 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 14fd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 14fe0 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 r now, all test 14ff0 64 61 74 61 62 61 73 65 73 20 75 73 65 64 20 62 databases used b 15000 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 15010 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 are placed.. 15020 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 # into 15030 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72 the database dir 15040 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 61 ectory. Each da 15050 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 74 tabase and relat 15060 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 ed files.. 15070 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20 # used by 15080 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 65 a test should be 15090 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 74 cleaned up by t 150a0 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 74 hat test using t 150b0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 150c0 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 72 "cleanupDb" pr 150d0 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d ocedure, below.. 150e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 150f0 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
15100 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then 15110 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 15120 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j 15130 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase 15140 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file 15150 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
15160 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
15170 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15180 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c  OTE: By default,
15190 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d   delete any pre-
151a0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
151b0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same
151c0 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  file..      #
151d0 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20 63      name if it c
151e0 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73 2e  urrently exists.
151f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15200 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20   if {!$isMemory 15210 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 &&$delete && [f
15220 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 15230 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 15240 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15250 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 15260 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 t to delete any 15270 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 pre-existing dat 15280 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 abase with the s 15290 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 ame file.. 152a0 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d # name.. 152b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 152c0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 152d0 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
152e0 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74  eName} error]} t
152f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15300 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
15310 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
15320 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
15330 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
15340 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
15350 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
15360 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 15370 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 15380 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
15390 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
153a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
153b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
153c0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
153d0 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  elete database f
153e0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 153f0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 15400 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 15410 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 setup, error: " 15420 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
15430 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
15440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
15450 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15460 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
15470 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
15480 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
15490 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
154a0 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
154b0 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
154c0 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
154d0 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61  to the opened da
154e0 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73  tabase will be s
154f0 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
15500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
15510 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62  ar 1 $varName db 15520 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15530 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 # NOTE: Start 15540 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f building the co 15550 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 15560 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 The only requi 15570 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 red portion.. 15580 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 15590 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 155a0 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20 ing is the data 155b0 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f source, which co 155c0 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 ntains the.. 155d0 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa 155e0 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 se file name its 155f0 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c elf. If our cal 15600 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65 ler wants to use 15610 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20 a URI as.. 15620 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74 # the dat 15630 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68 a source, use th 15640 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 e FullUri connec 15650 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 15660 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 erty to.. # 15670 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t 15680 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73 he data source s 15690 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 tring from being 156a0 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 mangled... 156b0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75 #.. if {$u
156c0 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ri} then {..
156d0 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69      set connecti
156e0 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69  on {FullUri=${fi 156f0 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 leName}}.. 15700 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 15710 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e set connection 15720 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b {Data Source=${
15730 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20  fileName}}..
15740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
15750 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69        # NOTE: Si
15760 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75  nce this procedu
15770 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61  re has no specia
15780 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77  l knowledge of w
15790 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d  hat the default.
157a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
157b0 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68  etting is for th
157c0 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e  e ToFullPath con
157d0 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
157e0 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a  ropery, always..
157f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64        #       ad
15800 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b  d the value we k
15810 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65  now about to the
15820 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
15830 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
15840 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
15850 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61  ction {;ToFullPa
15860 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a  th=${qualify}}.. 15870 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15880 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 15890 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 158a0 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c a journal mode, 158b0 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 158c0 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. 158d0 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the 158e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 158f0 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 15900 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 15910 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 ing length$mode
15920 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
15930 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
15940 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e  nnection {;Journ
15950 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d  al Mode=${mode}} 15960 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15970 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15980 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle 15990 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 r specified a Da 159a0 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 teTime format, a 159b0 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 dd the necessary 159c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 159d0 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 portion of the c 159e0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 159f0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 15a00 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15a10 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 g length$dateTi
15a20 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74  meFormat] > 0} t
15a30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
15a40 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
15a50 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61   {;DateTimeForma
15a60 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d  t=${dateTimeForm 15a70 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d at}}.. }... 15a80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15a90 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c 15aa0 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified 15ab0 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 a DateTimeKind, 15ac0 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 15ad0 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 y portion.. 15ae0 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 # of the 15af0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 15b00 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 15b10 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 15b20 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
15b30 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68  imeKind] > 0} th
15b40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
15b50 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
15b60 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24  {;DateTimeKind=$15b70 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d {dateTimeKind}}. 15b80 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 15b90 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15ba0 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 E: Figure out wh 15bb0 61 74 20 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 at the final fla 15bc0 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e gs for this conn 15bd0 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 ection need to b 15be0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 15bf0 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 set flags [ge 15c00 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 tConnectionFlags 15c10 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67$fileName $flag 15c20 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 s$quiet]....
15c30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15c40 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
15c50 72 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65  r specified some
15c60 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15c70 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d  nFlags, add the.
15c80 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
15c90 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e  ecessary portion
15ca0 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
15cb0 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
15cc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
15cd0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
15ce0 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74  h $flags] > 0} t 15cf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 15d00 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 15d10 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 {;Flags=${flags
15d20 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  }}..      }....
15d30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15d40 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
15d50 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e  ler specified an
15d60 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74   extra payload t
15d70 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
15d80 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15d90 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69  string, append i
15da0 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  t now...      #.
15db0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
15dc0 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61  ng length $extra 15dd0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 15de0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 15df0 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 nnection \;$ext
15e00 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ra..      }....
15e10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15e20 4e 4f 54 45 3a 20 46 6f 72 20 63 6c 61 72 69 74  NOTE: For clarit
15e30 79 2c 20 61 70 70 65 6e 64 20 61 20 66 69 6e 61  y, append a fina
15e40 6c 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74  l semicolon to t
15e50 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
15e60 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ring...      #..
15e70 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
15e80 6e 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20  nection \;....
15e90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15ea0 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61  OTE: Open the da
15eb0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
15ec0 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74  n now, placing t
15ed0 68 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65  he opaque handle
15ee0 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20   value..      #
15ef0 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76        into the v
15f00 61 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65  ariable specifie
15f10 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
15f20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15f30 20 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65   set db [sql ope
15f40 6e 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b  n -type SQLite [
15f50 73 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f  subst $connectio 15f60 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a n]].... #.. 15f70 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 15f80 6e 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 nfigure the temp 15f90 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 orary directory 15fa0 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 for the newly op 15fb0 65 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 ened database.. 15fc0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 15fd0 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 nection now unle 15fe0 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f ss our caller fo 15ff0 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 rbids it... 16000 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 #.. if {$t
16010 65 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e  emporary && ![in
16020 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
16030 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63  etTemporaryDirec
16040 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tory)]} then {..
16050 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63          sql exec
16060 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA 16070 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16080 20 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f "PRAGMA temp_ 16090 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 store_directory 160a0 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 = \"" [getTempor 160b0 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 aryDirectory] \" 160c0 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \;].. }.... 160d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 160e0 20 4e 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 NOTE: Perform a 160f0 6e 79 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e ny extra per-con 16100 6e 65 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f nection setup fo 16110 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e r the newly open 16120 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 16130 20 20 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 database now u 16140 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 nless our caller 16150 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 forbids it... 16160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 16170 20 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 executeOnSetup 16180 5b 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 [getExecuteOnSet 16190 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 up].... if 161a0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 161b0 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d$executeOnSetup]
161c0 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20   > 0 && \..
161d0 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73       ![info exis
161e0 74 73 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f  ts ::no(executeO
161f0 6e 53 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b  nSetup)]} then {
16200 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16210 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
16220 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61  s command may ra
16230 69 73 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66  ise an error; if
16240 20 73 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e   so, that is fin
16250 65 2c 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23  e, as..        #
16260 20 20 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f         the enclo
16270 73 69 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74  sing test will t
16280 68 65 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b  hen fail.  The [
16290 73 75 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69  subst] command i
162a0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
162b0 20 20 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53     used on the S
162c0 51 4c 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65  QL in case it ne
162d0 65 64 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20  eds to refer to
162e0 73 74 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20  state in our..
162f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
16300 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntext...
16310 23 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65  #..        sql e
16320 78 65 63 75 74 65 20 24 64 62 20 5b 73 75 62 73  xecute $db [subs 16330 74 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 t$executeOnSetu
16340 70 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  p]..      }....
16350 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
16360 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74  NOTE: Always ret
16370 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  urn the connecti
16380 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73  on handle upon s
16390 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23  uccess...      #
163a0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $163b0 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 db.. }..... 163c0 20 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e proc getDbConn 163d0 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d ection { {varNam 163e0 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 163f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16400 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 16410 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 16420 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 16430 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 16440 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 16450 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 caller. The 16460 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 handle to the da 16470 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c tabase previousl 16480 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 y opened via the 16490 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 164a0 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 [setupDb] proced 164b0 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 ure should be st 164c0 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 ored there... 164d0 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 #.. upva 164e0 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d r 1$varName db.
164f0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
16500 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72    # NOTE: This r
16510 65 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e  eturns the ADO.N
16520 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  ET IDbConnection
16530 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
16540 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20   for the..
16550 23 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65  #       specifie
16560 64 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65  d databse handle
16570 2e 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67  .  Since getting
16580 20 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c   this object rel
16590 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20  ies upon..
165a0 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e  #       Eagle in
165b0 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63  ternals, great c
165c0 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61  are should be ta
165d0 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73  ken to avoid dis
165e0 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20  posing of..
165f0 20 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62   #       this ob
16600 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73  ject or otherwis
16610 65 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74  e putting it int
16620 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61  o an invalid sta
16630 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
16640 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
16650 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b  ists db]} then {
16660 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
16670 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
16680 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
16690 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
166a0 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b  c -objectflags +
166b0 4e 6f 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73  NoDispose -alias
166c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
166d0 20 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65    Interpreter.Ge
166e0 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69  tActive.connecti
166f0 6f 6e 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20  ons Item $db.. 16700 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 16710 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 16720 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16730 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 # NOTE: Suc 16740 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 cess, return the 16750 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h 16760 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 16770 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r 16780 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
16790 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
167a0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
167b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
167c0 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20  Failure, report
167d0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
167e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  #..          tpu
167f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 16800 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16820 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 16830 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e ailed to get con 16840 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 nection handle f 16850 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 or database \"" 16860 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16870 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a$db "\", error:
16880 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 16890 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 168a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 168b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 168c0 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 : Failure, retur 168d0 6e 20 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 n an obviously i 168e0 6e 76 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 nvalid opaque ob 168f0 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... 16900 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 16910 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c urn "".. }... 16920 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 .. proc freeD 16930 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 bConnection { {v 16940 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f arName connectio 16950 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d n} } {.. #. 16960 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 16970 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 16980 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 16990 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e e.g. "connection 169a0 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 ") in the.. 169b0 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 # context 169c0 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 of our caller. 169d0 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 The opaque obje 169e0 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e ct handle for an 169f0 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 ADO.NET.. 16a00 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 # connecti 16a10 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 on previously re 16a20 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 turned by [getDb 16a30 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 Connection] shou 16a40 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ld be.. # 16a50 20 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 stored ther 16a60 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 16a70 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
16a80 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ame connection..
16a90 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16aa0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
16ab0 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f   to remove the o
16ac0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
16ad0 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74  dle from the int
16ae0 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20  erpreter..
16af0 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68  #       now.  Th
16b00 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f  is [object dispo
16b10 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f  se] call will no
16b20 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f  t actually dispo
16b30 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  se of the..
16b40 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79   #       underly
16b50 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75  ing object becau
16b60 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73  se the +NoDispos
16b70 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f  e flag was set o
16b80 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20  n it..      #
16b90 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74      during creat
16ba0 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75  ion of the opaqu
16bb0 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e  e object handle.
16bc0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16bd0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
16be0 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26  s connection] &&
16bf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63   \..          [c
16c00 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73  atch {object dis
16c10 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  pose $connection 16c20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 16c30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16c40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 16c50 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 16c60 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e o remove the han 16c70 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e dle, report why. 16c80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16c90 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16ca0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16cb0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16cc0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
16cd0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
16ce0 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  emove connection
16cf0 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e   handle \"" $con 16d00 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. 16d10 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f "\", erro 16d20 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
16d30 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
16d40 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
16d50 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f  c addDbConnectio
16d60 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b  n { connection {
16d70 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
16d80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16d90 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
16da0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
16db0 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
16dc0 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
16dd0 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
16de0 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
16df0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16e00 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 16e10 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. 16e20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 16e30 72 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c reate a correctl 16e40 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 y formatted name 16e50 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 for the databas 16e60 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d e connection to. 16e70 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 16e80 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c e added to the l 16e90 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 ist managed by t 16ea0 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 he Eagle interpr 16eb0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eter... #.. 16ec0 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 set db [ob 16ed0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 16ee0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 16ef0 0a 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 . Eagle 16f00 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 ._Components.Pri 16f10 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 vate.FormatOps D 16f20 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d atabaseObjectNam 16f30 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d e$connection \.
16f40 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
16f50 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a  eConnection [obj
16f60 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
16f70 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
16f80 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20   NextId]]....
16f90 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
16fa0 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61  TE: Add the data
16fb0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
16fc0 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
16fd0 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69  caller to the li
16fe0 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  st..      #
16ff0 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e    of those known
17000 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e   to the Eagle in
17010 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
17020 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63    #..      objec
17030 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
17040 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72  +NonPublic Inter
17050 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
17060 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64  .connections Add
17070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64   \..          $d 17080 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 b$connection..
17090 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
170a0 63 20 72 65 6d 6f 76 65 44 62 54 72 61 6e 73 61  c removeDbTransa
170b0 63 74 69 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74  ction { transact
170c0 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
170d0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
170e0 52 65 6d 6f 76 65 20 74 68 65 20 64 61 74 61 62  Remove the datab
170f0 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ase transaction
17100 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
17110 63 61 6c 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d  caller from the.
17120 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
17130 69 73 74 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f  ist of those kno
17140 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20  wn to the Eagle
17150 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
17160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a      #..      obj
17170 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
17180 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74  s +NonPublic Int
17190 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
171a0 76 65 2e 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ve.transactions
171b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 52 65 6d  \..          Rem
171c0 6f 76 65 20 24 74 72 61 6e 73 61 63 74 69 6f 6e  ove $transaction 171d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 171e0 70 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f 6d proc getRowsFrom 171f0 44 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74 61 DataTable { data 17200 54 61 62 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c Table {valueCall 17210 62 61 63 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 back ""} } {.. 17220 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 set rows [li 17230 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 st].. set c 17240 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 ount [$dataTable
17250 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d   Columns.Count].
17260 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65  ...      for {se
17270 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64  t index 0} {$ind 17280 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e ex <$count} {in
17290 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..
172a0 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c       set dataCol
172b0 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20  umn [$dataTable 172c0 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 -alias Columns.g 172d0 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d et_Item$index].
172e0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d  .        set nam
172f0 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74  es($index) [$dat
17300 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61  aColumn ColumnNa
17310 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
17320 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
17330 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 73 6f 6d   NOTE: Setup som
17340 65 20 54 63 6c 20 72 65 74 75 72 6e 20 63 6f 64  e Tcl return cod
17350 65 20 63 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20  e constants...
17360 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
17370 20 4f 6b 20 30 3b 20 73 65 74 20 45 72 72 6f 72   Ok 0; set Error
17380 20 31 3b 20 73 65 74 20 52 65 74 75 72 6e 20 32   1; set Return 2
17390 3b 20 73 65 74 20 42 72 65 61 6b 20 33 3b 20 73  ; set Break 3; s
173a0 65 74 20 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d  et Continue 4...
173b0 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f  .      object fo
173c0 72 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74  reach -alias dat
173d0 61 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f  aRow [set dataRo
173e0 77 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52  ws [$dataTable R 173f0 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ows]] {.. 17400 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d set row [list]. 17410 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b ... for { 17420 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 set index 0} {$i
17430 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b  ndex < $count} { 17440 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 incr index} {.. 17450 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c set val 17460 75 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 ue [$dataRow -cr
17470 65 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f  eate -alias get_
17480 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a  Item $index].... 17490 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 174a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
174b0 6c 75 65 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30  lueCallback] > 0
174c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
174d0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b        set code [
174e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
174f0 20 20 20 20 20 20 20 24 76 61 6c 75 65 43 61 6c         $valueCal 17500 6c 62 61 63 6b 20 24 64 61 74 61 54 61 62 6c 65 lback$dataTable
17510 20 24 64 61 74 61 52 6f 77 20 24 69 6e 64 65 78   $dataRow$index
17520 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   $value.. 17530 20 20 20 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d } newValue] 17540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 17550 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b if {$code == $Ok 17560 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17570 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17580 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17590 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 175a0 65 64 20 28 6e 65 77 3f 29 20 72 6f 77 20 76 61 ed (new?) row va 175b0 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 lue... 175c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 175d0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 lappend row 175e0 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 [list$names($i 175f0 6e 64 65 78 29 20 24 6e 65 77 56 61 6c 75 65 5d ndex)$newValue]
17600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
17610 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d  elseif {$code == 17620 20 24 45 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d$Error} then {.
17630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
17640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17650 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
17660 28 6e 65 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20  (new?) NULL row
17670 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...
17680 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17690 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
176a0 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28  ow [list $names( 176b0 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20$index)]..
176c0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
176d0 24 63 6f 64 65 20 3d 3d 20 24 52 65 74 75 72 6e  $code ==$Return
176e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
176f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17700 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
17710 20 53 6b 69 70 20 72 65 6d 61 69 6e 69 6e 67 20   Skip remaining
17720 76 61 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20  values for this
17730 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  row...
17740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
17750 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20       break..
17760 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66          } elseif
17770 20 7b 24 63 6f 64 65 20 3d 3d 20 24 42 72 65 61   {$code ==$Brea
17780 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  k} then {..
17790 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
177a0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
177b0 3a 20 53 6b 69 70 20 70 72 6f 63 65 73 73 69 6e  : Skip processin
177c0 67 20 74 68 69 73 20 72 6f 77 20 76 61 6c 75 65  g this row value
177d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
177e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
177f0 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20  } elseif {$code 17800 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 ==$Continue} th
17810 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17820 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
17830 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
17840 20 64 65 66 61 75 6c 74 20 72 6f 77 20 76 61 6c   default row val
17850 75 65 20 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20  ue handling...
17860 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
17870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
17880 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
17890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
178a0 74 20 63 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65  t code $Continue 178b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 178c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
178d0 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75  code == $Continu 178e0 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 178f0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 17900 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 ng length$value
17910 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20  ] > 0 && \..
17920 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62              ![ob
17930 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76  ject invoke Conv
17940 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61  ert IsDBNull $va 17950 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lue]} then {.. 17960 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp 17970 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e end row [list$n
17980 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76  ames($index) [$v
17990 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d  alue ToString]].
179a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
179b0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
179c0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77       lappend row
179d0 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69   [list $names($i
179e0 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20  ndex)]..
179f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
17a00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
17a10 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
17a20 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20   rows $row.. 17a30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 17a40 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d urn$rows..    }
17a50 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75  .....    proc du
17a60 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61  mpRowsFromDataTa
17a70 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f  ble { channel ro
17a80 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  ws } {..      se
17a90 74 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a  t sequence 1....
17aa0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f        foreach ro
17ab0 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20  w $rows {.. 17ac0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
17ad0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
17ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78  .            [ex
17af0 70 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20  pr {$sequence > 17b00 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 1 ? "\n" : ""}] 17b10 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 "---- ROW #"$se
17b20 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20  quence :\n]....
17b30 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70         foreach p
17b40 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20  air $row {.. 17b50 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 17b60 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 th$pair] >= 2}
17b70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17b80 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 17b90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 17ba0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 17bb0 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 [list [lind 17bc0 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 ex$pair 0]] ":
17bd0 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20  " [list [lindex
17be0 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20  $pair 1]] \n].. 17bf0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei 17c00 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 f {[llength$pai
17c10 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d  r] == 1} then {.
17c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
17c30 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 17c40 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 endArgs \t \.. 17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c [l 17c60 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 ist [lindex$pai
17c70 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c  r 0]] ": <null>\
17c80 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
17c90 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
17ca0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 17cb0 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b nel \t<empty>\n; 17cc0 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 # NOTE: No data 17cd0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ?.. }.. 17ce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 17cf0 20 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e incr sequen 17d00 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 ce.. }.. 17d10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 17d20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 cleanupDb { file 17d30 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 Name {varName db 17d40 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d } {collect true} 17d50 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d {qualify true}. 17d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 17d70 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 {delete tr 17d80 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # 17d90 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 17da0 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 Attempt to force 17db0 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 all pending "ga 17dc0 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 rbage" objects t 17dd0 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d o be collected,. 17de0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 17df0 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 ncluding SQLite 17e00 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 statements and b 17e10 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 ackup objects; t 17e20 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 his should allow 17e30 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17e40 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 the underlying d 17e50 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 atabase file to 17e60 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 be deleted... 17e70 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 17e80 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b$collect} then {
17e90 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63  ..        collec
17ea0 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74  tGarbage $::test 17eb0 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 _channel.. 17ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 17ed0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 17ee0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 17ef0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 17f00 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 . "db") in the c 17f10 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 ontext of our.. 17f20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 17f30 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 ler. The handle 17f40 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 to the database 17f50 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e previously open 17f60 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 ed via the.. 17f70 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 # [setup 17f80 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 Db] procedure sh 17f90 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 ould be stored t 17fa0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. 17fb0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
17fc0 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
17fd0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
17fe0 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f  TE: Close the co
17ff0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20  nnection to the
18000 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54  database now.  T
18010 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77  his should allow
18020 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   us..      #
18030 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65     to delete the
18040 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61   underlying data
18050 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20  base file...
18060 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18070 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20  info exists db]
18080 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63  && [catch {sql c
18090 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d  lose $db} error] 180a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 180b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 180c0 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 180d0 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 failed to close 180e0 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 the database, re 180f0 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 port why... 18100 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 18110 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
18120 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18130 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
18140 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
18150 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61  iled to close da
18160 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22  tabase \"" $db " 18170 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a \", error: " \.. 18180 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 18190 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
181a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
181b0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
181c0 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72  irst, see if our
181d0 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75   caller has requ
181e0 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f  ested an in-memo
181f0 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  ry database...
18200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
18210 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d   isMemory [isMem
18220 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d  oryDb $fileName] 18230 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 18240 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 18250 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 the full path t 18260 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 o the database f 18270 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e ile name. For n 18280 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 ow, all test.. 18290 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data 182a0 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 base files are s 182b0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d tored in the tem 182c0 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 porary directory 182d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 182e0 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
182f0 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68   && $qualify} th 18300 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 18310 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file 18320 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 join [getDataba 18330 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 seDirectory] [fi 18340 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
18350 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e]]..      }....
18360 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18370 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
18380 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65  the file still e
18390 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d  xists...      #.
183a0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 183b0 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 emory &&$delete
183c0 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73   && [file exists
183d0 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 183e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 183f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18400 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 Skip deleting da 18410 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 tabase files if 18420 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 somebody sets th 18430 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 e global.. 18440 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 18450 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 le to prevent it 18460 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18470 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 18480 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 exists ::no(cle 18490 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 anupDbFile)]} th 184a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 184b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 184c0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 184d0 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 delete the test 184e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f database file no 184f0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d w... #. 18500 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 18510 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 18520 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
18530 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d  leName} error]]}
18540 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18550 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18560 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
18570 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
18580 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65   delete the file
18590 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
185a0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
185b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
185c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 185d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 185f0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 18600 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 iled to delete d 18610 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 18620 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
18640 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70  " during cleanup
18650 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
18660 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 18670 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18680 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 18690 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 186a0 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t 186b0 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 hat we skipped d 186c0 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 eleting the file 186d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 186e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co 186f0 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 de 0.... 18700 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
18710 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
18720 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
18730 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
18740 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65  NG: skipped dele
18750 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ting database fi
18760 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 18770 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18780 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 18790 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 anup\n"].. 187a0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 187b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 187c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 187d0 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f The file does no 187e0 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 t exist, success 187f0 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 !.. #.. 18800 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 18810 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 18820 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d return$code.
18830 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
18840 72 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d  roc saveEnvironm
18850 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e  entVariables { n
18860 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22  ames {varName ""
18870 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
18880 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
18890 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65  r each name, doe
188a0 73 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72  s the live envir
188b0 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable
188c0 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20  exist?  If..
188d0 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61    #       so, sa
188e0 76 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72  ve the value for
188f0 20 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73   later; otherwis
18900 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  e, make sure the
18910 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20   saved..      #
18920 20 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73        value does
18930 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65   not exist eithe
18940 72 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76  r.  The live env
18950 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
18960 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  es..      #
18970 20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65    ARE NOT change
18980 64 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64  d by this proced
18990 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ure...      #..
189a0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
189b0 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 189c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 189d0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e set varN 189e0 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 ame savedEnv.. 189f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 }.... u 18a00 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
18a10 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
18a20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24    foreach name $18a30 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 names {.. 18a40 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 18a50 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d s ::env($name)]}
18a60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18a70 20 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28     set savedEnv(
18a80 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e  $name)$::env($n 18a90 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 ame).. } 18aa0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 18ab0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 18ac0 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 ain savedEnv($na
18ad0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me)..        }..
18ae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18af0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18b00 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63  : This is self-c
18b10 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20  leaning.  If no
18b20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e  saved environmen
18b30 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d  t variables now.
18b40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
18b50 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65  xist, remove the
18b60 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23   array...      #
18b70 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72  ..      if {[arr
18b80 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76  ay size savedEnv
18b90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
18ba0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
18bb0 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
18bc0 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  nv..      }..
18bd0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
18be0 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
18bf0 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61  ntVariables { na
18c00 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  mes {varName ""}
18c10 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
18c20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72       # NOTE: For
18c30 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73   each name, does
18c40 20 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72   the saved envir
18c50 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable
18c60 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20  exist?  If..
18c70 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65    #       so, re
18c80 73 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20  store the saved
18c90 76 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20  value and unset
18ca0 69 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d  it; otherwise, m
18cb0 61 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20  ake sure..
18cc0 23 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65  #       the live
18cd0 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
18ce0 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65  iable does not e
18cf0 78 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65  xist either (i.e
18d00 2e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20  . it..      #
18d10 20 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20      was not set
18d20 74 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20  to begin with).
18d30 20 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20   Both saved and
18d40 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  live environment
18d50 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
18d60 76 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68  variables ARE ch
18d70 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72  anged by this pr
18d80 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20  ocedure...
18d90 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
18da0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72  ring length $var 18db0 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e Name] == 0} then 18dc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 18dd0 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 varName savedEnv 18de0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 18df0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
18e00 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a  ame savedEnv....
18e10 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
18e20 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20  me $names {.. 18e30 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 18e40 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 xists savedEnv($
18e50 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  name)]} then {..
18e60 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
18e70 65 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65  env($name)$save
18e80 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20  dEnv($name).. 18e90 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 18ea0 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 18eb0 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 v($name)..
18ec0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
18ed0 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
18ee0 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e  omplain ::env($n 18ef0 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d ame).. }. 18f00 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 18f10 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18f20 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d E: This is self- 18f30 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f cleaning. If no 18f40 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 saved environme 18f50 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 nt variables now 18f60 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 18f70 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 exist, remove th 18f80 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 e array... 18f90 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 #.. if {[ar 18fa0 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e ray size savedEn 18fb0 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d v] == 0} then {. 18fc0 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d . unset - 18fd0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 nocomplain saved 18fe0 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 Env.. }.. 18ff0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 19000 20 73 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 saveGetSettingV 19010 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 alueEnvironment 19020 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 19030 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 19040 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 edEnv.... s 19050 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 aveEnvironmentVa 19060 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 19070 0a 20 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 . No_Ex 19080 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 pand No_SQLiteGe 19090 74 53 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f tSettingValue No 190a0 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 _SQLiteXmlConfig 190b0 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 File] \.. 190c0 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 savedEnv.. 190d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 190e0 72 65 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e restoreGetSettin 190f0 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e gValueEnvironmen 19100 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 19110 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 19120 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 19130 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 19140 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 19150 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 19160 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c No_Expand No_SQL 19170 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c iteGetSettingVal 19180 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 ue No_SQLiteXmlC 19190 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 onfigFile] \.. 191a0 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 191b0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 191c0 70 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 proc saveSQLiteC 191d0 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e onnectionEnviron 191e0 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 191f0 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 19200 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 19210 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d saveEnvironm 19220 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 19230 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 19240 44 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c DefaultFlags_SQL 19250 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f iteConnection No 19260 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f _SQLiteConnectio 19270 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 nNewParser] \.. 19280 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e savedEn 19290 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 v.. }..... 192a0 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c proc restoreSQL 192b0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 iteConnectionEnv 192c0 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 192d0 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 192e0 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 192f0 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 .. restoreE 19300 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 19310 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 19320 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c DefaultFl 19330 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ags_SQLiteConnec 19340 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f tion No_SQLiteCo 19350 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 nnectionNewParse 19360 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 r] \.. 19370 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 19380 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 .... proc sav 19390 65 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e eSQLiteConvertEn 193a0 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a vironment {} {.. 193b0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 upvar 1 sa 193c0 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d vedEnv savedEnv. 193d0 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 ... saveEnv 193e0 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 193f0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 19400 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 Use_SQLiteC 19410 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 onvert_DefaultDb 19420 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 Type Use_SQLiteC 19430 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 onvert_DefaultTy 19440 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 peName] \.. 19450 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 19460 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 19470 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 c restoreSQLiteC 19480 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e onvertEnvironmen 19490 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 194a0 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 194b0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 194c0 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 194d0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 194e0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 194f0 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 19500 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 t_DefaultDbType 19510 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 19520 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d t_DefaultTypeNam 19530 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e] \.. 19540 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 19550 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set 19560 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 19570 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 lback { channel 19580 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 log } {.. t 19590 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
195a0 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64  --- setting up d
195b0 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70  ebugger interrup
195c0 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d  t callback... ".
195d0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
195e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  tch {..        s
195f0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
19600 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
19610 0a 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69  .            qui
19620 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65  etFindInterprete
19630 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53  rTestPath quietS
19640 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54  etupInterpreterT
19650 65 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20  estPath]....
19660 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20      try {..
19670 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19680 20 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e    # NOTE: Preven
19690 74 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72  t the vendor scr
196a0 69 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e  ipt from being n
196b0 6f 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69  oisy when creati
196c0 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ng..          #
196d0 20 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74        the isolat
196e0 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
196f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
19700 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e          set ::en
19710 76 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72  v(quietFindInter
19720 70 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20  preterTestPath)
19730 31 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  1..          set
19740 20 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75   ::env(quietSetu
19750 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74  pInterpreterTest
19760 50 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20  Path) 1....
19770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19780 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
19790 75 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64  ure the script d
197a0 65 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20  ebugger and the
197b0 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
197c0 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  eter..
197d0 23 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75  #       are setu
197e0 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20  p and ready for
197f0 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  use...
19800 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
19810 75 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72  ug setup true tr
19820 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ue....
19830 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
19840 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65  OTE: Load the ne
19850 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73  cessary packages
19860 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74   into the isolat
19870 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
19880 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
19890 20 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76          debug ev
198a0 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  al {..
198b0 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
198c0 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
198d0 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
198e0 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
198f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..
19900 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require
19910 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20  Eagle.Test..
19920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19930 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19940 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
19950 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72  he necessary var
19960 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20  iables into the
19970 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
19980 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  eter...
19990 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65   #..          de
199a0 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74  bug invoke 0 set
199b0 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20   ::test_channel
199c0 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45  $channel; # NOTE 199d0 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a : For [tputs]... 199e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 199f0 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t 19a00 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 est_log$log; #
19a10 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d  NOTE: For [tlog]
19a20 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  .....          #
19a30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
19a40 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20  TE: Install the
19a50 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20  callback script
19a60 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20  to be evaluated
19a70 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d  in the isolated.
19a80 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
19a90 20 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77     interpreter w
19aa0 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72  hen this interpr
19ab0 65 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70  eter is interrup
19ac0 74 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20  ted by script..
19ad0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
19ae0 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65   cancellation, e
19af0 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  tc...          #
19b00 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75  ..          debu
19b10 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79  g callback apply
19b20 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a   {{sender e} {..
19b30 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
19b40 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
19b50 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  E: Check if this
19b60 20 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61   debugger callba
19b70 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77  ck is one that w
19b80 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20  e care about...
19b90 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
19ba0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e            set in
19bb0 74 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70  terruptTypes [sp
19bc0 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70  lit [$e Interrup 19bd0 74 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a tType] ", "].... 19be0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 19bf0 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 "Canceled" in$i
19c00 6e 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c  nterruptTypes ||
19c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19c20 20 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e      "Unwound" in
19c30 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73   $interruptTypes 19c40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19c50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19c60 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 19c70 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b Make sure the [ 19c80 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 object] command 19c90 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 is available. S 19ca0 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ince.. 19cb0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 # this 19cc0 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 is an isolated 19cd0 69 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 interpreter, che 19ce0 63 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 ck for it the ha 19cf0 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rd.. 19d00 20 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a # way... 19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 19d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 19d30 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 f {[llength [inf 19d40 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 o commands objec 19d50 74 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d t]] > 0} then {. 19d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19d70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19d80 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 # NOTE: Iter 19d90 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 ate through all 19da0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 19db0 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 ions known to th 19dc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 19dd0 20 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e # paren 19de0 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a t interpreter... 19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19e00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19e10 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac 19e20 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f h -alias pair [o 19e30 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 19e40 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 19e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19e60 20 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72$e Interpr
19e70 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  eter.connections
19e80 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..
19e90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
19eb0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63  TE: Attempt to c
19ec0 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75  ancel any SQL qu
19ed0 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
19ee0 73 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  s on..
19ef0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
19f00 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  this database co
19f10 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  nnection...
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f40 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70    if {[catch {$p 19f50 61 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c air Value.Cancel 19f60 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 19f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19f80 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
19f90 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
19fa0 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20  endArgs \n \..
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19fc0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
19fd0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63  ING: failed to c
19fe0 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20  ancel query for
19ff0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1a010 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70  nnection \"" [$p 1a020 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 air Key] "\", er 1a030 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 ror: " \n\t \.. 1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a050 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e$error \n
1a060 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
1a070 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1a080 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1a090 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
1a0a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1a0b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1a0c0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1a0d0 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 Args \n \.. 1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1a0f0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 ==== WARNING: ca 1a100 6e 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 nnot cancel any 1a110 71 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 queries: " \.. 1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a130 20 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c "the \"object\ 1a140 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 " command is not 1a150 20 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a available\n"].. 1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1a170 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1a180 20 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 }}.. 1a190 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 } finally 1a1a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 {.. res 1a1b0 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 toreEnvironmentV 1a1c0 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 1a1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a1e0 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 quietFindInterpr 1a1f0 65 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 eterTestPath qui 1a200 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 etSetupInterpret 1a210 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 erTestPath].. 1a220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 1a230 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1a240 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 n {.. add 1a250 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 Constraint inter 1a260 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c ruptCallback.sql 1a270 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ite3.... 1a280 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
1a290 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c  es\n..      } el
1a2a0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
1a2b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1a2c0 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 pendArgs "no, er 1a2d0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
1a2e0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  or \n]..      }.
1a2f0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1a300 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20  roc cleanupFile
1a310 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c  { fileName {coll
1a320 65 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65  ect true} {force
1a330 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
1a340 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1a350 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
1a360 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67  orce all pending
1a370 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63   "garbage" objec
1a380 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74  ts to be collect
1a390 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed,..      #
1a3a0 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c     including SQL
1a3b0 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ite statements a
1a3c0 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  nd backup object
1a3d0 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61  s; this should a
1a3e0 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20  llow..      #
1a3f0 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69      the underlyi
1a400 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
1a410 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d   to be deleted..
1a420 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a430 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68  if {$collect} th 1a440 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f en {.. co 1a450 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a llectGarbage$::
1a460 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
1a470 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1a480 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1a490 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c  Check if the fil
1a4a0 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d  e still exists..
1a4b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a4c0 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
1a4d0 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 1a4e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1a4f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1a500 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 Skip deleting te 1a510 73 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 st files if some 1a520 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c body sets the gl 1a530 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 obal variable.. 1a540 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 1a550 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 o prevent it... 1a560 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a570 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 if {$force ||
1a580 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1a590 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d  no(cleanupFile)]
1a5a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a5b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a5c0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
1a5d0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74   to delete the t
1a5e0 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  est file now...
1a5f0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1a600 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63        if {[set c
1a610 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65  ode [catch {file
1a620 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam 1a630 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e e} error]]} then 1a640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a650 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 1a660 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 1a670 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 1a680 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 te the file, rep 1a690 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 1a6a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a6b0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1a6c0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1a6d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1a6e0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1a6f0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1a700 74 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66  to delete test f
1a710 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 1a720 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1a730 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 1a740 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 cleanup, error: 1a750 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
1a760 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1a770 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1a780 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1a790 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1a7a0 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b   Show that we sk
1a7b0 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74  ipped deleting t
1a7c0 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  he file...
1a7d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a7e0 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20   set code 0....
1a7f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a800 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a810 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1a820 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1a830 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 = WARNING: skipp 1a840 65 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 ed deleting test 1a850 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
1a860 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
1a870 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
1a880 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20  cleanup\n"]..
1a890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
1a8a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1a8b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1a8c0 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73  E: The file does
1a8d0 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63   not exist, succ
1a8e0 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d  ess!..        #.
1a8f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64  .        set cod
1a900 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e 0..      }....
1a910 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f        return $co 1a920 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 de.. }..... 1a930 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 proc cleanupMe 1a940 6d 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b mory { varName { 1a950 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 1a960 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1a970 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 1a980 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 mand] && \.. 1a990 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1a9a0 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e ngth$varName] >
1a9b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1a9c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1a9d0 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
1a9e0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
1a9f0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
1aa00 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
1aa10 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1aa20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
1aa30 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
1aa40 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
1aa50 64 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20  dle for an..
1aa60 20 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e      #       ADO.
1aa70 4e 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  NET connection p
1aa80 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e  reviously return
1aa90 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e  ed by [getDbConn
1aaa0 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20  ection]..
1aab0 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
1aac0 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
1aad0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1aae0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 1aaf0 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection 1ab00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1ab10 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1ab20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1ab30 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 e$connection Re
1ab40 6c 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20  leaseMemory..
1ab50 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
1ab60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ab70 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1ab80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ab90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1aba0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1abb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1abc0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1abd0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1abe0 20 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73   release databas
1abf0 65 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a  e memory, error:
1ac00 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1ac10 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 1ac20 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1ac30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1ac40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1ac50 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 if {[llength [i 1ac60 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 nfo commands deb 1ac70 75 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ug]] > 0} then { 1ac80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1ac90 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1aca0 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 1acb0 74 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a t debug purge].. 1acc0 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1acd0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1ace0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1acf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ad00 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1ad10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1ad20 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1ad30 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 1ad40 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 1ad50 20 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 to purge call f 1ad60 72 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c rame, error: " \ 1ad70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ad80 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
1ad90 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1ada0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1adb0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1adc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70   {..          up
1add0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65  level 1 [list de
1ade0 62 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20  bug cleanup]..
1adf0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1ae00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ae10 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1ae20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ae30 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1ae40 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1ae50 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1ae60 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1ae70 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1ae80 6f 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70  o cleanup interp
1ae90 72 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20  reter, error: "
1aea0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1aeb0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20     \n\t $result 1aec0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1aed0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1aee0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1aef0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 h {.. u 1af00 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 plevel 1 [list d 1af10 65 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 ebug collect].. 1af20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1af30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1af40 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1af50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1af60 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1af70 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1af80 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1af90 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1afa0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1afb0 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 1afc0 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a ge, error: " \.. 1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1afe0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1b000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b010 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1b020 20 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72   proc setupMemor
1b030 79 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e  yCounters { varN
1b040 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ame } {..      i
1b050 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1b060 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1b070 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
1b080 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 1b090 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 ounter.... 1b0a0 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 set counter(1) 1b0b0 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 [object create 1b0c0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 1b0d0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 1b0e0 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d gnostics.Perform 1b0f0 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 anceCounter Proc 1b100 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ess \.. 1b110 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 "Working Set" 1b120 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname 1b130 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 [file tail$::bi
1b140 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20  n_file]]]....
1b150 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72       set counter
1b160 28 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  (2) [object crea
1b170 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..
1b180 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1b190 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66  Diagnostics.Perf
1b1a0 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50  ormanceCounter P
1b1b0 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20  rocess \..
1b1c0 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53        "Working S
1b1d0 65 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72  et Peak" [file r
1b1e0 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61  ootname [file ta
1b1f0 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d  il $::bin_file]] 1b200 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 1b210 20 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a counter(3) [obj 1b220 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 ect create -alia 1b230 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1b240 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 System.Diagnost 1b250 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 ics.PerformanceC 1b260 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c ounter Process \ 1b270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 .. "P 1b280 72 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 rivate Bytes" [f 1b290 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 ile rootname [fi 1b2a0 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 le tail$::bin_f
1b2b0 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  ile]]]..      }.
1b2c0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
1b2d0 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ""..    }.....
1b2e0 20 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d    proc reportMem
1b2f0 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68  oryCounters { ch
1b300 61 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72  annel varName pr
1b310 65 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20  efix } {..
1b320 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1b330 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1b340 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
1b350 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 1b360 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 counter.... 1b370 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1b380 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1b390 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1b3a0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63  -- " $prefix " c 1b3b0 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 ounter \"" \.. 1b3c0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 [objec 1b3d0 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 t invoke$counte
1b3e0 72 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65  r(1) CounterName
1b3f0 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22  ] "\" value is "
1b400 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b410 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $1b420 63 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 counter(1) RawVa 1b430 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 lue] \n].... 1b440 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1b450 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1b460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1b470 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20  --- " $prefix " 1b480 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 counter \"" \.. 1b490 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 [obje 1b4a0 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 ct invoke$count
1b4b0 65 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d  er(2) CounterNam
1b4c0 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20  e] "\" value is
1b4d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1b4e0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1b4f0 24 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56  $counter(2) RawV 1b500 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 alue] \n].... 1b510 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b520 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b530 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1b540 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22  ---- " $prefix " 1b550 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a counter \"" \.. 1b560 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 1b570 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e ect invoke$coun
1b580 74 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61  ter(3) CounterNa
1b590 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73  me] "\" value is
1b5a0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1b5b0 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
1b5c0 20 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77   $counter(3) Raw 1b5d0 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 Value] \n].. 1b5e0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b5f0 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 proc collectG 1b600 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c arbage { channel 1b610 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 {milliseconds 1 1b620 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 000} {quiet true 1b630 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 1b640 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1b650 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 1b660 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 1b670 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1b680 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1b690 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d e GC GetTotalMem 1b6a0 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ory false.. 1b6b0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 1b6c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1b6d0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1b6e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b6f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1b700 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1b710 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b720 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 "---- memory 1b730 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 in use by the C 1b740 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 LR before collec 1b750 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 tion... " \.. 1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65$re
1b770 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d  sult " bytes\n"]
1b780 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1b790 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1b7a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1b7b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1b7d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1b7e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1b7f0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1b800 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1b810 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72  to get CLR memor
1b820 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20  y usage, error:
1b830 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1b840 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 1b850 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1b860 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1b870 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1b880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b8c0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 1b8d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1b8e0 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 TE: Repeatedly a 1b8f0 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 ttempt to collec 1b900 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 t garbage until 1b910 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d the allotted num 1b920 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ber.. # 1b930 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e of millisecon 1b940 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 ds has elapsed. 1b950 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 Always attempt 1b960 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 1b970 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ge.. # 1b980 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e at least once. 1b990 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1b9a0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1b9b0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 1b9c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b9d0 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b set start [clock 1b9e0 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 seconds].. 1b9f0 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 set stop [exp 1ba00 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 r {$start + ($mi 1ba10 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 lliseconds / 100 1ba20 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 0)}].... 1ba30 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 do {.. 1ba40 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1ba50 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 1ba60 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 force a full gar 1ba70 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 bage collection 1ba80 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 now. Report any 1ba90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1baa0 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 error that i 1bab0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 s encountered if 1bac0 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 we fail... 1bad0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1bae0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1baf0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1bb00 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 ct invoke GC Get 1bb10 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 TotalMemory true 1bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 .. } er 1bb30 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 1bb40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1bb50 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1bb70 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1bb80 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1bba0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1bbb0 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 ed full garbage 1bbc0 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f collection, erro 1bbd0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 1bbe0 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
1bbf0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
1bc00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1bc10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1bc20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63     set now [cloc
1bc30 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20  k seconds]..
1bc40 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74      } while {$st 1bc50 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 art <=$now && $1bc60 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 now <$stop}..
1bc70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1bc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bcb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bcc0 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
1bcd0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1bce0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
1bcf0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bd00 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1bd10 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
1bd20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
1bd30 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a  alMemory false..
1bd40 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
1bd50 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1bd60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1bd70 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1bd80 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1bd90 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1bda0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1bdb0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d           "---- m
1bdc0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
1bdd0 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f  the CLR after co
1bde0 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d  llection... " \.
1bdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1be00 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73   $result " bytes 1be10 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 1be20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1be30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i 1be40 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1be50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1be60 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1be70 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1be90 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1bea0 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d led to get CLR m 1beb0 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 emory usage, err 1bec0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 1bed0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1bee0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1bef0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1bf00 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
1bf10 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
1bf20 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
1bf30 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  unts { channel {
1bf40 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
1bf50 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  ..      set resu
1bf60 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  lt [list]....
1bf70 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
1bf80 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
1bf90 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1bfa0 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69   [haveSQLiteDefi
1bfb0 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54  neConstant COUNT
1bfc0 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b  _HANDLE]} then {
1bfd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1bfe0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
1bff0 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68   each critical h
1c000 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74  andle count to t
1c010 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73  he resulting lis
1c020 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
1c030 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e         foreach n
1c040 61 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ame [list \..
1c050 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1c060 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65  ionCount stateme
1c070 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f  ntCount backupCo
1c080 75 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b  unt blobCount] {
1c090 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1c0a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1c0b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1c0c0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1c0d0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1c0e0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1c0f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75  Data.SQLite.Debu
1c100 67 44 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20  gData $name.. 1c110 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 } value] 1c120 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1c130 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1c140 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1c160 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1c170 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1c190 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 -- critical hand 1c1a0 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 le count \""$na
1c1b0 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c  me "\" is " $val 1c1c0 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ue \n].. 1c1d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1c1e0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res 1c1f0 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 ult$value..
1c200 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1c210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1c220 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1c230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1c240 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1c250 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c270 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1c280 69 6c 65 64 20 74 6f 20 67 65 74 20 63 72 69 74  iled to get crit
1c290 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
1c2a0 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  t \"" \..
1c2b0 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65             $name 1c2c0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 1c2d0 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a n\t$value \n]..
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1c2f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1c300 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
1c310 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20  lseif {!$quiet} 1c320 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c330 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1c340 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 E: The actual ha 1c350 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 ndle counts are 1c360 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 not available; t 1c370 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a herefore, just.. 1c380 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1c390 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 1c3a0 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 list... # 1c3b0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1c3c0 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
1c3d0 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
1c3e0 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c  ounts unavailabl
1c3f0 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e\n"..      }...
1c400 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 1c410 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 1c420 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f . proc shutdo 1c430 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e wnSQLite { chann 1c440 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d el {force false} 1c450 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 1c460 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1c470 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 # NOTE: Make 1c480 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 sure that SQLite 1c490 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 core library is 1c4a0 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 completely shut 1c4b0 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 down. This.. 1c4c0 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 # is us 1c4d0 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 ed by tests that 1c4e0 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 change configur 1c4f0 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e ation options an 1c500 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 d/or those.. 1c510 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e # that n 1c520 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 eed to make sure 1c530 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 logging is init 1c540 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 ialized (i.e. ju 1c550 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 st in case.. 1c560 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 # the SQ 1c570 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 1c580 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 y was initialize 1c590 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 d in the process 1c5a0 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 prior to.. 1c5b0 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL 1c5c0 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 iteLog class bei 1c5d0 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 ng able to setup 1c5e0 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c its logging cal 1c5f0 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 lback)... # 1c600 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c Normally, 1c610 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c this should onl 1c620 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 y be performed i 1c630 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 f SQLite is load 1c640 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 ed and.. # 1c650 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 ready for 1c660 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 1c670 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. 1c680 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 . if {$forc
1c690 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65  e || [isSQLiteRe
1c6a0 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ady]} then {..
1c6b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c6c0 20 23 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20   # BUGFIX: Make
1c6d0 73 75 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c  sure that any "l
1c6e0 65 61 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69  eaked" transacti
1c6f0 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65  ons and/or conne
1c700 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ctions..
1c710 23 20 20 20 20 20 20 20 20 20 61 72 65 20 63 6c  #         are cl
1c720 65 61 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20  eaned up before
1c730 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69  calling the nati
1c740 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63  ve shutdown func
1c750 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23  tion...        #
1c760 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1c770 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69  h transaction [i
1c780 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  nfo transactions
1c790 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ] {..          i
1c7a0 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
1c7b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c7c0 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51    System#Data#SQ
1c7d0 4c 69 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73  Lite#SQLiteTrans
1c7e0 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61  action#* $transa 1c7f0 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a ction]} then {.. 1c800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1c810 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1c820 20 20 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e sql tran 1c830 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b saction rollback 1c840 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20$transaction..
1c850 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
1c860 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1c870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c880 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1c890 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1c8a0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1c8b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1c8c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1c8d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c         "---- rol
1c8e0 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20  led back leaked
1c8f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20  transaction \""
1c900 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1c910 20 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74         $transact 1c920 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ion \"\n].. 1c930 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1c940 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1c950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c960 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1c970 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1c980 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1c990 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1c9a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c9b0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1c9c0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1c9d0 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 rollback leaked 1c9e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 transaction \"" 1c9f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ca00 20 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74$transact
1ca10 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  ion "\", error:
1ca20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 1ca30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 1ca40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1ca50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1ca60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1ca70 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 foreach db 1ca80 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e [info connection 1ca90 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s] {.. 1caa0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 if {[string matc 1cab0 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 1cac0 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 System#Data#S 1cad0 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e QLite#SQLiteConn 1cae0 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 ection#*$db]} t
1caf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1cb00 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73     if {[catch {s
1cb10 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72  ql close $db} er 1cb20 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 1cb30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1cb40 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1cb50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1cb60 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1cb70 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1cb80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cb90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c "---- cl 1cba0 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 osed leaked data 1cbb0 62 61 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c base \""$db \"\
1cbc0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1cbd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1cbe0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1cbf0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1cc00 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 1cc20 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1cc30 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cc50 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1cc60 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c  ailed to close l
1cc70 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c  eaked database \
1cc80 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1cc90 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c            $db "\ 1cca0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 1ccb0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
1ccc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1ccd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1cce0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1ccf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1cd00 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46  ..        # BUGF
1cd10 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69  IX: Before calli
1cd20 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
1cd30 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c  utdown function,
1cd40 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d   make sure both.
1cd50 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1cd60 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41     of the PRAGMA
1cd70 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f   related directo
1cd80 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65  ry names are fre
1cd90 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
1cda0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1cdb0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
1cdc0 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  s $channel true. 1cdd0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 1cde0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1cdf0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1ce00 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1ce10 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1ce20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 1ce30 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 1ce40 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 iveMethods sqlit 1ce50 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 e3_shutdown.. 1ce60 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 1ce70 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1ce80 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1ce90 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1cea0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1ceb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1cec0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1ced0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 1cee0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 1cef0 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 n()... ok: "$re
1cf00 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1cf10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1cf20 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1cf30 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1cf40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1cf50 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1cf60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1cf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1cf80 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
1cf90 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e  ite3_shutdown().
1cfa0 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  .. error: " \n\t
1cfb0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1cfc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1cfd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1cfe0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1cff0 63 20 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 c getSettingRead 1d000 43 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 Count { name {vi 1d010 61 46 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b aFile false} } { 1d020 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1d030 65 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c eConstraint buil 1d040 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 dConfiguration.D 1d050 65 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 ebug] && [catch 1d060 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 1d070 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1d080 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 1d090 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1d0a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1d0b0 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 5b 65 ite.DebugData [e 1d0c0 78 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 xpr {$viaFile ?
1d0d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1d0e0 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43  settingFileReadC
1d0f0 6f 75 6e 74 73 22 20 3a 20 22 73 65 74 74 69 6e  ounts" : "settin
1d100 67 52 65 61 64 43 6f 75 6e 74 73 22 7d 5d 0d 0a  gReadCounts"}]..
1d110 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52        } settingR
1d120 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  eadCounts] == 0}
1d130 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d140 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
1d150 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20  gth $name] > 0} 1d160 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d170 20 20 69 66 20 7b 5b 24 73 65 74 74 69 6e 67 52 if {[$settingR
1d180 65 61 64 43 6f 75 6e 74 73 20 54 72 79 47 65 74  eadCounts TryGet
1d190 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75  Value $name valu 1d1a0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 1d1b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1d1c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1d1d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1d1f0 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24  -- setting \"" $1d200 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 72 65 61 name "\" was rea 1d210 64 20 22 20 24 76 61 6c 75 65 20 22 20 74 69 6d d "$value " tim
1d220 65 73 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  es" \..
1d230 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 76         [expr {$v 1d240 69 61 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 iaFile ? " from 1d250 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f the configuratio 1d260 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c n file" : ""}] \ 1d270 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... 1d280 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d return$value.
1d290 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1d2a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1d2b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61            set na
1d2c0 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e  meCount [$settin 1d2d0 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e gReadCounts Coun 1d2e0 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 t].. se 1d2f0 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a t valueCount 0.. 1d300 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1d310 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 ct foreach -alia 1d320 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 s pair$settingR
1d330 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20  eadCounts {..
1d340 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61           incr va
1d350 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20  lueCount [$pair 1d360 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 Value].... 1d370 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1d380 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1d390 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1d3a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1d3b0 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70   setting \"" [$p 1d3c0 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 air Key] "\" was 1d3d0 20 72 65 61 64 20 22 20 5b 24 70 61 69 72 20 56 read " [$pair V
1d3e0 61 6c 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20  alue] \..
1d3f0 20 20 20 20 20 20 20 20 20 22 20 74 69 6d 65 73           " times
1d400 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c  " [expr {$viaFil 1d410 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63 e ? " from the c 1d420 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c onfiguration fil 1d430 65 22 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 e" : \.. 1d440 20 20 20 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d ""}] \n] 1d450 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1d460 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 1d470 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75 n [list$nameCou
1d480 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d  nt $valueCount]. 1d490 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1d4a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 1d4b0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1d4c0 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e$name] > 0} then
1d4d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
1d4e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1d4f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1d500 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 1d510 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 -- setting \""$
1d520 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 6e 6f 74  name "\" was not
1d530 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76   read" [expr {$v 1d540 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 iaFile ? \.. 1d550 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 " from t 1d560 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 1d570 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e file" : ""}] \n 1d580 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 1d590 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 1d5a0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1d5b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1d5d0 2d 20 6e 6f 20 73 65 74 74 69 6e 67 73 20 77 65  - no settings we
1d5e0 72 65 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b  re read" [expr {
1d5f0 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20  $viaFile ? \.. 1d600 20 20 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d " from 1d610 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 the configurati 1d620 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 on file" : ""}] 1d630 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n].. }.... 1d640 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0d return -1. 1d650 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1d660 72 6f 63 20 67 65 74 4f 74 68 65 72 43 6f 75 6e roc getOtherCoun 1d670 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 t { name } {.. 1d680 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e if {[haveCon 1d690 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e straint buildCon 1d6a0 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 figuration.Debug 1d6b0 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 ] && [catch {.. 1d6c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1d6d0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1d6e0 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d Public -alias \. 1d6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 1d700 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1d710 44 65 62 75 67 44 61 74 61 20 6f 74 68 65 72 43 DebugData otherC 1d720 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f ounts.. } o 1d730 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 therCounts] == 0 1d740 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d750 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 1d760 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d ngth$name] > 0}
1d770 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d780 20 20 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f     if {[$otherCo 1d790 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 unts TryGetValue 1d7a0 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74$name value]} t
1d7b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d7c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1d7d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1d7e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d7f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 "---- ot 1d800 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 her counter \"" 1d810 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61$name "\" has va
1d820 6c 75 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d  lue " $value \n] 1d830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1d840 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 return$value..
1d850 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1d860 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1d870 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
1d880 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75  Count [$otherCou 1d890 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 nts Count].. 1d8a0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 set valueC 1d8b0 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 ount 0.... 1d8c0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea 1d8d0 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 ch -alias pair$
1d8e0 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20  otherCounts {..
1d8f0 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20             incr
1d900 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69  valueCount [$pai 1d910 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 r Value].... 1d920 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1d930 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1d940 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1d960 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72  -- other counter
1d970 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d   \"" [$pair Key] 1d980 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 "\" has value " 1d990 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d9a0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1d9b0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
1d9c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1d9d0 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61  return [list $na 1d9e0 6d 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f meCount$valueCo
1d9f0 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  unt]..        }.
1da00 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1da10 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
1da20 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d  ngth $name] > 0} 1da30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1da40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1da50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1da60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1da70 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f    "---- other co
1da80 75 6e 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20  unter \"" $name 1da90 22 5c 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 "\" has no value 1daa0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n"].. } el 1dab0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 1dac0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1dad0 6e 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20  nel "---- there
1dae0 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75  are no other cou
1daf0 6e 74 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20  nters\n"..
1db00 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
1db10 6e 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n -1..    }.....
1db20 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53      proc reportS
1db30 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b  QLiteResources {
1db40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  ..            ch
1db50 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c  annel {quiet fal
1db60 73 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d  se} {reset true}
1db70 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20   {collect true}
1db80 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
1db90 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70      # NOTE: If p
1dba0 6f 73 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20  ossible, always
1dbb0 72 65 73 65 74 20 74 68 65 20 63 61 63 68 65 64  reset the cached
1dbc0 20 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74   assembly direct
1dbd0 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ory..      #
1dbe0 20 20 20 61 6e 64 20 74 68 65 20 63 61 63 68 65     and the cache
1dbf0 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74  d XML configurat
1dc00 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  ion file name...
1dc10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1dc20 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1dc30 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1dc40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
1dc50 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1dc60 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1dc70 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1dc80 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1dc90 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
1dca0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
1dcb0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d  NativeMethods \.
1dcc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52  .              R
1dcd0 65 73 65 74 43 61 63 68 65 64 41 73 73 65 6d 62  esetCachedAssemb
1dce0 6c 79 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  lyDirectory..
1dcf0 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d       } error] ==
1dd00 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1dd10 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1dd20 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1dd30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1dd40 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65  annel "---- rese
1dd50 74 20 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c  t cached assembl
1dd60 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a  y directory\n"..
1dd70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1dd80 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1dd90 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1dda0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1ddb0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1ddc0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1ddd0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1dde0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1ddf0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1de00 20 72 65 73 65 74 20 63 61 63 68 65 64 20 61 73   reset cached as
1de10 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79  sembly directory
1de20 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  , " \..
1de30 20 20 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22         "error: "
1de40 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 1de50 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1de60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1de70 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1de80 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1de90 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1dea0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1dec0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1ded0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 1dee0 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 1def0 20 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64 ResetCached 1df00 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d XmlConfigFileNam 1df10 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 e.. } err 1df20 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { 1df30 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1df40 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1df50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1df60 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 1df70 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 20 58 - reset cached X 1df80 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ML configuration 1df90 20 66 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 file name\n".. 1dfa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1dfb0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1dfc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1dfd0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1dfe0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1dff0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1e000 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1e010 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1e020 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1e030 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c reset cached XML 1e040 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 configuration " 1e050 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e060 20 20 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 "file name, 1e070 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
1e080 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1e090 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1e0a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1e0b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1e0c0 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65  TE: If available
1e0d0 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64  , report on (and
1e0e0 20 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29   possibly reset)
1e0f0 20 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20   the runtime..
1e100 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66      #       conf
1e110 69 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73  iguration statis
1e120 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  tics...      #..
1e130 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1e140 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1e150 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
1e160 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61      [haveConstra
1e170 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75  int buildConfigu
1e180 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74  ration.Debug]} t
1e190 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
1e1a0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1e1b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1e1c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1e1d0 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d  Public -alias \.
1e1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
1e1f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1e200 65 2e 44 65 62 75 67 44 61 74 61 20 73 65 74 74  e.DebugData sett
1e210 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20  ingReadCounts..
1e220 20 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67         } setting
1e230 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30  ReadCounts] == 0
1e240 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e250 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e      set nameCoun
1e260 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43  t [$settingReadC 1e270 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 ounts Count].. 1e280 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 1e290 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 eCount 0.... 1e2a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 1e2b0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 1e2c0 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75$settingReadCou
1e2d0 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  nts {..
1e2e0 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75     incr valueCou
1e2f0 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d  nt [$pair Value] 1e300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1e310 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1e320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1e330 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1e340 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1e350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e360 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 "---- setting 1e370 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d \"" [$pair Key]
1e380 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20   "\" was read "
1e390 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e3a0 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75       [$pair Valu 1e3b0 65 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a e] " times\n"].. 1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1e3d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1e3e0 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
1e3f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1e400 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1e410 63 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64  ch {$settingRead 1e420 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 Counts Clear} er 1e430 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 1e440 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e450 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1e460 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1e470 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1e480 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e490 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e4a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 "---- re 1e4b0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 1e4c0 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 istics for the p 1e4d0 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 revious " \.. 1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e4f0 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61$nameCount " na
1e500 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65  mes and " $value 1e510 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 Count " values r 1e520 65 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ead\n"].. 1e530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1e540 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1e560 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1e570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1e580 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1e590 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1e5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e5b0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1e5c0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 1e5d0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 1e5e0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a istics for " \.. 1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e600 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 "the previou 1e610 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 s "$nameCount "
1e620 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61   names and " $va 1e630 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 lueCount \.. 1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e650 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20 65 " values read, e 1e660 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1e670 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1e680 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1e690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1e6a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1e6b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1e6c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1e6d0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1e6e0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1e6f0 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  ic -alias \..
1e700 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1e710 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65  m.Data.SQLite.De
1e720 62 75 67 44 61 74 61 20 73 65 74 74 69 6e 67 46  bugData settingF
1e730 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20  ileReadCounts..
1e740 20 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67         } setting
1e750 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20  FileReadCounts]
1e760 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1e770 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
1e780 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46  Count [$settingF 1e790 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f ileReadCounts Co 1e7a0 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 unt].. 1e7b0 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 set valueCount 0 1e7c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 1e7d0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 1e7e0 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e ias pair$settin
1e7f0 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20  gFileReadCounts
1e800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1e810 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b  ncr valueCount [
1e820 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a  $pair Value].... 1e830 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1e840 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1e850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1e860 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1e870 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1e890 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 ---- setting \"" 1e8a0 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 [$pair Key] "\"
1e8b0 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20   was read " \..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e8d0 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22   [$pair Value] " 1e8e0 20 74 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 times from the 1e8f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 configuration fi 1e900 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 le\n"].. 1e910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1e920 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1e930 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e if {$reset} then
1e940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e950 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74  if {[catch {$set 1e960 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e tingFileReadCoun 1e970 74 73 20 43 6c 65 61 72 7d 20 65 72 72 6f 72 5d ts Clear} error] 1e980 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 1e9a0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e9c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1e9d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e9f0 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 "---- reset 1ea00 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 setting statisti 1ea10 63 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 cs for the previ 1ea20 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ous " \.. 1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61$na
1ea40 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20  meCount " names
1ea50 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e  and " $valueCoun 1ea60 74 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 t " values read 1ea70 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1ea80 20 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 74 "from t 1ea90 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 1eaa0 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 file\n"].. 1eab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1eac0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1ead0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1eae0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1eaf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1eb00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1eb10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1eb20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1eb30 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1eb40 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1eb50 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 reset setting st 1eb60 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c atistics for " \ 1eb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1eb80 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 "the previ 1eb90 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 ous "$nameCount
1eba0 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $1ebb0 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 valueCount \.. 1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ebd0 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 " values read 1ebe0 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 from the configu 1ebf0 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 ration file, err 1ec00 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 or: " \n\t \.. 1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ec20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20$error \n]..
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1ec40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1ec50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ec60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1ec70 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1ec80 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1ec90 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1eca0 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c  nPublic -alias \
1ecb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ecc0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1ecd0 74 65 2e 44 65 62 75 67 44 61 74 61 20 6f 74 68  te.DebugData oth
1ece0 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20  erCounts..
1ecf0 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d    } otherCounts]
1ed00 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1ed10 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d           set nam
1ed20 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f  eCount [$otherCo 1ed30 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 unts Count].. 1ed40 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 1ed50 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 Count 0.... 1ed60 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 1ed70 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 ach -alias pair 1ed80 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a$otherCounts {..
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72              incr
1eda0 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61   valueCount [$pa 1edb0 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 ir Value].... 1edc0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1edd0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1edf0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1ee00 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1ee10 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1ee20 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 - other counter 1ee30 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 \"" [$pair Key]
1ee40 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20  "\" has value "
1ee50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1ee60 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75       [$pair Valu 1ee70 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 e] \n].. 1ee80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1ee90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1eea0 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e if {$reset} then
1eeb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1eec0 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 6f 74 68  if {[catch {$oth 1eed0 65 72 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 erCounts Clear} 1eee0 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1eef0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ef00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1ef10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ef20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1ef30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1ef40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1ef50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ef60 72 65 73 65 74 20 6f 74 68 65 72 20 63 6f 75 6e reset other coun 1ef70 74 65 72 73 20 66 6f 72 20 74 68 65 20 70 72 65 ters for the pre 1ef80 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 vious " \.. 1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1efa0 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65  nameCount " name
1efb0 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f  s and " $valueCo 1efc0 75 6e 74 20 22 20 76 61 6c 75 65 73 5c 6e 22 5d unt " values\n"] 1efd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1efe0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1eff0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1f000 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1f010 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1f020 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1f030 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1f040 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1f060 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1f070 6c 65 64 20 74 6f 20 72 65 73 65 74 20 6f 74 68 led to reset oth 1f080 65 72 20 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 er counters for 1f090 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1f0a0 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72 "the pr 1f0b0 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f evious "$nameCo
1f0c0 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20  unt " names and
1f0d0 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d  " $valueCount \. 1f0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f0f0 20 20 20 20 20 22 20 76 61 6c 75 65 73 2c 20 65 " values, e 1f100 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1f110 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1f120 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f130 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1f140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1f150 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1f160 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1f170 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20  eObjectCommand]
1f180 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1f190 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e  [haveSQLiteDefin
1f1a0 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f  eConstant INTERO
1f1b0 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d  P_VIRTUAL_TABLE]
1f1c0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1f1d0 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69   [haveSQLiteDefi
1f1e0 6e 65 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b  neConstant TRACK
1f1f0 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20  _MEMORY_BYTES]}
1f200 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f210 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1f220 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 1f230 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1f240 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f  --- current memo
1f250 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
1f260 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a  iteMemory... "..
1f270 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1f280 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1f290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1f2a0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1f2b0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1f2d0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1f2e0 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79  .SQLiteMemory by
1f2f0 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20  tesAllocated..
1f300 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
1f310 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1f320 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1f330 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1f340 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1f350 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1f360 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 1f370 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 1f380 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1f390 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1f3a0 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 1f3b0 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 1f3c0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1f3d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f3e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1f3f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1f400 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
1f410 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1f420 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1f430 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1f440 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1f450 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1f460 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   maximum memory
1f470 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
1f480 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20  Memory... "..
1f490 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1f4a0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1f4b0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1f4c0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1f4d0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1f4e0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1f4f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1f500 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d  LiteMemory maxim
1f510 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  umBytesAllocated
1f520 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f  ..        } memo
1f530 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
1f540 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1f550 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1f560 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1f570 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1f580 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1f590 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1f5a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1f5b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1f5c0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 1f5d0 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 1f5e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1f5f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1f600 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1f610 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1f620 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
1f630 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1f640 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
1f650 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 1f660 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1f670 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1f680 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e  nel "---- curren
1f690 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  t memory in use
1f6a0 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a  by SQLite... "..
1f6b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1f6c0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1f6d0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1f6e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f6f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1f700 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1f710 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1f720 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1f730 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1f740 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
1f750 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
1f760 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
1f770 73 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  sed..        } m
1f780 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
1f790 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1f7a0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1f7b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f7c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1f7d0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 1f7e0 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 1f7f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f800 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1f810 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1f820 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 1f830 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 ybe the SQLite c 1f840 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ore library is u 1f850 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 1f860 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1f870 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 1f880 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 1f890 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1f8a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1f8b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1f8c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1f8d0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
1f8e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f8f0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1f900 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1f910 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61   memory unavaila
1f920 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ble....        i
1f930 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1f940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 1f950 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1f960 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 1f970 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1f980 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1f990 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 set result$me
1f9a0 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65  mory; # NOTE: Re
1f9b0 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75  turn memory in-u
1f9c0 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72  se to our caller
1f9d0 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  .....      if {!
1f9e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1f9f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1fa00 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78  hannel "---- max
1fa10 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  imum memory in u
1fa20 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
1fa30 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
1fa40 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1fa50 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1fa60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1fa70 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1fa80 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1fa90 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
1faa0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1fac0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1fad0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1fae0 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
1faf0 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f      sqlite3_memo
1fb00 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a  ry_highwater 0..
1fb10 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79          } memory
1fb20 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1fb30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1fb40 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1fb50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1fb60 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1fb70 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 1fb80 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 1fb90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1fba0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1fbb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1fbc0 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 # NOTE: Maybe t 1fbd0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 1fbe0 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 ibrary is unavai 1fbf0 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 lable?.. 1fc00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 1fc10 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 1fc20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i 1fc30 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1fc40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1fc50 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1fc60 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
1fc70 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
1fc80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1fc90 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1fca0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
1fcb0 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a  ry unavailable..
1fcc0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$1fcd0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1fce0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1fcf0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1fd00 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 1fd10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1fd20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 1fd30 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
1fd40 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
1fd50 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e  ctGarbage $chann 1fd60 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... 1fd70 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1fd80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1fd90 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1fda0 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 1fdb0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 1fdc0 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 the CLR... ".. 1fdd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 1fde0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1fdf0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 1fe00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 1fe10 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1fe20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1fe30 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 1fe40 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 emory false.. 1fe50 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 1fe60 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1fe70 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1fe80 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 ng is integer -s 1fe90 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 trict$memory]}
1fea0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1feb0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1fec0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fed0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1fee0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1fef0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65  s $memory " byte 1ff00 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 s\n"].. 1ff10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1ff20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1ff30 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 1ff40 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 invalid.... 1ff50 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1ff60 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1ff70 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1ff80 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1ff90 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
1ffa0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1ffb0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1ffc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1ffd0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
1ffe0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
1fff0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
20000 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 20010 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 20020 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
20030 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 20040 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 20050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 20060 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 20070 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 20080 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 navailable.... 20090 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
200a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
200b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 200c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 200d0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
200e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
200f0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
20100 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 20110 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 20120 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 20130 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ories { channel 20140 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 {reset false} } 20150 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 20160 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 20170 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 if the sqlite3_w 20180 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 20190 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 ry function is a 201a0 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... 201b0 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 #.. tputs 201c0 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20$channel \..
201d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
201e0 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f  king for functio
201f0 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  n sqlite3_win32_
20200 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e  set_directory...
20210 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   "....      #..
20220 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
20230 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71  s call to the sq
20240 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
20250 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
20260 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20  on uses the..
20270 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c     #       inval
20280 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74  id value 0 for t
20290 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
202a0 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73  t.  This code is
202b0 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20   designed..
202c0 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63   #       to chec
202d0 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65  k if calling the
202e0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
202f0 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
20300 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23  n (i.e...      #
20310 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61         the actua
20320 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  l result of the
20330 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
20340 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67  t matter as long
20350 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20   as no..      #
20360 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
20370 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20  is changed)...
20380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
20390 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 20  {[isWindows] &&
203a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
203b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
203c0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
203d0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
203e0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
203f0 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
20400 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
20410 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
20420 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
20430 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ry 0 null..
20440 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
20450 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
20460 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c       # NOTE: Cal
20470 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  ling the sqlite3
20480 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
20490 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f  tory function do
204a0 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
204b0 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e  #       cause an
204c0 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72   exception; ther
204d0 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62  efore, it must b
204e0 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65  e available (i.e
204f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
20500 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69     even though i
20510 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20  t should return
20520 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e  a failure return
20530 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20   code in this..
20540 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
20550 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  ase)...        #
20560 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
20570 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f  straint sqlite3_
20580 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
20590 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ory....        t
205a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 205b0 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 s\n.... # 205c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 205d0 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 : Does our calle 205e0 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 r want to reset 205f0 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f the directories? 20600 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 20610 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d if {$reset}
20620 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
20630 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
20640 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
20650 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
20660 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
20670 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
20680 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
20690 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20      reset their
206a0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values,
206b0 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be
206c0 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a  null for both...
206d0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
206e0 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69    Since the sqli
206f0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
20700 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
20710 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a   is available,..
20720 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
20730 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20    use it...
20740 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20750 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
20760 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d   1} {$index < 3} 20770 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d {incr index} {. 20780 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 20790 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 207a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 207b0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 207c0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 207e0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 207f0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 20800 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 20810 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 20820 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 20830 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c ctory$index nul
20840 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
20850 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
20860 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20870 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 20880 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 20890 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 208a0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 208b0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 208c0 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 t_directory("$i
208d0 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20  ndex \..
208e0 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c            ", nul
208f0 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  l)... ok: " $res 20900 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 20910 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 20920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 20930 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
20940 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
20960 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
20970 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
20980 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a  ory(" $index \.. 20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 209a0 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 ", null)... er 209b0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
209c0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
209d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
209e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
209f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
20a00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 20a10 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 hannel no\n.... 20a20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 20a30 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f # NOTE: Does o 20a40 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 ur caller want t 20a50 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 o reset the dire 20a60 63 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 ctories? This c 20a70 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 an only.. 20a80 20 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 # be perf 20a90 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 ormed if SQLite 20aa0 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 is loaded and re 20ab0 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t 20ac0 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 he test.. 20ad0 20 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d # suite.. 20ae0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20af0 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 if {$reset &
20b00 26 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79  & [isSQLiteReady
20b10 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20b20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20b30 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61    # NOTE: Now ma
20b40 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
20b50 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61  base and tempora
20b60 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61  ry directories a
20b70 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  re..          #
20b80 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69        reset thei
20b90 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  r default values
20ba0 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
20bb0 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e  e null for both.
20bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
20bd0 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71      Since the sq
20be0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
20bf0 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
20c00 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20  on does not..
20c10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
20c20 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69  ppear to be avai
20c30 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61  lable, use the a
20c40 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41  ssociated PRAGMA
20c50 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20   commands..
20c60 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73       #       ins
20c70 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  tead...
20c80 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   #..          fo
20c90 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20  reach directory
20ca0 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65  [list data_store
20cb0 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f  _directory temp_
20cc0 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d  store_directory]
20cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
20ce0 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41  set sql [appendA
20cf0 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64  rgs "PRAGMA " $d 20d00 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c irectory " = \"\ 20d10 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ";"].... 20d20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 20d30 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d executeSql$sql}
20d40 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} 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 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20d90 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 "---- execu 20da0 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 te PRAGMA "$dir
20db0 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20  ectory "... ok:
20dc0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
20dd0 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74           $result 20de0 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 20df0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 20e00 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 20e10 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
20e20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
20e30 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
20e40 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41  - execute PRAGMA
20e50 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 20e60 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 .. error: " \.. 20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20e80 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
20e90 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
20ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
20eb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
20ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
20ed0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61      # NOTE: Fina
20ee0 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75  lly, show the cu
20ef0 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
20f00 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and
20f10 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20  temporary..
20f20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
20f30 72 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20  ries.  This can
20f40 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65  only be performe
20f50 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c  d if SQLite is l
20f60 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20  oaded..      #
20f70 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66       and ready f
20f80 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
20f90 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
20fa0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
20fb0 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74  sSQLiteReady]} t
20fc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66  hen {..        f
20fd0 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79  oreach directory
20fe0 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72   [list data_stor
20ff0 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70  e_directory temp
21000 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
21010 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ] {..          t
21020 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 21030 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 ppendArgs "---- 21040 63 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 checking "$dire
21050 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d  ctory "... "]...
21060 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
21070 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  ql [appendArgs "
21080 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 21090 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 ory \;].... 210a0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 210b0 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c {executeSql$sql
210c0 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d   scalar} result]
210d0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
210e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
210f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 21100 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 dArgs "ok: \""$
21110 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20  result \"\n]..
21120 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
21130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
21140 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 21150 70 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a pendArgs "error: 21160 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
21170 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
21180 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
21190 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
211a0 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c      proc loadSQL
211b0 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20  iteTestSettings
211c0 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69  { channel {suffi
211d0 78 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c  x ""} {quiet fal
211e0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
211f0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
21200 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65  Skip loading the
21210 20 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 65   settings if the
21220 69 72 20 75 73 61 67 65 20 68 61 73 20 62 65 65  ir usage has bee
21230 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20  n disabled...
21240 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
21250 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
21260 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 74  no(sqliteTestSet
21270 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  tings)]} then {.
21280 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
21290 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
212a0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72   custom per-user
212b0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74   and/or per-host
212c0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
212d0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
212e0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
212f0 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
21300 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20  latform(user)]}
21310 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
21320 20 20 73 65 74 20 75 73 65 72 53 65 74 74 69 6e    set userSettin
21330 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  gsFileName [file
21340 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e   join [getCommon
21350 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20  Directory] \..
21360 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
21370 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73  endArgs settings
21380 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63   $suffix .$::tc
21390 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29  l_platform(user)
213a0 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20   .eagle]]....
213b0 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
213c0 20 65 78 69 73 74 73 20 24 75 73 65 72 53 65 74   exists $userSet 213d0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 tingsFileName]} 213e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 213f0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
21400 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21410 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 21420 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 21430 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 21440 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 "---- loa 21450 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 ding per-user te 21460 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 21470 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 21480 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53$userS
21490 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
214a0 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20  \"...\n]..
214b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
214c0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
214d0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
214e0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
214f0 73 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 53  st source $userS 21500 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 21510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 21520 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 21530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 21540 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
21550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
21560 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 21570 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 21580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21590 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 215a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f NG: failed to lo 215b0 61 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 ad per-user sett 215c0 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 215d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 215e0 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
215f0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
21600 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 21610 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 21620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21630 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21640 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 21650 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
21660 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
21680 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21690 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 216b0 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 -- skipped loadi 216c0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 ng per-user test 216d0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 216e0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 216f0 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
21700 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
21710 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
21720 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
21730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21740 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
21750 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23  ...        #####
21760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
217a0 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ##....        if
217b0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
217c0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f  :tcl_platform(ho
217d0 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  st)]} then {..
217e0 20 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74          set host
217f0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
21800 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
21810 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
21820 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21830 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
21840 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 21850 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
21860 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d  (host) .eagle]].
21870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
21880 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68  {[file exists $h 21890 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 218a0 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 218b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
218c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
218d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
218e0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 218f0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21900 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 21910 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 -- loading per-h 21920 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 ost test setting 21930 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21950 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
21960 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
21970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21980 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
21990 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
219a0 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
219b0 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
219c0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c  $hostSettingsFil 219d0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 219e0 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 } error]} th 219f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 21a00 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
21a10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21a20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $21a30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21a40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 21a50 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 21a60 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 21a70 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 to load per-hos 21a80 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 t settings file 21a90 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 21aa0 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74$host
21ab0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
21ac0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
21ad0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 21af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 21b00 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 21b10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21b20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
21b30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21b40 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 21b50 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 21b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21b70 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 21b80 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 loading per-hos 21b90 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 t test settings 21ba0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68$h
21bc0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
21bd0 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73  ame "\", it does
21be0 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
21c00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21c10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
21c20 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
21c30 6f 63 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 74  oc copySampleDat
21c40 61 62 61 73 65 46 69 6c 65 73 20 7b 7d 20 7b 0d  abaseFiles {} {.
21c50 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31  .      uplevel 1
21c60 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
21c70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
21c80 6f 70 79 20 28 6f 72 20 72 65 2d 63 6f 70 79 29  opy (or re-copy)
21c90 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 64   the reference d
21ca0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
21cb0 64 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  d for this..
21cc0 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 69 74      #       unit
21cd0 20 74 65 73 74 20 74 6f 20 74 68 65 20 62 75 69   test to the bui
21ce0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20  ld directory in
21cf0 63 61 73 65 20 69 74 20 68 61 73 20 62 65 65 6e  case it has been
21d00 20 63 68 61 6e 67 65 64 0d 0a 20 20 20 20 20 20   changed..
21d10 20 20 23 20 20 20 20 20 20 20 62 79 20 61 20 70    #       by a p
21d20 72 65 76 69 6f 75 73 20 74 65 73 74 20 72 75 6e  revious test run
21d30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
21d40 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20        file copy
21d50 2d 66 6f 72 63 65 20 24 6e 6f 72 74 68 77 69 6e  -force $northwin 21d60 64 45 66 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 dEfDbFile \.. 21d70 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 21d80 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 n [getBuildDirec 21d90 74 6f 72 79 20 66 61 6c 73 65 5d 20 5b 66 69 6c tory false] [fil 21da0 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e e tail$northwin
21db0 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 20  dEfDbFile]]..
21dc0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
21dd0 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
21de0 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b  teTestPrologue {
21df0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
21e00 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
21e10 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73   running our cus
21e20 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20  tom prologue if
21e30 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73  the main one has
21e40 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
21e50 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
21e60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
21e70 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
21e80 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61  ::no(prologue.ea
21e90 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  gle)]} then {..
21ea0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21eb0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
21ec0 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74  he "before-const
21ed0 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70  raints" custom p
21ee0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
21ef0 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20  er-host..
21f00 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65   #       test se
21f10 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
21f20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
21f30 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
21f40 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
21f50 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63  ttings $::test_c 21f60 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d hannel .before]. 21f70 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 21f80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 21f90 65 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 eck if the [obje 21fa0 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 ct] command is a 21fb0 76 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 vailable; if not 21fc0 2c 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 , add some.. 21fd0 20 20 20 20 23 20 20 20 20 20 20 20 73 68 69 6d # shim 21fe0 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 s to make the te 21ff0 73 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f st suite run smo 22000 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 other... 22010 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 22020 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 ForSQLiteObjectC 22030 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 ommand$::test_c
22040 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
22050 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
22060 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74  OTE: Determine t
22070 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the
22080 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20  native platform
22090 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65  and architecture
220a0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
220b0 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
220c0 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74  rm [getBuildPlat
220d0 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20  form true]..
220e0 20 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63      set architec
220f0 74 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75  ture [architectu
22100 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70  reForPlatform $p 22110 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... 22120 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 22130 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 NOTE: Show the 22140 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 22150 68 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 hitecture used t 22160 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 o help locate th 22170 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 22180 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 native build 22190 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 files... 221a0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 221b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
221c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
221d0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
221e0 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c  - platform for l
221f0 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62  ocating native b
22200 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22  uild files is \"
22210 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
22220 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d   $platform \"\n] 22230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 22240 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
22250 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
22260 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
22270 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20  -- architecture
22280 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74  for locating nat
22290 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20  ive build files
222a0 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  is \"" \..
222b0 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 222c0 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ure \"\n].... 222d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 222e0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 # NOTE: Build a 222f0 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 list of configur 22300 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 ation files that 22310 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 we handle... 22320 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22330 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 set configFileNa 22340 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 mes [list \.. 22350 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 22360 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e Data.SQLite.dll. 22370 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 config].... 22380 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 22390 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 NOTE: Build a li 223a0 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 st of auxiliary 223b0 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e Managed Debuggin 223c0 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 g Assistants (MD 223d0 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 A).. # 223e0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio 223f0 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 n files that we 22400 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 handle... 22410 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 22420 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 22430 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 22440 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 EagleShe 22450 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e ll32.exe.mda.con 22460 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 fig Installer.ex 22470 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a e.mda.config \.. 22480 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test 22490 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 224a0 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 testlinq.exe.mda 224b0 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 .config \.. 224c0 20 20 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 testef6.e 224d0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a xe.mda.config].. 224e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 224f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 22500 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 ld the list of e 22510 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 xternal files th 22520 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 at we handle. S 22530 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 ome of.. 22540 23 20 20 20 20 20 20 20 74 68 65 73 65 20 66 69 # these fi 22550 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 les may be nativ 22560 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 e and/or managed 22570 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 assemblies that 22580 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 are.. # 22590 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 74 required t 225a0 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 o perform variou 225b0 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 s tests... 225c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 225d0 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d externalFileNam 225e0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 225f0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 22600 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f in EntityFramewo 22610 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d rk lib [string m 22620 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 ap [list Fx ""] 22630 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 22640 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list 22650 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 netFx451 netFx4 22660 35 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 5 netFx452 netFx 22670 34 35 20 6e 65 74 46 78 34 36 20 5c 0d 0a 20 20 45 netFx46 \.. 22680 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 netFx4 22690 35 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 5 netFx461 netFx 226a0 34 35 20 6e 65 74 46 78 34 36 32 20 6e 65 74 46 45 netFx462 netF 226b0 78 34 35 20 6e 65 74 46 78 34 37 20 6e 65 74 46 x45 netFx47 netF 226c0 78 34 35 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 x45] \.. 226d0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 [getBuildNet 226e0 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d Fx]]] EntityFram 226f0 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 ework.dll]].... 22700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22710 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 22720 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 the list of nati 22730 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ve assembly file 22740 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 22750 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 22760 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 22770 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d FileNames [list] 22780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c .... eval 22790 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 lappend nativeF 227a0 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 ileNames [getNat 227b0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 227c0 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 mesOnly].. 227d0 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e eval lappend n 227e0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b ativeFileNames [ 227f0 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 22800 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d lyFileNamesOnly] 22810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 22820 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 22830 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 uild the list of 22840 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 22850 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 mbly files that 22860 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 we handle... 22870 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 22880 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 et mixedFileName 22890 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 s [list].... 228a0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 228b0 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 228c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 228d0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78 lappend mix 228e0 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 edFileNames Syst 228f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 22900 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... 22910 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 22920 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 22930 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 d the list of ma 22940 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 22950 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 22960 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d dle... #. 22970 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e . set man 22980 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c agedFileNames [l 22990 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 229a0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 229b0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 QLite.Linq.dll S 229c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 229d0 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 e.EF6.dll].... 229e0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52 if {![hasR 229f0 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat 22a00 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ive]} then {.. 22a10 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 22a20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 22a30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 22a40 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. 22a50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 22a60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 22a70 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75 Show the variou 22a80 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20 s lists of file 22a90 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68 names that are h 22aa0 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a andled by this.. 22ab0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 22ac0 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 procedure... 22ad0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 22ae0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
22af0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22b00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22b10 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22  "---- list of \"
22b20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20  configuration\"
22b30 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22  file names is: "
22b40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22b50 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  $configFileNames 22b60 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 22b70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
22b80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
22b90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
22ba0 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c   "---- list of \
22bb0 22 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69  "MDA configurati
22bc0 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20  on\" file names
22bd0 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  is: " \..
22be0 20 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46       $mdaConfigF 22bf0 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a ileNames \n].... 22c00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
22c10 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
22c20 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
22c30 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
22c40 69 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61  ist of \"externa
22c50 6c 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69  l\" file names i
22c60 73 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69  s: " $externalFi 22c70 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 leNames \n].... 22c80 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
22c90 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
22ca0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
22cb0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69          "---- li
22cc0 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22  st of \"native\"
22cd0 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20   file names is:
22ce0 22 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  " $nativeFileNam 22cf0 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 es \n].... 22d00 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
22d10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
22d20 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
22d30 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66     "---- list of
22d40 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20   \"mixed\" file
22d50 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78  names is: " $mix 22d60 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d edFileNames \n]. 22d70 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 22d80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
22d90 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
22da0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
22db0 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61  - list of \"mana
22dc0 67 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73  ged\" file names
22dd0 20 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46   is: " $managedF 22de0 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a ileNames \n].... 22df0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 22e00 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 # NOTE: Remov 22e10 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 e any test const 22e20 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 raints that refe 22e30 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 r to the native 22e40 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 and/or.. 22e50 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 22e60 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 assembly files t 22e70 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e hat we handle un 22e80 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 less forbidden f 22e90 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 rom.. # 22ea0 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a doing so... 22eb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 22ec0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 22ed0 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 22ee0 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 RemoveConstraint 22ef0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 22f00 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 22f10 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 ileName$configF
22f20 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
22f30 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
22f40 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
22f50 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 22f60 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 22f70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 22f80 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 22f90 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e$mdaConfigFileN
22fa0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
22fb0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
22fc0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
22fd0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 22fe0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 22ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 23000 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
23010 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
23020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
23030 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
23040 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
23050 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  _ [file tail $fi 23060 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 23070 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 23080 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 23090 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
230a0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
230b0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
230c0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
230d0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 230e0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 230f0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 23100 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 ach fileName$mi
23110 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
23120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f              remo
23130 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
23140 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24  pendArgs file_ $23150 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 23160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 23170 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 23180 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
23190 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
231a0 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73        removeCons
231b0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
231c0 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61  gs file_ $fileNa 231d0 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d me].. } 231e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 231f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 23200 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 # NOTE: Skip a 23210 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ll System.Data.S 23220 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 QLite related fi 23230 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c le handling (del 23240 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 eting,.. 23250 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c # copying, 23260 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 and loading) if 23270 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 23280 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 23290 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 232a0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 ts ::no(sqliteFi 232b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 232c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 232d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 232e0 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c ip trying to del 232f0 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 ete any files if 23300 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 23310 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 23320 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 23330 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 23340 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d teSqliteFiles)]} 23350 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23360 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 23370 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 23380 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 teSqliteConfigFi 23390 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 233b0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 each fileName$c
233c0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
233d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
233e0 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72    tryDeleteBinar
233f0 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d  yFile $fileName. 23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 23410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 23420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 23430 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 23440 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 23450 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 teExternalFiles) 23460 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 23470 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 23480 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f fileName$mdaCo
23490 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
234a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
234b0 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46   tryDeleteBuildF
234c0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  ile $fileName fa 234d0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. 234e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 234f0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 23500 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c leName$external
23510 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
23530 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
23540 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 23550 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 23560 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 23570 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 23580 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 23590 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 (deleteSqliteNat 235a0 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 235b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 235c0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 235d0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 235e0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 qliteImplicitNat 235f0 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 23600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23610 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 23620 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
23630 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
23640 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
23650 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 23660 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 23670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23680 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 23690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 236a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 236b0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e no(deleteSqliteN 236c0 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 onImplicitFiles) 236d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 236e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 236f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 23700 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c o(deleteSqlitePl 23710 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 atformFiles)] && 23720 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23730 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 23740 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
23750 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23770 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
23780 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 23790 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 237a0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 237b0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
237c0 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 237d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 237e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 237f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 23800 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 23810 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 23820 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 o(deleteSqliteAr 23830 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 23840 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 23850 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 23860 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
23870 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
23880 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
23890 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
238a0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 238b0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 238d0 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 238e0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 238f0 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 23910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23920 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 23930 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 23940 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 23950 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 23960 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 23970 53 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 SqliteMixedFiles 23980 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 23990 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 239a0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 239b0 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 239c0 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 239d0 6e 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65 n is set, delete 239e0 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 implicit.. 239f0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 23a00 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 23a10 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 mbly files as we 23a20 6c 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d ll. This runtim 23a30 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 e option.. 23a40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 23a50 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 check is handled 23a60 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 when building t 23a70 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 he list of mixed 23a80 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 -mode.. 23a90 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 23aa0 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 embly file names 23ab0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 23ac0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 23ad0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 23ae0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 23af0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 qliteImplicitMix 23b00 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 edFiles)]} then 23b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23b20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 23b30 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 ame$mixedFileNa
23b40 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
23b50 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
23b60 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 23b70 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 23b80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 23b90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23ba0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 23bb0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 23bc0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e (deleteSqliteNon 23bd0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d ImplicitFiles)]} 23be0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23bf0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 23c00 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 23c10 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 deleteSqlitePlat 23c20 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c formFiles)] && \ 23c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23c40 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 23c50 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
23c60 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
23c80 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
23c90 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 23ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23cb0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 23cc0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
23cd0 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23cf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 23d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 23d10 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 23d20 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 23d30 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 23d40 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 23d50 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 23d60 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 23d70 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
23d80 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
23d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
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 6d 69 78 65 64 46 69 6c  leName $mixedFil 23dc0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 23de0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 23df0 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 23e00 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 23e10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 23e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 23e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 23e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 23e60 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 23e70 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 23e80 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d teManagedFiles)] 23e90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 23ea0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 23eb0 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 fileName$manage
23ec0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23ee0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
23ef0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 23f00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 23f10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23f20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 23f30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 23f40 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f 23f50 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 or the "autoSele 23f60 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ct" runtime opti 23f70 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c on. If present, 23f80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 23f90 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 attempt to a 23fa0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c utomatically sel 23fb0 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 ect the first av 23fc0 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 23fd0 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 # build 23fe0 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 (or "release") 23ff0 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 of SQLite and Sy 24000 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 24010 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 24020 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 for use with 24030 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 24040 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 24050 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 if {[ha 24060 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 sRuntimeOption a 24070 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e utoSelect]} then 24080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24090 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 if {![checkForSQ 240a0 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
240b0 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d  st_channel true]
240c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
240d0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
240e0 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24  SQLiteReleases $240f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 ::test_channel t 24100 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rue.. 24110 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 24120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 24130 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 24140 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 24150 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c verify the buil 24160 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 d directory if i 24170 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 nstructed;.. 24180 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 24190 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 herwise, make su 241a0 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 re it actually e 241b0 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 xists or halt th 241c0 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 e entire.. 241d0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 241e0 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 ing process if i 241f0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 24200 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 24210 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 24220 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 24230 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 (verifyBuildDire 24240 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d ctory)]} then {. 24250 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 24260 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 24270 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e TE: At this poin 24280 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 t, the build dir 24290 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 ectory MUST exis 242a0 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 t as a.. 242b0 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 # vali 242c0 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 d directory for 242d0 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 242e0 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e ess to continue. 242f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 24300 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 24310 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB 24320 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 uildDirectory fa 24330 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 24340 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 24350 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
24360 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
24370 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
24380 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 24390 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 243b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 243c0 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 243d0 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 243e0 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 243f0 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 24400 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 24410 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 24420 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 24430 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 24440 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 24450 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
24460 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
24470 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
24480 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
24490 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
244a0 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  fy build directo
244b0 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72  ry \"" $director 244c0 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 244d0 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 "\", all 244e0 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e testing halted\n 244f0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 24500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 24510 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 # NOTE: Rai 24520 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 sing a script er 24530 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f ror from this po 24540 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d int should halt. 24550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 24560 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 the testi 24570 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 ng process... 24580 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 24590 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 245a0 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d r [appendArgs \. 245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 245c0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 "could not ve 245d0 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 245e0 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
245f0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
24600 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
24610 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
24620 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
24630 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
24640 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
24650 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
24660 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
24670 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69  copy any files i
24680 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
24690 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
246a0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
246b0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
246c0 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  ySqliteFiles)]}
246d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
246e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
246f0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
24700 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
24710 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
24720 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
24730 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 24740 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24750 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 "---- copyi 24760 6e 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 ng \"configurati 24770 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 on\" files...\n" 24780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 24790 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 247a0 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 me$configFileNa
247b0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
247c0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
247d0 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  ildFile $fileNam 247e0 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 e false.. 247f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 24800 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 24810 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 24820 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 24830 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c pySqliteExternal 24840 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 24850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 24860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24870 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 # NOTE: Copy the 24880 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 Managed Debuggi 24890 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d ng Assistants (M 248a0 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f DA) configuratio 248b0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 248c0 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f # file fo 248d0 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c r the Eagle shel 248e0 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f l to the build o 248f0 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c utput directory, 24900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24910 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 # while us 24920 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 ing each of the 24930 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 names of the var 24940 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 ious legacy test 24950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24960 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 # executab 24970 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 les. This will 24980 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 help to make sur 24990 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a e that all the.. 249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 249b0 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 legacy tes 249c0 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 ts run with exac 249d0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 tly the same set 249e0 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 of Managed.. 249f0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 24a00 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 Debugging Ass 24a10 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 istants configur 24a20 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ed... 24a30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 24a40 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
24a50 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24a70 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d  ---- copying \"M
24a80 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  DA configuration
24a90 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a  \" files...\n"..
24aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24ab0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
24ac0 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 24ad0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 24ae0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 24af0 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 inaryFile EagleS 24b00 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con 24b10 66 69 67 20 74 72 75 65 20 22 22 20 24 66 69 6c fig true ""$fil
24b20 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
24b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
24b40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24b50 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
24b60 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e   Copy the extern
24b70 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20  al binaries, if
24b80 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65  any, to the dire
24b90 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20  ctory that..
24ba0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
24bb0 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45    contains the E
24bc0 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69  agle shell.  Thi
24bd0 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75  s is typically u
24be0 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20  sed to make..
24bf0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
24c00 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69     sure assembli
24c10 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  es referenced by
24c20 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20   the ones being
24c30 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20  tested are..
24c40 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
24c50 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69    available duri
24c60 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70  ng the testing p
24c70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...
24c80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24c90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 24ca0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d :test_channel "- 24cb0 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 --- copying \"ex 24cc0 74 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e ternal\" files.. 24cd0 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 24ce0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 24cf0 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c leName$external
24d00 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
24d20 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65  CopyExternalFile
24d30 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 24d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 24d50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 24d60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 24d70 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 24d80 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 (copySqliteNativ 24d90 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 24da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24db0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 24dc0 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 24dd0 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 test platform is 24de0 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 likely the defa 24df0 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 ult for this.. 24e00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 24e10 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 machine, als 24e20 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 o try to copy th 24e30 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 e native files t 24e40 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 o the.. 24e50 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e # bin 24e60 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 ary location... 24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 24e90 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 24ea0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 ::no(copySqliteI 24eb0 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c mplicitNativeFil 24ec0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 [is 24ee0 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 DefaultBuildPlat 24ef0 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 form]} then {.. 24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 24f10 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
24f20 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
24f30 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
24f40 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63  - copying implic
24f50 69 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69  it \"native\" fi
24f60 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20  les...\n"....
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
24f80 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 24f90 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 24fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24fb0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 24fc0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 bly$fileName fa
24fd0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
24fe0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24ff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
25000 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
25010 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
25020 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70  copySqliteNonImp
25030 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
25040 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
25050 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
25060 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
25070 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  ySqlitePlatformF
25080 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
250a0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
250b0 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 250c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 250d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 250e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
250f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25110 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
25120 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69  ng \"native\" fi
25130 6c 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d  les for platform
25140 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p 25160 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d latform \"...\n] 25170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 25180 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 25190 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
251a0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
251c0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $251d0 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 fileName false$
251e0 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
251f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
25220 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
25230 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
25240 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72  qliteArchitectur
25250 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20  eFiles)] && \..
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25270 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
25280 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  h $architecture] 25290 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 252b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
252c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
252d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
252e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
252f0 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76   copying \"nativ
25300 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72  e\" files for ar
25310 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c  chitecture \"" \
25320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25330 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 25340 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a cture \"...\n].. 25350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25360 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 25370 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
25380 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
253a0 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 253b0 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 leName false$ar
253c0 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
253e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
253f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
25400 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
25410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
25420 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
25430 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
25440 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d  iteMixedFiles)]}
25450 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25460 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25470 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25480 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20  If the "native"
25490 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  runtime option i
254a0 73 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c  s set, copy impl
254b0 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  icit..
254c0 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65      #       mixe
254d0 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
254e0 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20  files as well.
254f0 54 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  The runtime opti
25500 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
25510 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20    #       check
25520 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20  is handled when
25530 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73  building the lis
25540 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d  t of mixed-mode.
25550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
25560 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
25570 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20  file names...
25580 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
25590 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
255a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
255b0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70  no(copySqliteImp
255c0 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29  licitMixedFiles)
255d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
255e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
255f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 25600 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25610 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 25620 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c pying implicit \ 25630 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e "mixed\" files.. 25640 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 25650 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 25660 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 fileName$mixedF
25670 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25690 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66  yCopyAssembly $f 256a0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 ileName false.. 256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 256c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 256d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 256e0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 256f0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 25700 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 25710 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25730 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 25740 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 25750 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d ePlatformFiles)] 25760 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 25770 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 25780 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
25790 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
257a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
257b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 257c0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 257d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 257f0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d ---- copying \"m 25800 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 ixed\" files for 25810 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d platform \"" \. 25820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 25830 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
25840 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20   \"...\n]....
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25860 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
25870 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 25880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25890 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 tryCopyAs 258a0 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
258b0 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d   false $platform 258c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 258d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 258e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 258f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 25900 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 25910 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 no(copySqliteArc 25920 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d hitectureFiles)] 25930 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 25940 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 25950 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 ng length$archi
25960 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68  tecture] > 0} th
25970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
25980 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 25990 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 259a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 259c0 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 "---- copying 259d0 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 \"mixed\" files 259e0 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 for architectur 259f0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
25a10 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e  architecture \".
25a20 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n]....
25a30 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
25a40 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 25a50 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25a70 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 25a80 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c ly$fileName fal
25a90 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65  se $architecture 25aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25ab0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 25ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 25ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 25ae0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 25af0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 25b00 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 25b10 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 opySqliteManaged 25b20 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 25b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 25b40 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
25b50 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69  nnel "---- copyi
25b60 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66  ng \"managed\" f
25b70 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
25b80 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
25b90 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61  ach fileName $ma 25ba0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b nagedFileNames { 25bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25bc0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 25bd0 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 y$fileName true
25be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25bf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
25c00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
25c10 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
25c20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25c30 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c  Skip trying to l
25c40 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66  oad any files if
25c50 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
25c60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
25c70 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
25c80 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
25c90 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
25ca0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25cb0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25cc0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
25cd0 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65  liteImplicitFile
25ce0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
25cf0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
25d00 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
25d10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
25d20 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
25d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
25d40 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
25d50 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
25d60 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68  eLinqFiles)]} th
25d70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
25d80 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
25d90 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
25da0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d  SQLite.Linq.dll.
25db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25dd0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
25de0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45  ::no(loadSqliteE
25df0 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  f6Files)]} then
25e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
25e10 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
25e20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
25e30 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20  ite.EF6.dll..
25e40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
25e50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
25e60 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
25e70 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d  (loadSqliteNonIm
25e80 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74  plicitFiles)]} t
25e90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25ea0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
25eb0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
25ec0 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69  SqlitePlatformFi
25ed0 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
25ef0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 25f00 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 25f10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 25f20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 25f30 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 25f40 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 .SQLite.dll$pla
25f50 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
25f60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25f70 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
25f80 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
25f90 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65  oadSqliteArchite
25fa0 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20  ctureFiles)] &&
25fb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
25fc0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
25fd0 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 25fe0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26000 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 26010 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 26020 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 te.dll$architec
26030 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..
26040 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
26050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26060 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
26070 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
26080 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61  fileNameOnly $na 26090 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 260a0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 260b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 260c0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
260d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
260e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
260f0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
26100 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $26110 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 26120 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ... \"" \.. 26130 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 26140 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e version [getBin 26150 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
26160 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e  eNameOnly]] \"\n
26170 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
26180 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
26190 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
261a0 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64  eNameOnly $mixed 261b0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 261c0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 261d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 261e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
261f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
26200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26210 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
26220 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65  ion of \"" $file 26230 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 NameOnly "\"... 26240 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 26250 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 [file ver 26260 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 sion [getBinaryF 26270 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
26280 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  eOnly]] \"\n]..
26290 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
262a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
262b0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
262c0 65 4f 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 69  eOnly $managedFi 262d0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 262e0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 262f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 26300 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
26310 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26330 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
26340 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61  n of \"" $fileNa 26350 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 meOnly "\"... \" 26360 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 26370 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 26380 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 26390 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f eName$fileNameO
263a0 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20  nly]] \"\n]..
263b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
263c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
263d0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
263e0 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 263f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26400 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 26410 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 NameOnly$native
26420 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
26430 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
26440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26450 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 26460 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 26470 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 26480 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 26490 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 264a0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20$platform \..
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
264c0 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  / $fileNameOnly 264d0 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 264e0 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 26500 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 26510 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24$fileNameOnly $26520 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d platform]] \"\n] 26530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 26540 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 26550 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 26560 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 h fileNameOnly$
26570 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
26580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
26590 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
265a0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 265b0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 265c0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 265d0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 265e0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 265f0 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 f \""$platform
26600 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
26610 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65       / $fileName 26620 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 Only "\"... \"" 26630 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d [file version \. 26640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26650 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 26660 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f eName$fileNameO
26670 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20  nly $platform]] 26680 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 26690 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 266a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 266b0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 266c0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
266d0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
266e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
266f0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
26700 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c  eOnly $nativeFil 26710 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 26720 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 26730 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 26740 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
26750 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
26760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26770 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
26780 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61  ersion of \"" $a 26790 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 rchitecture \.. 267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 267b0 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 /$fileNameOnly
267c0 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c   "\"... \"" [fil
267d0 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
267f0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
26800 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  e $fileNameOnly 26810 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20$architecture]]
26820 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
26830 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
26850 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
26860 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61  nly $mixedFileNa 26870 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 26880 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 26890 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 268a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
268b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
268d0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
268e0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68  ion of \"" $arch 268f0 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 itecture \.. 26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 / 26910 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c$fileNameOnly "\
26920 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76  "... \"" [file v
26930 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
26940 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
26950 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $26960 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 fileNameOnly$ar
26970 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c  chitecture]] \"\
26980 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
26990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
269a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
269b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
269c0 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  # NOTE: Grab the
269d0 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64   list of managed
269e0 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20   assemblies for
269f0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
26a00 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ess..        #
26a10 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20       and report
26a20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  on the System.Da
26a30 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65  ta.SQLite relate
26a40 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20  d ones...
26a50 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
26a60 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
26a70 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
26a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
26a90 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a   assemblies [obj
26aa0 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f  ect invoke AppDo
26ab0 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61  main.CurrentDoma
26ac0 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73  in GetAssemblies
26ad0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  ]....          o
26ae0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73  bject foreach as
26af0 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69  sembly $assembli 26b00 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 26b10 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 26b20 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 tch \{System.Dat 26b30 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d a.SQLite*$assem
26b40 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bly]} then {..
26b50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
26b60 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 26b70 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 26b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26b90 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 26ba0 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 oaded assembly: 26bb0 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d "$assembly \n].
26bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26bd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
26be0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
26bf0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
26c00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 26c10 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 26c20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 26c30 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e - define constan 26c40 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e ts for \"System. 26c50 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e Data.SQLite\"... 26c60 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 26c70 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 26c80 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 26c90 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 26ca0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 26cc0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 26cd0 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f SQLite3 DefineCo 26ce0 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 nstants.. 26cf0 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 } defineConst 26d00 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ants] == 0} then 26d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26d20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
26d30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
26d40 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c  s [formatList [l
26d50 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  sort \..
26d60 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43          $defineC 26d70 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e onstants] <none> 26d80 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 26d90 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 26da0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
26db0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b  test_channel unk
26dc0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20  nown\n..
26dd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
26de0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
26df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
26e00 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 26e10 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 26e20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 "---- source 26e30 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 version of \"Sy 26e40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 26e50 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 .dll\"... ".... 26e60 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 26e70 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 26e80 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 26e90 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 26ea0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 26eb0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 26ec0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 a.SQLite.SQLiteC 26ed0 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 onnection Provid 26ee0 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 erVersion.. 26ef0 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 } version] 26f00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 26f10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 26f20 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
26f30 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
26f40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
26f50 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e     set version n
26f60 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
26f70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
26f80 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 26f90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 26fa0 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a s$version \n]..
26fb0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
26fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
26fd0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 26fe0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 26ff0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 27000 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 27010 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 27020 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
27030 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
27050 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f  -- source checko
27060 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  ut of \"System.D
27070 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
27080 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
27090 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
270a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
270b0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
270c0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
270e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
270f0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te.SQLiteConnect
27100 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72  ion ProviderSour
27110 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..
27120 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30  } sourceId] == 0
27130 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
27140 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
27150 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source 27160 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { 27170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27180 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul 27190 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 271a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 271b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
271c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
271d0 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20  $sourceId \n].. 271e0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 271f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 27200 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27210 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
27220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
27230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27240 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
27250 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61  OTE: Check the a
27260 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20  vailable builds
27270 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29  (and "releases")
27280 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a   of SQLite and..
27290 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
272a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
272b0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  te...        #..
272c0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
272d0 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a  SQLiteBuilds $:: 272e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 test_channel.. 272f0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 27300 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a LiteReleases$::
27310 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
27320 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
27330 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20     # NOTE: Now,
27340 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20  we need to know
27350 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
27360 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76  re library is av
27370 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..
27380 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62   #       (i.e. b
27390 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67  ecause the manag
273a0 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44  ed-only System.D
273b0 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d  ata.SQLite assem
273c0 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  bly can..
273d0 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69   #       load wi
273e0 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65  thout it; howeve
273f0 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20  r, it cannot do
27400 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20  anything useful
27410 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..
27420 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49   #       it).  I
27430 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74  f we are using t
27440 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
27450 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c  sembly and we al
27460 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23  ready..        #
27470 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20         found it
27480 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68  (above), this sh
27490 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63  ould always succ
274a0 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  eed...        #.
274b0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
274c0 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24  rSQLiteLibrary $274d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 274e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 274f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 27500 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 ck if the SQLite 27510 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 27520 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d y is available.. 27530 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 27540 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 27550 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 teInterop$::tes
27560 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
27570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27580 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
27590 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
275a0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20  e and temporary
275b0 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20  directories...
275c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
275d0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
275e0 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65  irectories $::te 275f0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 27600 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27610 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 27620 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 to determine if 27630 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 various compile 27640 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 -time options ne 27650 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 eded for.. 27660 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 # test c 27670 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 onstraints were 27680 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 enabled for the 27690 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 276a0 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 . There.. 276b0 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f # are so 276c0 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 me compile-time 276d0 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 options that mus 276e0 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e t also have been 276f0 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 enabled.. 27700 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 # for th 27710 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 27720 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 ly in order to b 27730 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f e effective. Fo 27740 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 r those.. 27750 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 # options 27760 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 , it will be ass 27770 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 umed that it was 27780 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 27790 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 interop.. 277a0 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 277b0 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 ly if it was ena 277c0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 277d0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a aged assembly... 277e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 277f0 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e foreach defin 27800 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 eConstant [list 27810 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 \.. C 27820 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 HECK_STATE COUNT 27830 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e _HANDLE DEBUG IN 27840 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 TEROP_CODEC INTE 27850 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 ROP_DEBUG \.. 27860 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 27870 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT 27880 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 IONS INTEROP_FTS 27890 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 5_EXTENSION \.. 278a0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 278b0 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 OP_INCLUDE_CEROD 278c0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 INTEROP_INCLUDE 278d0 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 _EXTRA INTEROP_I 278e0 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 NCLUDE_SEE \.. 278f0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 27900 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 P_INCLUDE_ZIPVFS 27910 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 INTEROP_JSON1_E 27920 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. 27930 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 27940 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 LEGACY_CLOSE INT 27950 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 EROP_LOG INTEROP 27960 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 _PERCENTILE_EXTE 27970 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 NSION \.. 27980 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 INTEROP_REG 27990 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e EXP_EXTENSION IN 279a0 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e TEROP_SHA1_EXTEN 279b0 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 279c0 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 INTEROP_TEST 279d0 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 _EXTENSION INTER 279e0 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 OP_TOTYPE_EXTENS 279f0 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. 27a00 20 20 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 INTEROP_VIRTU 27a10 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 AL_TABLE \.. 27a20 20 20 20 20 20 20 20 20 4e 45 54 5f 32 30 20 4e NET_20 N 27a30 45 54 5f 33 35 20 4e 45 54 5f 34 30 20 4e 45 54 ET_35 NET_40 NET 27a40 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f _45 NET_451 NET_ 27a50 34 35 32 20 4e 45 54 5f 34 36 20 4e 45 54 5f 34 452 NET_46 NET_4 27a60 36 31 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 61 \.. 27a70 20 20 4e 45 54 5f 34 36 32 20 4e 45 54 5f 34 37 NET_462 NET_47 27a80 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 NET_COMPACT_20 27a90 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 PLATFORM_COMPACT 27aa0 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 FRAMEWORK \.. 27ab0 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 44 PRELOAD 27ac0 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 _NATIVE_LIBRARY 27ad0 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 4c RETARGETABLE SQL 27ae0 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a ITE_STANDARD \.. 27af0 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52 4f THRO 27b00 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 W_ON_DISPOSED TR 27b10 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 ACE TRACE_CONNEC 27b20 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 43 TION TRACE_DETEC 27b30 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 TION \.. 27b40 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 TRACE_HANDLE 27b50 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 TRACE_PRELOAD T 27b60 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 43 RACE_SHARED TRAC 27b70 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 E_STATEMENT \.. 27b80 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 TRACE 27b90 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d _WARNING TRACK_M 27ba0 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 5f EMORY_BYTES USE_ 27bb0 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b ENTITY_FRAMEWORK 27bc0 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 _6 \.. 27bd0 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c USE_INTEROP_DL 27be0 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 L USE_PREPARE_V2 27bf0 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 WINDOWS] {.. 27c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27c10 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 27c20 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 k if the compile 27c30 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 -time option is 27c40 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 listed in the li 27c50 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 st of.. 27c60 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 # "define 27c70 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 constants" kept 27c80 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 track of by the 27c90 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 27ca0 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. 27cb0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 27cc0 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 ForSQLiteDefineC 27cd0 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f onstant$::test_
27ce0 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43  channel $defineC 27cf0 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 onstant.. 27d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 27d10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 27d20 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 79 Check if the Sy 27d30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 27d40 20 70 72 6f 76 69 64 65 72 20 77 61 73 20 63 6f provider was co 27d50 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 mpiled with.. 27d60 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 70 # sup 27d70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 port for any enc 27d80 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65 73 rypted databases 27d90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 27da0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 27db0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 QLiteDefineConst 27dc0 61 6e 74 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 ant INTEROP_CODE 27dd0 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 C] || \.. 27de0 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 [haveSQLite 27df0 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 DefineConstant I 27e00 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 NTEROP_INCLUDE_S 27e10 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 EE]} then {.. 27e20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27e30 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c # NOTE: Yes, 27e40 20 61 64 64 20 67 65 6e 65 72 69 63 20 63 6f 6e add generic con 27e50 73 74 72 61 69 6e 74 20 66 6f 72 20 75 73 65 20 straint for use 27e60 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 27e70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e... #. 27e80 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo 27e90 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e nstraint System. 27ea0 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 Data.SQLite.Encr 27eb0 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 yption.. 27ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 27ed0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 27ee0 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e Check the curren 27ef0 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 t build year. B 27f00 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 asically, this i 27f10 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 ndicates.. 27f20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 # which 27f30 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 version of MSBui 27f40 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c ld and/or Visual 27f50 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 Studio was used 27f60 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 27f70 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 compile the 27f80 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 assembly binari 27f90 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a es under test... 27fa0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 27fb0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
27fc0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
27fd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
27fe0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
27ff0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
28000 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d  ild year... "...
28010 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61  .        set yea
28020 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d  r [getBuildYear]
28030 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
28040 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
28050 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24  rgs buildYear. $28060 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 year].. t 28070 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
28080 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
28090 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d   \" $year \"\n]. 280a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 280b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 280c0 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 eck the current 280d0 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 build .NET Frame 280e0 77 6f 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 work. Basically 280f0 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 , this.. 28100 23 20 20 20 20 20 20 20 69 6e 64 69 63 61 74 65 # indicate 28110 73 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 s which version 28120 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d of the .NET Fram 28130 65 77 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a ework is being.. 28140 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 28150 75 73 65 64 20 62 79 20 74 68 65 20 61 73 73 65 used by the asse 28160 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e mbly binaries un 28170 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 der test... 28180 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 28190 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
281a0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
281b0 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
281c0 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  g for System.Dat
281d0 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 2e  a.SQLite build .
281e0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e  NET Framework...
281f0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   "....        se
28200 74 20 6e 65 74 46 78 20 5b 67 65 74 42 75 69 6c  t netFx [getBuil
28210 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20  dNetFx]..
28220 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
28230 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64  appendArgs build
28240 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46  Framework. $netF 28250 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 x].. tput 28260 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
28270 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
28280 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d   $netFx \"\n]... 28290 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 282a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 282b0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 282c0 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 282d0 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 n. This should 282e0 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 normally.. 282f0 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74 # be eit 28300 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 28310 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 Release"... 28320 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 28330 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
28340 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
28350 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
28360 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  g for System.Dat
28370 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63  a.SQLite build c
28380 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20  onfiguration...
28390 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  "....        set
283a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b   configuration [
283b0 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
283c0 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ation]..
283d0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
283e0 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43  ppendArgs buildC
283f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63  onfiguration. $c 28400 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 onfiguration].. 28410 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
28420 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
28430 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e  pendArgs \" $con 28440 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d figuration \"\n] 28450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 28460 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 28470 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 ry to setup an i 28480 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 nterrupt callbac 28490 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 k using the scri 284a0 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 pt debugger.. 284b0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 284c0 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c t will cancel al 284d0 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e l SQL queries in 284e0 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c progress for al 284f0 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 l database.. 28500 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn 28510 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f ections known to 28520 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 this interprete 28530 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 r... #.. 28540 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 28550 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 o exists ::no(sq 28560 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c liteInterruptCal 28570 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d lback)]} then {. 28580 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 75 70 . setup 28590 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 DbInterruptCallb 285a0 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ack$::test_chan
285b0 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d  nel $::test_log. 285c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 285d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 285e0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f 285f0 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 or the native ru 28600 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 ntime option, wh 28610 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 ich would mean w 28620 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 e are.. # 28630 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 using the 28640 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 28650 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 mbly... # 28660 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 28670 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 28680 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
28690 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20  native....
286a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
286b0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
286c0 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f  e test suite sho
286d0 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75  uld count the nu
286e0 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69  mber of connecti
286f0 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ons..        #
28700 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e       "opened" an
28710 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20  d "closed" from
28720 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65  the pool when de
28730 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74  termining if a t
28740 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  est..        #
28750 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 44 69       passed.  Di
28760 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68  sabling this beh
28770 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d  avior is sometim
28780 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e  es necessary (e.
28790 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  g...        #
287a0 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 20 72      during the r
287b0 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20 70  elease testing p
287c0 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 65 20  rocess) because
287d0 74 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61  there are severa
287e0 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  l..        #
287f0 20 20 20 74 65 73 74 73 20 74 68 61 74 20 72 65     tests that re
28800 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65  ly on the "opene
28810 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75  d from pool" cou
28820 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 65 72  nt being greater
28830 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
28840 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68    than zero.  Th
28850 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 66 61  ese tests may fa
28860 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f  il due to the no
28870 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d  n-deterministic.
28880 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
28890 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65   behavior of the
288a0 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68   CLR GC, even wh
288b0 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62  en there is no b
288c0 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a  ug in the code..
288d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
288e0 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20  being tested...
288f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28900 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
28910 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 28920 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f channel noPoolCo 28930 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 unts.... 28940 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 28950 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 28960 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c test suite shoul 28970 64 20 75 73 65 20 73 68 61 72 65 64 2d 63 61 63 d use shared-cac 28980 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 he mode... 28990 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 289a0 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 ckForRuntimeOpti 289b0 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e on$::test_chann
289c0 65 6c 20 73 68 61 72 65 64 43 61 63 68 65 0d 0a  el sharedCache..
289d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
289e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
289f0 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65  ort the resource
28a00 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20   usage prior to
28a10 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74  running any test
28a20 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
28a30 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c         reportSQL
28a40 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a  iteResources $:: 28a50 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 28a60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 28a70 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 # NOTE: Grab 28a80 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 the list of nati 28a90 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 ve modules for t 28aa0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce 28ab0 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 ss and.. 28ac0 23 20 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f # report o 28ad0 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 n the System.Dat 28ae0 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 28af0 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ones... 28b00 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 28b10 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 28b20 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 28b30 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 28b40 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 modules [object 28b50 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 invoke \.. 28b60 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 28b70 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 iagnostics.Proce 28b80 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f ss.GetCurrentPro 28b90 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d cess Modules]... 28ba0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 28bb0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 28bc0 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 module$modules
28bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
28be0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
28bf0 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c   NOTE: The modul
28c00 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65  e file name here
28c10 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69   must be normali
28c20 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  zed...
28c30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
28c40 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
28c50 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24  ile normalize [$28c60 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d module FileName] 28c70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 ].. s 28c80 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 et fileNameOnly 28c90 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
28ca0 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Name]....
28cb0 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63       if {[lsearc
28cc0 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65  h -exact -nocase
28cd0 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   -- \..
28ce0 20 20 20 20 20 20 20 5b 67 65 74 4e 61 74 69 76         [getNativ
28cf0 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65  eLibraryFileName
28d00 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65  sOnly] $fileName 28d10 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 Only] != -1} the 28d20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 28d30 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
28d40 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
28d50 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
28d60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
28d70 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c  found loaded SQL
28d80 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ite native libra
28d90 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a  ry module: " \..
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28db0 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d    $fileName \n]. 28dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 28dd0 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 lseif {[lsearch 28de0 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d -exact -nocase - 28df0 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 - \.. 28e00 20 20 20 20 20 5b 67 65 74 49 6e 74 65 72 6f 70 [getInterop 28e10 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 AssemblyFileName 28e20 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 sOnly]$fileName
28e30 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65  Only] != -1} the
28e40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
28e50 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 28e60 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 28e70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 28e80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 28e90 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c found loaded SQL 28ea0 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse 28eb0 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c mbly module: " \ 28ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 28ed0 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e$fileName \n
28ee0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
28ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
28f00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
28f10 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
28f20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 28f30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 28f50 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 --- compile-time 28f60 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c options for SQL 28f70 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 28f80 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 28f90 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 28fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a . obj 28fb0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 28fc0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28fe0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 28ff0 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 te.SQLite3 SQLit 29000 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d eCompileOptions. 29010 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d . } com 29020 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 pileOptions] == 29030 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 29040 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
29050 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
29060 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74  pendArgs [format
29070 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20  List [lsort \..
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $29090 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 compileOptions] 290a0 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 <none>] \n].. 290b0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 290c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 290d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
290e0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
290f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
29100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29110 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
29120 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 29130 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 29140 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 29150 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 29160 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 ions for SQLite 29170 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly 29180 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 29190 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 291a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a . obj 291b0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 291c0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 291e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 291f0 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 te.SQLite3 Inter 29200 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 opCompileOptions 29210 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f .. } co 29220 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d mpileOptions] == 29230 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 29240 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
29250 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
29260 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61  ppendArgs [forma
29270 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a  tList [lsort \..
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29290 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d  $compileOptions] 292a0 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 <none>] \n].. 292b0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 292c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 292d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
292e0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
292f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29310 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29320 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74  TE: Show the act
29330 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61  ive test constra
29340 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ints...        #
29350 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
29360 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 29370 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d [appendArgs "--- 29380 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 - constraints: " 29390 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 293a0 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 293b0 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e rt [getConstrain 293c0 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ts]] <none>] \n] 293d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 293e0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 293f0 61 76 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e ave the test con 29400 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 straints for use 29410 20 62 79 20 74 68 72 65 61 64 73 20 63 72 65 61 by threads crea 29420 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 ted in this.. 29430 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 # app 29440 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e lication domain. 29450 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 This is necess 29460 61 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 ary because all 29470 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 the Eagle.. 29480 20 20 20 23 20 20 20 20 20 20 20 22 74 65 73 74 # "test 29490 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d context" inform 294a0 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 ation is per-thr 294b0 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ead... #. 294c0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 294d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 294e0 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 t_constraints]} 294f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29500 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e set ::test_con 29510 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c straints$::eagl
29520 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61 69  e_tests(constrai
29530 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nts)..        }.
29540 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
29550 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f        # NOTE: Lo
29560 61 64 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f  ad the "after-co
29570 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f  nstraints" custo
29580 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
29590 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20  r per-host..
295a0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
295b0 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a   settings now...
295c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
295d0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
295e0 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  st loadSQLiteTes
295f0 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73  tSettings $::tes 29600 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 t_channel .after 29610 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 29620 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 29630 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 65 6e If necessary, en 29640 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 able shared-cach 29650 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 e mode now... 29660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 29670 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f if {[hasRuntimeO 29680 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 ption sharedCach 29690 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 296a0 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 enableShar 296b0 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f edCache$::test_
296c0 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20  channel true..
296d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
296e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
296f0 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20  NOTE: Show when
29700 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c  our tests actual
29710 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d  ly began (now)..
29720 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29730 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29740 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 29750 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 29760 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 "---- Syste 29770 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 m.Data.SQLite te 29780 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c sts began at " \ 29790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 .. [c 297a0 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f lock format [clo 297b0 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d ck seconds]] \n] 297c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 297d0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 ..... proc ru 297e0 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 nSQLiteTestFiles 297f0 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Prologue {} {.. 29800 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b uplevel 1 { 29810 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29820 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 # NOTE: Set 29830 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 up the variables 29840 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 that refer to t 29850 68 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 he various non-d 29860 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ata files.. 29870 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 29880 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 red by the tests 29890 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a in this file... 298a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 298b0 20 20 20 73 65 74 20 65 6e 74 69 74 79 46 72 61 set entityFra 298c0 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c 0d meworkDllFile \. 298d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 298e0 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 45 tBuildFileName E 298f0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 ntityFramework.d 29900 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 ll false].... 29910 20 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c set install 29920 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 erExeFile \.. 29930 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui 29940 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 ldFileName Insta 29950 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 65 5d 0d ller.exe false]. 29960 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 ... set s 29970 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c qliteDesignerDll 29980 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 29990 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 299a0 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 eName SQLite.Des 299b0 69 67 6e 65 72 2e 64 6c 6c 20 66 61 6c 73 65 5d igner.dll false] 299c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 299d0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 299e0 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 DllFile \.. 299f0 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 [getBuild 29a00 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 29a10 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 Data.SQLite.dll 29a20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 false].... 29a30 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 set systemData 29a40 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c SQLiteLinqDllFil 29a50 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 29a60 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 29a70 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 29a80 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 QLite.Linq.dll f 29a90 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alse].... 29aa0 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 set systemDataS 29ab0 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 QLiteEf6DllFile 29ac0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29ad0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 29ae0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 29af0 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 61 6c 73 ite.EF6.dll fals 29b00 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 e].... se 29b10 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b 67 t testExeFile [g 29b20 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 29b30 74 65 73 74 2e 65 78 65 20 66 61 6c 73 65 5d 0d test.exe false]. 29b40 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 29b50 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 65 tLinqExeFile [ge 29b60 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 tBuildFileName t 29b70 65 73 74 6c 69 6e 71 2e 65 78 65 20 66 61 6c 73 estlinq.exe fals 29b80 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 e].. set 29b90 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 5b testEf6ExeFile [ 29ba0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 29bb0 20 74 65 73 74 65 66 36 2e 65 78 65 20 66 61 6c testef6.exe fal 29bc0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 se].... # 29bd0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 29be0 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 : Setup the vari 29bf0 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 ables that refer 29c00 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 to the various 29c10 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 data files.. 29c20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 # requ 29c30 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 ired by the test 29c40 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d s in this file.. 29c50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 29c60 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 set testLinq 29c70 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 OutFile [file na 29c80 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 29c90 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 29ca0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 29cb0 74 44 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c tDataPath] testl 29cc0 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 inq.out]].... 29cd0 20 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 set northwi 29ce0 6e 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 ndEfDbFile [file 29cf0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 29d00 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 29d10 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e [file dirn 29d20 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam 29d30 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 e [getSQLiteTest 29d40 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 DataPath]]] \.. 29d50 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c testl 29d60 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e inq northwindEF. 29d70 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 db]].... 29d80 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 set nonWalDbFile 29d90 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 29da0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 29db0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 29dc0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 29dd0 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d th] nonWal.db]]. 29de0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 77 ... set w 29df0 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e alDbFile [file n 29e00 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 29e10 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 29e20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 29e30 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e stDataPath] wal. 29e40 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 db]].... 29e50 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 29e60 45 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 E: The various i 29e70 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c nstall/uninstall 29e80 20 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 log files used 29e90 74 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 to test the.. 29ea0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 73 # des 29eb0 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 ign-time compone 29ec0 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 nt installer... 29ed0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 29ee0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 29ef0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b lVs2005LogFile [ 29f00 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 29f10 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 29f20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 29f30 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 29f40 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 ] Installer_Test 29f50 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2005.log]]... 29f60 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 29f70 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 29f80 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 29f90 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 29fa0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 29fb0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 29fc0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 29fd0 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c er_Test_Vs2008.l 29fe0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 29ff0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 set testInstallV 2a000 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 s2010LogFile [fi 2a010 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2a020 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2a030 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2a040 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2a050 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 Installer_Test_V 2a060 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2010.log]].... 2a070 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 2a080 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 2a090 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2a0a0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2a0b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 2a0c0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2a0d0 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 aPath] Installer 2a0e0 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 _Test_Vs2012.log 2a0f0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ]].... se 2a100 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 t testInstallVs2 2a110 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 013LogFile [file 2a120 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2a130 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2a140 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 2a150 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e TestDataPath] In 2a160 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2a170 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 013.log]].... 2a180 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 set testIns 2a190 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c tallVs2015LogFil 2a1a0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2a1b0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2a1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 2a1d0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2a1e0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 2a1f0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d est_Vs2015.log]] 2a200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 2a210 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 2a220 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 7LogFile [file n 2a230 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2a240 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2a250 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2a260 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 stDataPath] Inst 2a270 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 2a280 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 7.log]].... 2a290 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 set testUnins 2a2a0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c tallVs2005LogFil 2a2b0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2a2c0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 2a2e0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2a2f0 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 ath] Uninstaller 2a300 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 _Test_Vs2005.log 2a310 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ]].... se 2a320 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 t testUninstallV 2a330 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 s2008LogFile [fi 2a340 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2a350 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2a360 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2a370 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2a380 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 Uninstaller_Test 2a390 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2008.log]]... 2a3a0 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 2a3b0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 tUninstallVs2010 2a3c0 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 2a3d0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2a3e0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2a3f0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 2a400 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 tDataPath] Unins 2a410 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 2a420 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 10.log]].... 2a430 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e set testUnin 2a440 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 stallVs2012LogFi 2a450 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 2a460 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 2a470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 2a480 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 2a490 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 Path] Uninstalle 2a4a0 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f r_Test_Vs2012.lo 2a4b0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 2a4c0 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c et testUninstall 2a4d0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 Vs2013LogFile [f 2a4e0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 2a4f0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 2a500 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 2a510 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 2a520 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 Uninstaller_Tes 2a530 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a t_Vs2013.log]].. 2a540 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 2a550 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2a560 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 5LogFile [file n 2a570 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2a580 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2a590 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2a5a0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 2a5b0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2a5c0 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 015.log]].... 2a5d0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 set testUni 2a5e0 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 nstallVs2017LogF 2a5f0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2a600 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2a610 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 2a620 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2a630 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 2a640 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e 6c er_Test_Vs2017.l 2a650 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2a660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2a670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2a680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2a690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2a6a0 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 2a6b0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2a6c0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2a6d0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2a6e0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2a6f0 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 ail$entityFrame
2a700 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20  workDllFile]]]}
2a710 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2a720 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2a730 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e test_channel$en
2a740 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c  tityFrameworkDll
2a750 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2a760 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2a770 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2a780 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2a790 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2a7a0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 73   [file tail $ins 2a7b0 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d tallerExeFile]]] 2a7c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a7d0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2a7e0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2a7f0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 installerExeFile 2a800 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a Installer.exe.. 2a810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2a820 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 2a830 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 2a840 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 2a850 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 2a860 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65 73 tail$sqliteDes
2a870 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  ignerDllFile]]]}
2a880 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2a890 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
2a8a0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73  $test_channel$s
2a8b0 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c  qliteDesignerDll
2a8c0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2a8d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2a8e0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2a8f0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2a900 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2a910 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73   [file tail $sys 2a920 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c temDataSQLiteDll 2a930 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2a940 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 2a950 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2a960 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74  annel $systemDat 2a970 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a aSQLiteDllFile.. 2a980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2a990 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 2a9a0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 2a9b0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 2a9c0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 2a9d0 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 tail$systemDat
2a9e0 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
2a9f0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
2aa00 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
2aa10 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 2aa20 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 nel$systemDataS
2aa30 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65  QLiteLinqDllFile
2aa40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2aa50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2aa60 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2aa70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2aa80 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2aa90 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44  le tail $systemD 2aaa0 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 ataSQLiteEf6DllF 2aab0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 2aac0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2aad0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2aae0 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61  nnel $systemData 2aaf0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 SQLiteEf6DllFile 2ab00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2ab10 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2ab20 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2ab30 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2ab40 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 2ab50 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78 65 le tail$testExe
2ab60 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2ab70 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2ab80 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2ab90 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69 annel$testExeFi
2aba0 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20  le test.exe..
2abb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2abc0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2abd0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2abe0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2abf0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2ac00 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46  il $testLinqExeF 2ac10 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 2ac20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2ac30 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2ac40 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78  nnel $testLinqEx 2ac50 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 eFile testlinq.e 2ac60 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d xe.. }... 2ac70 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 2ac80 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 2ac90 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 2aca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 2acb0 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 file tail$testE
2acc0 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68  f6ExeFile]]]} th
2acd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2ace0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2acf0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
2ad00 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 65  Ef6ExeFile teste
2ad10 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20  f6.exe..
2ad20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
2ad30 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
2ad40 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
2ad50 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
2ad60 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 2ad70 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d estLinqOutFile]] 2ad80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2ad90 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2ada0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2adb0 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65  $testLinqOutFile 2adc0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2add0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2ade0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2adf0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2ae00 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 2ae10 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 le tail$northwi
2ae20 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74  ndEfDbFile]]]} t
2ae30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2ae40 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2ae50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 est_channel$nor
2ae60 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a  thwindEfDbFile..
2ae70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2ae80 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
2ae90 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
2aea0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
2aeb0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
2aec0 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46   tail $nonWalDbF 2aed0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 2aee0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2aef0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2af00 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69  nnel $nonWalDbFi 2af10 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d le.. }... 2af20 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 2af30 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 2af40 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 2af50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 2af60 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44 62 file tail$walDb
2af70 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2af80 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
2af90 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2afa0 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 annel$walDbFile
2afb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2afc0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2afd0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2afe0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2aff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2b000 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73  le tail $testIns 2b010 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c tallVs2005LogFil 2b020 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2b030 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2b040 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
2b050 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  el $testInstallV 2b060 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 s2005LogFile.. 2b070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2b080 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2b090 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2b0a0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2b0b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2b0c0 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c ail$testInstall
2b0d0 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2008LogFile]]]
2b0e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2b0f0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2b100 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2b110 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
2b120 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  8LogFile..
2b130 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
2b140 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2b150 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2b160 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2b170 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2b180 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2b190 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 10LogFile]]]} th 2b1a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2b1b0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2b1c0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 2b1d0 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 InstallVs2010Log 2b1e0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2b1f0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2b200 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2b210 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2b220 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2b230 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2b240 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  tInstallVs2012Lo
2b250 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  gFile]]]} then {
2b260 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
2b270 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2b280 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 hannel$testInst
2b290 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
2b2a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2b2b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2b2c0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2b2d0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2b2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2b2f0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73  le tail $testIns 2b300 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 2b310 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2b320 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2b330 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
2b340 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  el $testInstallV 2b350 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 s2013LogFile.. 2b360 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2b370 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2b380 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2b390 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2b3a0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2b3b0 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c ail$testInstall
2b3c0 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2015LogFile]]]
2b3d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2b3e0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2b3f0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2b400 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
2b410 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  5LogFile..
2b420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
2b430 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2b440 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2b450 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2b460 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2b470 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2b480 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 17LogFile]]]} th 2b490 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2b4a0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2b4b0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 2b4c0 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 InstallVs2017Log 2b4d0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2b4e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2b4f0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2b500 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2b510 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2b520 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2b530 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
2b540 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
2b550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
2b560 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 2b570 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
2b580 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  installVs2005Log
2b590 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2b5a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2b5b0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2b5c0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2b5d0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2b5e0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2b5f0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 tUninstallVs2008 2b600 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 2b610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 2b620 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
2b630 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 2b640 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 installVs2008Log 2b650 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2b660 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2b670 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2b680 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2b690 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2b6a0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2b6b0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30  tUninstallVs2010
2b6c0 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
2b6d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
2b6e0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 2b6f0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
2b700 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  installVs2010Log
2b710 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2b720 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2b730 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2b740 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2b750 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2b760 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2b770 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 tUninstallVs2012 2b780 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 2b790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 2b7a0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
2b7b0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 2b7c0 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 installVs2012Log 2b7d0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2b7e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2b7f0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2b800 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2b810 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2b820 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2b830 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33  tUninstallVs2013
2b840 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
2b850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
2b860 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 2b870 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
2b880 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  installVs2013Log
2b890 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2b8a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
2b8b0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2b8c0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2b8d0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2b8e0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2b8f0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 tUninstallVs2015 2b900 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 2b910 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 2b920 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
2b930 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 2b940 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 installVs2015Log 2b950 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 2b960 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 2b970 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2b980 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2b990 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2b9a0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2b9b0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37  tUninstallVs2017
2b9c0 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
2b9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
2b9e0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 2b9f0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
2ba00 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67  installVs2017Log
2ba10 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2ba20 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2ba30 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e  ....    proc run
2ba40 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 45  SQLiteTestFilesE
2ba50 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  pilogue {} {..
2ba60 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d      uplevel 1 {.
2ba70 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
2ba80 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20  nocomplain \..
2ba90 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e            testUn
2baa0 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67  installVs2017Log
2bab0 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61  File testUninsta
2bac0 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20  llVs2015LogFile
2bad0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
2bae0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
2baf0 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e  13LogFile testUn
2bb00 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  installVs2012Log
2bb10 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
2bb20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c      testUninstal
2bb30 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 74  lVs2010LogFile t
2bb40 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
2bb50 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20  08LogFile \..
2bb60 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69           testUni
2bb70 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
2bb80 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
2bb90 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 5c 0d 0a  s2017LogFile \..
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
2bbb0 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  InstallVs2015Log
2bbc0 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c  File testInstall
2bbd0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d  Vs2013LogFile \.
2bbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
2bbf0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  tInstallVs2012Lo
2bc00 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c  gFile testInstal
2bc10 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c  lVs2010LogFile \
2bc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
2bc30 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c  stInstallVs2008L
2bc40 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61  ogFile testInsta
2bc50 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d  llVs2005LogFile.
2bc60 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74  ...        unset
2bc70 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a   -nocomplain \..
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74              nort
2bc90 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65  hwindEfDbFile te
2bca0 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d  stLinqOutFile \.
2bcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c  .            wal
2bcc0 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46  DbFile nonWalDbF
2bcd0 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75  ile....        u
2bce0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
2bcf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2bd00 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74  testEf6ExeFile t
2bd10 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c  estLinqExeFile \
2bd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
2bd30 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 6d  stExeFile system
2bd40 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
2bd50 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
2bd60 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 51      systemDataSQ
2bd70 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20  LiteLinqDllFile
2bd80 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
2bd90 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
2bda0 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 73         sqliteDes
2bdb0 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73  ignerDllFile ins
2bdc0 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d  tallerExeFile \.
2bdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 74  .            ent
2bde0 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46  ityFrameworkDllF
2bdf0 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ile..      }..
2be00 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
2be10 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70   runSQLiteTestEp
2be20 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ilogue {} {..
2be30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
2be40 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67  TE: Skip running
2be50 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c   our custom epil
2be60 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
2be70 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
2be80 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
2be90 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
2bea0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
2beb0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69   exists ::no(epi
2bec0 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
2bed0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
2bee0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2bef0 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20  : Show when our
2bf00 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65  tests actually e
2bf10 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20  nded (now)...
2bf20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bf30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2bf40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 2bf50 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 2bf60 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 "---- System.Da 2bf70 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 ta.SQLite tests 2bf80 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 ended at " \.. 2bf90 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b [clock 2bfa0 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 format [clock s 2bfb0 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a econds]] \n].... 2bfc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2bfd0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 2bfe0 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20 63 the "epilogue" c 2bff0 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 ustom per-user a 2c000 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 nd/or per-host t 2c010 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 est.. # 2c020 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e 6f settings no 2c030 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 2c040 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 2c050 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 [list loadSQLit 2c060 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a eTestSettings$:
2c070 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65  :test_channel .e
2c080 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20  pilogue]....
2c090 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2c0a0 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20   BUGFIX: Before
2c0b0 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e  checking the fin
2c0c0 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20  al resources in
2c0d0 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d  use by SQLite, m
2c0e0 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ake..        #
2c0f0 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 68         sure both
2c100 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72   of the PRAGMA r
2c110 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79  elated directory
2c120 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64   names are freed
2c130 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2c140 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
2c150 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
2c160 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2c170 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 true.... 2c180 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2c190 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 E: Also report t 2c1a0 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 2c1b0 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 e after running 2c1c0 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 the tests... 2c1d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2c1e0 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 2c1f0 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
2c200 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
2c210 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2c220 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 72  E: Report the cr
2c230 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
2c240 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e 69  unts after runni
2c250 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20  ng the tests...
2c260 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2c270 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c    getSQLiteHandl
2c280 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f  eCounts $::test_ 2c290 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 2c2a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2c2b0 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 NOTE: If necessa 2c2c0 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61 72 ry, disable shar 2c2d0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f ed-cache mode no 2c2e0 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 2c2f0 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 if {[hasR 2c300 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 untimeOption sha 2c310 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 redCache]} then 2c320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 {.. ena 2c330 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 24 bleSharedCache$
2c340 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66  ::test_channel f
2c350 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  alse..        }.
2c360 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2c370 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ....    ########
2c380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c3b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c3c0 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23  ###..    #######
2c3d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c3e0 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65  ###### END Eagle
2c3f0 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23   ONLY ##########
2c400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c410 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
2c420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c460 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  #####..  }....
2c470 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76  #..  # NOTE: Sav
2c480 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  e the name of th
2c490 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74  e directory cont
2c4a0 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  aining this file
2c4b0 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b  ...  #..  if {![
2c4c0 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d  info exists comm
2c4d0 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74  on_directory]} t
2c4e0 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63  hen {..    set c
2c4f0 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20  ommon_directory
2c500 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69  [file dirname [i
2c510 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20  nfo script]]..
2c520 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  }....  #..  # NO
2c530 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20  TE: Provide the
2c540 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2c550 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 20  te test package
2c560 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  to the interpret
2c570 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b  er...  #..  pack
2c580 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73 74  age provide Syst
2c590 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54  em.Data.SQLite.T
2c5a0 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a              est 1.0..}..