System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 606764c006e5cda5ab35342ec8a675892e940d7c:

• File lib/System.Data.SQLite/common.eagle — part of check-in [8f9ea0bf02] at 2016-10-29 23:57:34 on branch trunk — The test suite helper procedure 'moveSystemDataSQLiteDllConfig' should use the binary directory. (user: mistachkin size: 174367) [more...]

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51  .    proc haveSQ
0590: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
05a0: 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nt { name } {..
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76       return [hav
05c0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
05d0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
05e0: 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44  Args [getSQLiteD
05f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65  efineConstantPre
0600: 66 69 78 5d 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20  fix] $name]].. 0610: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 0620: 20 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d getBuildYear {} 0630: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 0640: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 0650: 66 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 f the "year" set 0660: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 ting has been ov 0670: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 0680: 75 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 user (e.g... 0690: 20 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 # on the 06a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 command line). 06b0: 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 This helps cont 06c0: 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 rol exactly whic 06d0: 68 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 h set of.. 06e0: 23 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 # binaries 06f0: 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c we are testing, 0700: 20 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 those produced 0710: 75 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c using the Visual 0720: 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 Studio.. # 0730: 20 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 2005, 200 0740: 38 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 8, 2010, 2012, 2 0750: 30 31 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 013, or 2015 bui 0760: 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 ld systems. To 0770: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 0780: 23 20 20 20 20 20 20 20 74 68 69 73 20 76 61 6c # this val 0790: 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ue via the comma 07a0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 nd line, enter a 07b0: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 07c0: 20 74 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 to one.. # 07d0: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f of the fo 07e0: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 llowing (all on 07f0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 0800: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0810: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0820: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0830: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 "set test_year 0840: 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 2005".. # 0850: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 -file .\p 0860: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 0870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0880: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0890: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 08a0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 08b0: 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 _year 2008".. 08c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 08d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 08e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 08f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 0910: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 0920: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 t test_year 2010 0930: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 0940: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 0950: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 0960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0970: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0980: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0990: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 09a0: 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 r 2012".. # 09b0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 09c0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 09d0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 09e0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 09f0: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0a00: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 0a10: 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 st_year 2013".. 0a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 0a30: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 0a40: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 0a50: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 0a60: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a70: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a80: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a90: 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 15".. # 0aa0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0ab0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0ac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0ad0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0ae0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0af0: 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 lize "unset -noc 0b00: 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 omplain test_yea 0b10: 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 r".. # 0b20: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 0b30: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 0b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 0b50: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 0b60: 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b :test_year] && [ 0b70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
0b80: 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d  :test_year] > 0}
0b90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
0ba0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
0bb0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
0bc0: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 2e  ified test year.
0bd0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
0be0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74  le is not set, t
0bf0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
0c00: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
0c10: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
0c20: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
0c30: 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  t Eagle has been
0c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c50: 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e    compiled again
0c60: 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20  st the CLR v2.0
0c70: 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20  or CLR v4.0...
0c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0c90: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 0ca0: 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c year.. } el 0cb0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 0cc0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 0cd0: 20 49 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 If Eagle has be 0ce0: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 en compiled agai 0cf0: 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 nst the CLR v4.0 0d00: 2c 20 75 73 65 20 22 32 30 31 30 22 20 62 79 0d , use "2010" by. 0d10: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0d20: 20 64 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 default (we cou 0d30: 6c 64 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 ld use "2012", " 0d40: 32 30 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 2013", or "2015" 0d50: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0d60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0d70: 20 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 well) as the t 0d80: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 est year; otherw 0d90: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 ise, use "2008" 0da0: 62 79 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a by default (we.. 0db0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0dc0: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 could use "2005" 0dd0: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0de0: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 well). If anot 0df0: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 her major.. 0e00: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f # [inco 0e10: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f mpatible] versio 0e20: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 n of the CLR is 0e30: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 released, this c 0e40: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 heck will.. 0e50: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20 # have 0e60: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 to be changed. 0e70: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 The default test 0e80: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 year to use for 0e90: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 a.. # 0ea0: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 particular C 0eb0: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 LR version may b 0ec0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 e overridden by 0ed0: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 setting the glob 0ee0: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # 0ef0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 variable "te 0f00: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 st_year_clr_v$X"
0f10: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79  , where "$X" may 0f20: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d [currently] be. 0f30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0f40: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 either "2" or " 0f50: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 4"... #.. 0f60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 0f70: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 eConstraint imag 0f80: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 eRuntime40]} the 0f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 0fa0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 0fb0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0fc0: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 v4] && \.. 0fd0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 0fe0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
0ff0: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d  ear_clr_v4] > 0}
1000: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1020: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1030: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
1040: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20  st year for the
1050: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1060: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1080: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 test_year_clr_v4 1090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 10a0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 10b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10c0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 10d0: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 default test ye 10e0: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 ar for the CLR v 10f0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1110: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 return 2010; # 1120: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c TODO: Good "fall 1130: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a back" default?.. 1140: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1150: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1160: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e if {[in 1170: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1180: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 _year_clr_v2] && 1190: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11a0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 11b0: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c$::test_year_cl
11c0: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20  r_v2] > 0} then
11d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
11e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
11f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
1200: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61  ecified test yea
1210: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  r for the CLR v2
1220: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
1230: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1240: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79  return $::test_y 1250: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 ear_clr_v2.. 1260: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1270: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1280: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1290: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 12a0: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 lt test year for 12b0: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a the CLR v2.0... 12c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 12d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 12e0: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 n 2008; # TODO: 12f0: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 Good "fallback" 1300: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 default?.. 1310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1320: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1330: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 ..... #.. 1340: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 1350: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 cedure is only u 1360: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 sed when adding 1370: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e shimmed test con 1380: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 straints... # 1390: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 13a0: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d ildClrVersion {} 13b0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i 13c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 13d0: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e t_clr] && [strin 13e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 g length$::test
13f0: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20  _clr] > 0} then
1400: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1410: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1420: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1430: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1440: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68   the CLR.  If th
1450: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  is variable..
1460: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
1470: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66  not set, the def
1480: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
1490: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  be based on whet
14a0: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20  her or not..
14b0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
14c0: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
14d0: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
14e0: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20  CLR v2.0 or CLR
14f0: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23  v4.0...        #
1500: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1510: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20   $::test_clr.. 1520: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1540: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1550: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e f Eagle has been 1560: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 compiled agains 1570: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 t the CLR v4.0. 1580: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 If so,.. 1590: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 # just us 15a0: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 e that CLR versi 15b0: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 on. Otherwise, 15c0: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 use the version 15d0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 for the.. 15e0: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e # CLR v2. 15f0: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 0. If another m 1600: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 ajor [incompatib 1610: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 le] version of t 1620: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 he CLR.. 1630: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 # is relea 1640: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 sed, this check 1650: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 will have to be 1660: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 changed. The de 1670: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 fault.. # 1680: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 version v 1690: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 alue for a parti 16a0: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f cular CLR versio 16b0: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 n may be overrid 16c0: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 den.. # 16d0: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 by setting 16e0: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 the global varia 16f0: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 ble "test_clr_v$
1700: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d  X", where "$X" m 1710: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ay.. # 1720: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 [currently] 1730: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 be either "2" or 1740: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 "4"... # 1750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 1760: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d aveConstraint im 1770: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 ageRuntime40]} t 1780: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1790: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 17a0: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d s ::test_clr_v4] 17b0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 17c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 17d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f gth$::test_clr_
17e0: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  v4] > 0} then {.
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1800: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1810: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
1820: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69  ified test versi
1830: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  on for the CLR v
1840: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1850: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1860: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1870: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 clr_v4.. 1880: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 18b0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 se the default t 18c0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 18d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 18e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1900: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 4.0.30319; # TO 1910: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1920: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1930: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1940: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1950: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1960: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 exists ::test_c 1970: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 lr_v2] && \.. 1980: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1990: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
19a0: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  t_clr_v2] > 0} t
19b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
19e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
19f0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1a00: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...
1a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 1a30: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 :test_clr_v2.. 1a40: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1a70: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 OTE: Use the def 1a80: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f ault test versio 1a90: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1aa0: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1ab0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1ac0: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 return 2.0.50727 1ad0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 1ae0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 1af0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 1b00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b20: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 1b30: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 Years {} {.. 1b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b50: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 E: See if the li 1b60: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1b70: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 1b80: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 dden by the user 1b90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ba0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d (e.g. on the com 1bb0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 mand line)... 1bc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1bd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1be0: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c est_years] && [l 1bf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
1c00: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ears] > 0} then
1c10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1c30: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1c40: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61  list of test yea
1c50: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rs...        #..
1c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $1c70: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 ::test_years.. 1c80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ca0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1cb0: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 default list of 1cc0: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 test years (i.e 1cd0: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 . all)... 1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1cf0: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 rn [list 2005 20 1d00: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 08 2010 2012 201 1d10: 33 20 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 3 2015].. } 1d20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1d30: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 proc getBuildNet 1d40: 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 Fx {} {.. # 1d50: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1d60: 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 See if the test 1d70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 .NET Framework s 1d80: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 1d90: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 overridden by.. 1da0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1db0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 1dc0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 1dd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1de0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 1df0: 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 ts ::test_net_fx 1e00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1e20: 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d$::test_net_fx]
1e30: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1e40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e50: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1e60: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20   specified test
1e70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  .NET Framework..
1e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e90: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 1ea0: 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 st_net_fx.. 1eb0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1ec0: 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 set year [get 1ed0: 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 BuildYear].. 1ee0: 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72 4e set yearVarN 1ef0: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 1f00: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 ::test_net_fx_$
1f10: 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  year]....
1f20: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1f30: 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20  s $yearVarName] 1f40: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1f50: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1f60: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1f70: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  me]] > 0} then {
1f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1fa0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
1fb0: 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61  ed test .NET Fra
1fc0: 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e  mework, based on
1fd0: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20   the build..
1fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 65        #       ye
1ff0: 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ar...          #
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
2010: 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 72  rn [set $yearVar 2020: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d Name].. } 2030: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2040: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2050: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 2060: 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e to the "well kn 2070: 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 own" .NET Framew 2080: 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 ork version that 2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 20a0: 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 is most clos 20b0: 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 ely associated w 20c0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 ith a particular 20d0: 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 version of.. 20e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 56 # V 20f0: 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 isual Studio... 2100: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2110: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 switch -ex 2120: 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a act --$year {..
2130: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 35              2005
2140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2150: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30    return netFx20
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30  .            200
2180: 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  8 {..
2190: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33     return netFx3
21a0: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  5..            }
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30  ..            20
21c0: 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  10 {..
21d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78      return netFx
21e0: 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..
21f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32  }..            2
2200: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  012 {..
2210: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46       return netF
2220: 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..
2230: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2240: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20  2013 {..
2250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74        return net
2260: 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f  Fx451; # TODO: O
2270: 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20  r "netFx452"?..
2280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2290: 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 7b            2015 {
22a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b0: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20  return netFx46;
22c0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
22d0: 78 34 36 31 22 20 2f 20 22 6e 65 74 46 78 34 36  x461" / "netFx46
22e0: 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2"?..
22f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2300: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
2310: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
2320: 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f 3a  netFx35; # TODO:
2330: 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22   Good "fallback"
2340: 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20   default?..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2360: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2370: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2380: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  .....    #..
2390: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
23a0: 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 65  cedure should re
23b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
23c0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured
23d0: 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 20  test..    #
23e0: 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d 6f    platform is mo
23f0: 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65  st likely the de
2400: 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 6d  fault for this m
2410: 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d 0a  achine...    #..
2420: 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 75      proc isDefau
2430: 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  ltBuildPlatform
2440: 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d  { {verbose true}
2450: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
2460: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e       # NOTE: Run
2470: 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 69 73  ning on WoW64 is
2480: 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 61 75   never the defau
2490: 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  lt platform...
24a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
24b0: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34  {[isRunningWoW64
24c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24d0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} 24e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2500: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
2510: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
2520: 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 65 66  detected non-def
2530: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 28 57  ault platform (W
2540: 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 20 20  oW64)\n"..
2550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
2560: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
2570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
2580: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2590: 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63  his has a good c
25a0: 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74  hance of being t
25b0: 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66  he default platf
25c0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
25d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 25e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 25f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2600: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64  _channel "---- d
2610: 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 20  etected default
2620: 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20  platform\n"..
2630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
2640: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d  turn true..    }
2650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2660: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b  tBuildPlatform {
2670: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
2680: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
2690: 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66  sts ::test_platf
26a0: 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  orm] && \..
26b0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
26c0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74  gth $::test_plat 26d0: 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 26f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 2700: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 2710: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 test platform. 2720: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 2730: 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 is not set,.. 2740: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2750: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 2760: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 2770: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 2780: 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 2790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 27a0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 eturn [expr {$na
27b0: 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70  tive ? $::test_p 27c0: 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a latform : ""}].. 27d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 27e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 27f0: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 est_machine] && 2800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2810: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2820: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30  est_machine] > 0
2830: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2850: 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20  OTE: For native
2860: 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74  builds, return t
2870: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
2880: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
2890: 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
28a0: 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 63 68     the test mach
28b0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ine architecture
28c0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74  ; otherwise, ret
28d0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20  urn an empty..
28e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
28f0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
2900: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2910: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
2920: 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d      $native ? [m 2930: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 2940: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65$::test_machine
2950: 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20  ] : ""..
2960: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
2970: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2980: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
2990: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
29a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
29b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
29c0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
29d0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
29e0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
29f0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
2a00: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2a10: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2a20: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
2a30: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2a40: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2a50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2a60: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  urn [expr {..
2a70: 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f         $native ? 2a80: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 2a90: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
2aa0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20  orm(machine)] :
2ab0: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  ""..        }]..
2ac0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ae0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61     # NOTE: No ma
2af0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2b00: 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  re is available,
2b10: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2b20: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2b30: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20    #       It is
2b40: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74  important to ret
2b50: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
2b60: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65  ing here because
2b70: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2b80: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20        result of
2b90: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  this procedure m
2ba0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ay be used with
2bb0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20  [file join]...
2bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2bd0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
2be0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2bf0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2c00: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d  Configuration {}
2c10: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2c20: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2c30: 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61  f the "configura
2c40: 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61  tion" setting ha
2c50: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2c60: 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  n by the..
2c70: 23 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e  #       user (e.
2c80: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2c90: 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68  d line).  This h
2ca0: 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61  elps control exa
2cb0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ctly..      #
2cc0: 20 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66      which set of
2cd0: 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65   binaries we are
2ce0: 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74   testing (i.e. t
2cf0: 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68  hose built in th
2d00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
2d10: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
2d20: 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66  ease" build conf
2d30: 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f  igurations).  To
2d40: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a   override this..
2d50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
2d60: 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  lue via the comm
2d70: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20  and line, enter
2d80: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61  a command simila
2d90: 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20  r to one of..
2da0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
2db0: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e  ollowing (all on
2dc0: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
2dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2de0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2df0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e00: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e10: 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22  iguration Debug"
2e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e30: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
2e40: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
2e50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2e60: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2e70: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e80: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e90: 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73  iguration Releas
2ea0: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
2eb0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2ec0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2ed0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ee0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ef0: 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74  .exe -file .\pat
2f00: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d  h\to\all.eagle -
2f10: 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23  preTest..      #
2f20: 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20           "unset
2f30: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74  -nocomplain test
2f40: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d  _configuration".
2f50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f60: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2f70: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
2f80: 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  ation] && \..
2f90: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2fa0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f  ength $::test_co 2fb0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 nfiguration] > 0 2fc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fe0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 2ff0: 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 cified test conf 3000: 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 iguration. The 3010: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 default value us 3020: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 3030: 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 for this var 3040: 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c iable is typical 3050: 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 ly "Release", as 3060: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3070: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3080: 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d suite itself.. 3090: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30a0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
30b0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
30c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
30d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72       # NOTE: Nor
30f0: 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e  mally, we will n
3100: 65 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61  ever hit this ca
3110: 73 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76  se because the v
3120: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..
3130: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
3140: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
3150: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61  variable is alwa
3160: 79 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  ys set by the te
3170: 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20  st suite..
3180: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66    #       itself
3190: 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61  ; however, it ca
31a0: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden
31b0: 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20  using the unset
31c0: 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20  command..
31d0: 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68   #       from th
31e0: 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f  e -preTest optio
31f0: 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75  n to the test su
3200: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
3210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3220: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor 3230: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 m(configuration) 3240: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3250: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3260: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 3270: 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ions {} {.. 3280: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3290: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 : See if the lis 32a0: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 32b0: 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 urations has bee 32c0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d n overridden by. 32d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 32e0: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e he user (e.g. on 32f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 3300: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e)... #.. 3310: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3320: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 ists ::test_conf 3330: 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c igurations] && \ 3340: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle 3350: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3360: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30  figurations] > 0
3370: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3380: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3390: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
33a0: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74  cified list of t
33b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
33c0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
33d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $33e0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 33f0: 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 tions.. } e 3400: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 3410: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3420: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c : Use the defaul 3430: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 t list of test c 3440: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 3450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3460: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 3470: 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a Debug Release].. 3480: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3490: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 34a0: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 34b0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 34c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 34d0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 igure out the ba 34e0: 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 se directory whe 34f0: 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 re all the build 3500: 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 s should be.. 3510: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 3520: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 3530: 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 e the directory 3540: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 that contains th 3550: 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 e actual.. 3560: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 # build ou 3570: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 tput directory ( 3580: 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 e.g. parent of " 3590: 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d bin")... #. 35a0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 35b0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 35c0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 35d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35f0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
3600: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
3610: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
3620: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3630: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
3640: 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 64  the build base d
3650: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
3660: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
3670: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3680: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
3690: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
36a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
36b0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62  eturn $::build_b 36c0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ase_directory.. 36d0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 36e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 36f0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 3700: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3710: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3720: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
3730: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
3740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74      # NOTE: Next
3760: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68  , fallback to th
3770: 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69  e grandparent di
3780: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
3790: 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ne..        #
37a0: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74      containing t
37b0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
37c0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
37d0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
37e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
37f0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
3800: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
3810: 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  name $::common_d 3820: 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 irectory]].. 3830: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3840: 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d o exists ::path] 3850: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 3860: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 3870: 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68$::path] > 0} th
3880: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3890: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
38a0: 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61   Finally, fallba
38b0: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ck to the parent
38c0: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68   directory of th
38d0: 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20  e EagleTest..
38e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 74       #       pat
38f0: 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 73  h.  The EagleTes
3900: 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e  t package guaran
3910: 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 76  tees that this v
3920: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
3930: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65   #       will be
3940: 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 65   set to the dire
3950: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
3960: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 20   the first file
3970: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
3980: 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 20      execute the
3990: 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65  [runTestPrologue
39a0: 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  ] script library
39b0: 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
39c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
39d0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72  return [file dir
39e0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20  name $::path].. 39f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 3a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3a10: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 # NOTE: No pat 3a20: 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 h is available, 3a30: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3a40: 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f string. This po 3a50: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 int.. # 3a60: 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 should not 3a70: 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 be reached... 3a80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3a90: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 3aa0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 3ab0: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 3ac0: 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 TestDataPath {} 3ad0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3ae0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 3af0: 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74 6f out the directo 3b00: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 ry where all the 3b10: 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 test data files 3b20: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 should.. # 3b30: 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 be locate 3b40: 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 d. This should 3b50: 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64 69 be the "data" di 3b60: 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 rectory beneath 3b70: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 3b80: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e directory con 3b90: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 taining the actu 3ba0: 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73 2e al test scripts. 3bb0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3bc0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 3bd0: 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d in$::path data]
3be0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3bf0: 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f  proc isRunningWo
3c00: 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  W64 {} {..
3c10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3c20: 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75   For now, just u
3c30: 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  se the existing
3c40: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
3c50: 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20  for detecting..
3c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 57       #       a W
3c70: 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20  oW64 process...
3c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3c90: 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72  turn [haveConstr
3ca0: 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20  aint wow64]..
3cb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3cc0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
3cd0: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
3ce0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
3cf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d00: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d  # NOTE: First, m
3d10: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 73  ake sure the tes
3d20: 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 72  t suite infrastr
3d30: 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65  ucture is allowe
3d40: 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  d to..      #
3d50: 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 65      use the [exe
3d60: 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  c] command...
3d70: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
3d80: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
3d90: 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69  no(exec)] && ![i
3da0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
3db0: 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e  corFlags)]} then
3dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3dd0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
3de0: 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  f the location o
3df0: 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72  f CorFlags is pr
3e00: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76  esent in the env
3e10: 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20  ironment,..
3e20: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69     #       use i
3e30: 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 73  t; otherwise ass
3e40: 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 65  ume it is in the
3e50: 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20   PATH...
3e60: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
3e70: 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d  orFlags [expr {.
3e80: 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f  .          [info
3e90: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f   exists ::env(Co
3ea0: 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e  rFlags)] ? $::en 3eb0: 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 v(CorFlags) : "C 3ec0: 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 orFlags".. 3ed0: 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }].... 3ee0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3ef0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 E: Attempt to ex 3f00: 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f ecute CorFlags o 3f10: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 n the specified 3f20: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 file... # 3f30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 3f40: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 3f50: 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c exec --$corFl
3f60: 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ags [file native
3f70: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  name $fileName]. 3f80: 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d . } exec] 3f90: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 3fa0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 3fb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 3fc0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 3fd0: 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 r caller, attemp 3fe0: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 3ff0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 4000: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 platform f 4010: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 or the specified 4020: 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a file as well... 4030: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4040: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4050: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
4060: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
4070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4080: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
4090: 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c  TE: Store the pl
40a0: 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61  atform in the na
40b0: 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20  med variable in
40c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
40d0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
40e0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4100: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
4110: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61  r 1 $varName pla 4120: 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 tform.... 4130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4140: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4150: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4160: 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 he PE line from 4170: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 the captured.. 4180: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4190: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 41a0: 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 is value is "PE3 41b0: 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 2" or "PE32+", t 41c0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 41d0: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 41e0: 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 file is 32-bit 41f0: 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 or 64-bit, respe 4200: 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 ctively;.. 4210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 4220: 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 herwise, its typ 4230: 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 e is unknown... 4240: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4250: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 4260: 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 ttern {^PE 4270: 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b : (PE32|PE32\+ 4280: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
4290: 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78        if {[regex
42a0: 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74  p -line -- $patt 42b0: 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 ern$exec dummy
42c0: 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  pe32]} then {..
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
42f0: 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74  HACK: This [swit
4300: 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74  ch] assumes that
4310: 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 62   32-bit executab
4320: 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  les are..
4330: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
4340: 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 68  lways x86 and th
4350: 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 74  at 64-bit execut
4360: 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73  ables are always
4370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4380: 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20  #       x64...
4390: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
43b0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70  tch -exact -- $p 43c0: 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e32 {.. 43d0: 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 PE32 {.. 43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43f0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 set platform Wi 4400: 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n32.. 4410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4420: 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d PE32+ {. 4430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 4440: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4450: 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x64.. 4460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4470: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default 4480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4490: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 44a0: 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 m "".. 44b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 44c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 44d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 44f0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 t platform "".. 4500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 4510: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4520: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4530: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4540: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4550: 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 he ILONLY line f 4560: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 rom the captured 4570: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 4580: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4590: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 this value is ze 45a0: 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 ro, the specifie 45b0: 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 d file must.. 45c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 45d0: 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 e a mixed-mode a 45e0: 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 ssembly; otherwi 45f0: 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 se, it contains 4600: 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only.. 4610: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 4620: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 components... 4630: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4640: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4650: 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 {^ILONLY : (0 4660: 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 |1)\s+$}....
4670: 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65        if {![rege
4680: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74  xp -line -- $pat 4690: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 tern$exec dummy
46a0: 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b   ilOnly]} then {
46b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
46c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
46e0: 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c       if {!$ilOnl 46f0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 4700: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 4710: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 4720: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 4730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 4740: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 4750: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 4760: 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 cannot use [exec 4770: 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f ] or execution o 4780: 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 f CorFlags.. 4790: 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 # failed 47a0: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d , return false.. 47b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 47d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 47e0: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 47f0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4800: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4810: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4820: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4830: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 4840: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 4850: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 4860: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 4870: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 4880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4890: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 48a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 48b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 48c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 48d0: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
48e0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
48f0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
4900: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4910: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4920: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
4930: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
4940: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4950: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
4960: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
4970: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
4980: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4990: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $49a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 49b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 49c0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 49d0: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 49e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 49f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 4a00: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f erwise, on Windo 4a10: 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 ws, always use t 4a20: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 he default file 4a30: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 name.. # 4a40: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 "sqlite3.d 4a50: 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ll"... #. 4a60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4a70: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 4a80: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 4a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4aa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4ab0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 4ac0: 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 both the generi 4ad0: 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d c POSIX file nam 4ae0: 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 e and the.. 4af0: 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f # Mac O 4b00: 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 S X file name, s 4b10: 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 ince we do not c 4b20: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e urrently have an 4b30: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 4b40: 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 way to de 4b50: 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 tect which of th 4b60: 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 ose platforms we 4b70: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e are running on. 4b80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4b90: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 4ba0: 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c t libsqlite3.dyl 4bb0: 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f ib libsqlite3.so 4bc0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 4bd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4be0: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 4bf0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4c00: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4c10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4c20: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4c30: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 4c40: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 4c50: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4c60: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4c70: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4ca0: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 4cb0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 4cc0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 4cd0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
4ce0: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
4cf0: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
4d00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4d10: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4d20: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
4d30: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
4d40: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
4d50: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
4d60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4d70: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
4d80: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
4d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4da0: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 4db0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 4dc0: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4dd0: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4de0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4df0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4e00: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4e10: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4e20: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4e30: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4e40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4e50: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 4e60: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 4e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4e80: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 4e90: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 4ea0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 4eb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4ec0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ed0: 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 , return both th 4ee0: 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 e generic POSIX 4ef0: 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 file name and th 4f00: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 4f10: 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 Mac OS X file 4f20: 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 name, since we 4f30: 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 do not currently 4f40: 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 have an easy.. 4f50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 4f60: 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 ay to detect whi 4f70: 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 ch of those plat 4f80: 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e forms we are run 4f90: 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 ning on... 4fa0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4fb0: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 4fc0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 4fd0: 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 b libSQLite.Inte 4fe0: 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d rop.so].. } 4ff0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 5000: 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 proc getCoreExte 5010: 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e nsionBinaryFileN 5020: 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 ame { {default " 5030: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 5040: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 t fileName [getC 5050: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d oreBinaryFileNam 5060: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5070: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5080: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
5090: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
50a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 50b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 50c0: 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 rn$default..
50d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
50e0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
50f0: 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74   { native direct
5100: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
5110: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5120: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
5130: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
5140: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
5150: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
5160: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
5170: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
5180: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
5190: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
51a0: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
51b0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
51c0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
51d0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
51e0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
51f0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
5200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5210: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
5220: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
5230: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
5240: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5250: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5260: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5270: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5280: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 5290: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 52a0: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 52b0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 52c0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
52d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
52e0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
52f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
5300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5310: 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
5320: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69  tically detect i
5330: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  f the primary as
5340: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
5350: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61        contains a
5360: 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  ny native compon
5370: 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61  ents, if necessa
5380: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5390: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
53a0: 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20  length $native] 53b0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 53c0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 53d0: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
53e0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
53f0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
5400: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5410: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ame..        }..
5420: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
5430: 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64  tive [isMixedMod
5440: 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 5450: 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 ame$varName]..
5460: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5470: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5480: 20 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   If the primary
5490: 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f  assembly also co
54a0: 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76  ntains the nativ
54b0: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20  e components,..
54c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20       #       we
54d0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
54e0: 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20  we need...
54f0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 5500: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 5520: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5540: 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 68 OTE: If the mach 5550: 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 ine name is unav 5560: 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 69 ailable, there i 5570: 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 77 s nothign else w 5580: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5590: 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 can do... 55a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 55b0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c nfo exists ::tcl 55c0: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin 55d0: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 55e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 55f0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5600: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5610: 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 OTE: What is the 5620: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 5630: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5640: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5650: 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 5660: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 5670: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
5680: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75  orm(machine) tru
5690: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
56a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
56b0: 74 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72  t is the platfor
56c0: 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69  m for this machi
56d0: 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne?..      #..
56e0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
56f0: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
5700: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf 5710: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d orm(machine)]... 5720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5730: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 5740: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 5750: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 d file name for 5760: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 5770: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 5780: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 containing t 5790: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 57a0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d QLite native com 57b0: 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 ponents. If thi 57c0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 57d0: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 file exists, we 57e0: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 should have eve 57f0: 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e rything we need. 5800: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5810: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 5820: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f eOnly [getIntero 5830: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 5840: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 5850: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5860: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5870: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
5880: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
5890: 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 58a0: 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ure$fileNameOnl
58b0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
58c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
58d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 58e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 58f0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5900: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5910: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5920: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5930: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5940: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5950: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69     $platform$fi
5960: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a  leNameOnly]]....
5970: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
5980: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 5990: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 59a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 59b0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 59c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 59d0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 59e0: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 59f0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a n$directory \..
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 5a10: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5a20: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5a30: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5a40: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5a60: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
5a70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
5a80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5a90: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
5aa0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
5ab0: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
5ac0: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
5ad0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
5ae0: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
5af0: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
5b00: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
5b10: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
5b20: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
5b30: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
5b40: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
5b50: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
5b60: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
5b70: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5b80: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5b90: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5ba0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5bb0: 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
5bc0: 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61  itecture $fileNa 5bd0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5be0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5bf0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5c00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5c10: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5c20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5c30: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5c40: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5c50: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5c60: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5c70: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
5c80: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 5c90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5ca0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5cb0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5cd0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5cf0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5d00: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5d10: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5d20: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5d30: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5d50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5d60: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5d70: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 5d80: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 5d90: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 5da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5db0: 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 OTE: One or more 5dc0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5dd0: 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 ts needed by Sys 5de0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. 5df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 5e00: 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 re missing... 5e10: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5e20: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 5e30: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5e40: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 eleaseAvailable 5e50: 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 { directory {var 5e60: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 5e70: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 5e80: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
5e90: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5ea0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 5eb0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d arName$varName.
5ec0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5ed0: 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c    return [isBuil
5ee0: 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64  dAvailable "" $d 5ef0: 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d irectory$varNam
5f00: 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  e]..    }.....
5f10: 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64    proc joinBuild
5f20: 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69  Directory { nati
5f30: 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61  ve path year pla
5f40: 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74  tform configurat
5f50: 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
5f60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5f70: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74  Figure out and t
5f80: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66  hen return the f
5f90: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
5fa0: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ath to the build
5fb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5fc0: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20  directory based
5fd0: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d  on all the argum
5fe0: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79  ents provided by
5ff0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
6000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
6010: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b  {$native} then { 6020: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6030: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 [file join$pat
6040: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61  h bin $year$pla
6050: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura 6060: 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 tion].. } e 6070: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 6080: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 6090: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 60a0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
60b0: 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bin]..      }..
60c0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
60d0: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74  c getBuildDirect
60e0: 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c  ory { managedOnl
60f0: 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  y } {..      #..
6100: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
6110: 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65  e if the "native
6120: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
6130: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20   has been set.
6140: 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a  If so, use the..
6150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
6160: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20  rectory for the
6170: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
6180: 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20  bly (a.k.a. the
6190: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a  native interop..
61a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
61b0: 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61  sembly).  To ena
61c0: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ble this option
61d0: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  via the command
61e0: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20  line, enter a..
61f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
6200: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20  mand similar to
6210: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
6220: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65  wing (all on one
6230: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23   line):..      #
6240: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6250: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
6260: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74  initialize -runt
6270: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
6280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6290: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
62a0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
62b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
62c0: 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68      To enable th
62d0: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
62e0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70  e command line p
62f0: 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74  rior to the "bet
6300: 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20  a 16"..      #
6310: 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20       release of
6320: 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Eagle, the follo
6330: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73  wing command mus
6340: 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61  t be used instea
6350: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
6360: 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e   (also all on on
6370: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
6380: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
6390: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
63a0: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73  -initialize -pos
63b0: 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20  tInitialize..
63c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62     #         "ob
63d0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
63e0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
63f0: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69  e AddRuntimeOpti
6400: 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20  on native"..
6410: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
6420: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
6430: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
6440: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
6450: 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64  exists ::build_d
6460: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
6470: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
6480: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 6490: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 d_directory] > 0 64a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 64b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 64c0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 64d0: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 n of the build d 64e0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 64f0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 6500: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 6510: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 6520: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 6530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6540: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 eturn$::build_d
6550: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
6560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
6570: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6580: 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74  OTE: If the "nat
6590: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
65a0: 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20  ion is set, the
65b0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
65c0: 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bly..        #
65d0: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65       is being te
65e0: 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63  sted.  In that c
65f0: 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f  ase, the path to
6600: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
6610: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  tory..        #
6620: 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61        will conta
6630: 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  in the platform
6640: 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65  name and all the
6650: 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
6660: 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
6670: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
6680: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
6690: 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74  directory.  If t
66a0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
66b0: 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ime..        #
66c0: 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e       option is n
66d0: 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c  ot set, the buil
66e0: 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  d directory will
66f0: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74   be considered t
6700: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20  o be..        #
6710: 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d        "platform-
6720: 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74  neutral", with t
6730: 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70  he notable excep
6740: 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69  tion of any nati
6750: 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ve..        #
6760: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e      assembly (e.
6770: 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  g. "SQLite.Inter
6780: 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20  op.dll") copied
6790: 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65  there during the
67a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
67b0: 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20    build process
67c0: 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20  itself.  If the
67d0: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f  build process so
67e0: 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a  mehow does not..
67f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6800: 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20  copy the native
6810: 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69  assembly for thi
6820: 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74  s platform, most
6830: 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20   of the tests..
6840: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
6850: 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c  n the suite will
6860: 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70   simply be skipp
6870: 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73  ed.  Generally s
6880: 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a  peaking, there..
6890: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
68a0: 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20  are two ways to
68b0: 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69  build the binari
68c0: 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  es when preparin
68d0: 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20  g to run the..
68e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
68f0: 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20  st suite:..
6900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6910: 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74        1. Build t
6920: 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61  he separate mana
6930: 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61  ged and native a
6940: 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20  ssemblies using
6950: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
6960: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
6970: 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  s similar to:..
6980: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6990: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
69a0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 69b0: 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e ration}ManagedOn 69c0: 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a ly${Platform}..
69d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69e0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 69f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 onfiguration}Nat 6a00: 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f iveOnly${Platfo
6a10: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
6a20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6a30: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 6a40: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 6a50: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 6a60: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 6a70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6a80: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
6a90: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
6aa0: 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20  r "x64"...
6ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
6ac0: 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68       2. Build th
6ad0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
6ae0: 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f  embly using a co
6af0: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f  mmand similar to
6b00: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
6b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6b20: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e   build.bat ${Con 6b30: 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c figuration}${Pl
6b40: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
6b50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
6b60: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43         Where ${C 6b70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 onfiguration} is 6b80: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 either "Debug" 6b90: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 or "Release" and 6ba0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6bb0: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d${Platform}
6bc0: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33   is either "Win3
6bd0: 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66  2" or "x64".  If
6be0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   this command is
6bf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6c00: 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f       used, vario
6c10: 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65  us tests that re
6c20: 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74  quire supplement
6c30: 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20  ary managed..
6c40: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6c50: 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e  assemblies (e.g.
6c60: 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b   LINQ) may be sk
6c70: 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f  ipped unless tho
6c80: 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20  se binaries..
6c90: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6ca0: 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79  are subsequently
6cb0: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65   copied into the
6cc0: 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f   correct directo
6cd0: 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20  ry (i.e. by..
6ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6cf0: 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e  "test_all.bat").
6d00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6d10: 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74       #       Not
6d20: 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68  e that all of th
6d30: 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73  e build commands
6d40: 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61   above will defa
6d50: 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20  ult to using..
6d60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
6d70: 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e  e latest version
6d80: 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69   of MSBuild avai
6d90: 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74  lable and the "t
6da0: 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20  est_year" may..
6db0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
6dc0: 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74  eed to be adjust
6dd0: 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74  ed accordingly t
6de0: 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74  o actually run t
6df0: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
6e00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6e10: 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d  Refer to the com
6e20: 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69  ments in [getBui
6e30: 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65  ldYear] for more
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d   information on.
6e50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6e60: 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73   how to set this
6e70: 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20   variable...
6e80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
6e90: 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20  et native [expr
6ea0: 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26  {!$managedOnly & 6eb0: 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 & [hasRuntimeOpt 6ec0: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d ion native]}]... 6ed0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6ee0: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 [joinBuildDirect 6ef0: 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 ory$native [get
6f00: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
6f10: 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ry] \..
6f20: 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72     [getBuildYear
6f30: 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  ] [getBuildPlatf
6f40: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65  orm $native] [ge 6f50: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 6f60: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ion]].. }.. 6f70: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6f80: 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 oc getReleaseVer 6f90: 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 sion {} {.. 6fa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6fb0: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the 6fc0: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 6fd0: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 for use with th 6fe0: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 6ff0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 7000: 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 when checking f 7010: 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c or available rel 7020: 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d eases... #. 7030: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7040: 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 exists ::releas 7050: 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d e_version] && \. 7060: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7070: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c ng length$::rel
7080: 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20  ease_version] >
7090: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
70a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
70b0: 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73  NOTE: The releas
70c0: 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65  e version has be
70d0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74  en overridden; t
70e0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
70f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
7100: 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20    verbatim...
7110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7120: 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73  return $::releas 7130: 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 e_version.. 7140: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 7150: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 7160: 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 NOTE: No release 7170: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 version is avai 7180: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e lable, return an 7190: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 71a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 71b0: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 It is important 71c0: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 to return an emp 71d0: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 ty string here b 71e0: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 ecause the.. 71f0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 7200: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 lt of this proce 7210: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 dure may be used 7220: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e with [file join 7230: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 ]... #.. 7240: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 return "" 7250: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 7260: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 7270: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b tBuildFileName { 7280: 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 fileName manage 7290: 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 dOnly {platform 72a0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 72b0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 72c0: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 Returns the spec 72d0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 72e0: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f as if it were lo 72f0: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 cated in the.. 7300: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 7310: 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 d directory, dis 7320: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 7330: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 7340: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 7350: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 7360: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 7370: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 7380: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 7390: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 73a0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 73b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f 73c0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 ile join [getBui 73d0: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6d 61 6e ldDirectory$man
73e0: 61 67 65 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66  agedOnly] $platf 73f0: 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 7400: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
7410: 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  eName]]]....
7420: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43    #..      # HAC
7430: 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20  K: When running
7440: 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65  on WoW64, assume
7450: 20 74 68 65 20 74 65 73 74 20 65 78 65 63 75 74   the test execut
7460: 61 62 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e  ables are presen
7470: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7480: 20 77 69 74 68 20 74 68 65 20 22 33 32 22 20 73   with the "32" s
7490: 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a  uffix on them...
74a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
74b0: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57  f {[isRunningWoW
74c0: 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74  64] && [file ext
74d0: 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20  ension $result] 74e0: 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 eq ".exe"} then 74f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 {.. set r 7500: 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 esult [appendArg 7510: 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 s [file rootname 7520: 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65$result] 32.exe
7530: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
7540: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 7550: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 lt.. }..... 7560: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7570: 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b alDirectory {} { 7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7590: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 75a0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 ocedure returns 75b0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 the directory wh 75c0: 65 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c ere the external 75d0: 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 binary.. # 75e0: 20 20 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 files are 75f0: 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 located... 7600: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7610: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7620: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 7630: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 [file dirname [i 7640: 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a nfo binary]]]].. 7650: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7660: 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 oc getBinaryDire 7670: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 7680: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7690: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 76a0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 76b0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 76c0: 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 e test applicati 76d0: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 76e0: 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 itself (i.e. t 76f0: 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 he Eagle shell) 7700: 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 is located. Thi 7710: 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 s will be used a 7720: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 7730: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e the destination 7740: 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 for the copied 7750: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 7760: 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 te native and.. 7770: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e # man 7780: 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 aged assemblies 7790: 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 (i.e. because th 77a0: 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 is is one of the 77b0: 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 few places.. 77c0: 20 20 20 23 20 20 20 20 20 20 20 77 68 65 72 65 # where 77d0: 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 the CLR will ac 77e0: 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 tually find and 77f0: 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 load them proper 7800: 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ly)... #.. 7810: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 7820: 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 xists ::binary_d 7830: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 7840: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 7850: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 g length$::bina
7860: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
7870: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
7880: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
7890: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
78a0: 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79  on of the binary
78b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
78c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
78d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
78e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
78f0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
7900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7910: 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72   return $::binar 7920: 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 y_directory.. 7930: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7940: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 return [inf 7950: 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 o binary].. 7960: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 7970: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7980: 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c alFileName { fil 7990: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 eName } {.. 79a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 79b0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 79c0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 79d0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 79e0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 79f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 7a00: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 rectory containi 7a10: 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 ng the external 7a20: 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 binaries... 7a30: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7a40: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7a50: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 7a60: 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f tExternalDirecto 7a70: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ry]$fileName]].
7a80: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7a90: 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c  roc getBinaryFil
7aa0: 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65  eName { fileName
7ab0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d   {platform ""} }
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
7ad0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
7ae0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ns the specified
7af0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66   file name as if
7b00: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64   it were located
7b10: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
7b20: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
7b30: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
7b40: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
7b50: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
7b60: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
7b70: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
7b80: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
7b90: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
7ba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7bb0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
7bc0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
7bd0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
7be0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
7bf0: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 7c00: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
7c10: 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  Name]]]..    }..
7c20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
7c30: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  oreBinaryFileNam
7c40: 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  e { {platform ""
7c50: 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22 7d 20  } {standard ""}
7c60: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
7c70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
7c80: 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61 74  rns the full pat
7c90: 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 63  h for the file c
7ca0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
7cb0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
7cc0: 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20   #       native
7cd0: 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f 72  library code for
7ce0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20   this platform.
7cf0: 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61 6e   First, check an
7d00: 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20 20  d see if..
7d10: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
7d20: 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c  te core native l
7d30: 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
7d40: 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20  dy been loaded.
7d50: 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20   Next,..      #
7d60: 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20 74        fallback t
7d70: 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c 20  o what the full
7d80: 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c 20  path should be,
7d90: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72  based on whether
7da0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
7db0: 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61      mixed-mode a
7dc0: 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e 67  ssembly is being
7dd0: 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e 61   used and the na
7de0: 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  me of the curren
7df0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7e00: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20   platform...
7e10: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
7e20: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
7e30: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
7e40: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
7e50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7e60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7e70: 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
7e80: 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65 4e 61  ethods _SQLiteNa
7e90: 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61  tiveModuleFileNa
7ea0: 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69 6c 65  me..      } file
7eb0: 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5b 73  Name] == 0 && [s
7ec0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi 7ed0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 7ee0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 7ef0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 7f00: 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 The SQLite core 7f10: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 native library h 7f20: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 as already been 7f30: 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 loaded via.. 7f40: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 7f50: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 native library p 7f60: 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 re-loader. Retu 7f70: 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d rn that file nam 7f80: 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 7f90: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 7fa0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
7fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
7fc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
7fd0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
7fe0: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61  untime option ha
7ff0: 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c 77 61  s been set, alwa
8000: 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20  ys return the..
8010: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
8020: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6d  e name for the m
8030: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
8040: 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ly...      #..
8050: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
8060: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
8070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8080: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8090: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
80a0: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
80b0: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  mbly file name..
80c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
80d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
80e0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
80f0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
8100: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
8110: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 8120: 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 form System.Data 8130: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 .SQLite.dll]].. 8140: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 8150: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8160: 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 74 69 Are we attempti 8170: 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 ng to automatica 8180: 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 74 68 lly detect wheth 8190: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 er or not the.. 81a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 # int 81b0: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 73 68 erop assembly sh 81c0: 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d 0a 20 ould be used?.. 81d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 81e0: 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 78 70 t automatic [exp 81f0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt 8200: 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d 3d 20 h$standard] ==
8210: 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  0}]....      #..
8220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
8230: 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72 20 22  rst, in either "
8240: 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20 22 6e  automatic" or "n
8250: 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d 6f 64  on-standard" mod
8260: 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20 20 20  es, attempt..
8270: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 66 69     #       to fi
8280: 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e  nd the native-on
8290: 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  ly interop assem
82a0: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  bly...      #..
82b0: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 82c0: 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 61 72 tic || !$standar
82d0: 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  d} then {..
82e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
82f0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
8300: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
8310: 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72  ative-only inter
8320: 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  op assembly file
8330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8340: 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20    name for this
8350: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
8360: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
8370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8380: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
8390: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f  eOnly [getIntero
83a0: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d  pAssemblyFileNam
83b0: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20  esOnly] {..
83c0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
83d0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
83e0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
83f0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
8400: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
8410: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66  ry] $platform$f
8420: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
8430: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
8440: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 8450: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 8460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 8470: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
8480: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
84a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
84b0: 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20 69 6e  # NOTE: Then, in
84c0: 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74   either "automat
84d0: 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61 72 64  ic" or "standard
84e0: 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74  " modes, attempt
84f0: 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
8500: 20 20 20 66 69 6e 64 20 74 68 65 20 73 74 61 6e     find the stan
8510: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
8520: 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ary...      #..
8530: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 8540: 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 72 64 tic ||$standard
8550: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8560: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
8570: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
8580: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61  determine the na
8590: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
85a0: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
85b0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
85c0: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
85d0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 20 61   this platform a
85e0: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 69  nd then return i
85f0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
8600: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
8610: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
8620: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
8630: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20  eNamesOnly] {..
8640: 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c           set fil
8650: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
8660: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
8670: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
8680: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
8690: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 86a0: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d m$fileNameOnly]
86b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
86c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
86d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 86e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 86f0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
8710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
8720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8730: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61 73 20      # NOTE: Was
8740: 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
8750: 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 65 78  mbly compiled ex
8760: 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61 6c 20  pecting to deal
8770: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20  with the..
8780: 23 20 20 20 20 20 20 20 73 74 61 6e 64 61 72 64  #       standard
8790: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f 0d 0a   core library?..
87a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
87b0: 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65  f {[haveSQLiteDe
87c0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53 51 4c  fineConstant SQL
87d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d 20 74  ITE_STANDARD]} t
87e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
87f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
8800: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65  : Fallback to re
8810: 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 69  turning the nati
8820: 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64  ve-only standard
8830: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d   SQLite library.
8840: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
8850: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
8860: 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  he platform...
8870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8880: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e   set fileNamesOn
8890: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  ly [getNativeLib
88a0: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
88b0: 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  y]....        if
88c0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65   {[llength $file 88d0: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d NamesOnly] == 0} 88e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 88f0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 8900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8910: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 8920: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 8930: 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 8940: 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 [getBinaryD 8950: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
8960: 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c  orm [lindex $fil 8970: 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d eNamesOnly 0]]]. 8980: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8990: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 89a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c # NOTE: Fall 89b0: 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e back to returnin 89c0: 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c g the native-onl 89d0: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 89e0: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 ly file.. 89f0: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 66 6f # name fo 8a00: 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d r the platform.. 8a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8a20: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 8a30: 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f sOnly [getIntero 8a40: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 8a50: 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 esOnly].... 8a60: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 8a70: 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20$fileNamesOnly]
8a80: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
8aa0: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
8ab0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
8ac0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
8ad0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
8ae0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
8af0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $8b00: 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 platform [lindex 8b10: 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20$fileNamesOnly
8b20: 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  0]]]..      }..
8b30: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8b40: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
8b50: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
8b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8b70: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
8b80: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
8b90: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
8ba0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
8bb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
8bc0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
8bd0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
8be0: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
8bf0: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
8c00: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
8c10: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
8c20: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
8c30: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
8c40: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
8c50: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
8c60: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 8c70: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 8c80: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 8c90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 8cb0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 8cc0: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 8cd0: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 8ce0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 8cf0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 8d00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
8d20: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
8d30: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
8d40: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
8d50: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
8d60: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
8d70: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
8d80: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 8d90: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 8da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 8db0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 8dc0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 8dd0: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 8de0: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 8df0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 8e00: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 8e10: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 8e20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 8e30: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
8e40: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
8e50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
8e60: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
8e70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
8e80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
8e90: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 8ea0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 8eb0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 8ec0: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
8ed0: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
8ee0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8ef0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
8f00: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
8f10: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
8f20: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
8f30: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
8f40: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
8f50: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
8f60: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
8f70: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
8f80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
8f90: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
8fa0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
8fb0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 8fd0: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 8fe0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 8ff0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9000: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 9010: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 9020: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 9030: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 9040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9050: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 9060: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 9070: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9080: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 9090: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 90a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 90b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 90c0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 90d0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 90e0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 90f0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 9100: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 9110: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 9120: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 9130: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 9140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 9150: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 9160: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 9170: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 9180: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 9190: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 91a0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 91b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 91c0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
91d0: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
91e0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
91f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9200: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9210: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
9220: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
9230: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9240: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9250: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9260: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9270: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9280: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 9290: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 92a0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 92b0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 92c0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 92d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 92e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
92f0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
9300: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9310: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9320: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
9330: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
9340: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
9350: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9360: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9370: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9380: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9390: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
93a0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 93b0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 93c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 93d0: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 93e0: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 93f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9400: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 9410: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 9420: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 9430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 9440: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 9450: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 9460: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 9470: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 9480: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 9490: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 94a0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 94b0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 94c0: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 94d0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 94e0: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 94f0: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 9500: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9510: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9520: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 9530: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 9540: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 9550: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
9560: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
9570: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9580: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9590: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
95a0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
95b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
95c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
95d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
95e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
95f0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
9600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $9610: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9620: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 9630: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 9640: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 9650: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 9660: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 9670: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
9680: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
9690: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
96a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
96b0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
96c0: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
96d0: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
96e0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
96f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9700: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
9710: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
9720: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
9730: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 9740: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 9750: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 9760: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 9770: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 9780: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9790: 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f proc getExecuteO 97a0: 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 nSetup {} {.. 97b0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 97c0: 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e sts ::execute_on 97d0: 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 _setup] && \.. 97e0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 97f0: 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 length$::execut
9800: 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d  e_on_setup] > 0}
9810: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9820: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9830: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63  TE: Return the c
9840: 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f  onfigured SQL to
9850: 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20   execute during
9860: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
9870: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9880: 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20  setup procedure
9890: 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20  (i.e. for every
98a0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  test database co
98b0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
98c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
98d0: 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65  eturn $::execute 98e0: 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 _on_setup.. 98f0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9910: 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 NOTE: By default 9920: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 , there is no SQ 9930: 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 L to execute dur 9940: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti 9950: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 on.. # 9960: 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 setup proced 9970: 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 ure (i.e. for ev 9980: 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 ery test databas 9990: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a e connection)... 99a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 99b0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 99c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 99d0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 74 72 . proc getStr 99e0: 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 ingMapForTclEsca 99f0: 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 pe {} {.. r 9a00: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c 20 5c eturn [list \\ \ 9a10: 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c \\\ $\\\[$ \ 9a20: 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a 20 20 \\] \$ \\\$].. 9a30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9a40: 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 getTestOverride 9a50: 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 sPreamble { {ext 9a60: 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d raVarNames ""} } 9a70: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 {.. set va 9a80: 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d rNames [list]... 9a90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9aa0: 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c # NOTE: If avail 9ab0: 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 able, start with 9ac0: 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 the master list 9ad0: 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 of test overrid 9ae0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9af0: 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 variables... 9b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9b10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9b20: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 est_overrides] & 9b30: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 9b40: 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f llength$::test_
9b50: 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20  overrides] > 0}
9b60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9b70: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
9b80: 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76  Names $::test_ov 9b90: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d errides.. } 9ba0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9bb0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 # NOTE: If re 9bc0: 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 quested by our c 9bd0: 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 aller, add any a 9be0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 dditional variab 9bf0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 le.. # 9c00: 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 names to copy 9c10: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 now... #.. 9c20: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 9c30: 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 h$extraVarNames
9c40: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9c50: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
9c60: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78  end varNames $ex 9c70: 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 traVarNames.. 9c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 9c90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 9ca0: 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 uild the script 9cb0: 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 fragment to be r 9cc0: 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 eturned by proce 9cd0: 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 ssing each.. 9ce0: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 9cf0: 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 le name and addi 9d00: 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 ng the nececessa 9d10: 72 79 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 ry script fragme 9d20: 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 nts for.. # 9d30: 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e each one. 9d40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9d50: 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a set result "".. 9d60: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 9d70: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 varName$varName
9d80: 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  s {..        #..
9d90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9da0: 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66  Build the qualif
9db0: 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ied global varia
9dc0: 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ble name...
9dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
9de0: 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61  t fullVarName [a
9df0: 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61  ppendArgs :: $va 9e00: 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 rName].... 9e10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9e20: 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 OTE: Does the va 9e30: 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 riable exist in 9e40: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 this interpreter 9e50: 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 context?.. 9e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 9e70: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 {[info exists$
9e80: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68  fullVarName]} th
9e90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9ea0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
9eb0: 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63  OTE: Append a sc
9ec0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f  ript fragment to
9ed0: 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 61 74   the result that
9ee0: 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d   will correctly.
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
9f00: 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74     copy any cont
9f10: 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61  ained value to a
9f20: 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74  nother interpret
9f30: 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20  er context...
9f40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9f50: 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c      append resul
9f60: 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c  t \n "set " $ful 9f70: 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b lVarName " \{" [ 9f80: 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a 20 20 string map \.. 9f90: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 9fa0: 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 StringMapForTclE 9fb0: 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 75 6c scape] [set$ful
9fc0: 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d 0a 20  lVarName]] \}..
9fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9ff0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
a000: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
a010: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  ns one or more s
a020: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c  cript fragments,
a030: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20   append a..
a040: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65   #       newline
a050: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
a060: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
a070: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20  ngth $result] > a080: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a090: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result a0a0: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n.. }.... a0b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
a0c0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
a0d0: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73      proc moveSys
a0e0: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
a0f0: 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72  Config { {restor
a100: 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73  e false} {verbos
a110: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
a120: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
a130: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
a140: 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  tory]....      i
a150: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
a160: 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d  h $directory] == a170: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. a180: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a190: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a1a0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a1b0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a1c0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a1d0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski a1e0: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 79 pped moving \"Sy a1f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a200: 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 .dll.config\", " a210: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a220: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 "no binary dir a230: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 ectory\n"].. a240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... a250: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } a260: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 .... set fi a270: 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 leName(1) [file a280: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 normalize \.. a290: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi a2a0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 n$directory Sys
a2b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a2c0: 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a  dll.config]]....
a2d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
a2e0: 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67  me(2) [appendArg
a2f0: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e  s $fileName(1) . a300: 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 moved].... a310: 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 if {$restore} th
a320: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
a330: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a340: 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 fileName(2)]} th a350: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a360: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a370: 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61  eName(2) $fileNa a380: 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(1).... a390: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a3a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a3b0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a3c0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a3d0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a3e0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a3f0: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a400: 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22  ame(2) "\" to \"
a410: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a420: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31       $fileName(1 a430: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a440: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a450: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a460: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a470: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a480: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a490: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a4a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a4b0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a4c0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a4d0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c "$fileName(2) \
a4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a4f0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a500: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a510: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
a530: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  se {..        if
a540: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a550: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 fileName(1)]} th a560: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a570: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a580: 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61  eName(1) $fileNa a590: 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(2).... a5a0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a5b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a5c0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a5d0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a5e0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a5f0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a600: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a610: 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22  ame(1) "\" to \"
a620: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a630: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32       $fileName(2 a640: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a650: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a660: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a670: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a680: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a690: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a6a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a6b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a6c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a6d0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a6e0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c "$fileName(1) \
a6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a700: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a710: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a730: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
a740: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a750: 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72  c getAppDomainPr
a760: 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78  eamble { {prefix
a770: 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d   ""} {suffix ""}
a780: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
a790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
a7a0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
a7b0: 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70  rns a test setup
a7c0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a7d0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20   suitable for..
a7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61       #       eva
a7f0: 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e  luation by an in
a800: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
a810: 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64  d in an isolated
a820: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20   application..
a830: 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61      #       doma
a840: 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20  in.  The script
a850: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
a860: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a870: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20  surrounded by..
a880: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a890: 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66   prefix and suff
a8a0: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d  ix "script fragm
a8b0: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20  ents" specified
a8c0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a  by our caller,..
a8d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66        #       if
a8e0: 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72   any.  The entir
a8f0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72  e script being r
a900: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a910: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d  substituted via.
a920: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
a930: 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63  subst], in the c
a940: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
a950: 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69  ller, before bei
a960: 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  ng returned...
a970: 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73      #       This
a980: 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61   step is necessa
a990: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20  ry so that some
a9a0: 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20  limited context
a9b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20  information,..
a9c0: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d      #       prim
a9d0: 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f  arily related to
a9e0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
a9f0: 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65  ectories, can be
aa00: 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20   transferred..
aa10: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74      #       to t
aa20: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  he interpreter i
aa30: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61  n the isolated a
aa40: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
aa50: 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20  n, making it..
aa60: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65      #       able
aa70: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79   to successfully
aa80: 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20   run tests that
aa90: 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d  require one or m
aaa0: 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ore of the..
aab0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20    #       files
aac0: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65  in one of the te
aad0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
aae0: 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75  s.  Callers shou
aaf0: 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20  ld keep in..
ab00: 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74    #       mind t
ab10: 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72  hat the test scr
ab20: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69  ipt fragment bei
ab30: 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e  ng returned cann
ab40: 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20  ot rely on..
ab50: 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63    #       any sc
ab60: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f  ript library pro
ab70: 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65  cedures that are
ab80: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79   not provided by
ab90: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
aba0: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72    #       librar
abb0: 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20  y package (i.e.
abc0: 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69  "init.eagle"), i
abd0: 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70  ncluding those p
abe0: 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20  rovided by..
abf0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61    #       the Ea
ac00: 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  gle test package
ac10: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c  , unless the fil
ac20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ac30: 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  m is loaded..
ac40: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61     #       manua
ac50: 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68  lly via some oth
ac60: 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e  er mechanism (e.
ac70: 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20  g. by including
ac80: 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20  appropriate..
ac90: 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b     #       [pack
aca0: 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20  age require] or
acb0: 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64  [source] command
acc0: 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20  s in the prefix
acd0: 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20  or suffix..
ace0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
acf0: 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73  fragments).  Als
ad00: 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20  o, all variable
ad10: 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61  references and a
ad20: 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20  ll nested..
ad30: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
ad40: 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e  s (i.e. those in
ad50: 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
ad60: 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  ) contained in t
ad70: 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20  he final..
ad80: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66  #       script f
ad90: 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64  ragment will end
ada0: 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61   up being evalua
adb0: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  ted in the conte
adc0: 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  xt of the..
add0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67   #       calling
ade0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64   interpreter and
adf0: 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20   not the target
ae00: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
ae10: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
ae20: 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74    #       isolat
ae30: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ed application d
ae40: 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65  omain unless the
ae50: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e   dollar signs an
ae60: 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20  d/or square..
ae70: 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b     #       brack
ae80: 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c  ets are speciall
ae90: 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61  y quoted with ba
aea0: 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20  ckslashes...
aeb0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
aec0: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69  n [uplevel 1 [li
aed0: 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64  st subst [append
aee0: 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a  Args $prefix {.. aef0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. af00: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c # NOTE: The \ af10: 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e [object\] comman af20: 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 d may be missing af30: 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 in some Eagle c af40: 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ore.. # af50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e library con af60: 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c figurations. Cl af70: 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 oning and using af80: 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 the procedure.. af90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c # \ afa0: 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e [changeNativeRun afb0: 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 timeOption\] may afc0: 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 help to mitigat afd0: 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 e this... afe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 #.. proc aff0: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun b000: 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 timeOption \.. b010: 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f {[info b020: 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 args changeNati b030: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d veRuntimeOption] b040: 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. b050: 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 {[info body cha b060: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime b070: 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 Option]}.... b080: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. b090: 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 changeNat b0a0: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption b0b0: 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 [hasRuntimeOpti b0c0: 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 on native].. b0d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b }.. } [ b0e0: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 getTestOverrides b0f0: 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 Preamble [list p b100: 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c ath test_channel b110: 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 ]]$suffix]]]..
b120: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
b130: 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61  c tryCopyExterna
b140: 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  lFile {..
b150: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
b160: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77  latform ""} {new
b170: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65  FileName ""} {ve
b180: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d  rbose true} } {.
b190: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
b1a0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78  eFileName [getEx
b1b0: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24  ternalFileName $b1c0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... b1d0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex b1e0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
b1f0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
b200: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb b210: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b220: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
b230: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
b240: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
b250: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b260: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
b270: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22  external file \"
b280: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam b290: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. b2a0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does b2b0: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. b2c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b2d0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b2e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b2f0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b300: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b310: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b320: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b330: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
b340: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil b350: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
b360: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b370: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
b380: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
b390: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
b3a0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
b3b0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  orm]..      }...
b3c0: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65  .      set targe
b3d0: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  tDirectory [file
b3e0: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74   dirname $target b3f0: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... b400: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. b410: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 . if {![f b420: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
b430: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
b440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b450: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67  file mkdir $targ b460: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 etDirectory.. b470: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b480: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for b490: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
b4a0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa b4b0: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 me.. }] == b4c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. b4d0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
b4e0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
b4f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
b500: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
b510: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66   external file f
b520: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46  rom \"" $sourceF b530: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c ileName "\" to \ b540: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. b550: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d$targetFileNam
b560: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
b570: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
b580: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c b590: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b5a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b5b0: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t b5c0: 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 o copy external b5d0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
b5e0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
b5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
b600: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF b610: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. b620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b630: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo b640: 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a pyBinaryFile {.. b650: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file b660: 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 Name managedOnly b670: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { b680: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d newFileName ""}. b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 . {ve b6a0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. b6b0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 . set sourc b6c0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 eFileName [getBi b6d0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
b6e0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform b6f0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! b700: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f [file exists$so
b710: 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  urceFileName]} t
b720: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
b730: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the b740: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t b750: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b760: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b770: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b780: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
b790: 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66  copying binary f
b7a0: 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46  ile \"" $sourceF b7b0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. b7c0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it b7d0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ b7e0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. b7f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return b800: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... b810: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b820: 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 ength$newFileNa
b830: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
b840: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
b850: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
b860: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d  BuildFileName \.
b870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65  .            $ne b880: 77 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 wFileName$manag
b890: 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d  edOnly $platform b8a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else b8b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t b8c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g b8d0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName b8e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
b8f0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage b900: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d dOnly$platform]
b910: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b920: 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72     set targetDir
b930: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
b940: 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65  name $targetFile b950: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i b960: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. b970: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b980: 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 exists$targetDi
b990: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
b9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
b9b0: 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69   mkdir $targetDi b9c0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 rectory.. b9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 }.... fi b9e0: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
b9f0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $ba00: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. ba10: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t ba20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t ba30: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
ba40: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ba50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ba60: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e  "---- copied bin
ba70: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ary file from \"
ba80: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam ba90: 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a e "\" to \"" \.. baa0: 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72$tar
bab0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
bac0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
bad0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bae0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel baf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bb00: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bb10: 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 - failed to copy bb20: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f binary file fro bb30: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
bb40: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
bb50: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20       "\" to \""
bb60: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName bb70: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a \"\n].. }.. bb80: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr bb90: 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 oc tryCopyBuildF bba0: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. bbb0: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana bbc0: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor bbd0: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa bbe0: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. bbf0: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru bc00: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se bc10: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName bc20: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa bc30: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 me$fileName $ma bc40: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
bc50: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
bc60: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
bc70: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d  $sourceFileName] bc80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bc90: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
bca0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bcb0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ bcc0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA bcd0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. bce0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp bcf0: 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 ed copying build bd00: 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 file \""$sourc
bd10: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
bd20: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
bd30: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
bd40: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t\n"]..        }
bd50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
bd60: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
bd70: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
bd80: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65   length $newFile bd90: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then bda0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t bdb0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g bdc0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName bdd0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70$newFileName $p bde0: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. bdf0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. be00: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile be10: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF be20: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
be30: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20  e $platform].. be40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s be50: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f et targetDirecto be60: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 ry [file dirname be70: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
be80: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
be90: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
bea0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
beb0: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ts $targetDirect bec0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. bed0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 file mkd bee0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ir$targetDirect
bef0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ory..        }..
bf00: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
bf10: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour bf20: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
bf30: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
bf40: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
bf50: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bf60: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel bf70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bf80: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bf90: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f bfa0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
bfb0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
bfc0: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
bfd0: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi bfe0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. bff0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. c000: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c010: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c020: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c030: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
c040: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
c050: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
c060: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName c070: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " c080: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
c090: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
c0a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
c0b0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
c0c0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
c0d0: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61   { fileName {pla
c0e0: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f  tform ""} {verbo
c0f0: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
c100: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
c110: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
c120: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ame $fileName$p
c130: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20  latform]....
c140: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
c150: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} c160: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c170: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
c180: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
c190: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch c1a0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c1b0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. c1c0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c1d0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 deleting binary c1e0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
c1f0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
c200: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
c210: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
c220: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
c230: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
c240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
c250: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
c260: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName c270: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. c280: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
c290: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
c2a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
c2b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
c2c0: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66  deleted binary f
c2d0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam c2e0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } c2f0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c300: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
c310: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
c320: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c330: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
c340: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20  o delete binary
c350: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa c360: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. c370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... c380: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 proc tryDeleteB c390: 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 uildFile {.. c3a0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c3b0: 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c managedOnly {pl c3c0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb c3d0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. c3e0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam c3f0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN c400: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d ame$fileName $m c410: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 anagedOnly$plat
c420: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
c430: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
c440: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the c450: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if c460: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
c480: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c490: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c4b0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 "---- skipped de c4c0: 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c leting build fil c4d0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
c4e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
c4f0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
c500: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
c510: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
c520: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
c530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
c540: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
c550: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d  te $fileName}] = c560: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. c570: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c580: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c590: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c5a0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65        "---- dele
c5b0: 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ted build file \
c5c0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c5d0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else c5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput c5f0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
c600: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
c610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
c620: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  -- failed to del
c630: 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ete build file \
c640: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c650: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. c660: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c670: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly c680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f c690: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO c6a0: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" c6b0: 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 } {pdb true} {ve c6c0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. c6d0: 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 . tryCopyBu c6e0: 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d ildFile$fileNam
c6f0: 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24  e $managedOnly$
c700: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72  platform "" $ver c710: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if c720: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
c730: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42          tryCopyB
c740: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64  uildFile [append
c750: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c760: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c770: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c780: 64 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 db]$managedOnly
c790: 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76   $platform ""$v
c7a0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d  erbose..      }.
c7b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c7c0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73  roc tryDeleteAss
c7d0: 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  embly {..
c7e0: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
c7f0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62  latform ""} {pdb
c800: 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20   true} {verbose
c810: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c820: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
c830: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
c840: 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73  platform $verbos c850: 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 e.... if {$
c860: 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  pdb} then {..
c870: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
c880: 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64  naryFile [append
c890: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c8a0: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c8b0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c8c0: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 db]$platform $v c8d0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d erbose.. }. c8e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p c8f0: 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d roc tryLoadAssem c900: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b bly { fileName { c910: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b platform ""} } { c920: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file c930: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF c940: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
c950: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a  e $platform].... c960: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch c970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set c980: 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 assembly [object c990: 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 load -loadtype c9a0: 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c File -alias$fil
c9b0: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d  eName]..      }]
c9c0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
c9d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c9e0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61    # NOTE: Now, a
c9f0: 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
ca00: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
ca10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
ca20: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
ca30: 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  int [file rootna
ca40: 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  me [file tail $f ca50: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 ileName]].... ca60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ca70: 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the ca80: 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 image runtime v ca90: 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 ersion from the caa0: 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 assembly because cab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # cac0: 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 several tests cad0: 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e rely on it havin cae0: 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 g a certain valu caf0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. cb00: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr cb10: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs cb20: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
cb30: 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20  eName] _ \..
cb40: 20 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62          [$assemb cb50: 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 ly ImageRuntimeV cb60: 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 ersion]].... cb70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # cb80: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th cb90: 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 e full path of t cba0: 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d he loaded file.. cbb0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. cbc0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
cbd0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
cbe0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
cbf0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
cc00: 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61  proc isSQLiteRea
cc10: 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  dy {} {..      #
cc20: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
cc30: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  This procedure m
cc40: 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a  ust return non-z
cc50: 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  ero only if the
cc60: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20  SQLite native..
cc70: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62       #       lib
cc80: 72 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73  rary and the Sys
cc90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
cca0: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
ccb0: 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20   are loaded..
ccc0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
ccd0: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
cce0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20  the test suite.
ccf0: 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73   Currently, this
cd00: 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20   procedure..
cd10: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
cd20: 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20   be called only
cd30: 61 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f  after the [tryLo
cd40: 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63  adAssembly] proc
cd50: 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20  edure has..
cd60: 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61   #       been ca
cd70: 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f  lled to probe fo
cd80: 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  r the System.Dat
cd90: 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64  a.SQLite managed
cda0: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
cdb0: 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65   #       and the
cdc0: 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65   [checkForSQLite
cdd0: 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20  ] procedure has
cde0: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
cdf0: 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20  robe for..
ce00: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
ce10: 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  te native librar
ce20: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68  y; otherwise, th
ce30: 69 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c  is procedure wil
ce40: 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20  l simply..
ce50: 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72  #       always r
ce60: 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...
ce70: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
ce80: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20  rn [expr {..
ce90: 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61      [haveConstra
cea0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
ceb0: 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65  SQLite] && [have
cec0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
ced0: 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20  e]..      }]..
cee0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
cef0: 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b   matchPlatform {
cf00: 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20   platform } {..
cf10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
cf20: 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73  NOTE: An empty s
cf30: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c  tring for the pl
cf40: 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61  atform means tha
cf50: 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e  t the build is n
cf60: 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ot..      #
cf70: 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20    [primarily] a
cf80: 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68  native build; th
cf90: 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61  erefore, it alwa
cfa0: 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20  ys matches...
cfb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
cfc0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $cfd0: 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 platform] == 0} cfe0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cff0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. d000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d010: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I d020: 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 f the machine na d030: 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c me is unavailabl d040: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 e, there is noth d050: 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 ign else we.. d060: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 # can d d070: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. d080: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex d090: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf d0a0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t d0b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r d0c0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. d0d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d0e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 . # NOTE: D d0f0: 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 oes the specifie d100: 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 d platform match d110: 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 up to the curre d120: 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 nt process?.. d130: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { d140: 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61$platform eq [ma
d150: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
d160: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( d170: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 machine)]} then d180: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur d190: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. d1a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d1b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 # NOTE: The sp d1c0: 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d ecified platform d1d0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 does not match d1e0: 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 up with the plat d1f0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 form.. # d200: 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 for the curr d210: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ent process... d220: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret d230: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d urn false.. } d240: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 ..... proc ha d250: 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo d260: 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 mmand {} {.. d270: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d280: 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 E: Is the [objec d290: 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 t] command curre d2a0: 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d ntly available?. d2b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d2c0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c return [expr {[l d2d0: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d length [info com d2e0: 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e mands object]] > d2f0: 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 0}].. }..... d300: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo d310: 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d rSQLiteObjectCom d320: 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d mand { channel } d330: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs d340: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
d350: 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62  hecking for \"ob
d360: 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75  ject\" command u
d370: 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  sage... "....
d380: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
d390: 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
d3a0: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20  ObjectCommand)]
d3b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
d3c0: 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
d3d0: 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
d3e0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
d3f0: 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n. d400: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. d410: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d420: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 # NOTE: Unle d430: 73 73 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 ss we are forbid d440: 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 den from doing s d450: 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 o, add some cons d460: 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 traints.. d470: 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 # that wi d480: 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 ll allow most of d490: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite d4a0: 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f to run (i.e. tho d4b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 se.. # d4c0: 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 64 tests that d d4d0: 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 o not directly r d4e0: 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 ely upon the [ob d4f0: 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d ject] command).. d500: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d510: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e d520: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 xists ::no(shimS d530: 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e QLiteAssemblyCon d540: 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e straints)]} then d550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 {.. ad d560: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d570: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 te.. ad d580: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d590: 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 teInterop.. d5a0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d5b0: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S d5c0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 QLite.. d5d0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S d5e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit d5f0: 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 e.Encryption.. d600: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d610: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat d620: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d a.SQLite.Linq... d630: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo d640: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append d650: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d660: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat d670: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b a.SQLite.dll_v [ d680: 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 getBuildClrVersi d690: 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d on]].. }. d6a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! d6b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n d6c0: 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 o(shimSQLiteDefi d6d0: 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 neConstantConstr d6e0: 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. d6f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea d700: 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e ch defineConstan d710: 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 t [list \.. d720: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP d730: 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT d740: 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 IONS INTEROP_FTS d750: 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 5_EXTENSION \.. d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT d770: 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e EROP_JSON1_EXTEN d780: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 SION INTEROP_PER d790: 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f CENTILE_EXTENSIO d7a0: 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. d7b0: 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 INTEROP_REGEX d7c0: 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 P_EXTENSION INTE d7d0: 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 ROP_TEST_EXTENSI d7e0: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. d7f0: 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 INTEROP_TOTY d800: 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 PE_EXTENSION INT d810: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB d820: 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 LE \.. d830: 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f USE_INTEROP_ d840: 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 DLL] {.. d850: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain d860: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d t [appendArgs \. d870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . d880: 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e [getSQLiteDefin d890: 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d eConstantPrefix] d8a0: 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
d8b0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
d8c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
d8d0: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
d8e0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d  exists ::no(shim
d8f0: 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64  SQLiteVisualStud
d900: 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d  ioConstraints)]}
d910: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d920: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
d930: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69 73   [appendArgs vis
d940: 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75  ualStudio [getBu
d950: 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20  ildYear]]..
d960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
d970: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n d980: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 o\n.. }.. d990: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc d9a0: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun d9b0: 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 timeOption { nat d9c0: 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ive } {.. i d9d0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 f {[llength [inf d9e0: 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 o commands debug d9f0: 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 ]] > 0 && \.. da00: 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 [llength da10: 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 [info subcommand da20: 73 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f s debug runtimeo da30: 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b ption]] > 0 && [ da40: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. da50: 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 debug runtimeop da60: 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 tion [expr {$nat
da70: 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72  ive ? "add" : "r
da80: 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d  emove"}] native.
da90: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20  .      }] == 0}
daa0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
dab0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
dac0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
dad0: 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
dae0: 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b  ectCommand] && [
daf0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
db00: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49   object invoke I
db10: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
db20: 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74  tive [expr {$nat db30: 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 ive ? \.. db40: 20 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d 65 "AddRuntime db50: 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 Option" : "Remov db60: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d eRuntimeOption"} db70: 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 ] native.. db80: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. db90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return dba0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... dbb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 . return fa dbc0: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 lse.. }..... dbd0: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor dbe0: 53 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 SQLiteBuilds { c dbf0: 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 hannel {select f dc00: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. dc10: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE dc20: 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72 : Check for ever dc30: 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 y possible valid dc40: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 combination of dc50: 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e values used when dc60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # dc70: 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65 locating out the dc80: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 build output di dc90: 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 rectory, showing dca0: 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d each available. dcb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b dcc0: 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61 uild variation a dcd0: 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 long the way... dce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo dcf0: 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 reach native [li dd00: 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b st false true] { dd10: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac dd20: 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 h year [getBuild dd30: 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 Years] {.. dd40: 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 foreach conf dd50: 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 iguration [getBu dd60: 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration dd70: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s] {.. dd80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. dd90: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 # NOTE: Figure dda0: 6f 75 74 20 74 68 65 20 65 66 66 65 63 74 69 76 out the effectiv ddb0: 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d e build platform ddc0: 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 . This is.. ddd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # dde0: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether ddf0: 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 or not a [prima de00: 72 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 75 69 rily] native bui de10: 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ld.. de20: 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 # is being de30: 20 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 used. For [pri de40: 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 marily] non-nati de50: 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 ve builds,.. de60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # de70: 74 68 69 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 this will be an de80: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 empty string... de90: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. dea0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c set pl deb0: 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 atform [getBuild dec0: 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 Platform$native
ded0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
dee0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel def0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " df10: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo df20: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ df30: 4c 69 74 65 20 62 75 69 6c 64 20 5c 22 22 20 5b Lite build \"" [ df40: 65 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 expr \.. df50: 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 65 {$native
df60: 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22   ? "native/" : "
df70: 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  "}] [expr {[stri
df80: 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20  ng length \..
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c               $pl dfa0: 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 atform] > 0 ? [a dfb0: 70 70 65 6e 64 41 72 67 73 20 24 70 6c 61 74 66 ppendArgs$platf
dfc0: 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79  orm /] : ""}] $y dfd0: 65 61 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ear \.. dfe0: 20 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 69 67 /$config
dff0: 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22  uration "\"... "
e000: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
e010: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
e020: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68  # NOTE: Build th
e030: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
e040: 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  d directory wher
e050: 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d  e the necessary.
e060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
e070: 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20       components
e080: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
e090: 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65  SQLite should be
e0a0: 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20   found...
e0b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e0c0: 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
e0d0: 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65  y [joinBuildDire
e0e0: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5c 0d  ctory $native \. e0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e100: 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 [getBuildBaseDi e110: 72 65 63 74 6f 72 79 5d 20 24 79 65 61 72 20 24 rectory]$year $e120: 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 platform$config
e130: 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20  uration]....
e140: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e150: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
e160: 6f 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  o the necessary
e170: 66 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75  files exist?  Cu
e180: 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65  rrently, no othe
e190: 72 20 73 74 65 70 73 0d 0a 20 20 20 20 20 20 20  r steps..
e1a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
e1b0: 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66 79   taken to verify
e1c0: 20 74 68 69 73 20 62 75 69 6c 64 20 69 73 20 61   this build is a
e1d0: 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d  ctually viable..
e1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
e200: 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c  [isBuildAvailabl
e210: 65 20 24 6e 61 74 69 76 65 20 24 64 69 72 65 63  e $native$direc
e220: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
e250: 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20 22 73  NOTE: When in "s
e260: 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61 75 74  elect" mode, aut
e270: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63  omatically selec
e280: 74 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20 20  t the first..
e290: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
e2a0: 20 20 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69     available bui
e2b0: 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74  ld of System.Dat
e2c0: 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 74 68 65  a.SQLite and the
e2d0: 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20  n return..
e2e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
e2f0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20  immediately...
e300: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
e320: 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74  {$select && [mat e330: 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 chPlatform$plat
e340: 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  form]} then {..
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
e360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e370: 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c    # NOTE: Manual
e380: 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c 6c 20  ly override all
e390: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
e3a0: 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d 0a 20  ory selection..
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
e3c0: 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 20 74         related t
e3d0: 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 6e 20  est settings in
e3e0: 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 20 74  order to force t
e3f0: 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 20 20  his build..
e400: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
e410: 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74     of System.Dat
e420: 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 20 75  a.SQLite to be u
e430: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  sed...
e440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
e450: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63           if {![c
e460: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69  hangeNativeRunti
e470: 6d 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76 65  meOption $native e480: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu e4a0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
e4b0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e4d0: 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20   "no, failed to
e4e0: 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65  " [expr {$native e4f0: 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f ? "add" : "remo e500: 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ve"}] \.. e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " e520: 20 74 68 65 20 5c 22 6e 61 74 69 76 65 5c 22 20 the \"native\" e530: 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 5c 6e runtime option\n e540: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... e550: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f e560: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. e570: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e580: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a set : e590: 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65 61 72 :test_year$year
e5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e5b0: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c 61    set ::test_pla
e5c0: 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 0d  tform $platform. e5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e5e0: 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 set ::test_conf e5f0: 69 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 iguration$confi
e600: 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20  guration....
e610: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
e620: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe e630: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 "y e650: 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" e660: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
e670: 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d   "native/" : ""}
e680: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
e690: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
e6a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $e6b0: 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 platform] > 0 ? e6c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e6e0: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20$platform /]
e6f0: 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 2f 20 24  : ""}] $year /$
e700: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 29  configuration ")
e710: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \n"]....
e720: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
e730: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rue..
e740: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
e760: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ e770: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. e780: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. e790: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. e7a0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
e7b0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20  hannel no\n..
e7c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
e7d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e7e0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
e7f0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
e800: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
e810: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
e820: 4c 69 74 65 52 65 6c 65 61 73 65 73 20 7b 20 63  LiteReleases { c
e830: 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66  hannel {select f
e840: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
e850: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e860: 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 61 73 74  : Check for past
e870: 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 79 73   releases of Sys
e880: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
e890: 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  in the directory
e8a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e8b0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
e8c0: 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
e8d0: 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e  Lite" environmen
e8e0: 74 20 76 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a  t variable, if..
e8f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
e900: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esent...      #.
e910: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
e920: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 53 79   exists ::env(Sy
e930: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e940: 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
e950: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
e960: 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e  h $::env(System. e970: 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 Data.SQLite)] > e980: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. e990: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # e9a0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the e9b0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 fully qualified e9c0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where e9d0: 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 the necessary.. e9e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c e9f0: 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 omponents for Sy ea00: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite ea10: 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 should be found ea20: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ea30: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 set direct ea40: 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ory [file native ea50: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join ea60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
ea70: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74  ::env(System.Dat
ea80: 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 74 52 65  a.SQLite) [getRe
ea90: 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d  leaseVersion]]].
eaa0: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
eab0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen eac0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. ead0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check eae0: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D eaf0: 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 ata.SQLite relea eb00: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 se \"" \.. eb10: 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72 79$directory
eb20: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20   "\"... "]....
eb30: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c        if {[isRel
eb40: 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 64  easeAvailable $d eb50: 69 72 65 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 irectory platfor eb60: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. eb70: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin eb80: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
eb90: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  rm] == 0} then {
eba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
ebb0: 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f  t platform unkno
ebc0: 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  wn..          }.
ebd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
ebe0: 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74  {$select && [mat ebf0: 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 chPlatform$plat
ec00: 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  form]} then {..
ec10: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
ec20: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
ec30: 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20   $directory.... ec40: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs ec50: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
ec60: 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65  dArgs "yes, sele
ec70: 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72  cted (" $platfor ec80: 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 m ")\n"].... ec90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t eca0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d rue.. } ecb0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ecc0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ecd0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
ece0: 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72  "yes (" $platfor ecf0: 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 m ")\n"].. ed00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } ed10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ed20: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
ed30: 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20  l no\n....
ed40: 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68      foreach path
ed50: 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 73   [lsort -decreas
ed60: 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 24  ing [file list $ed70: 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d directory *]] {. ed80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if ed90: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 70 {[file exists$p
eda0: 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 73  ath] && [file is
edb0: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 5d  directory $path] edc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. edd0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
ede0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
edf0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
ee00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
ee10: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
ee20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65  m.Data.SQLite re
ee30: 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  lease \"" \..
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $ee50: 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a path "\"... "].. ee60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ee70: 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 if {[isReleaseAv ee80: 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 6c ailable$path pl
ee90: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
eea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
eeb0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
eec0: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = eed0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s eef0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e et platform unkn ef00: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 own.. ef10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ef20: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 if {$s
ef30: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50  elect && [matchP
ef40: 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor ef50: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se ef70: 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 t ::build_direct ef80: 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20 ory$path....
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
efa0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a efb0: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 ppendArgs "yes, efc0: 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 selected ("$pla
efd0: 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a  tform ")\n"]....
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eff0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f010: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
f020: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
f030: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen f040: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 dArgs "yes ("$p
f050: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f070: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
f080: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
f090: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
f0a0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. f0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. f0d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. f0e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } f0f0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. f100: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
f110: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
f120: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
f130: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
f140: 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61  able \"System.Da
f150: 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 6e  ta.SQLite\" is n
f160: 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  ot " \..
f170: 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 69      "set, skippi
f180: 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 6c  ng check for rel
f190: 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20  eases...\n"]..
f1a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
f1b0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
f1c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
f1d0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69  checkForSQLiteLi
f1e0: 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20  brary { channel
f1f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
f200: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- f210: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c checking for SQL f220: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library f230: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i f240: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. f250: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo f260: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu f270: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. f280: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. f290: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 SQLite.SQLite3 S f2a0: 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 QLiteVersion.. f2b0: 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d } version] = f2c0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. f2d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f2e0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if f2f0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 the returned ve f300: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 rsion was null. f310: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 If so, make it f320: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 easy.. # f330: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a to spot... f340: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f350: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l f360: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
f370: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
f380: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
f390: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
f3a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
f3b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f3c0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65  : Attempt to que
f3d0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
f3e0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
f3f0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  for the SQLite..
f400: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
f410: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library...
f420: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f430: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
f440: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
f450: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
f460: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
f470: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
f480: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
f490: 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 72  Lite3 SQLiteSour
f4a0: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20  ceId..        }
f4b0: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20  sourceId]} then
f4c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
f4d0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
f4e0: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71  : We failed to q
f4f0: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20  uery the Fossil
f500: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65  source identifie
f510: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  r...          #.
f520: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
f530: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d  ourceId unknown.
f540: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
f550: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f560: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
f570: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46  f the returned F
f580: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
f590: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c  ntifier was null
f5a0: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23  .  If..        #
f5b0: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20         so, make
f5c0: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e  it easy to spot.
f5d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f5e0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
f5f0: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49   length $sourceI f600: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d d] == 0} then {. f610: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s f620: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 ourceId null.. f630: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f640: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # f650: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 NOTE: Yes, the S f660: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra f670: 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 ry appears to be f680: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... f690: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f6a0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 addConstraint SQ f6b0: 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Lite.... f6c0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
f6d0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20  appendArgs "yes
f6e0: 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20  (" $version " " f6f0: 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d$sourceId ")\n"]
f700: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
f710: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
f720: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. f730: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... f740: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b .. proc check f750: 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 ForSQLiteInterop f760: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a { channel } {.. f770: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
f780: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
f790: 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69  ing for SQLite i
f7a0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e  nterop assembly.
f7b0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
f7c0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
f7d0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
f7e0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
f7f0: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
f800: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
f810: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e  QLite.SQLite3 In
f820: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..
f830: 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
f840: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f850: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f860: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
f870: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65   the returned ve
f880: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20  rsion was null.
f890: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20   If so, make it
f8a0: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20  easy..        #
f8b0: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a        to spot...
f8c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f8d0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
f8e0: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20  ength $version] f8f0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. f900: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 set vers f910: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 ion null.. f920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # f930: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE f940: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 : Attempt to que f950: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f ry the Fossil so f960: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier f970: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a for the SQLite.. f980: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # f990: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 core library... f9a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f9b0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. f9c0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object f9d0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + f9e0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. f9f0: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste fa00: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ fa10: 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 Lite3 InteropSou fa20: 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d rceId.. } fa30: 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e sourceId]} then fa40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. fa50: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT fa60: 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 E: We failed to fa70: 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c query the Fossil fa80: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 source identifi fa90: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set fab0: 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e sourceId unknown fac0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... fad0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. fae0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check faf0: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 if the returned fb00: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id fb10: 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c entifier was nul fb20: 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 l. If.. fb30: 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 # so, make fb40: 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 it easy to spot fb50: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. fb60: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin fb70: 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 g length$source
fb80: 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  Id] == 0} then {
fb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
fba0: 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20  sourceId null..
fbb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
fbc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
fbd0: 20 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63   NOTE: Before ac
fbe0: 74 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68  tually adding th
fbf0: 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  e test constrain
fc00: 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  t, make sure the
fc10: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
fc20: 20 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c    version is val
fc30: 69 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73  id (i.e. not jus
fc40: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20  t that we could
fc50: 71 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20  query it)...
fc60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
fc70: 66 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22  f {$version ne " fc80: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 null"} then {.. fc90: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. fca0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye fcb0: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e s, the SQLite in fcc0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 terop assembly a fcd0: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 ppears to be ava fce0: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 ilable... fcf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. fd00: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 addConstraint SQ fd10: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 LiteInterop.... fd20: 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 set ans fd30: 77 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20 wer yes.. fd40: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. fd50: 20 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 20 set answer fd60: 6e 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d no.. }... fd70: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
fd80: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
fd90: 72 67 73 20 24 61 6e 73 77 65 72 20 22 20 28 22  rgs $answer " (" fda0: 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73$version " " $s fdb0: 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a ourceId ")\n"].. fdc0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fdd0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
fde0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20  hannel no\n..
fdf0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
fe00: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f      proc checkFo
fe10: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  rSQLiteDefineCon
fe20: 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20  stant { channel
fe30: 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  name } {..
fe40: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ fe50: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. fe60: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch fe70: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste fe80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 m.Data.SQLite de fe90: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 fine constant \" fea0: 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 "$name \..
feb0: 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a       "\"... "]..
fec0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
fed0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
fee0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
fef0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
ff00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
ff10: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
ff20: 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f  SQLite3 DefineCo
ff30: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d  nstants..      }
ff40: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73   defineConstants
ff50: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
ff60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65          if {[lse
ff70: 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63  arch -exact -noc
ff80: 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74  ase $defineConst ff90: 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d ants$name] != -
ffa0: 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..
ffb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ffc0: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
ffd0: 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74  his define const
ffe0: 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20  ant was enabled
fff0: 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64  when the managed
10000 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
10010 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73      assembly was
10020 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20   compiled...
10030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10040 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
10050 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65   [appendArgs [ge
10060 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  tSQLiteDefineCon
10070 73 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61  stantPrefix] $na 10080 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 me].... 10090 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
100a0 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d  yes\n..        }
100b0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
100c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 100d0 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 l no\n.. 100e0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 100f0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 10100 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c$channel error\
10110 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
10120 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
10130 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  etDateTimeFormat
10140 20 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74 72 75   { {timeZone tru
10150 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
10160 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
10170 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69  his procedure si
10180 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65  mply returns the
10190 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54   "default" DateT
101a0 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d  ime format used.
101b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
101c0 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
101d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
101e0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
101f0 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f  ts ::datetime_fo
10200 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20  rmat] && \..
10210 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
10220 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65  ngth $::datetime 10230 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 _format] > 0} th 10240 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 10250 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 10260 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 Return the manu 10270 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 ally overridden 10280 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 value for the Da 10290 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a teTime format... 102a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 102b0 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 return$::dat
102c0 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20  etime_format..
102d0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
102e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
102f0 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
10300 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54  an ISO8601 DateT
10310 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61  ime format compa
10320 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74  tible with SQLit
10330 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  e,..        #
10340 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
10350 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74  SQLite, and suit
10360 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74  able for round-t
10370 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65  ripping with the
10380 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
10390 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73    DateTime class
103a0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
103b0 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75  k.  If this valu
103c0 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20  e is changed,..
103d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
103e0 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79  arious tests may
103f0 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20   fail...
10400 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
10410 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  n [appendArgs \.
10420 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79  .            "yy
10430 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73  yy-MM-dd HH:mm:s
10440 73 2e 46 46 46 46 46 46 46 22 20 5b 65 78 70 72  s.FFFFFFF" [expr
10450 20 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20 22 4b   {$timeZone ? "K 10460 22 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 20 20 " : ""}]].. 10470 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 10480 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 proc getDateTi 10490 6d 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 65 20 meTicks { value 104a0 7b 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 66 61 {local ""} {defa 104b0 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ult ""} } {.. 104c0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 104d0 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d ength$value] ==
104e0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
104f0 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 66 61      return $defa 10500 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ult.. }.... 10510 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 10520 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 10530 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 dateTime [object 10540 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 invoke -create 10550 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 10560 70 61 72 61 6d 65 74 65 72 74 79 70 65 73 20 5b parametertypes [ 10570 6c 69 73 74 20 53 74 72 69 6e 67 20 53 74 72 69 list String Stri 10580 6e 67 20 49 46 6f 72 6d 61 74 50 72 6f 76 69 64 ng IFormatProvid 10590 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 er \.. 105a0 20 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 System.Globali 105b0 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69 6d 65 53 zation.DateTimeS 105c0 74 79 6c 65 73 5d 20 44 61 74 65 54 69 6d 65 20 tyles] DateTime 105d0 50 61 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 20 ParseExact \.. 105e0 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65$value
105f0 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72   [getDateTimeFor
10600 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73 74  mat] null Adjust
10610 54 6f 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20 20  ToUniversal]..
10620 20 20 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d 0a      }]} then {..
10630 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $10640 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d default.. } 10650 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 10660 74 72 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e tring is boolean 10670 20 2d 73 74 72 69 63 74 20 24 6c 6f 63 61 6c 5d -strict$local]
10680 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10690 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b    set dateTime [
106a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63  object invoke -c
106b0 72 65 61 74 65 20 44 61 74 65 54 69 6d 65 20 53  reate DateTime S
106c0 70 65 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20 20  pecifyKind \..
106d0 20 20 20 20 20 20 20 20 20 20 24 64 61 74 65 54            $dateT 106e0 69 6d 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 20 ime Utc].. 106f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10700 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 return [object 10710 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d invoke$dateTim
10720 65 20 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20  e Ticks]..
10730 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  }....      if {$10740 6c 6f 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a 20 local} then {.. 10750 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6f return [o 10760 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 bject invoke$da
10770 74 65 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54 69  teTime ToLocalTi
10780 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20  me.Ticks]..
10790 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
107a0 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63     return [objec
107b0 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69  t invoke $dateTi 107c0 6d 65 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 me ToUniversalTi 107d0 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 me.Ticks].. 107e0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 107f0 20 20 70 72 6f 63 20 67 65 74 50 72 6f 70 65 72 proc getProper 10800 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 ties { object va 10810 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 rName } {.. 10820 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
10830 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a  e properties....
10840 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20        set count
10850 30 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 61 6d  0..      set nam
10860 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
10870 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74     if {[isObject
10880 48 61 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d 20  Handle $object] 10890 26 26 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 6e &&$object ne "n
108a0 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ull"} then {..
108b0 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
108c0 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74  nd names [object
108d0 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20   members \..
108e0 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74          -membert
108f0 79 70 65 73 20 50 72 6f 70 65 72 74 79 20 2d 6e  ypes Property -n
10900 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d  ameonly $object] 10910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c .... eval 10920 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b lappend names [ 10930 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 5c object members \ 10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d .. -m 10950 65 6d 62 65 72 74 79 70 65 73 20 46 69 65 6c 64 embertypes Field 10960 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 -nameonly$obje
10970 63 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ct]..      }....
10980 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
10990 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20  me $names {.. 109a0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 109b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 109c0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a 65 ect invoke -obje 109d0 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f ctflags +NoDispo 109e0 73 65 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d 65 se$object $name 109f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 .. } valu 10a00 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d e] == 0} then {. 10a10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 10a20 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 isObjectHandle$
10a30 76 61 6c 75 65 5d 20 26 26 20 24 76 61 6c 75 65  value] && $value 10a40 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e ne "null"} then 10a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10a60 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 set error null; 10a70 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 10a80 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 10a90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10aa0 20 20 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73 -marshalflags 10ab0 20 2b 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 72 +NoHandle Inter 10ac0 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 preter.GetActive 10ad0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10ae0 20 20 20 20 41 64 64 4f 62 6a 65 63 74 52 65 66 AddObjectRef 10af0 65 72 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 65 erence Ok$value
10b00 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20 20   error....
10b10 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72        lappend pr
10b20 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73  operties(objects
10b30 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76  ) [list $name$v
10b40 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  alue]..
10b50 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
10b60 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70         lappend p
10b70 72 6f 70 65 72 74 69 65 73 28 76 61 6c 75 65 73  roperties(values
10b80 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76  ) [list $name$v
10b90 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  alue]..
10ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
10bb0 69 6e 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20 20  incr count..
10bc0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
10bd0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
10be0 70 72 6f 70 65 72 74 69 65 73 28 65 72 72 6f 72  properties(error
10bf0 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  s) [list $name$
10c00 3a 3a 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20 20  ::errorCode]..
10c10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
10c20 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
10c30 20 24 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d 0a   $count.. }.. 10c40 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 ... proc getA 10c50 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f llProperties { o 10c60 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 bject varName } 10c70 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 10c80 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72$varName proper
10c90 74 69 65 73 0d 0a 20 20 20 20 20 20 73 65 74 20  ties..      set
10ca0 76 61 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a 0d  value $object... 10cb0 0a 20 20 20 20 20 20 77 68 69 6c 65 20 7b 74 72 . while {tr 10cc0 75 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 ue} {.. i 10cd0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 10ce0 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e properties(seen 10cf0 4f 62 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d 0a Objects)] || \.. 10d00 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c$val
10d10 75 65 20 6e 69 20 24 70 72 6f 70 65 72 74 69 65  ue ni $propertie 10d20 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d 20 s(seenObjects)} 10d30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10d40 20 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 20 getProperties 10d50 24 76 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65$value propertie
10d60 73 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  s..          lap
10d70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28  pend properties(
10d80 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 24 76 61  seenObjects) $va 10d90 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a lue.. }.. 10da0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 10db0 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 info exists prop 10dc0 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d erties(objects)] 10dd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10de0 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 break.. 10df0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 10e00 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 72 if {[llength$pr
10e10 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73  operties(objects
10e20 29 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  )] == 0} then {.
10e30 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74  .          unset
10e40 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65   properties(obje
10e50 63 74 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20 20  cts); break..
10e60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
10e70 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6c 69 6e    set value [lin
10e80 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 70 72 6f  dex [lindex $pro 10e90 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 10ea0 20 30 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 0] end].. 10eb0 20 20 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 set properties 10ec0 28 6f 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e 67 (objects) [lrang 10ed0 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f 62 e$properties(ob
10ee0 6a 65 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a 20  jects) 1 end]..
10ef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
10f00 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
10f10 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e   properties(seen
10f20 4f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20  Objects)]} then
10f30 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  {..        forea
10f40 63 68 20 76 61 6c 75 65 20 24 70 72 6f 70 65 72  ch value $proper 10f50 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 ties(seenObjects 10f60 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ) {.. i 10f70 66 20 7b 24 76 61 6c 75 65 20 65 71 20 24 6f 62 f {$value eq $ob 10f80 6a 65 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a ject} continue.. 10f90 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 10fa0 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 {object dispose 10fb0 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 20$value}..
10fc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e   }....        un
10fd0 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28 73  set properties(s
10fe0 65 65 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20 20  eenObjects)..
10ff0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
11000 20 20 20 20 70 72 6f 63 20 67 65 74 56 61 72 69      proc getVari
11010 61 62 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65 73  ables { varNames
11020 20 7b 6f 62 6a 65 63 74 73 20 66 61 6c 73 65 7d   {objects false}
11030 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
11040 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
11050 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76  .      foreach v
11060 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73  arName $varNames 11070 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 11080 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list 11090 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 76 array exists$v
110a0 61 72 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20 7b  arName]]} then {
110b0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
110c0 61 72 72 61 79 4e 61 6d 65 20 24 76 61 72 4e 61  arrayName $varNa 110d0 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 me.... 110e0 66 6f 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 4e foreach elementN 110f0 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b ame [uplevel 1 [ 11100 6c 69 73 74 20 61 72 72 61 79 20 6e 61 6d 65 73 list array names 11110 20 24 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b 0d$arrayName]] {.
11120 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
11130 20 6e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67   name [appendArg
11140 73 20 24 61 72 72 61 79 4e 61 6d 65 20 28 20 24  s $arrayName ($
11150 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d 0a  elementName )]..
11160 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
11170 76 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65  varValue [upleve
11180 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24 6e  l 1 [list set $n 11190 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... 111a0 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 if {$object
111b0 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61  s && [isObjectHa
111c0 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d  ndle $varValue]} 111d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 111e0 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 111f0 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74 complain propert 11200 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ies.. 11210 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 getAllPropert 11220 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 72 ies$varValue pr
11230 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20  operties....
11240 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
11250 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $11260 6e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74 20 name [array get 11270 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20 properties]].. 11280 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 11290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 112a0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result 112b0 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 [list$name $va 112c0 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 rValue].. 112d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 112e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 112f0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 11300 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 5b 75 set varValue [u 11310 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 plevel 1 [list s 11320 65 74 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a 0d et$varName]]...
11330 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24  .          if {$11340 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f 62 objects && [isOb 11350 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 56 jectHandle$varV
11360 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  alue]} then {..
11370 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74             unset
11380 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f   -nocomplain pro
11390 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..
113a0 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65       getAllPrope
113b0 72 74 69 65 73 20 24 76 61 72 56 61 6c 75 65 20  rties $varValue 113c0 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 properties.... 113d0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 113e0 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 d result [list$
113f0 76 61 72 4e 61 6d 65 20 5b 61 72 72 61 79 20 67  varName [array g
11400 65 74 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d  et properties]].
11410 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
11420 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
11430 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
11440 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 24  [list $varName$
11450 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20  varValue]..
11460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11470 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
11480 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 11490 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 lt.. }..... 114a0 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c proc enumerabl 114b0 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 eToList { enumer 114c0 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 able } {.. 114d0 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 set result [list 114e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 114f0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 string length$e
11500 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20  numerable] == 0
11510 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65  || $enumerable e 11520 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b q "null"} then { 11530 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 11540 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20$result..
11550 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63  }....      objec
11560 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
11570 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c   item $enumerabl 11580 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 e {.. if 11590 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 115a0 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e$item] > 0} then
115b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61   {..          la
115c0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69  ppend result [$i 115d0 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 tem ToString].. 115e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 115f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 11600 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
11610 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61  .....    proc ca
11620 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73  tchAndReturn { s
11630 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63  cript {stackTrac
11640 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74  e false} {strict
11650 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
11660 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
11670 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20  E: Evaluate the
11680 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20  script provided
11690 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e  by our caller in
116a0 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d   their context,.
116b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
116c0 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68  apturing both th
116d0 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65  e result and the
116e0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code...
116f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
11700 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75  t code [catch {u
11710 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 74  plevel 1 $script 11720 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 } result].... 11730 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11740 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 TE: Did the scri 11750 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f pt provided by o 11760 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 ur caller NOT ra 11770 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 ise an error?.. 11780 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 11790 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 63 6f {$strict && $co 117a0 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 de == 0 || !$str
117b0 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20  ict && $code != 117c0 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 1} then {.. 117d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 117e0 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 NOTE: Success. 117f0 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 Return a list wi 11800 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f th the return co 11810 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c de and the resul 11820 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 11830 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 11840 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c ist$code $resul 11850 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 t].. } else 11860 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d if {$stackTrace}
11870 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11880 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
11890 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75  TE: Failure.  Ou
118a0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61  r caller wants a
118b0 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63   full stack trac
118c0 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65  e (if applicable
118d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ),..        #
118e0 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73      return a lis
118f0 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72  t with the retur
11900 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72  n code and the r
11910 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d  esult verbatim..
11920 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11930 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
11940 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d   $code$result].
11950 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11960 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11970 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
11980 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72  ure.  Our caller
11990 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61   does not want a
119a0 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63   full stack trac
119b0 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23  e (if..        #
119c0 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c         applicabl
119d0 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73  e), return a lis
119e0 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72  t with the retur
119f0 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f  n code, the erro
11a00 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
11a10 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20     code for the
11a20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64  interpreter, and
11a30 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
11a40 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20  ge up to the..
11a50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f        #       po
11a60 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 73 74  int where the st
11a70 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64  ack trace should
11a80 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20   start...
11a90 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
11aa0 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  rn [list $code$
11ab0 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a 20  ::errorCode \..
11ac0 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 74 72             [extr
11ad0 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
11ae0 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
11af0 61 67 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a 20  age $result]].. 11b00 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 11b10 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 .. proc compi 11b20 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a leCSharpWith {.. 11b30 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 text 11b40 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 memory symbols 11b50 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 strict resultsVa 11b60 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e rName errorsVarN 11b70 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 ame fileNames.. 11b80 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 args 11b90 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 11ba0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 # NOTE: Sinc 11bb0 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 e we are going t 11bc0 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f o use this metho 11bd0 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 d name a lot, as 11be0 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 sign it to a.. 11bf0 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 11c00 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 able first... 11c10 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 11c20 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 add ReferencedAs 11c30 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a semblies.Add.... 11c40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 11c50 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 NOTE: Create th 11c60 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 e base command t 11c70 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 o evaluate and a 11c80 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 dd the property 11c90 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 settings.. 11ca0 23 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65 # that are 11cb0 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e almost always n 11cc0 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 eeded by our uni 11cd0 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 t tests (i.e. th 11ce0 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 e System.. 11cf0 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 # and Syst 11d00 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 em.Data assembly 11d10 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 references)... 11d20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 11d30 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 t command [list 11d40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d \.. com 11d50 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 pileCSharp$text
11d60 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c   $memory$symbol
11d70 73 20 24 73 74 72 69 63 74 20 72 65 73 75 6c 74  s $strict result 11d80 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 s errors \.. 11d90 20 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65$add Syste
11da0 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65  m.dll $add Syste 11db0 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 m.Data.dll$add
11dc0 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69  System.Transacti
11dd0 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20  ons.dll \..
11de0 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d       $add System 11df0 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 .Xml.dll].... 11e00 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11e10 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 TE: Add all the 11e20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 provided file na 11e30 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 mes as assembly 11e40 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 references... 11e50 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 #.. fore 11e60 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 ach fileName$fi
11e70 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
11e80 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61     lappend comma
11e90 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61  nd $add [getBina 11ea0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
11eb0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  Name]..      }..
11ec0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11ed0 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65   # NOTE: Add the
11ee0 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73   extra arguments
11ef0 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65  , if any, to the
11f00 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c   command to eval
11f10 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uate...      #..
11f20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
11f30 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73  nd command $args 11f40 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11f50 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 # NOTE: Alias 11f60 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f the compiler lo 11f70 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 cal results and 11f80 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 errors variables 11f90 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 to the.. # 11fa0 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 variable 11fb0 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 names provided b 11fc0 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... 11fd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 11fe0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 11ff0 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65$resultsVarName
12000 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
12010 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $12020 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 resultsVarName r 12030 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d esults.. }. 12040 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 12050 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 ring length$err
12060 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  orsVarName] > 0}
12070 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12080 20 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73   upvar 1 $errors 12090 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a VarName errors.. 120a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 120b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 120c0 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 : Evaluate the c 120d0 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 onstructed [comp 120e0 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 ileCSharp] comma 120f0 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 nd and return th 12100 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 12110 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 result... 12120 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 #.. eval$c
12130 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c  ommand..    }...
12140 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d  ..    proc isMem
12150 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65  oryDb { fileName
12160 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
12170 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20       # NOTE: Is
12180 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61  the specified da
12190 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65  tabase file name
121a0 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65   really an in-me
121b0 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a  mory database?..
121c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
121d0 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69  eturn [expr {$fi 121e0 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f leName eq ":memo 121f0 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ry:" || \.. 12200 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e [string ran 12210 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 ge$fileName 0 1
12220 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d  2] eq "file::mem
12230 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a  ory:"}]..    }..
12240 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61  ...    proc isTa
12250 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b  bleInDb { name {
12260 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
12270 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12280 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
12290 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
122a0 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
122b0 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
122c0 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
122d0 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
122e0 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68    It contains th
122f0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
12300 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61  ction handle tha
12310 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  t will be..
12320 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f   #       used to
12330 20 65 78 65 63 75 74 65 20 74 68 65 20 71 75 65   execute the que
12340 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ry used to deter
12350 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65  mine if the name
12360 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20  d table is..
12370 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e    #       presen
12380 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 61  t in that databa
12390 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
123a0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 123b0 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... 123c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 123d0 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 : Use the sqlite 123e0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f _master table to 123f0 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 determine if th 12400 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is 12410 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12420 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 present in the d 12430 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 atabase... 12440 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c #.. set sql 12450 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 {.. SELE 12460 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d CT COUNT(*) FROM 12470 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 sqlite_master W 12480 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 HERE type = 'tab 12490 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f le' AND name = ? 124a0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ;.. }.... 124b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 124c0 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d OTE: Return non- 124d0 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 zero if the name 124e0 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 d table is prese 124f0 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nt... #.. 12500 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 return [expr 12510 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c {.. [sql 12520 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 execute -execut 12530 65 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 e scalar$db $sq 12540 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 l [list param1 S 12550 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 tring$name]] >
12560 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20  0..      }]..
12570 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
12580 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67 65  getDbDefaultPage
12590 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  Size {} {..
125a0 20 72 65 74 75 72 6e 20 5b 65 78 65 63 75 74 65   return [execute
125b0 53 71 6c 20 22 50 52 41 47 4d 41 20 70 61 67 65  Sql "PRAGMA page
125c0 5f 73 69 7a 65 3b 22 20 73 63 61 6c 61 72 5d 0d  _size;" scalar].
125d0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
125e0 72 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74  roc getDbDefault
125f0 43 61 63 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a  CacheSize {} {..
12600 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
12610 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d 41  ecuteSql "PRAGMA
12620 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 20 73 63   cache_size;" sc
12630 61 6c 61 72 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  alar]..    }....
12640 0a 20 20 20 20 70 72 6f 63 20 75 73 65 4c 65 67  .    proc useLeg
12650 61 63 79 44 62 50 61 67 65 41 6e 64 43 61 63 68  acyDbPageAndCach
12660 65 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d 65  eSizes { varName
12670 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
12680 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
12690 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
126a0 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
126b0 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
126c0 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
126d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
126e0 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69  ller.  It contai
126f0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database
12700 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
12710 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a  e that will be..
12720 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
12730 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 71 75  ed to execute qu
12740 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 73 65  eries used to se
12750 74 20 74 68 65 20 70 61 67 65 20 61 6e 64 20 63  t the page and c
12760 61 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 20  ache sizes...
12770 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
12780 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. 12790 0a 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 ... sql exe 127a0 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 cute$db {..
127b0 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
127c0 73 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 20  size = 1024;..
127d0 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
127e0 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b 0d  he_size = 2000;.
127f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12800 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c    return [list \
12810 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c  ..          [sql
12820 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
12830 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52  e scalar $db "PR 12840 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 AGMA page_size;" 12850 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b ] \.. [ 12860 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 sql execute -exe 12870 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 cute scalar$db
12880 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
12890 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  ze;"]]..    }...
128a0 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 74 72 61  ..    proc extra
128b0 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69  ctSystemDataSQLi
128c0 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61  teExceptionMessa
128d0 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a  ge { value } {..
128e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
128f0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 73 74   NOTE: If the st
12900 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74 6f  ring conforms to
12910 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 6e   format of the n
12920 6f 72 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e 0d  ormal exception.
12930 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
12940 72 72 6f 72 20 73 74 72 69 6e 67 73 2c 20 65 78  rror strings, ex
12950 74 72 61 63 74 20 61 6e 64 20 72 65 74 75 72 6e  tract and return
12960 20 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f 72 20   only the error
12970 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 23  message..      #
12980 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 69         portion i
12990 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23 0d  tself...      #.
129a0 0a 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65  .      set patte
129b0 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  rns [list \..
129c0 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61     {System\.Data
129d0 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65  \.SQLite\.SQLite
129e0 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30  Exception $$0x80 129f0 30 30 34 30 30 35 5c 29 3a 20 28 2e 2b 3f 29 20 004005$$: (.+?)
12a00 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20   (?: )?at} \..
12a10 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74      {System\.Dat
12a20 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
12a30 65 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f  eException: (.+?
12a40 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a  )  (?: )?at} \..
12a50 20 20 20 20 20 20 7b 45 61 67 6c 65 5c 2e 5f 43        {Eagle\._C
12a60 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50 75 62 6c 69  omponents\.Publi
12a70 63 5c 2e 53 63 72 69 70 74 45 78 63 65 70 74 69  c\.ScriptExcepti
12a80 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29  on: (.+?)  (?: )
12a90 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66  ?at}]....      f
12aa0 6f 72 65 61 63 68 20 70 61 74 74 65 72 6e 20 24  oreach pattern $12ab0 70 61 74 74 65 72 6e 73 20 7b 0d 0a 20 20 20 20 patterns {.. 12ac0 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 12ad0 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 76 61 6c --$pattern $val 12ae0 75 65 20 64 75 6d 6d 79 20 6d 65 73 73 61 67 65 ue dummy message 12af0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 12b00 20 20 20 20 20 73 65 74 20 6d 65 73 73 61 67 65 set message 12b10 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 [string map [li 12b20 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 st \r\n \n] [str 12b30 69 6e 67 20 74 72 69 6d 20 24 6d 65 73 73 61 67 ing trim$messag
12b40 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e]]..          s
12b50 65 74 20 6c 69 6e 65 73 20 5b 73 70 6c 69 74 20  et lines [split
12b60 24 6d 65 73 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a  $message \n].... 12b70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c if {[l 12b80 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d 20 3d length$lines] =
12b90 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 2} then {..
12ba0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 69           if {[li
12bb0 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 65  ndex $lines 0] e 12bc0 71 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 q [lindex$lines
12bd0 20 31 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   1]} then {..
12be0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12bf0 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  n [lindex $lines 12c00 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 0].. 12c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 12c20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 12c30 41 72 67 73 20 5b 6c 69 6e 64 65 78 20 24 6c 69 Args [lindex$li
12c40 6e 65 73 20 30 5d 20 22 20 2d 2d 20 22 20 5b 6c  nes 0] " -- " [l
12c50 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 5d  index $lines 1]] 12c60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 12c70 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 12c80 6e 20 24 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 n$message..
12c90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
12ca0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $12cb0 76 61 6c 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d value.. }.... 12cc0 0a 20 20 20 20 70 72 6f 63 20 74 72 69 6d 53 71 . proc trimSq 12cd0 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 l { sql } {.. 12ce0 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67 73 75 return [regsu 12cf0 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 b -all -- {\s+} 12d00 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 71 [string trim$sq
12d10 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a  l] " "]..    }..
12d20 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 65 63  ...    proc exec
12d30 75 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78  uteSql { sql {ex
12d40 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72  ecute none} {for
12d50 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e  mat none} {fileN
12d60 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
12d70 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
12d80 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] 12d90 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 == 0} then {set 12da0 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 fileName :memor 12db0 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 y:}.. setup 12dc0 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 Db$fileName ""
12dd0 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73  "" "" "" "" fals
12de0 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61  e false false fa
12df0 6c 73 65 20 64 62 20 74 72 75 65 0d 0a 0d 0a 20  lse db true....
12e00 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20       try {..
12e10 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65      return [uple
12e20 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c 0d 0a 20  vel 1 [list \..
12e30 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65             sql e
12e40 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
12e50 24 65 78 65 63 75 74 65 20 2d 66 6f 72 6d 61 74  $execute -format 12e60 20 24 66 6f 72 6d 61 74 20 24 64 62 20 24 73 71$format $db$sq
12e70 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e  l]]..      } fin
12e80 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  ally {..
12e90 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b  set connection [
12ea0 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d  getDbConnection]
12eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20  ....        try
12ec0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6c 65  {..          cle
12ed0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName 12ee0 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 db false false 12ef0 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d false.. } 12f00 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. 12f10 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6c 61 object fla 12f20 67 73 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d gs$connection -
12f30 4e 6f 44 69 73 70 6f 73 65 3b 20 66 72 65 65 44  NoDispose; freeD
12f40 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20  bConnection..
12f50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
12f60 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
12f70 72 6f 63 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b  roc hasNoFlags {
12f80 20 76 61 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20   varName none }
12f90 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
12fa0 20 24 76 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d   $varName flags. 12fb0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 ... if {![i 12fc0 6e 66 6f 20 65 78 69 73 74 73 20 66 6c 61 67 73 nfo exists flags 12fd0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 12fe0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 12ff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 13000 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 13010 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 gth$flags] == 0
13020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13030 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
13040 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13050 69 66 20 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c  if {$none &&$fl
13060 61 67 73 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74  ags eq "None"} t
13070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
13080 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
13090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
130a0 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
130b0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
130c0 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  tConnectionFlags
130d0 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67   { fileName flag
130e0 73 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  s {quiet false}
130f0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
13100 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
13110 72 65 20 6f 75 74 20 77 68 69 63 68 20 64 61 74  re out which dat
13120 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
13130 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  or connection st
13140 72 69 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20  ring these..
13150 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
13160 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20  tion flags will
13170 61 63 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74  actually apply t
13180 6f 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  o.  This is not
13190 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
131a0 20 23 20 20 20 20 20 20 20 69 6e 20 71 75 69 65   #       in quie
131b0 74 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74  t mode because t
131c0 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information
131d0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  is only used for
131e0 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20   logging..
131f0 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f  #       and repo
13200 72 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d  rting purposes..
13210 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13220 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 13230 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 13240 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 13250 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20$fileName] > 0}
13260 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13270 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b    set database [
13280 61 70 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65  appendArgs "file
13290 20 6e 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e   name \"" $fileN 132a0 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 ame \"].. 132b0 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 132c0 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f exists ::dataSo 132d0 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 urce] && \.. 132e0 20 20 20 20 20 20 20 20 21 5b 61 72 72 61 79 20 ![array 132f0 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 exists ::dataSou 13300 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 rce]} then {.. 13310 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 13320 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 base [appendArgs 13330 20 22 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22 "data source \" 13340 22 20 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 "$::dataSource
13350 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  \"]..        } e
13360 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
13370 20 73 65 74 20 64 61 74 61 62 61 73 65 20 3c 75   set database <u
13380 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20  nknown>..
13390 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
133a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
133b0 4e 4f 54 45 3a 20 45 76 65 6e 20 74 68 6f 75 67  NOTE: Even thoug
133c0 68 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  h there is only
133d0 6f 6e 65 20 73 6f 75 72 63 65 20 6f 66 20 66 6c  one source of fl
133e0 61 67 73 20 73 6f 20 66 61 72 2c 20 74 68 65 79  ags so far, they
133f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13400 6d 75 73 74 20 62 65 20 63 6f 6d 62 69 6e 65 64  must be combined
13410 20 75 73 69 6e 67 20 74 68 65 20 63 6f 72 72 65   using the corre
13420 63 74 20 73 79 6e 74 61 78 20 66 6f 72 20 65 6e  ct syntax for en
13430 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20  umerated..
13440 23 20 20 20 20 20 20 20 66 6c 61 67 20 76 61 6c  #       flag val
13450 75 65 73 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ues for the .NET
13460 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   Framework...
13470 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
13480 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c  flags [combineFl
13490 61 67 73 20 24 66 6c 61 67 73 20 22 22 5d 0d 0a  ags $flags ""].. 134a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 134b0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 # NOTE: Show (a 134c0 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61 nd log) the loca 134d0 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla 134e0 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f 63 gs and the assoc 134f0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 iated.. # 13500 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63 65 data source 13510 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a or file name... 13520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 13530 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
13540 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
13550 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
13560 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67  no(emitLocalFlag
13570 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
13580 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
13590 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f  ists ::no(emitLo
135a0 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d  calFlagsIfNone)]
135b0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
135c0 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73      ![hasNoFlags
135d0 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20   flags false])}
135e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
135f0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 13600 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13610 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13620 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c "---- local 13630 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 13640 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 s for "$databas
13650 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
13660 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70     " are: " [exp
13670 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20  r {![hasNoFlags
13680 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c  flags false] ? \
13690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
136a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $136b0 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f flags \"] : "<no 136c0 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ne>"}] \n].. 136d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 136e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 136f0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 # NOTE: Show (a 13700 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61 72 nd log) the shar 13710 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 13720 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ags... #.. 13730 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
13740 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13750 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
13760 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
13770 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44   invoke System.D
13780 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
13790 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61 72  eConnection Shar
137a0 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  edFlags..
137b0 20 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d 20   } sharedFlags]
137c0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
137d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
137e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
137f0 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d  mitSharedFlags)]
13800 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
13810 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69       (![info exi
13820 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61  sts ::no(emitSha
13830 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d  redFlagsIfNone)]
13840 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
13850 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61        ![hasNoFla
13860 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 74  gs sharedFlags t
13870 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  rue])} then {..
13880 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
13890 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 138a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 138c0 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e "---- shared con 138d0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo 138e0 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
138f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
13900 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20   " are: " [expr
13910 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68  {![hasNoFlags sh
13920 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 20  aredFlags true]
13930 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
13940 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
13950 20 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67 73   \" $sharedFlags 13960 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 13970 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 13980 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 13990 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 139a0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 139b0 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 s ::no(emitShare 139c0 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 dFlags)] && \.. 139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 69 ![i 139e0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 139f0 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 emitSharedFlagsI 13a00 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d 20 fUnavailable)]} 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 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c 6e <unavailable>\n 13ab0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 13ac0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 13ad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 13ae0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 13af0 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 ow (and log) the 13b00 20 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61 6c detected global 13b10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 13b20 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 s, if any... 13b30 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 13b40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13b50 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
13b60 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
13b70 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29 5d  mitGlobalFlags)]
13b80 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
13b90 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74     (![info exist
13ba0 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61  s ::no(emitGloba
13bb0 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c  lFlagsIfNone)] |
13bc0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
13bd0 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a    ![hasNoFlags :
13be0 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
13bf0 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20  s false])} then
13c00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
13c10 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 13c20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 13c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13c40 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e "---- global con 13c50 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 nection flags ar 13c60 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 13c70 20 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b 68 [expr {![h 13c80 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e asNoFlags ::conn 13c90 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c ection_flags fal 13ca0 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 se] ? \.. 13cb0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 13cc0 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 gs \"$::connect
13cd0 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20  ion_flags \"] :
13ce0 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a  "<none>"}] \n]..
13cf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
13d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
13d10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
13d20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c  there are any gl
13d30 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72  obal (per test r
13d40 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  un) connection f
13d50 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a  lags currently..
13d60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
13d70 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20  t, use them now
13d80 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69  (i.e. by combini
13d90 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65  ng them with the
13da0 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a   ones for this..
13db0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
13dc0 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
13dd0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
13de0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f  info exists ::co
13df0 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d  nnection_flags]}
13e00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13e10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13e20 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f  TE: Combine and/
13e30 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 63  or replace the c
13e40 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
13e50 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 68  and then show th
13e60 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
13e70 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20     new value...
13e80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13e90 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d    set flags [com
13ea0 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73  bineFlags $flags 13eb0 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66$::connection_f
13ec0 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  lags]....
13ed0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13ee0 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
13ef0 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 63  g) the new effec
13f00 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection
13f10 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20  flags...
13f20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
13f30 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 13f40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 13f50 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 13f60 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 (emitCombinedFla 13f70 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 13f80 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 13f90 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 13fa0 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49 66 tCombinedFlagsIf 13fb0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 13fc0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 13fd0 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 sNoFlags flags f 13fe0 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a alse])} then {.. 13ff0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 14000 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14010 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
14020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14030 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20   "---- combined
14040 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14050 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database 14060 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14070 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex 14080 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags 14090 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 flags false] ? 140a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 140b0 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ 140c0 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 "$flags \"] : "
140d0 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
140e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
140f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
14100 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $14110 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d flags.. }.... 14120 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c 61 . proc getFla 14130 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c gsProperty { {fl 14140 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66 ags ""} {quiet f 14150 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 14160 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 14170 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61 74 : Determine what 14180 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28 67 the combined (g 14190 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 lobal and local) 141a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. 141b0 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 73 # flags 141c0 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73 should be, poss 141d0 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20 ibly quietly... 141e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 141f0 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e t flags [getConn 14200 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 ectionFlags ""$
14210 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d  flags $quiet]... 14220 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14230 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c # NOTE: If no gl 14240 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f obal or local co 14250 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 nnection flags w 14260 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 ere specified, t 14270 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 14280 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 default connec 14290 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c tion flags shoul 142a0 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72 65 d be used; there 142b0 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20 fore, return.. 142c0 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20 65 # an e 142d0 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20 74 mpty string in t 142e0 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 hat case... 142f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 14300 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
14310 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ags] == 0} then
14320 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
14330 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  n ""..      }...
14340 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14350 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72  # NOTE: In order
14360 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
14370 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
14380 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 65  ion flags are be
14390 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 20  ing used..
143a0 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e 65  #       it is ne
143b0 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 6d  cessary to attem
143c0 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20  pt a conversion
143d0 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 6e  to the actual en
143e0 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20  umerated..
143f0 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 46  #       type.  F
14400 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 65  ailing that, the
14410 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 74   check against t
14420 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
14430 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..
14440 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e  #       skipped.
14450 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
14460 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
14470 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72         set error
14480 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 44   null; # IGNORED
14490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65  ....        obje
144a0 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74  ct invoke Utilit
144b0 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 73 45  y TryParseFlagsE
144c0 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 20  num "" \..
144d0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
144e0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
144f0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22  onnectionFlags "
14500 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72  " $flags null tr 14510 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ue \.. 14520 20 20 74 72 75 65 20 74 72 75 65 20 65 72 72 6f true true erro 14530 72 0d 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65 r.. } value 14540 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14550 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 14560 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 NOTE: Attempting 14570 20 74 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f to parse the co 14580 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 nnection flags c 14590 61 75 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a aused a script.. 145a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 145b0 65 72 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 error. Emit a w 145c0 61 72 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65 arning to the te 145d0 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 st log file and 145e0 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 continue.. 145f0 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 # using 14600 61 6e 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20 an emtpy string 14610 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 instead... 14620 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f #.. tlo 14630 67 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d g [appendArgs \. 14640 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d . "== 14650 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 14660 65 64 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e ed to parse conn 14670 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 ection flags, er 14680 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 14690 20 20 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 \n\t$valu
146a0 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  e \n]....
146b0 20 73 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20   set value ""..
146c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
146d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
146e0 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64   If the combined
146f0 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f   flags string co
14700 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  uld not actually
14710 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20   be converted..
14720 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
14730 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74  the enumerated t
14740 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64 65  ype it is the de
14750 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65  fault value, the
14760 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20  n just use..
14770 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65 72    #       it ver
14780 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65  batim; otherwise
14790 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e  , just return an
147a0 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20   empty string.
147b0 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23  In that..      #
147c0 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 65         case, the
147d0 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
147e0 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62  ion flags will b
147f0 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23  e used...      #
14800 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
14810 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75  ing length $valu 14820 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 e] == 0 ||$valu
14830 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20  e ne "Default"}
14840 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14850 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 52  #..        # WAR
14860 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72  NING: This retur
14870 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 61  ns the string va
14880 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69  lue of the combi
14890 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a  ned flags, not..
148a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
148b0 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65     the enumerate
148c0 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69  d value.  This i
148d0 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20  s by design and
148e0 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20  should not..
148f0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
14900 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75  e changed withou
14910 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64  t careful consid
14920 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74  eration (e.g. it
14930 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20   would..
14940 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76 65  #          preve
14950 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e  nt the SQLiteCon
14960 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72  nection class fr
14970 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61  om allowing inva
14980 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  lid..        #
14990 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61          ["magica
149a0 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e  l"] meta-flags).
149b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
149c0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70       return [app
149d0 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22  endArgs "Flags="
149e0 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20   $flags \;].. 149f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 14a00 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a turn "".. }.. 14a10 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 61 62 ... proc enab 14a20 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 7b 20 leSharedCache { 14a30 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b channel enable { 14a40 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 14a50 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 14a60 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 ch {.. ob 14a70 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 14a80 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 14a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 14aa0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 14ab0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 14ac0 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 14ad0 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c sqlite3_enabl 14ae0 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b e_shared_cache [ 14af0 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65 expr int($enable
14b00 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  )]..      } resu
14b10 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
14b20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$14b30 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 14b40 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
14b50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
14b60 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
14b70 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
14b80 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
14b90 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65  hared_cache(" $e 14ba0 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 nable \.. 14bb0 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a ")... ok: 14bc0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
14bd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14be0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
14bf0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 14c00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14c10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
14c20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
14c40 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  --- call sqlite3
14c50 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
14c60 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c  ache(" $enable \ 14c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14c80 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c ")... error: " \ 14c90 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
14ca0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
14cb0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
14cc0 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20     proc setupDb
14cd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
14ce0 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22  ileName {mode ""
14cf0 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  } {dateTimeForma
14d00 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b  t ""} {dateTimeK
14d10 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22  ind ""} {flags "
14d20 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "}..
14d30 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c  {extra ""} {qual
14d40 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74  ify true} {delet
14d50 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c  e true} {uri fal
14d60 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se}..
14d70 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65   {temporary true
14d80 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b  } {varName db} {
14d90 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
14da0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
14db0 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20   # NOTE: First,
14dc0 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65  see if our calle
14dd0 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20  r has requested
14de0 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
14df0 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
14e00 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d  .      set isMem
14e10 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20  ory [isMemoryDb
14e20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName].... 14e30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 14e40 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c OTE: For now, al 14e50 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73 l test databases 14e60 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73 used by the tes 14e70 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 t suite are plac 14e80 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 14e90 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 into the datab 14ea0 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 ase directory. 14eb0 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e Each database an 14ec0 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d d related files. 14ed0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u 14ee0 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68 sed by a test sh 14ef0 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 ould be cleaned 14f00 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20 up by that test 14f10 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 using the.. 14f20 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 # "cleanu 14f30 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 pDb" procedure, 14f40 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d below... #. 14f50 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d . if {!$isM
14f60 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66  emory && $qualif 14f70 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 14f80 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 14f90 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 [file join [getD 14fa0 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 atabaseDirectory 14fb0 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 ] [file tail$fi
14fc0 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20  leName]]..
14fd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
14fe0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64      # NOTE: By d
14ff0 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61  efault, delete a
15000 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
15010 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
15020 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
15030 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20     #       name
15040 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20  if it currently
15050 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23  exists...      #
15060 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is 15070 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 Memory &&$delet
15080 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74  e && [file exist
15090 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 150a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 150b0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 150c0 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 Attempt to dele 150d0 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 te any pre-exist 150e0 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 ing database wit 150f0 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d h the same file. 15100 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 15110 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 name... 15120 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 15130 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 catch {file dele 15140 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 te$fileName} er
15150 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
15160 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15170 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
15180 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
15190 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c  o delete the fil
151a0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
151b0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
151c0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 151d0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 151e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
151f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
15200 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
15220 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
15230 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74  ed to delete dat
15240 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24  abase file \"" $15250 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 15260 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 15270 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 during setup, er 15280 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
15290 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
152a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
152b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
152c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
152d0 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
152e0 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
152f0 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
15300 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
15310 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
15320 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
15330 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70  handle to the op
15340 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 69  ened database wi
15350 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 65  ll be stored the
15360 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  re...      #..
15370 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 15380 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... 15390 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 153a0 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67 : Start building 153b0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 153c0 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c string. The onl 153d0 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69 y required porti 153e0 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 153f0 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 of the connect 15400 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 ion string is th 15410 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77 e data source, w 15420 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 hich contains th 15430 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 15440 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n 15450 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20 ame itself. If 15460 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 our caller wants 15470 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61 73 to use a URI as 15480 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 15490 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c the data source, 154a0 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69 use the FullUri 154b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 154c0 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a ng property to.. 154d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr 154e0 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20 73 event the data s 154f0 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f ource string fro 15500 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e m being mangled. 15510 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15520 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 if {$uri} then
15530 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
15540 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55  onnection {FullU
15550 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d  ri=${fileName}}. 15560 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 15570 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e . set con 15580 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f nection {Data So 15590 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d urce=${fileName}
155a0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
155b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
155c0 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20  OTE: Since this
155d0 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f  procedure has no
155e0 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64   special knowled
155f0 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 64  ge of what the d
15600 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20  efault..      #
15610 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 73        setting is
15620 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50   for the ToFullP
15630 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  ath connection s
15640 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61  tring propery, a
15650 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20  lways..      #
15660 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 6c       add the val
15670 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74  ue we know about
15680 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
15690 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  on string...
156a0 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e    #..      appen
156b0 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54  d connection {;T
156c0 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c  oFullPath=${qual 156d0 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 ify}}.... # 156e0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 156f0 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp 15700 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 ecified a journa 15710 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20 l mode, add the 15720 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f necessary portio 15730 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 15740 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 of the connecti 15750 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a on string now... 15760 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15770 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 15780 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 h$mode] > 0} th
15790 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
157a0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
157b0 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24  {;Journal Mode=$157c0 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d {mode}}.. } 157d0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 157e0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 157f0 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 15800 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f ed a DateTime fo 15810 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65 rmat, add the ne 15820 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 cessary.. # 15830 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f portion o 15840 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e f the connection 15850 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 string now... 15860 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 15870 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 15880 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d$dateTimeFormat]
15890 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
158a0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
158b0 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69  nection {;DateTi
158c0 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54  meFormat=${dateT 158d0 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 imeFormat}}.. 158e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 158f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 15900 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe 15910 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d cified a DateTim 15920 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e eKind, add the n 15930 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e ecessary portion 15940 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 15950 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f of the connectio 15960 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 n string now... 15970 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 15980 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 15990 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20$dateTimeKind]
159a0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
159b0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
159c0 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d  ection {;DateTim
159d0 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65  eKind=${dateTime 159e0 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d Kind}}.. }. 159f0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15a00 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 15a10 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66 69 out what the fi 15a20 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68 nal flags for th 15a30 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 is connection ne 15a40 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 ed to be... 15a50 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c #.. set fl 15a60 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 ags [getConnecti 15a70 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d onFlags$fileNam
15a80 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d  e $flags$quiet]
15a90 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15aa0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
15ab0 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
15ac0 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f  ed some SQLiteCo
15ad0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61  nnectionFlags, a
15ae0 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  dd the..      #
15af0 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 20        necessary
15b00 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  portion of the c
15b10 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
15b20 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
15b30 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
15b40 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d  g length $flags] 15b50 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 15b60 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 15b70 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d nection {;Flags= 15b80 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20${flags}}..
15b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
15ba0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
15bb0 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
15bc0 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 61  fied an extra pa
15bd0 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e  yload to the con
15be0 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  nection..      #
15bf0 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61         string, a
15c00 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20  ppend it now...
15c10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
15c20 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
15c30 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68   $extra] > 0} th 15c40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 15c50 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 15c60 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 \;$extra..
15c70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
15c80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72       # NOTE: For
15c90 20 63 6c 61 72 69 74 79 2c 20 61 70 70 65 6e 64   clarity, append
15ca0 20 61 20 66 69 6e 61 6c 20 73 65 6d 69 63 6f 6c   a final semicol
15cb0 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63  on to the connec
15cc0 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20  tion string...
15cd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70      #..      app
15ce0 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  end connection \
15cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ;....      #..
15d00 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e      # NOTE: Open
15d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
15d20 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c  nnection now, pl
15d30 61 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65  acing the opaque
15d40 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20   handle value..
15d50 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74       #       int
15d60 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73  o the variable s
15d70 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20  pecified by our
15d80 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
15d90 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b  ..      set db [
15da0 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53  sql open -type S
15db0 51 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f  QLite [subst $co 15dc0 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 nnection]].... 15dd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15de0 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 OTE: Configure t 15df0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 he temporary dir 15e00 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e ectory for the n 15e10 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 ewly opened data 15e20 62 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 base.. # 15e30 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e connection n 15e40 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 ow unless our ca 15e50 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e ller forbids it. 15e60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15e70 20 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 if {$temporary
15e80 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  && ![info exists
15e90 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61   ::no(setTempora
15ea0 72 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74  ryDirectory)]} t
15eb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
15ec0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [ 15ed0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 15ee0 20 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d "PRAGM 15ef0 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 A temp_store_dir 15f00 65 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 ectory = \"" [ge 15f10 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 tTemporaryDirect 15f20 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 ory] \"\;].. 15f30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 15f40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 # NOTE: Pe 15f50 72 66 6f 72 6d 20 61 6e 79 20 65 78 74 72 61 20 rform any extra 15f60 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 per-connection s 15f70 65 74 75 70 20 66 6f 72 20 74 68 65 20 6e 65 77 etup for the new 15f80 6c 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 ly opened.. 15f90 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 # databas 15fa0 65 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 e now unless our 15fb0 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 caller forbids 15fc0 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 it... #.. 15fd0 20 20 20 20 73 65 74 20 65 78 65 63 75 74 65 4f set executeO 15fe0 6e 53 65 74 75 70 20 5b 67 65 74 45 78 65 63 75 nSetup [getExecu 15ff0 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 teOnSetup].... 16000 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 16010 6c 65 6e 67 74 68 20 24 65 78 65 63 75 74 65 4f length$executeO
16020 6e 53 65 74 75 70 5d 20 3e 20 30 20 26 26 20 5c  nSetup] > 0 && \
16030 0d 0a 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e  ..          ![in
16040 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
16050 78 65 63 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d  xecuteOnSetup)]}
16060 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16070 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16080 54 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  TE: This command
16090 20 6d 61 79 20 72 61 69 73 65 20 61 6e 20 65 72   may raise an er
160a0 72 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 74  ror; if so, that
160b0 20 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20   is fine, as..
160c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
160d0 65 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74  e enclosing test
160e0 20 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e   will then fail.
160f0 20 20 54 68 65 20 5b 73 75 62 73 74 5d 20 63 6f    The [subst] co
16100 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20  mmand is..
16110 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 6f    #       used o
16120 6e 20 74 68 65 20 53 51 4c 20 69 6e 20 63 61 73  n the SQL in cas
16130 65 20 69 74 20 6e 65 65 64 73 20 74 6f 20 72 65  e it needs to re
16140 66 65 72 20 74 6f 20 73 74 61 74 65 20 69 6e 20  fer to state in
16150 6f 75 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  our..        #
16160 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20       context...
16170 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16180 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d 16190 62 20 5b 73 75 62 73 74 20 24 65 78 65 63 75 74 b [subst$execut
161a0 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 20  eOnSetup]..
161b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
161c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77       # NOTE: Alw
161d0 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63  ays return the c
161e0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
161f0 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a   upon success...
16200 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
16210 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d  eturn $db.. } 16220 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 16230 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 tDbConnection { 16240 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b {varName db} } { 16250 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16260 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 # NOTE: Refer t 16270 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 o the specified 16280 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 variable (e.g. " 16290 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 db") in the cont 162a0 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 ext of our.. 162b0 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 # caller 162c0 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f . The handle to 162d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 the database pr 162e0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 eviously opened 162f0 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 via the.. # 16300 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d [setupDb] 16310 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c procedure shoul 16320 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 d be stored ther 16330 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 16340 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
16350 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20  ame db....
16360 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
16370 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68   This returns th
16380 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e  e ADO.NET IDbCon
16390 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69  nection object i
163a0 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d  nstance for the.
163b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
163c0 70 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65  pecified databse
163d0 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20   handle.  Since
163e0 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a  getting this obj
163f0 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d  ect relies upon.
16400 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
16410 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20  agle internals,
16420 67 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c  great care shoul
16430 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76  d be taken to av
16440 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66  oid disposing of
16450 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16460 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f  this object or o
16470 74 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67  therwise putting
16480 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61   it into an inva
16490 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20  lid state...
164a0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
164b0 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d  info exists db]}
164c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
164d0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
164e0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
164f0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
16500 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74  onPublic -object
16510 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65  flags +NoDispose
16520 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
16530 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72           Interpr
16540 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63  eter.GetActive.c
16550 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20  onnections Item
16560 24 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72  $db.. } r 16570 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 16580 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 16590 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 165a0 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 TE: Success, ret 165b0 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f urn the opaque o 165c0 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 bject handle... 165d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 165e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
165f0 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20  sult..        }
16600 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
16610 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
16620 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20   NOTE: Failure,
16630 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
16640 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16650 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 16660 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 16670 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16680 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 16690 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 166a0 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 get connection h 166b0 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 andle for databa 166c0 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 se \"" \.. 166d0 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c$db "\",
166e0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $166f0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 16700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 16710 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16720 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure 16730 2c 20 72 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 , return an obvi 16740 6f 75 73 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 ously invalid op 16750 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 16760 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. 16770 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. 16780 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 16790 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 c freeDbConnecti 167a0 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f on { {varName co 167b0 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 nnection} } {.. 167c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 167d0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 167e0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 167f0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con 16800 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the 16810 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16820 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c 16830 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 aller. The opaq 16840 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 ue object handle 16850 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d for an ADO.NET. 16860 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 16870 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f onnection previo 16880 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 usly returned by 16890 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f [getDbConnectio 168a0 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 n] should be.. 168b0 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 # stor 168c0 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 168d0 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 168e0 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 1$varName conne
168f0 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23  ction....      #
16900 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16910 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76  Attempt to remov
16920 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a  e the opaque obj
16930 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20  ect handle from
16940 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d  the interpreter.
16950 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
16960 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63  ow.  This [objec
16970 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20  t dispose] call
16980 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c  will not actuall
16990 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  y dispose of the
169a0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
169b0 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63  underlying objec
169c0 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e  t because the +N
169d0 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61  oDispose flag wa
169e0 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20  s set on it..
169f0 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e     #       durin
16a00 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68  g creation of th
16a10 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
16a20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23  handle...      #
16a30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
16a40 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74  o exists connect
16a50 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ion] && \..
16a60 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a       [catch {obj
16a70 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e  ect dispose $con 16a80 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d nection} error]} 16a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16aa0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16ab0 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 16ac0 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 16ad0 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f the handle, repo 16ae0 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 16af0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 16b00 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16b10 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
16b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
16b30 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
16b40 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e  ed to remove con
16b50 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c  nection handle \
16b60 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  "" $connection \ 16b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 16b80 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 16b90 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
16ba0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
16bb0 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f      proc addDbCo
16bc0 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65  nnection { conne
16bd0 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64  ction {varName d
16be0 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  b} } {..      #.
16bf0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
16c00 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
16c10 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
16c20 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
16c30 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
16c40 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16c50 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
16c60 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
16c70 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 16c80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 16c90 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 NOTE: Create a c 16ca0 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 orrectly formatt 16cb0 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 ed name for the 16cc0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 16cd0 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 ion to.. # 16ce0 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 be added t 16cf0 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 o the list manag 16d00 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 ed by the Eagle 16d10 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 16d20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 16d30 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f db [object invo 16d40 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 16d50 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 16d60 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 Eagle._Compone 16d70 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d nts.Private.Form 16d80 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 atOps DatabaseOb 16d90 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 jectName$connec
16da0 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  tion \..
16db0 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
16dc0 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  on [object invok
16dd0 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
16de0 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d  tActive NextId]]
16df0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
16e00 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
16e10 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
16e20 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20  ection provided
16e30 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f  by our caller to
16e40 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20   the list..
16e50 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73   #       of thos
16e60 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45  e known to the E
16e70 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
16e80 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
16e90 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
16ea0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
16eb0 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  c Interpreter.Ge
16ec0 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69  tActive.connecti
16ed0 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20  ons Add \..
16ee0 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63       $db$connec
16ef0 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  tion..    }.....
16f00 20 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73      proc getRows
16f10 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20  FromDataTable {
16f20 64 61 74 61 54 61 62 6c 65 20 7b 76 61 6c 75 65  dataTable {value
16f30 43 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d 20 7b  Callback ""} } {
16f40 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73  ..      set rows
16f50 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73   [list]..      s
16f60 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54  et count [$dataT 16f70 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 able Columns.Cou 16f80 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 nt].... for 16f90 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b {set index 0} { 16fa0 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d$index < $count} 16fb0 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d {incr index} {. 16fc0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 . set dat 16fd0 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61 aColumn [$dataTa
16fe0 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d  ble -alias Colum
16ff0 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64  ns.get_Item $ind 17000 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ex].. set 17010 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b names($index) [
17020 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75  $dataColumn Colu 17030 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d mnName].. } 17040 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 17050 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 # NOTE: Setup 17060 20 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 72 6e some Tcl return 17070 20 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 73 2e code constants. 17080 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17090 20 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 20 45 set Ok 0; set E 170a0 72 72 6f 72 20 31 3b 20 73 65 74 20 52 65 74 75 rror 1; set Retu 170b0 72 6e 20 32 3b 20 73 65 74 20 42 72 65 61 6b 20 rn 2; set Break 170c0 33 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 65 20 3; set Continue 170d0 34 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 4.... objec 170e0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 170f0 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 dataRow [set da 17100 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 taRows [$dataTab
17110 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20  le Rows]] {..
17120 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69       set row [li
17130 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  st]....        f
17140 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d  or {set index 0}
17150 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e   {$index <$coun
17160 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20  t} {incr index}
17170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
17180 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77   value [$dataRow 17190 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 -create -alias 171a0 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d get_Item$index]
171b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
171c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
171d0 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 5d   $valueCallback] 171e0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 171f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co 17200 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 de [catch {.. 17210 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75$valu
17220 65 43 61 6c 6c 62 61 63 6b 20 24 64 61 74 61 54  eCallback $dataT 17230 61 62 6c 65 20 24 64 61 74 61 52 6f 77 20 24 69 able$dataRow $i 17240 6e 64 65 78 20 24 76 61 6c 75 65 0d 0a 20 20 20 ndex$value..
17250 20 20 20 20 20 20 20 20 20 7d 20 6e 65 77 56 61           } newVa
17260 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue]....
17270 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d      if {$code == 17280 20 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$Ok} then {..
17290 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
172b0 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
172c0 63 69 66 69 65 64 20 28 6e 65 77 3f 29 20 72 6f  cified (new?) ro
172d0 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  w value...
172e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
172f0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
17300 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65   row [list $name 17310 73 28 24 69 6e 64 65 78 29 20 24 6e 65 77 56 61 s($index) $newVa 17320 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 lue].. 17330 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 } elseif {$cod
17340 65 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74 68 65  e == $Error} the 17350 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17360 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17370 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 17380 74 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c 4c 20 the (new?) NULL 17390 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 row value... 173a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 173b0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 173c0 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 nd row [list$na
173d0 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20  mes($index)].. 173e0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 173f0 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 52 65 if {$code == $Re 17400 74 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 turn} then {.. 17410 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 17420 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 17430 4f 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 69 6e OTE: Skip remain 17440 69 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74 ing values for t 17450 68 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 his row... 17460 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17470 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d 0a break.. 17480 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 17490 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 seif {$code == $174a0 42 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 Break} then {.. 174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 174d0 4e 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f 63 65 NOTE: Skip proce 174e0 73 73 69 6e 67 20 74 68 69 73 20 72 6f 77 20 76 ssing this row v 174f0 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 alue... 17500 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17510 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 } elseif {$c
17520 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65  ode == $Continue 17530 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17540 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17550 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17560 20 55 73 65 20 64 65 66 61 75 6c 74 20 72 6f 77 Use default row 17570 20 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e 67 2e value handling. 17580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17590 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d #.. } 175a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 175b0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 175c0 20 20 73 65 74 20 63 6f 64 65 20 24 43 6f 6e 74 set code$Cont
175d0 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  inue..
175e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
175f0 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f 6e  f {$code ==$Con
17600 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  tinue} then {..
17610 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
17620 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 17630 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a alue] > 0 && \.. 17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17650 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 ![object invoke 17660 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c Convert IsDBNull 17670 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b$value]} then {
17680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17690 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73  lappend row [lis
176a0 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29  t $names($index)
176b0 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e   [$value ToStrin 176c0 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g]].. 176d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 176e0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 176f0 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 row [list$name
17700 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20  s($index)].. 17710 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 17730 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 }.... lap 17740 70 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a pend rows$row..
17750 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17760 20 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20   return $rows.. 17770 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 17780 63 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 c dumpRowsFromDa 17790 74 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 taTable { channe 177a0 6c 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 l rows } {.. 177b0 20 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 set sequence 1 177c0 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac 177d0 68 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 h row$rows {..
177e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 177f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 17800 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 17810 20 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 [expr {$sequenc
17820 65 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22  e > 1 ? "\n" : "
17830 22 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22  "}] "---- ROW #"
17840 20 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d   $sequence :\n]. 17850 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 ... forea 17860 63 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a ch pair$row {..
17870 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c            if {[l
17880 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d  length $pair] >= 17890 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 2} then {.. 178a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
178b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
178c0 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20  gs \t \..
178d0 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b           [list [
178e0 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d  lindex $pair 0]] 178f0 20 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e ": " [list [lin 17900 64 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e dex$pair 1]] \n
17910 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
17920 6c 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  lseif {[llength
17930 24 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65  $pair] == 1} the 17940 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17950 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
17960 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c  [appendArgs \t \
17970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17980 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20    [list [lindex
17990 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75  $pair 0]] ": <nu 179a0 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ll>\n"].. 179b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 179c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
179d0 63 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79  channel \t<empty
179e0 3e 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20  >\n; # NOTE: No
179f0 64 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20  data?..
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 69 6e 63 72 20 73 65  .        incr se
17a20 71 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d  quence..      }.
17a30 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
17a40 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20  roc cleanupDb {
17a50 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d  fileName {varNam
17a60 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74  e db} {collect t
17a70 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72  rue} {qualify tr
17a80 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue}..
17a90 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74            {delet
17aa0 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
17ab0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
17ac0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
17ad0 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67  orce all pending
17ae0 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63   "garbage" objec
17af0 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74  ts to be collect
17b00 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed,..      #
17b10 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c     including SQL
17b20 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ite statements a
17b30 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  nd backup object
17b40 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61  s; this should a
17b50 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20  llow..      #
17b60 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69      the underlyi
17b70 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
17b80 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d   to be deleted..
17b90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17ba0 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68  if {$collect} th 17bb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f en {.. co 17bc0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a llectGarbage$::
17bd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
17be0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
17bf0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17c00 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
17c10 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
17c20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
17c30 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
17c40 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
17c50 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61   caller.  The ha
17c60 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61  ndle to the data
17c70 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20  base previously
17c80 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a  opened via the..
17c90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
17ca0 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72  etupDb] procedur
17cb0 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72  e should be stor
17cc0 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20  ed there...
17cd0 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
17ce0 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... 17cf0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17d00 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 # NOTE: Close th 17d10 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 e connection to 17d20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 the database now 17d30 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 . This should a 17d40 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 llow us.. # 17d50 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 to delete 17d60 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying 17d70 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a database file... 17d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 17d90 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 17da0 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 db] && [catch {s 17db0 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 ql close$db} er
17dc0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
17dd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17de0 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65   # NOTE: We some
17df0 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c  how failed to cl
17e00 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ose the database
17e10 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
17e20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17e30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 17e40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17e50 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 17e60 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 17e70 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 : failed to clos 17e80 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 e database \""$
17e90 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  db "\", error: "
17ea0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17eb0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 17ec0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 17ed0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17ee0 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 E: First, see if 17ef0 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 our caller has 17f00 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d requested an in- 17f10 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e memory database. 17f20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17f30 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 set isMemory [i 17f40 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e sMemoryDb$fileN
17f50 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  ame]....      #.
17f60 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
17f70 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61  uild the full pa
17f80 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  th to the databa
17f90 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46  se file name.  F
17fa0 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74  or now, all test
17fb0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
17fc0 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61  database files a
17fd0 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
17fe0 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
17ff0 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  tory...      #..
18000 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 18010 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 mory &&$qualify
18020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
18030 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
18040 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
18050 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
18060 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil 18070 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d eName]].. } 18080 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 18090 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 180a0 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 if the file sti 180b0 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 ll exists... 180c0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 180d0 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65$isMemory && $de 180e0 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 lete && [file ex 180f0 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
18100 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18110 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
18120 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e  TE: Skip deletin
18130 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  g database files
18140 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74   if somebody set
18150 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20  s the global..
18160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
18170 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e  riable to preven
18180 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  t it...        #
18190 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
181a0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
181b0 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d  (cleanupDbFile)]
181c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
181d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
181e0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
181f0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74   to delete the t
18200 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  est database fil
18210 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  e now...
18220 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
18230 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61  f {[set code [ca
18240 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
18250 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f   $fileName} erro 18260 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 r]]} then {.. 18270 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 18280 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18290 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile 182a0 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 d to delete the 182b0 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 file, report why 182c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 182e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
182f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18300 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18310 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
18320 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  : failed to dele
18330 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
18340 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 18350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18360 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 18370 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c anup, error: " \ 18380 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
18390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
183a0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
183b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
183c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
183d0 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70  ow that we skipp
183e0 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20  ed deleting the
183f0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...
18400 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
18410 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20  t code 0....
18420 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 18430 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 18440 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 18450 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 18460 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 ARNING: skipped 18470 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 deleting databas 18480 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 e file \""$file
18490 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
184a0 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67        "\" during
184b0 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20   cleanup\n"]..
184c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
184d0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
184e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
184f0 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65  TE: The file doe
18500 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63  s not exist, suc
18510 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23  cess!..        #
18520 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
18530 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  de 0..      }...
18540 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63  .      return $c 18550 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ode.. }..... 18560 20 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69 proc saveEnvi 18570 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 18580 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d { names {varNam 18590 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 185a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 185b0 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c : For each name, 185c0 20 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65 does the live e 185d0 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia 185e0 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a ble exist? If.. 185f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so 18600 2c 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 , save the value 18610 20 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 for later; othe 18620 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 rwise, make sure 18630 20 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20 the saved.. 18640 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 # value 18650 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 does not exist e 18660 69 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65 ither. The live 18670 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 18680 69 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 iables.. # 18690 20 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68 ARE NOT ch 186a0 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 anged by this pr 186b0 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 ocedure... 186c0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 186d0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
186e0 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  Name] == 0} then
186f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
18700 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76  varName savedEnv
18710 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
18720 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 18730 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a ame savedEnv.... 18740 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 18750 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 me$names {..
18760 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
18770 78 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d  xists ::env($nam 18780 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 18790 20 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64 set saved 187a0 45 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e Env($name) $::en 187b0 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 v($name)..
187c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
187d0 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
187e0 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76  omplain savedEnv
187f0 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 18800 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 18810 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 18820 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 NOTE: This is se 18830 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 lf-cleaning. If 18840 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f no saved enviro 18850 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 nment variables 18860 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 now.. # 18870 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 exist, remove 18880 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 the array... 18890 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 188a0 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 [array size save 188b0 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e dEnv] == 0} then 188c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 {.. unse 188d0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 t -nocomplain sa 188e0 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d vedEnv.. }. 188f0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18900 72 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72 roc restoreEnvir 18910 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 18920 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 { names {varName 18930 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 18940 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 18950 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 For each name, 18960 64 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 65 does the saved e 18970 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia 18980 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a ble exist? If.. 18990 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so 189a0 2c 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 61 , restore the sa 189b0 76 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e ved value and un 189c0 73 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73 set it; otherwis 189d0 65 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 e, make sure.. 189e0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 189f0 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 live environment 18a00 20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e variable does n 18a10 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 20 ot exist either 18a20 28 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 (i.e. it.. 18a30 23 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20 # was not 18a40 73 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74 set to begin wit 18a50 68 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20 h). Both saved 18a60 61 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e and live environ 18a70 6d 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 ment.. # 18a80 20 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 52 variables AR 18a90 45 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 E changed by thi 18aa0 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 s procedure... 18ab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 18ac0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 18ad0 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20$varName] == 0}
18ae0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
18af0 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65  set varName save
18b00 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  dEnv..      }...
18b10 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $18b20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 varName savedEnv 18b30 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac 18b40 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d h name$names {.
18b50 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  .        if {[in
18b60 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 45  fo exists savedE
18b70 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e  nv($name)]} then 18b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 18b90 74 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 t ::env($name) $18ba0 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d savedEnv($name).
18bb0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74  .          unset
18bc0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76   -nocomplain sav
18bd0 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20  edEnv($name).. 18be0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 18bf0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 unset 18c00 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e -nocomplain ::en 18c10 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 v($name)..
18c20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
18c30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18c40 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73   NOTE: This is s
18c50 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49  elf-cleaning.  I
18c60 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72  f no saved envir
18c70 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73  onment variables
18c80 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20   now..      #
18c90 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76      exist, remov
18ca0 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20  e the array...
18cb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
18cc0 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76  {[array size sav
18cd0 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65  edEnv] == 0} the
18ce0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73  n {..        uns
18cf0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73  et -nocomplain s
18d00 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d  avedEnv..      }
18d10 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
18d20 70 72 6f 63 20 73 61 76 65 47 65 74 53 65 74 74  proc saveGetSett
18d30 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d  ingValueEnvironm
18d40 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ent {} {..
18d50 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76  upvar 1 savedEnv
18d60 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20   savedEnv....
18d70 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65     saveEnvironme
18d80 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
18d90 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e  t \..          N
18da0 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69  o_Expand No_SQLi
18db0 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  teGetSettingValu
18dc0 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f  e No_SQLiteXmlCo
18dd0 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20  nfigFile] \..
18de0 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d         savedEnv.
18df0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
18e00 72 6f 63 20 72 65 73 74 6f 72 65 47 65 74 53 65  roc restoreGetSe
18e10 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f  ttingValueEnviro
18e20 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20  nment {} {..
18e30 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45    upvar 1 savedE
18e40 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  nv savedEnv....
18e50 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69       restoreEnvi
18e60 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
18e70 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
18e80 20 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f      No_Expand No
18e90 5f 53 51 4c 69 74 65 47 65 74 53 65 74 74 69 6e  _SQLiteGetSettin
18ea0 67 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65  gValue No_SQLite
18eb0 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c  XmlConfigFile] \
18ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65  ..          save
18ed0 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  dEnv..    }.....
18ee0 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c      proc saveSQL
18ef0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76  iteConnectionEnv
18f00 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20  ironment {} {..
18f10 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76       upvar 1 sav
18f20 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a  edEnv savedEnv..
18f30 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69  ..      saveEnvi
18f40 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
18f50 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
18f60 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73      DefaultFlags
18f70 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  _SQLiteConnectio
18f80 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65  n No_SQLiteConne
18f90 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20  ctionNewParser]
18fa0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76  \..          sav
18fb0 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  edEnv..    }....
18fc0 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72  .    proc restor
18fd0 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  eSQLiteConnectio
18fe0 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20  nEnvironment {}
18ff0 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
19000 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45   savedEnv savedE
19010 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74  nv....      rest
19020 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  oreEnvironmentVa
19030 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
19040 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 61 75  .          Defau
19050 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 6f  ltFlags_SQLiteCo
19060 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69  nnection No_SQLi
19070 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50  teConnectionNewP
19080 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 20  arser] \..
19090 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20      savedEnv..
190a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
190b0 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 65   saveSQLiteConve
190c0 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d  rtEnvironment {}
190d0 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   {..      upvar
190e0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64  1 savedEnv saved
190f0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76  Env....      sav
19100 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
19110 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  ables [list \..
19120 20 20 20 20 20 20 20 20 20 55 73 65 5f 53 51 4c           Use_SQL
19130 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75  iteConvert_Defau
19140 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53 51 4c  ltDbType Use_SQL
19150 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75  iteConvert_Defau
19160 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20  ltTypeName] \..
19170 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e           savedEn
19180 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  v..    }.....
19190 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c   proc restoreSQL
191a0 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f  iteConvertEnviro
191b0 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20  nment {} {..
191c0 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45    upvar 1 savedE
191d0 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  nv savedEnv....
191e0 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69       restoreEnvi
191f0 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
19200 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
19210 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f      Use_SQLiteCo
19220 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54  nvert_DefaultDbT
19230 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f  ype Use_SQLiteCo
19240 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70  nvert_DefaultTyp
19250 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20  eName] \..
19260 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20      savedEnv..
19270 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
19280 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70   setupDbInterrup
19290 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e  tCallback { chan
192a0 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20  nel log } {..
192b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 192c0 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 l "---- setting 192d0 75 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 up debugger inte 192e0 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e rrupt callback.. 192f0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 . ".... if 19300 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 19310 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 saveEnvironme 19320 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 19330 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 19340 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 quietFindInterp 19350 72 65 74 65 72 54 65 73 74 50 61 74 68 20 71 75 reterTestPath qu 19360 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 ietSetupInterpre 19370 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d 0a terTestPath].... 19380 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 try {.. 19390 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 193a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 72 # NOTE: Pr 193b0 65 76 65 6e 74 20 74 68 65 20 76 65 6e 64 6f 72 event the vendor 193c0 20 73 63 72 69 70 74 20 66 72 6f 6d 20 62 65 69 script from bei 193d0 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 63 72 ng noisy when cr 193e0 65 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 eating.. 193f0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 69 73 # the is 19400 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 19410 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 19420 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 19430 3a 3a 65 6e 76 28 71 75 69 65 74 46 69 6e 64 49 ::env(quietFindI 19440 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 nterpreterTestPa 19450 74 68 29 20 31 0d 0a 20 20 20 20 20 20 20 20 20 th) 1.. 19460 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 set ::env(quiet 19470 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 SetupInterpreter 19480 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a 20 TestPath) 1.... 19490 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 194a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 194b0 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69 ke sure the scri 194c0 70 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 pt debugger and 194d0 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 the isolated int 194e0 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 erpreter.. 194f0 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 19500 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 setup and ready 19510 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 for use... 19520 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19530 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 debug setup tru 19540 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 e true.... 19550 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19560 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 19570 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b e necessary pack 19580 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 ages into the is 19590 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 195a0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 195b0 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 195c0 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 g eval {.. 195d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 package re 195e0 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 quire Eagle.. 195f0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 package 19600 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c require Eagle.L 19610 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 ibrary.. 19620 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 package requ 19630 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a ire Eagle.Test.. 19640 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 19650 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 19660 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 19670 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 py the necessary 19680 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 variables into 19690 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 the isolated int 196a0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 196b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 196c0 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 debug invoke 0 196d0 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e set ::test_chan 196e0 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 nel$channel; #
196f0 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73  NOTE: For [tputs
19700 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65  ]...          de
19710 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74  bug invoke 0 set
19720 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67   ::test_log $log 19730 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 ; # NOTE: For [t 19740 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 log]..... 19750 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19760 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 # NOTE: Install 19770 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 the callback scr 19780 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 ipt to be evalua 19790 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 ted in the isola 197a0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ted.. # 197b0 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 interpret 197c0 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 er when this int 197d0 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 erpreter is inte 197e0 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 rrupted by scrip 197f0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # 19800 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f cancellatio 19810 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 n, etc... 19820 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19830 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 debug callback a 19840 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d pply {{sender e} 19850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19860 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 19870 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 19880 74 68 69 73 20 64 65 62 75 67 67 65 72 20 63 61 this debugger ca 19890 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 llback is one th 198a0 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 at we care about 198b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 198c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 198d0 74 20 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 t interruptTypes 198e0 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 [split [$e Inte
198f0 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d  rruptType] ", "]
19900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
19910 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69  if {"Canceled" i
19920 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 65  n $interruptType 19930 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 s || \.. 19940 20 20 20 20 20 20 20 20 22 55 6e 77 6f 75 6e 64 "Unwound 19950 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 " in$interruptT
19960 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ypes} then {..
19970 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
19990 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  OTE: Make sure t
199a0 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d  he [object] comm
199b0 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65  and is available
199c0 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 20  .  Since..
199d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
199e0 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c 61  this is an isola
199f0 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2c  ted interpreter,
19a00 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74 68   check for it th
19a10 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20 20  e hard..
19a20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61        #       wa
19a30 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...
19a40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
19a50 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength
19a60 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f  [info commands o
19a70 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 65  bject]] > 0} the
19a80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19a90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19aa0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19ab0 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  Iterate through
19ac0 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  all database con
19ad0 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74  nections known t
19ae0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..
19af0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
19b00 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  arent interprete
19b10 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...
19b20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
19b30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f         object fo
19b40 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
19b50 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  r [object invoke
19b60 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
19b70 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
19b80 20 20 20 20 20 20 20 20 20 20 24 65 20 49 6e 74            $e Int 19b90 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 erpreter.connect 19ba0 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ions] {.. 19bb0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19bd0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 19be0 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 to cancel any SQ 19bf0 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f L queries in pro 19c00 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20 20 gress on.. 19c10 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 19c20 20 20 20 20 74 68 69 73 20 64 61 74 61 62 61 73 this databas 19c30 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 e connection... 19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19c50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19c60 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 19c70 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 {$pair Value.Ca
19c80 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68  ncel} error]} th
19c90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
19ca0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19cb0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 19cc0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c [appendArgs \n \ 19cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19ce0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 19cf0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 19d00 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 to cancel query 19d10 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 for " \.. 19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19d30 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 "connection \"" 19d40 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 [$pair Key] "\"
19d50 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
19d60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19d70 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f             $erro 19d80 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 19d90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 19da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e 19dc0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 19dd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
19de0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
19df0 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20  pendArgs \n \..
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e10 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
19e20 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c 20  : cannot cancel
19e30 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20 5c  any queries: " \
19e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19e50 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62 6a        "the \"obj
19e60 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 73  ect\" command is
19e70 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c 6e   not available\n
19e80 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
19e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
19ea0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 7d   }..          }}
19eb0 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61  ..        } fina
19ec0 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lly {..
19ed0 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d   restoreEnvironm
19ee0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69  entVariables [li
19ef0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
19f00 20 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74      quietFindInt
19f10 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68  erpreterTestPath
19f20 20 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72   quietSetupInter
19f30 70 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d  preterTestPath].
19f40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
19f50 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d    } error] == 0}
19f60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
19f70 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69   addConstraint i
19f80 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b  nterruptCallback
19f90 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20  .sqlite3....
19fa0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 19fb0 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 el yes\n.. 19fc0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 19fd0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
19fe0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f   [appendArgs "no
19ff0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
1a000 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 1a010 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1a020 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 proc cleanupF 1a030 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b ile { fileName { 1a040 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 collect true} {f 1a050 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d orce false} } {. 1a060 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1a070 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 1a080 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e to force all pen 1a090 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f ding "garbage" o 1a0a0 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c bjects to be col 1a0b0 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 lected,.. # 1a0c0 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 including 1a0d0 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e SQLite statemen 1a0e0 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 ts and backup ob 1a0f0 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 jects; this shou 1a100 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 ld allow.. 1a110 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 # the unde 1a120 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 rlying database 1a130 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 file to be delet 1a140 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 1a150 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 if {$collect
1a160 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a170 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65    collectGarbage
1a180 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1a190 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1a1a0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1a1b0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 1a1c0 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 file still exis 1a1d0 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. 1a1e0 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 1a1f0 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
1a200 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a210 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1a220 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e  TE: Skip deletin
1a230 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20  g test files if
1a240 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68  somebody sets th
1a250 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
1a260 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1a270 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74     to prevent it
1a280 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a290 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65        if {$force 1a2a0 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 || ![info exist 1a2b0 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 s ::no(cleanupFi 1a2c0 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 1a2d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a2e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 1a2f0 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 empt to delete t 1a300 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 he test file now 1a310 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1a320 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 1a330 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b et code [catch { 1a340 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
1a350 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20  eName} error]]}
1a360 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a370 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a380 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
1a390 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
1a3a0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c  delete the file,
1a3b0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
1a3c0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1a3d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a3e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a3f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1a410 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1a420 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 led to delete te 1a430 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c st file \""$fil
1a440 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
1a450 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72           "\" dur
1a460 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72  ing cleanup, err
1a470 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 1a480 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 1a490 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 1a4a0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1a4b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1a4c0 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 OTE: Show that w 1a4d0 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 e skipped deleti 1a4e0 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 ng the file... 1a4f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a500 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. 1a510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 ... tpu 1a520 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1a530 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1a550 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73  "==== WARNING: s
1a560 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
1a570 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66  test file \"" $f 1a580 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 1a590 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur 1a5a0 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d ing cleanup\n"]. 1a5b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1a5c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1a5d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1a5e0 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 NOTE: The file 1a5f0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 does not exist, 1a600 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 success!.. 1a610 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 1a620 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d code 0.. } 1a630 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 1a640 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c$code..    }...
1a650 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
1a660 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e 61  upMemory { varNa
1a670 6d 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  me {quiet false}
1a680 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
1a690 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
1a6a0 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a  tCommand] && \..
1a6b0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
1a6c0 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d  g length $varNam 1a6d0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 1a6e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a6f0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 1a700 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 1a710 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 1a720 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 "connection") i 1a730 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 n the.. # 1a740 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 1a750 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 f our caller. T 1a760 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object 1a770 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d 0a handle for an.. 1a780 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1a790 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74 69 ADO.NET connecti 1a7a0 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 on previously re 1a7b0 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 turned by [getDb 1a7c0 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 Connection].. 1a7d0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 1a7e0 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 uld be stored th 1a7f0 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ere... #. 1a800 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 . upvar 1 1a810 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63$varName connec
1a820 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tion....
1a830 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1a840 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1a850 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f  nvoke $connectio 1a860 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 0d n ReleaseMemory. 1a870 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c . } resul 1a880 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 t]} then {.. 1a890 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1a8a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1a8b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1a8c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1a8d0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1a8f0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1a900 64 20 74 6f 20 72 65 6c 65 61 73 65 20 64 61 74 d to release dat 1a910 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65 72 abase memory, er 1a920 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 1a930 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
1a940 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
1a950 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1a960 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
1a970 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74       if {[llengt
1a980 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73  h [info commands
1a990 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 68   debug]] > 0} th
1a9a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
1a9b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1a9c0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
1a9d0 5b 6c 69 73 74 20 64 65 62 75 67 20 70 75 72 67  [list debug purg
1a9e0 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  e]..        } re
1a9f0 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  sult]} then {..
1aa00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1aa10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1aa20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1aa30 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1aa40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1aa60 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1aa70 69 6c 65 64 20 74 6f 20 70 75 72 67 65 20 63 61  iled to purge ca
1aa80 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 3a  ll frame, error:
1aa90 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1aaa0 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 1aab0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1aac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1aad0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1aae0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1aaf0 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 1ab00 74 20 64 65 62 75 67 20 63 6c 65 61 6e 75 70 5d t debug cleanup] 1ab10 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 1ab20 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 lt]} then {.. 1ab30 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1ab40 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1ab50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1ab60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1ab70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1ab90 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1aba0 65 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 69 6e ed to cleanup in 1abb0 74 65 72 70 72 65 74 65 72 2c 20 65 72 72 6f 72 terpreter, error 1abc0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1abd0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
1abe0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
1abf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1ac00 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1ac10 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1ac20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
1ac30 73 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 74  st debug collect
1ac40 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  ]..        } res
1ac50 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ult]} then {..
1ac60 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1ac70 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1ac80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1ac90 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1aca0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1acc0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1acd0 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67  led to collect g
1ace0 61 72 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 22  arbage, error: "
1acf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ad00 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74      \n\t $result 1ad10 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1ad20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1ad30 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1ad40 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 4d . proc setupM 1ad50 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 emoryCounters { 1ad60 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 varName } {.. 1ad70 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1ad80 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1ad90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ada0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
1adb0 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20  me counter....
1adc0 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65        set counte
1add0 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65  r(1) [object cre
1ade0 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  ate -alias \..
1adf0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
1ae00 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72  .Diagnostics.Per
1ae10 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20  formanceCounter
1ae20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20  Process \..
1ae30 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20         "Working
1ae40 53 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e  Set" [file rootn
1ae50 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ame [file tail $1ae60 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d ::bin_file]]]... 1ae70 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 . set cou 1ae80 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 74 20 nter(2) [object 1ae90 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d create -alias \. 1aea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 1aeb0 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e tem.Diagnostics. 1aec0 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 PerformanceCount 1aed0 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 er Process \.. 1aee0 20 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 "Worki 1aef0 6e 67 20 53 65 74 20 50 65 61 6b 22 20 5b 66 69 ng Set Peak" [fi 1af00 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil 1af10 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 e tail$::bin_fi
1af20 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  le]]]....
1af30 20 73 65 74 20 63 6f 75 6e 74 65 72 28 33 29 20   set counter(3)
1af40 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
1af50 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
1af60 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67       System.Diag
1af70 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61  nostics.Performa
1af80 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65  nceCounter Proce
1af90 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..
1afa0 20 20 22 50 72 69 76 61 74 65 20 42 79 74 65 73    "Private Bytes
1afb0 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65  " [file rootname
1afc0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62   [file tail $::b 1afd0 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 in_file]]].. 1afe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 1aff0 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c urn "".. }... 1b000 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 .. proc repor 1b010 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 tMemoryCounters 1b020 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61 6d { channel varNam 1b030 65 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20 20 e prefix } {.. 1b040 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 1b050 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 1b060 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b070 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
1b080 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20  ame counter....
1b090 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1b0a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1b0b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1b0c0 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 "---- "$prefix
1b0d0 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c   " counter \"" \
1b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f  ..            [o
1b0f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co 1b100 75 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 65 72 unter(1) Counter 1b110 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 Name] "\" value 1b120 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 is " \.. 1b130 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f [object invo 1b140 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20 52 ke$counter(1) R
1b150 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a  awValue] \n]....
1b160 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1b170 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1b180 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1b190 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 "---- "$prefi
1b1a0 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20  x " counter \""
1b1b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1b1c0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c 1b1d0 6f 75 6e 74 65 72 28 32 29 20 43 6f 75 6e 74 65 ounter(2) Counte 1b1e0 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 rName] "\" value 1b1f0 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 is " \.. 1b200 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 [object inv 1b210 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29 20 oke$counter(2)
1b220 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d  RawValue] \n]...
1b230 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1b240 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1b250 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1b260 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 "---- "$pref
1b270 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22  ix " counter \""
1b280 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b290 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $1b2a0 63 6f 75 6e 74 65 72 28 33 29 20 43 6f 75 6e 74 counter(3) Count 1b2b0 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 erName] "\" valu 1b2c0 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 e is " \.. 1b2d0 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in 1b2e0 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33 29 voke$counter(3)
1b2f0 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a   RawValue] \n]..
1b300 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1b310 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c  ...    proc coll
1b320 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61  ectGarbage { cha
1b330 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e  nnel {millisecon
1b340 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20  ds 1000} {quiet
1b350 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
1b360 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1b370 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1b380 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b390 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1b3a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1b3b0 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61  nvoke GC GetTota
1b3c0 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20  lMemory false..
1b3d0 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
1b3e0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1b3f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1b400 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1b410 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1b420 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1b430 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1b440 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65          "---- me
1b450 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74  mory in use by t
1b460 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f  he CLR before co
1b470 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d  llection... " \.
1b480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b490 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73   $result " bytes 1b4a0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 1b4b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1b4c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 e {.. t 1b4d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1b4e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1b4f0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1b500 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1b510 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f   to get CLR memo
1b520 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a  ry usage, error:
1b530 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1b540 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74      \n\t $result 1b550 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1b560 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1b570 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 1b580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b5a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b5b0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 1b5c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1b5d0 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 NOTE: Repeatedly 1b5e0 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c attempt to coll 1b5f0 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 ect garbage unti 1b600 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e l the allotted n 1b610 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 umber.. # 1b620 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 of millisec 1b630 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 onds has elapsed 1b640 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 . Always attemp 1b650 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 t to collect gar 1b660 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 bage.. # 1b670 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 at least onc 1b680 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 1b690 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1b6a0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1b6b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b6c0 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f set start [clo 1b6d0 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 ck seconds].. 1b6e0 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 set stop [e 1b6f0 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 xpr {$start + ($1b700 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 milliseconds / 1 1b710 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 000)}].... 1b720 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 do {.. 1b730 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1b740 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1b750 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 o force a full g 1b760 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f arbage collectio 1b770 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 n now. Report a 1b780 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ny.. # 1b790 20 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 error that 1b7a0 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 is encountered 1b7b0 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 if we fail... 1b7c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b7d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 1b7f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 1b800 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 etTotalMemory tr 1b810 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } 1b820 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 1b830 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1b840 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1b850 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1b860 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1b870 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1b880 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c  full garbage col
1b890 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20  lection, error:
1b8a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1b8b0 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72       \n\t $error 1b8c0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1b8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 }.... s 1b8e0 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 et now [clock se 1b8f0 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 conds].. 1b900 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74 20 } while {$start
1b910 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20  <= $now &&$now
1b920 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20 20 20  < $stop}.. 1b930 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 }.... ##### 1b940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1b980 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ####.... if 1b990 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1b9a0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1b9b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1b9c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1b9d0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1b9e0 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe 1b9f0 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 mory false.. 1ba00 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d } result] == 1ba10 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1ba20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1ba30 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1ba40 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1ba50 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ba60 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ba70 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 "---- memor 1ba80 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 y in use by the 1ba90 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 CLR after collec 1baa0 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 tion... " \.. 1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65$re
1bac0 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d  sult " bytes\n"]
1bad0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1bae0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1baf0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
1bb00 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1bb10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1bb20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1bb30 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1bb40 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 get CLR memory u 1bb50 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c sage, error: " \ 1bb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bb70 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1bb80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1bb90 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
1bba0 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69      proc getSQLi
1bbb0 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b  teHandleCounts {
1bbc0 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20   channel {quiet
1bbd0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
1bbe0 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
1bbf0 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  st]....      if
1bc00 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
1bc10 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d  ctCommand] && \.
1bc20 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65  .          [have
1bc30 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
1bc40 74 61 6e 74 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  tant COUNT_HANDL
1bc50 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  E]} then {..
1bc60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1bc70 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20   NOTE: Add each
1bc80 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
1bc90 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73  count to the res
1bca0 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20  ulting list...
1bcb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1bcc0 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
1bcd0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
1bce0 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75     connectionCou
1bcf0 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e  nt statementCoun
1bd00 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 20 62 6c  t backupCount bl
1bd10 6f 62 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20  obCount] {..
1bd20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1bd30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1bd40 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1bd50 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1bd60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1bd70 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1bd80 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20  QLite.DebugData
1bd90 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  $name.. 1bda0 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 } value] == 0} 1bdb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bdc0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1bdd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bde0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1bdf0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1be00 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1be10 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 "---- cri 1be20 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 1be30 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 nt \""$name "\"
1be40 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d   is " $value \n] 1be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1be60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c ... l 1be70 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 append result$v
1be80 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..
1be90 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1bea0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1beb0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1bec0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bed0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1bee0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 1bef0 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 critical handle 1bf00 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 count \"" \.. 1bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e$n
1bf20 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  ame "\", error:
1bf30 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e  " \n\t $value \n 1bf40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1bf50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1bf60 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 } elseif {!$qui
1bf70 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1bf80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1bf90 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61   NOTE: The actua
1bfa0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20  l handle counts
1bfb0 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
1bfc0 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75  e; therefore, ju
1bfd0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
1bfe0 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d      return an em
1bff0 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20  pty list...
1c000 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
1c010 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 1c020 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 -- critical hand 1c030 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 le counts unavai 1c040 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 lable\n".. 1c050 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 1c060 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
1c070 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68  .....    proc sh
1c080 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63  utdownSQLite { c
1c090 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61  hannel {force fa
1c0a0 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73  lse} {quiet fals
1c0b0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
1c0c0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d  .      # NOTE: M
1c0d0 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51  ake sure that SQ
1c0e0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
1c0f0 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  y is completely
1c100 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d  shutdown.  This.
1c110 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
1c120 73 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20  s used by tests
1c130 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66  that change conf
1c140 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
1c150 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a  s and/or those..
1c160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
1c170 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20  at need to make
1c180 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20  sure logging is
1c190 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65  initialized (i.e
1c1a0 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a  . just in case..
1c1b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
1c1c0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1c1d0 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61  brary was initia
1c1e0 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f  lized in the pro
1c1f0 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20  cess prior to..
1c200 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1c210 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73   SQLiteLog class
1c220 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73   being able to s
1c230 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67  etup its logging
1c240 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20   callback)...
1c250 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61     #       Norma
1c260 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  lly, this should
1c270 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d   only be perform
1c280 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is
1c290 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20  loaded and..
1c2a0 20 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20    #       ready
1c2b0 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
1c2c0 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
1c2d0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$1c2e0 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 force || [isSQLi 1c2f0 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { 1c300 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c310 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d # BUGFIX: M 1c320 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6e ake sure that an 1c330 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 y "leaked" trans 1c340 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 actions and/or c 1c350 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 onnections.. 1c360 20 20 20 20 23 20 20 20 20 20 20 20 20 20 61 72 # ar 1c370 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 e cleaned up bef 1c380 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 ore calling the 1c390 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 native shutdown 1c3a0 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 function... 1c3b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f #.. fo 1c3c0 72 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f reach transactio 1c3d0 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 n [info transact 1c3e0 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ions] {.. 1c3f0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d if {[string m 1c400 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 atch \.. 1c410 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 System#Dat 1c420 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 a#SQLite#SQLiteT 1c430 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 ransaction#*$tr
1c440 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e  ansaction]} then
1c450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1c460 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1c470 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20              sql
1c480 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
1c490 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f  back $transactio 1c4a0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d n.. } 1c4b0 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 error] == 0} th 1c4c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1c4d0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1c4e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c4f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1c500 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1c510 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1c520 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1c530 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 rolled back lea 1c540 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ked transaction 1c550 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 1c560 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e$tran
1c570 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20  saction \"\n]..
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c590 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
1c5a0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1c5b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1c5c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c5d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1c5e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1c5f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1c600 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1c610 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1c620 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61   to rollback lea
1c630 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ked transaction
1c640 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
1c650 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e             $tran 1c660 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 saction "\", err 1c670 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
1c680 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
1c690 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1c6a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1c6b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1c6c0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
1c6d0 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63   db [info connec
1c6e0 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20  tions] {..
1c6f0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1c700 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20  match \..
1c710 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61         System#Da
1c720 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65  ta#SQLite#SQLite
1c730 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62  Connection#* $db 1c740 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1c750 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1c760 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 h {sql close$db
1c770 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74  } error] == 0} t
1c780 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c790 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1c7a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c7b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c7c0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1c7d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1c7f0 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20  - closed leaked
1c800 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62  database \"" $db 1c810 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 1c820 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1c830 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 1c850 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1c860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c870 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1c880 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c8a0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1c8b0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f G: failed to clo 1c8c0 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 se leaked databa 1c8d0 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 se \"" \.. 1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
1c8f0 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  b "\", error: "
1c900 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1c910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 1c920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1c930 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1c940 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c950 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1c960 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 BUGFIX: Before c 1c970 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 alling the nativ 1c980 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 e shutdown funct 1c990 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 ion, make sure b 1c9a0 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 oth.. # 1c9b0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 of the PR 1c9c0 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 AGMA related dir 1c9d0 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 ectory names are 1c9e0 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 freed... 1c9f0 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 1ca00 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 1ca10 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 ories$channel t
1ca20 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  rue....        i
1ca30 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1ca40 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1ca50 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1ca60 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
1ca70 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
1ca80 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
1ca90 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73  eNativeMethods s
1caa0 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d  qlite3_shutdown.
1cab0 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c  .        } resul
1cac0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
1cad0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1cae0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1caf0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1cb00 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1cb10 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1cb20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1cb30 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75  call sqlite3_shu
1cb40 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22  tdown()... ok: "
1cb50 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1cb60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1cb70 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1cb80 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1cb90 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1cba0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1cbb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1cbc0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1cbd0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 1cbe0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 1cbf0 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 n()... error: " 1cc00 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1cc10 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1cc20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1cc30 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1cc40 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69   proc reportSQLi
1cc50 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20  teResources {..
1cc60 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e             chann
1cc70 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  el {quiet false}
1cc80 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63   {reset true} {c
1cc90 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b  ollect true} } {
1cca0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1ccb0 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69   # NOTE: If avai
1ccc0 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e  lable, report on
1ccd0 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72   (and possibly r
1cce0 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d  eset) the runtim
1ccf0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1cd00 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
1cd10 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20  tatistics...
1cd20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1cd30 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
1cd40 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20  Command] && \..
1cd50 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f           [haveCo
1cd60 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f  nstraint buildCo
1cd70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75  nfiguration.Debu
1cd80 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  g]} then {..
1cd90 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
1cdb0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
1cdc0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69   +NonPublic -ali
1cdd0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  as \..
1cde0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1cdf0 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61  SQLite.DebugData
1ce00 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e   settingReadCoun
1ce10 74 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 65  ts..        } se
1ce20 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d  ttingReadCounts]
1ce30 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1ce40 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d           set nam
1ce50 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67  eCount [$setting 1ce60 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 ReadCounts Count 1ce70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ].. set 1ce80 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d valueCount 0... 1ce90 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1cea0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 1ceb0 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65 pair$settingRe
1cec0 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20  adCounts {..
1ced0 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c          incr val
1cee0 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56  ueCount [$pair V 1cef0 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alue].... 1cf00 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1cf10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1cf20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1cf30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1cf40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1cf50 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 "---- se 1cf60 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 tting \"" [$pair
1cf70 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65   Key] "\" was re
1cf80 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  ad " \..
1cf90 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72            [$pair 1cfa0 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 5c Value] " times\ 1cfb0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 1cfc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 1cfd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1cfe0 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d {$reset} then {.
1cff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
1d000 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69 6e  {[catch {$settin 1d010 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 gReadCounts Clea 1d020 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 r} error] == 0} 1d030 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d040 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1d050 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1d060 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1d070 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1d080 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1d0a0 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 -- reset setting 1d0b0 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 statistics for 1d0c0 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c the previous " \ 1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d0e0 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74$nameCount
1d0f0 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $1d100 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c valueCount " val 1d110 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 ues read\n"].. 1d120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1d130 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1d140 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1d150 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1d160 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1d170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d180 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1d190 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65  : failed to rese
1d1a0 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
1d1b0 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20  tics for " \..
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d1d0 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20  "the previous "
1d1e0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1d1f0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1d200 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  ount \..
1d210 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75            " valu
1d220 65 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20  es read, error:
1d230 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 1d240 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 1d250 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1d260 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1d270 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1d280 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1d290 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1d2a0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 +NonPublic -ali 1d2b0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 1d2c0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 1d2d0 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 SQLite.DebugData 1d2e0 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 settingFileRead 1d2f0 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 Counts.. 1d300 7d 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 } settingFileRea 1d310 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 dCounts] == 0} t 1d320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d330 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b set nameCount [ 1d340 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64$settingFileRead
1d350 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20  Counts Count]..
1d360 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c           set val
1d370 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20  ueCount 0....
1d380 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f         object fo
1d390 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
1d3a0 72 20 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65  r $settingFileRe 1d3b0 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 adCounts {.. 1d3c0 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c incr val 1d3d0 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 ueCount [$pair V
1d3e0 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alue]....
1d3f0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1d400 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d410 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1d420 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1d430 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1d440 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65          "---- se
1d450 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72  tting \"" [$pair 1d460 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 Key] "\" was re 1d470 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 ad " \.. 1d480 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 [$pair
1d490 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 20   Value] " times
1d4a0 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75  from the configu
1d4b0 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d  ration file\n"].
1d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d4d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1d4e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65           if {$re 1d4f0 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 set} then {.. 1d500 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1d510 74 63 68 20 7b 24 73 65 74 74 69 6e 67 46 69 6c tch {$settingFil
1d520 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61  eReadCounts Clea
1d530 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20  r} error] == 0}
1d540 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d550 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1d560 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1d570 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1d580 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1d590 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1d5b0 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e 67  -- reset setting
1d5c0 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20   statistics for
1d5d0 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c  the previous " \
1d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d5f0 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74        $nameCount 1d600 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 " names and "$
1d610 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c  valueCount " val
1d620 75 65 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20  ues read " \..
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d640 20 20 22 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66    "from the conf
1d650 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e  iguration file\n
1d660 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
1d670 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1d680 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1d690 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1d6a0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1d6b0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1d6c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1d6d0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1d6e0 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 o reset setting 1d6f0 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 statistics for " 1d700 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d710 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 "the previ 1d720 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 ous "$nameCount
1d730 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $1d740 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 valueCount \.. 1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d760 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 66 72 " values read fr 1d770 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 1d780 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 tion file, error 1d790 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 : " \n\t \.. 1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65$e
1d7b0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1d7c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d7d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1d7e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1d7f0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1d800 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20  eObjectCommand]
1d810 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1d820 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e  [haveSQLiteDefin
1d830 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f  eConstant INTERO
1d840 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d  P_VIRTUAL_TABLE]
1d850 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1d860 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69   [haveSQLiteDefi
1d870 6e 65 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b  neConstant TRACK
1d880 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20  _MEMORY_BYTES]}
1d890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d8a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1d8b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 1d8c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1d8d0 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f  --- current memo
1d8e0 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
1d8f0 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a  iteMemory... "..
1d900 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1d910 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1d920 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1d930 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1d940 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1d960 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1d970 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79  .SQLiteMemory by
1d980 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20  tesAllocated..
1d990 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
1d9a0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1d9b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1d9c0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1d9d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1d9e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d9f0 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 1da00 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 1da10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1da20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1da30 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 1da40 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 1da50 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1da60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1da70 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1da80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1da90 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
1daa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1dab0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1dac0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1dad0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1dae0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1daf0 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   maximum memory
1db00 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
1db10 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20  Memory... "..
1db20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1db30 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1db40 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1db50 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1db60 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1db70 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1db80 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1db90 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d  LiteMemory maxim
1dba0 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  umBytesAllocated
1dbb0 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f  ..        } memo
1dbc0 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
1dbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1dbe0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1dbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1dc00 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1dc10 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1dc20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1dc30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1dc40 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1dc50 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 1dc60 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 1dc70 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1dc80 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1dc90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1dca0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1dcb0 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
1dcc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1dcd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
1dce0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 1dcf0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1dd00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1dd10 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e  nel "---- curren
1dd20 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  t memory in use
1dd30 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a  by SQLite... "..
1dd40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1dd50 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1dd60 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1dd70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1dd80 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1dd90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1dda0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1ddb0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1ddc0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1ddd0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
1dde0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
1ddf0 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
1de00 73 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  sed..        } m
1de10 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
1de20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1de30 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1de40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1de50 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1de60 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 1de70 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 1de80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1de90 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1dea0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1deb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 1dec0 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 ybe the SQLite c 1ded0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ore library is u 1dee0 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 1def0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1df00 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 1df10 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 1df20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1df30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1df40 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1df50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1df60 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
1df70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1df80 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1df90 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1dfa0 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61   memory unavaila
1dfb0 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ble....        i
1dfc0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1dfd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 1dfe0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1dff0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 1e000 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1e010 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1e020 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 set result$me
1e030 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65  mory; # NOTE: Re
1e040 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75  turn memory in-u
1e050 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72  se to our caller
1e060 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  .....      if {!
1e070 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e080 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1e090 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78  hannel "---- max
1e0a0 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  imum memory in u
1e0b0 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
1e0c0 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
1e0d0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1e0e0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1e0f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1e100 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1e110 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1e120 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
1e130 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
1e140 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1e150 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1e160 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1e170 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
1e180 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f      sqlite3_memo
1e190 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a  ry_highwater 0..
1e1a0 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79          } memory
1e1b0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1e1c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1e1d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1e1e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1e1f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1e200 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 1e210 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 1e220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1e230 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1e240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e250 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 # NOTE: Maybe t 1e260 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 1e270 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 ibrary is unavai 1e280 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 lable?.. 1e290 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 1e2a0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 1e2b0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i 1e2c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1e2d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e2e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1e2f0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
1e300 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
1e310 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1e320 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1e330 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
1e340 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a  ry unavailable..
1e350 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$1e360 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1e370 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1e380 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1e390 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 1e3a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1e3b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 1e3c0 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
1e3d0 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
1e3e0 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e  ctGarbage $chann 1e3f0 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... 1e400 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e410 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e420 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1e430 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 1e440 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 1e450 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 the CLR... ".. 1e460 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 1e470 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1e480 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 1e490 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 1e4a0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1e4b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1e4c0 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 1e4d0 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 emory false.. 1e4e0 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 1e4f0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1e500 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1e510 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 ng is integer -s 1e520 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 trict$memory]}
1e530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1e540 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1e550 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1e560 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1e570 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1e580 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65  s $memory " byte 1e590 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 s\n"].. 1e5a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e5b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1e5c0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 1e5d0 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 invalid.... 1e5e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1e5f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1e600 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1e610 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1e620 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
1e630 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1e640 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1e650 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1e660 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
1e670 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
1e680 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1e690 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e6b0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1e6c0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 1e6d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1e6e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1e6f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1e700 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 1e710 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 navailable.... 1e720 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1e730 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1e740 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1e750 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1e760 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
1e770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1e780 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
1e790 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 1e7a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 1e7b0 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 1e7c0 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ories { channel 1e7d0 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 {reset false} } 1e7e0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1e7f0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1e800 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 if the sqlite3_w 1e810 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 1e820 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 ry function is a 1e830 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... 1e840 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 #.. tputs 1e850 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20$channel \..
1e860 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
1e870 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f  king for functio
1e880 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  n sqlite3_win32_
1e890 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e  set_directory...
1e8a0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   "....      #..
1e8b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
1e8c0 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71  s call to the sq
1e8d0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
1e8e0 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
1e8f0 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20  on uses the..
1e900 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c     #       inval
1e910 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74  id value 0 for t
1e920 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
1e930 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73  t.  This code is
1e940 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20   designed..
1e950 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63   #       to chec
1e960 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65  k if calling the
1e970 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
1e980 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
1e990 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23  n (i.e...      #
1e9a0 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61         the actua
1e9b0 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  l result of the
1e9c0 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
1e9d0 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67  t matter as long
1e9e0 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20   as no..      #
1e9f0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
1ea00 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20  is changed)...
1ea10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1ea20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 20  {[isWindows] &&
1ea30 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1ea40 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1ea50 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1ea60 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1ea70 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1ea80 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
1ea90 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
1eaa0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
1eab0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
1eac0 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ry 0 null..
1ead0 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
1eae0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1eaf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c       # NOTE: Cal
1eb00 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  ling the sqlite3
1eb10 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
1eb20 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f  tory function do
1eb30 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
1eb40 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e  #       cause an
1eb50 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72   exception; ther
1eb60 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62  efore, it must b
1eb70 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65  e available (i.e
1eb80 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
1eb90 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69     even though i
1eba0 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20  t should return
1ebb0 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e  a failure return
1ebc0 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20   code in this..
1ebd0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
1ebe0 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  ase)...        #
1ebf0 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
1ec00 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f  straint sqlite3_
1ec10 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
1ec20 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ory....        t
1ec30 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 1ec40 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 s\n.... # 1ec50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1ec60 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 : Does our calle 1ec70 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 r want to reset 1ec80 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f the directories? 1ec90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1eca0 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d if {$reset}
1ecb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ecc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1ecd0 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
1ece0 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
1ecf0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
1ed00 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
1ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
1ed20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20      reset their
1ed30 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values,
1ed40 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be
1ed50 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a  null for both...
1ed60 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1ed70 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69    Since the sqli
1ed80 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1ed90 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
1eda0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a   is available,..
1edb0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1edc0 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20    use it...
1edd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1ede0 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
1edf0 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d   1} {$index < 3} 1ee00 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d {incr index} {. 1ee10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1ee20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1ee30 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1ee40 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1ee50 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1ee70 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1ee80 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 1ee90 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 1eea0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 1eeb0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 1eec0 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c ctory$index nul
1eed0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
1eee0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
1eef0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ef00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1ef10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1ef20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ef30 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 1ef40 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 1ef50 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 t_directory("$i
1ef60 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20  ndex \..
1ef70 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c            ", nul
1ef80 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  l)... ok: " $res 1ef90 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1efa0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 1efc0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1efd0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1eff0 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
1f000 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
1f010 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a  ory(" $index \.. 1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f030 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 ", null)... er 1f040 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
1f050 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
1f060 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1f070 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1f080 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1f090 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1f0a0 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 hannel no\n.... 1f0b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1f0c0 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f # NOTE: Does o 1f0d0 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 ur caller want t 1f0e0 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 o reset the dire 1f0f0 63 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 ctories? This c 1f100 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 an only.. 1f110 20 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 # be perf 1f120 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 ormed if SQLite 1f130 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 is loaded and re 1f140 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t 1f150 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 he test.. 1f160 20 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d # suite.. 1f170 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1f180 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 if {$reset &
1f190 26 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79  & [isSQLiteReady
1f1a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1f1b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1f1c0 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61    # NOTE: Now ma
1f1d0 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
1f1e0 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61  base and tempora
1f1f0 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61  ry directories a
1f200 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  re..          #
1f210 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69        reset thei
1f220 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  r default values
1f230 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
1f240 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e  e null for both.
1f250 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
1f260 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71      Since the sq
1f270 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
1f280 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
1f290 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20  on does not..
1f2a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
1f2b0 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69  ppear to be avai
1f2c0 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61  lable, use the a
1f2d0 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41  ssociated PRAGMA
1f2e0 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20   commands..
1f2f0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73       #       ins
1f300 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  tead...
1f310 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   #..          fo
1f320 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20  reach directory
1f330 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65  [list data_store
1f340 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f  _directory temp_
1f350 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d  store_directory]
1f360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f370 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41  set sql [appendA
1f380 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64  rgs "PRAGMA " $d 1f390 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c irectory " = \"\ 1f3a0 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ";"].... 1f3b0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1f3c0 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d executeSql$sql}
1f3d0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
1f3e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f3f0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1f400 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1f410 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f420 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 "---- execu 1f430 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 te PRAGMA "$dir
1f440 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20  ectory "... ok:
1f450 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
1f460 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74           $result 1f470 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 1f480 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1f490 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f4a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f4b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1f4d0 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41  - execute PRAGMA
1f4e0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 1f4f0 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 .. error: " \.. 1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f510 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
1f520 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1f530 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1f540 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f550 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
1f560 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61      # NOTE: Fina
1f570 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75  lly, show the cu
1f580 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
1f590 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and
1f5a0 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20  temporary..
1f5b0 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
1f5c0 72 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20  ries.  This can
1f5d0 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65  only be performe
1f5e0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c  d if SQLite is l
1f5f0 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20  oaded..      #
1f600 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66       and ready f
1f610 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
1f620 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
1f630 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
1f640 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74  sSQLiteReady]} t
1f650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66  hen {..        f
1f660 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79  oreach directory
1f670 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72   [list data_stor
1f680 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70  e_directory temp
1f690 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
1f6a0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ] {..          t
1f6b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1f6c0 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 ppendArgs "---- 1f6d0 63 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 checking "$dire
1f6e0 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d  ctory "... "]...
1f6f0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
1f700 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  ql [appendArgs "
1f710 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 1f720 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 ory \;].... 1f730 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1f740 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c {executeSql$sql
1f750 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d   scalar} result]
1f760 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1f770 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1f780 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1f790 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 dArgs "ok: \""$
1f7a0 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20  result \"\n]..
1f7b0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1f7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1f7d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1f7e0 70 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a pendArgs "error: 1f7f0 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
1f800 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1f810 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1f820 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
1f830 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c      proc loadSQL
1f840 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20  iteTestSettings
1f850 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69  { channel {suffi
1f860 78 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c  x ""} {quiet fal
1f870 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
1f880 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1f890 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65  Skip loading the
1f8a0 20 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 65   settings if the
1f8b0 69 72 20 75 73 61 67 65 20 68 61 73 20 62 65 65  ir usage has bee
1f8c0 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20  n disabled...
1f8d0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1f8e0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1f8f0 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 74  no(sqliteTestSet
1f900 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  tings)]} then {.
1f910 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f920 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
1f930 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72   custom per-user
1f940 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74   and/or per-host
1f950 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
1f960 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
1f970 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
1f980 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
1f990 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20  latform(user)]}
1f9a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f9b0 20 20 73 65 74 20 75 73 65 72 53 65 74 74 69 6e    set userSettin
1f9c0 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  gsFileName [file
1f9d0 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e   join [getCommon
1f9e0 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20  Directory] \..
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
1fa00 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73  endArgs settings
1fa10 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63   $suffix .$::tc
1fa20 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29  l_platform(user)
1fa30 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20   .eagle]]....
1fa40 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
1fa50 20 65 78 69 73 74 73 20 24 75 73 65 72 53 65 74   exists $userSet 1fa60 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 tingsFileName]} 1fa70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1fa80 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1fa90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1faa0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1fab0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1fac0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1fad0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 "---- loa 1fae0 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 ding per-user te 1faf0 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 1fb00 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 1fb10 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53$userS
1fb20 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
1fb30 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20  \"...\n]..
1fb40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1fb50 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1fb60 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
1fb70 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
1fb80 73 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 53  st source $userS 1fb90 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 1fba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1fbb0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1fbd0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1fbe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1fbf0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1fc00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1fc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1fc20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1fc30 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f NG: failed to lo 1fc40 61 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 ad per-user sett 1fc50 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 1fc60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1fc70 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
1fc80 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
1fc90 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 1fca0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 1fcb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1fcc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1fcd0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1fce0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1fcf0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1fd10 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1fd20 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1fd40 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 -- skipped loadi 1fd50 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 ng per-user test 1fd60 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 1fd70 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1fd80 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
1fd90 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
1fda0 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
1fdb0 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
1fdc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1fdd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1fde0 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23  ...        #####
1fdf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe30 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ##....        if
1fe40 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
1fe50 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f  :tcl_platform(ho
1fe60 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  st)]} then {..
1fe70 20 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74          set host
1fe80 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
1fe90 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1fea0 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
1feb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1fec0 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
1fed0 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 1fee0 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
1fef0 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d  (host) .eagle]].
1ff00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
1ff10 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68  {[file exists $h 1ff20 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 1ff30 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 1ff40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1ff50 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1ff70 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1ff80 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1ffa0 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 -- loading per-h 1ffb0 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 ost test setting 1ffc0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ffe0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
1fff0 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
20000 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20010 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
20020 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
20030 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
20040 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
20050 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c  $hostSettingsFil 20060 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 20070 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 } error]} th 20080 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20090 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
200a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
200b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $200c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 200d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 200e0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 200f0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 20100 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 to load per-hos 20110 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 t settings file 20120 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 20130 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74$host
20140 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
20150 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
20160 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 20180 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 20190 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 201a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 201b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
201c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
201d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 201e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 201f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20200 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 20210 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 loading per-hos 20220 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 t test settings 20230 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68$h
20250 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
20260 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73  ame "\", it does
20270 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
20280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
20290 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
202a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
202b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
202c0 6f 63 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 74  oc copySampleDat
202d0 61 62 61 73 65 46 69 6c 65 73 20 7b 7d 20 7b 0d  abaseFiles {} {.
202e0 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31  .      uplevel 1
202f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
20300 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
20310 6f 70 79 20 28 6f 72 20 72 65 2d 63 6f 70 79 29  opy (or re-copy)
20320 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 64   the reference d
20330 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
20340 64 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  d for this..
20350 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 69 74      #       unit
20360 20 74 65 73 74 20 74 6f 20 74 68 65 20 62 75 69   test to the bui
20370 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20  ld directory in
20380 63 61 73 65 20 69 74 20 68 61 73 20 62 65 65 6e  case it has been
20390 20 63 68 61 6e 67 65 64 0d 0a 20 20 20 20 20 20   changed..
203a0 20 20 23 20 20 20 20 20 20 20 62 79 20 61 20 70    #       by a p
203b0 72 65 76 69 6f 75 73 20 74 65 73 74 20 72 75 6e  revious test run
203c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
203d0 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20        file copy
203e0 2d 66 6f 72 63 65 20 24 6e 6f 72 74 68 77 69 6e  -force $northwin 203f0 64 45 66 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 dEfDbFile \.. 20400 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 20410 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 n [getBuildDirec 20420 74 6f 72 79 20 66 61 6c 73 65 5d 20 5b 66 69 6c tory false] [fil 20430 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e e tail$northwin
20440 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 20  dEfDbFile]]..
20450 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
20460 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
20470 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b  teTestPrologue {
20480 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
20490 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
204a0 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73   running our cus
204b0 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20  tom prologue if
204c0 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73  the main one has
204d0 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
204e0 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
204f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
20500 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
20510 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61  ::no(prologue.ea
20520 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  gle)]} then {..
20530 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
20540 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
20550 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74  he "before-const
20560 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70  raints" custom p
20570 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
20580 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20  er-host..
20590 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65   #       test se
205a0 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
205b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
205c0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
205d0 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
205e0 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63  ttings $::test_c 205f0 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d hannel .before]. 20600 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 20610 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 20620 65 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 eck if the [obje 20630 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 ct] command is a 20640 76 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 vailable; if not 20650 2c 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 , add some.. 20660 20 20 20 20 23 20 20 20 20 20 20 20 73 68 69 6d # shim 20670 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 s to make the te 20680 73 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f st suite run smo 20690 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 other... 206a0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 206b0 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 ForSQLiteObjectC 206c0 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 ommand$::test_c
206d0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
206e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
206f0 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74  OTE: Determine t
20700 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the
20710 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20  native platform
20720 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65  and architecture
20730 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20740 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
20750 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74  rm [getBuildPlat
20760 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20  form true]..
20770 20 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63      set architec
20780 74 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75  ture [architectu
20790 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70  reForPlatform $p 207a0 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... 207b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 207c0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 NOTE: Show the 207d0 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 207e0 68 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 hitecture used t 207f0 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 o help locate th 20800 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 20810 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 native build 20820 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 files... 20830 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 20840 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20850 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
20860 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
20870 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c  - platform for l
20880 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62  ocating native b
20890 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22  uild files is \"
208a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
208b0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d   $platform \"\n] 208c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 208d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
208e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
208f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
20900 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20  -- architecture
20910 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74  for locating nat
20920 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20  ive build files
20930 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  is \"" \..
20940 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 20950 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ure \"\n].... 20960 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20970 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 # NOTE: Build a 20980 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 list of configur 20990 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 ation files that 209a0 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 we handle... 209b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 209c0 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 set configFileNa 209d0 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 mes [list \.. 209e0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 209f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e Data.SQLite.dll. 20a00 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 config].... 20a10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 20a20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 NOTE: Build a li 20a30 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 st of auxiliary 20a40 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e Managed Debuggin 20a50 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 g Assistants (MD 20a60 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 A).. # 20a70 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f configuratio 20a80 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 n files that we 20a90 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 handle... 20aa0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 20ab0 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 20ac0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 20ad0 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 EagleShe 20ae0 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e ll32.exe.mda.con 20af0 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 fig Installer.ex 20b00 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a e.mda.config \.. 20b10 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test 20b20 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 20b30 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 testlinq.exe.mda 20b40 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 .config \.. 20b50 20 20 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 testef6.e 20b60 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a xe.mda.config].. 20b70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 20b80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 20b90 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 ld the list of e 20ba0 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 xternal files th 20bb0 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 at we handle. S 20bc0 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 ome of.. 20bd0 23 20 20 20 20 20 20 20 74 68 65 73 65 20 66 69 # these fi 20be0 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 les may be nativ 20bf0 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 e and/or managed 20c00 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 assemblies that 20c10 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 are.. # 20c20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 74 required t 20c30 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 o perform variou 20c40 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 s tests... 20c50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 20c60 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d externalFileNam 20c70 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 20c80 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 20c90 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f in EntityFramewo 20ca0 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d rk lib [string m 20cb0 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 ap [list Fx ""] 20cc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 20cd0 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list 20ce0 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 netFx451 netFx4 20cf0 35 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 5 netFx452 netFx 20d00 34 35 20 6e 65 74 46 78 34 36 20 5c 0d 0a 20 20 45 netFx46 \.. 20d10 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 netFx4 20d20 35 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 5 netFx461 netFx 20d30 34 35 20 6e 65 74 46 78 34 36 32 20 6e 65 74 46 45 netFx462 netF 20d40 78 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 x45] [getBuildNe 20d50 74 46 78 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 tFx]]] \.. 20d60 20 20 20 20 20 20 45 6e 74 69 74 79 46 72 61 6d EntityFram 20d70 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 ework.dll]].... 20d80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 20d90 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 20da0 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 the list of nati 20db0 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ve assembly file 20dc0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 20dd0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 20de0 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 20df0 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d FileNames [list] 20e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c .... eval 20e10 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 lappend nativeF 20e20 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 ileNames [getNat 20e30 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 20e40 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 mesOnly].. 20e50 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e eval lappend n 20e60 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b ativeFileNames [ 20e70 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 20e80 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d lyFileNamesOnly] 20e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 20ea0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 20eb0 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 uild the list of 20ec0 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 20ed0 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 mbly files that 20ee0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 we handle... 20ef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 20f00 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 et mixedFileName 20f10 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 s [list].... 20f20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 20f30 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 20f40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 20f50 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78 lappend mix 20f60 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 edFileNames Syst 20f70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 20f80 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... 20f90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20fa0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 20fb0 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 d the list of ma 20fc0 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 20fd0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 20fe0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d dle... #. 20ff0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e . set man 21000 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c agedFileNames [l 21010 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 21020 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 21030 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 QLite.Linq.dll S 21040 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 21050 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 e.EF6.dll].... 21060 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52 if {![hasR 21070 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat 21080 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ive]} then {.. 21090 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 210a0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 210b0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 210c0 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. 210d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 210e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 210f0 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75 Show the variou 21100 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20 s lists of file 21110 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68 names that are h 21120 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a andled by this.. 21130 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 21140 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 procedure... 21150 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 21160 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
21170 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
21180 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21190 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22  "---- list of \"
211a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20  configuration\"
211b0 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22  file names is: "
211c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
211d0 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  $configFileNames 211e0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 211f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
21200 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
21210 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
21220 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c   "---- list of \
21230 22 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69  "MDA configurati
21240 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20  on\" file names
21250 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  is: " \..
21260 20 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46       $mdaConfigF 21270 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a ileNames \n].... 21280 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
21290 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
212a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
212b0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
212c0 69 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61  ist of \"externa
212d0 6c 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69  l\" file names i
212e0 73 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69  s: " $externalFi 212f0 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 leNames \n].... 21300 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
21310 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
21320 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
21330 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69          "---- li
21340 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22  st of \"native\"
21350 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20   file names is:
21360 22 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  " $nativeFileNam 21370 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 es \n].... 21380 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
21390 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
213a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
213b0 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66     "---- list of
213c0 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20   \"mixed\" file
213d0 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78  names is: " $mix 213e0 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d edFileNames \n]. 213f0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 21400 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
21410 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21420 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
21430 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61  - list of \"mana
21440 67 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73  ged\" file names
21450 20 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46   is: " $managedF 21460 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a ileNames \n].... 21470 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 21480 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 # NOTE: Remov 21490 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 e any test const 214a0 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 raints that refe 214b0 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 r to the native 214c0 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 and/or.. 214d0 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 214e0 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 assembly files t 214f0 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e hat we handle un 21500 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 less forbidden f 21510 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 rom.. # 21520 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a doing so... 21530 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 21540 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 21550 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 21560 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 RemoveConstraint 21570 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 21580 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 21590 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 ileName$configF
215a0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
215b0 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
215c0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
215d0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 215e0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 215f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 21600 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 21610 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e$mdaConfigFileN
21620 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
21630 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
21640 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
21650 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 21660 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 21670 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 21680 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
21690 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
216a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
216b0 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
216c0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
216d0 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  _ [file tail $fi 216e0 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 216f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 21700 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 21710 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
21720 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
21730 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
21740 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
21750 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 21760 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 21770 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 21780 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 ach fileName$mi
21790 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
217a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f              remo
217b0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
217c0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24  pendArgs file_ $217d0 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 217e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 217f0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 21800 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
21810 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
21820 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73        removeCons
21830 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21840 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61  gs file_ $fileNa 21850 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d me].. } 21860 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 21870 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 21880 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 # NOTE: Skip a 21890 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ll System.Data.S 218a0 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 QLite related fi 218b0 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c le handling (del 218c0 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 eting,.. 218d0 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c # copying, 218e0 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 and loading) if 218f0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 21900 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 21910 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 21920 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 ts ::no(sqliteFi 21930 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 21940 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 21950 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 21960 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c ip trying to del 21970 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 ete any files if 21980 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 21990 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 219a0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 219b0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 219c0 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d teSqliteFiles)]} 219d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 219e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 219f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 21a00 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 teSqliteConfigFi 21a10 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 21a30 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 each fileName$c
21a40 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
21a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21a60 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72    tryDeleteBinar
21a70 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d  yFile $fileName. 21a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 21a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 21aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 21ab0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 21ac0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 21ad0 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 teExternalFiles) 21ae0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21af0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 21b00 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f fileName$mdaCo
21b10 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
21b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21b30 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46   tryDeleteBuildF
21b40 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  ile $fileName fa 21b50 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. 21b60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 21b70 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 21b80 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c leName$external
21b90 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
21bb0 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
21bc0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 21bd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 21be0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 21bf0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 21c00 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 21c10 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 (deleteSqliteNat 21c20 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 21c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21c40 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 21c50 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 21c60 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 qliteImplicitNat 21c70 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 21c80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21c90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 21ca0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
21cb0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
21cc0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
21cd0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 21ce0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 21cf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21d00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 21d10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 21d20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 21d30 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e no(deleteSqliteN 21d40 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 onImplicitFiles) 21d50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21d60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 21d70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 21d80 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c o(deleteSqlitePl 21d90 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 atformFiles)] && 21da0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21db0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 21dc0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
21dd0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21df0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
21e00 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 21e10 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 21e20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 21e30 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
21e40 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 21e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21e60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 21e70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 21e80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 21e90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 21ea0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 o(deleteSqliteAr 21eb0 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 21ec0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 21ed0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 21ee0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
21ef0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
21f00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21f10 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
21f20 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 21f30 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21f50 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 21f60 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 21f70 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 21f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21fa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 21fb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 21fc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 21fd0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 21fe0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 21ff0 53 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 SqliteMixedFiles 22000 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 22010 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 22020 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 22030 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 22040 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 22050 6e 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65 n is set, delete 22060 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 implicit.. 22070 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 22080 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 22090 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 mbly files as we 220a0 6c 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d ll. This runtim 220b0 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 e option.. 220c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 220d0 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 check is handled 220e0 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 when building t 220f0 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 he list of mixed 22100 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 -mode.. 22110 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 22120 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 embly file names 22130 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 22140 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 22150 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 22160 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 22170 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 qliteImplicitMix 22180 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 edFiles)]} then 22190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 221a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 221b0 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 ame$mixedFileNa
221c0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
221d0 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
221e0 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 221f0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 22200 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 22210 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 22220 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 22230 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 22240 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e (deleteSqliteNon 22250 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d ImplicitFiles)]} 22260 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22270 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 22280 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 22290 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 deleteSqlitePlat 222a0 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c formFiles)] && \ 222b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 222c0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 222d0 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
222e0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
22300 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
22310 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 22320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22330 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 22340 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
22350 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22370 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 22380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 22390 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 223a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 223b0 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 223c0 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 223d0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 223e0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 223f0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
22400 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
22410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22420 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
22430 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c  leName $mixedFil 22440 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 22460 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 22470 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 22480 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 22490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 224b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 224c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 224d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 224e0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 224f0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 22500 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d teManagedFiles)] 22510 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22520 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 22530 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 fileName$manage
22540 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22560 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
22570 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 22580 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 225a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 225b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 225c0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f 225d0 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 or the "autoSele 225e0 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ct" runtime opti 225f0 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c on. If present, 22600 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 22610 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 attempt to a 22620 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c utomatically sel 22630 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 ect the first av 22640 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 22650 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 # build 22660 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 (or "release") 22670 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 of SQLite and Sy 22680 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 22690 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 226a0 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 for use with 226b0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 226c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 226d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 if {[ha 226e0 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 sRuntimeOption a 226f0 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e utoSelect]} then 22700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22710 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 if {![checkForSQ 22720 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
22730 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d  st_channel true]
22740 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22750 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
22760 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24  SQLiteReleases $22770 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 ::test_channel t 22780 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rue.. 22790 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 227a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 227b0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 227c0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 227d0 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c verify the buil 227e0 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 d directory if i 227f0 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 nstructed;.. 22800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 22810 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 herwise, make su 22820 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 re it actually e 22830 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 xists or halt th 22840 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 e entire.. 22850 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 22860 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 ing process if i 22870 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 22880 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 22890 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 228a0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 228b0 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 (verifyBuildDire 228c0 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d ctory)]} then {. 228d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 228e0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 228f0 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e TE: At this poin 22900 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 t, the build dir 22910 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 ectory MUST exis 22920 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 t as a.. 22930 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 # vali 22940 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 d directory for 22950 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 22960 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e ess to continue. 22970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 22980 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 22990 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB 229a0 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 uildDirectory fa 229b0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 229c0 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 229d0 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
229e0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
229f0 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
22a00 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 22a10 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 22a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 22a40 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 22a50 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 22a60 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 22a70 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 22a80 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 22a90 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 22aa0 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 22ab0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 22ac0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 22ad0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
22ae0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
22af0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
22b00 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
22b10 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
22b20 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  fy build directo
22b30 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72  ry \"" $director 22b40 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 22b50 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 "\", all 22b60 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e testing halted\n 22b70 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 22b80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 22b90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 # NOTE: Rai 22ba0 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 sing a script er 22bb0 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f ror from this po 22bc0 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d int should halt. 22bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 22be0 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 the testi 22bf0 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 ng process... 22c00 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 22c10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 22c20 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d r [appendArgs \. 22c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22c40 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 "could not ve 22c50 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 22c60 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
22c70 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
22c80 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
22c90 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
22ca0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
22cb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
22cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
22cd0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
22ce0 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
22cf0 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69  copy any files i
22d00 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
22d10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
22d20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
22d30 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
22d40 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  ySqliteFiles)]}
22d50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
22d60 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
22d70 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
22d80 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
22d90 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
22da0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
22db0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 22dc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22dd0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 "---- copyi 22de0 6e 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 ng \"configurati 22df0 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 on\" files...\n" 22e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 22e10 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 22e20 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 me$configFileNa
22e30 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
22e40 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
22e50 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  ildFile $fileNam 22e60 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 e false.. 22e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 22e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 22e90 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 22ea0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 22eb0 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c pySqliteExternal 22ec0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 22ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 22ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22ef0 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 # NOTE: Copy the 22f00 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 Managed Debuggi 22f10 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d ng Assistants (M 22f20 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f DA) configuratio 22f30 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 22f40 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f # file fo 22f50 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c r the Eagle shel 22f60 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f l to the build o 22f70 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c utput directory, 22f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22f90 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 # while us 22fa0 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 ing each of the 22fb0 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 names of the var 22fc0 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 ious legacy test 22fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22fe0 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 # executab 22ff0 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 les. This will 23000 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 help to make sur 23010 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a e that all the.. 23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 23030 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 legacy tes 23040 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 ts run with exac 23050 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 tly the same set 23060 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 of Managed.. 23070 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 23080 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 Debugging Ass 23090 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 istants configur 230a0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ed... 230b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 230c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
230d0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
230f0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d  ---- copying \"M
23100 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  DA configuration
23110 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a  \" files...\n"..
23120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23130 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
23140 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 23150 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 23160 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 23170 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 inaryFile EagleS 23180 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con 23190 66 69 67 20 74 72 75 65 20 22 22 20 24 66 69 6c fig true ""$fil
231a0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
231b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
231c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
231d0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
231e0 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e   Copy the extern
231f0 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20  al binaries, if
23200 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65  any, to the dire
23210 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20  ctory that..
23220 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
23230 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45    contains the E
23240 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69  agle shell.  Thi
23250 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75  s is typically u
23260 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20  sed to make..
23270 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
23280 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69     sure assembli
23290 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  es referenced by
232a0 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20   the ones being
232b0 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20  tested are..
232c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
232d0 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69    available duri
232e0 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70  ng the testing p
232f0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...
23300 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23310 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 23320 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d :test_channel "- 23330 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 --- copying \"ex 23340 74 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e ternal\" files.. 23350 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 23360 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 23370 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c leName$external
23380 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
233a0 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65  CopyExternalFile
233b0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 233c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 233d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 233e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 233f0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 23400 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 (copySqliteNativ 23410 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 23420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23430 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 23440 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 23450 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 test platform is 23460 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 likely the defa 23470 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 ult for this.. 23480 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 23490 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 machine, als 234a0 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 o try to copy th 234b0 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 e native files t 234c0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 o the.. 234d0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e # bin 234e0 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 ary location... 234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 23510 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 23520 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 ::no(copySqliteI 23530 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c mplicitNativeFil 23540 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 23550 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 [is 23560 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 DefaultBuildPlat 23570 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 form]} then {.. 23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 23590 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
235a0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
235b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
235c0 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63  - copying implic
235d0 69 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69  it \"native\" fi
235e0 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20  les...\n"....
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
23600 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 23610 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 23620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23630 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 23640 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 bly$fileName fa
23650 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
23660 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23670 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
23680 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
23690 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
236a0 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70  copySqliteNonImp
236b0 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
236c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
236d0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
236e0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
236f0 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  ySqlitePlatformF
23700 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23720 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
23730 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 23740 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 23750 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 23760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
23770 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23790 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
237a0 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69  ng \"native\" fi
237b0 6c 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d  les for platform
237c0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p 237e0 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d latform \"...\n] 237f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 23800 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 23810 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
23820 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23840 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $23850 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 fileName false$
23860 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
23870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
238a0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
238b0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
238c0 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72  qliteArchitectur
238d0 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20  eFiles)] && \..
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
238f0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
23900 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  h $architecture] 23910 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23930 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
23940 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
23950 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
23960 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
23970 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76   copying \"nativ
23980 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72  e\" files for ar
23990 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c  chitecture \"" \
239a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
239b0 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 239c0 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a cture \"...\n].. 239d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 239e0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 239f0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
23a00 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
23a20 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 23a30 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 leName false$ar
23a40 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
23a80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
23a90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
23aa0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
23ab0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
23ac0 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d  iteMixedFiles)]}
23ad0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23ae0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23af0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
23b00 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20  If the "native"
23b10 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  runtime option i
23b20 73 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c  s set, copy impl
23b30 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  icit..
23b40 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65      #       mixe
23b50 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
23b60 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20  files as well.
23b70 54 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  The runtime opti
23b80 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
23b90 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20    #       check
23ba0 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20  is handled when
23bb0 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73  building the lis
23bc0 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d  t of mixed-mode.
23bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
23be0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
23bf0 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20  file names...
23c00 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
23c10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
23c20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
23c30 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70  no(copySqliteImp
23c40 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29  licitMixedFiles)
23c50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23c60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
23c70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 23c80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23c90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 23ca0 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c pying implicit \ 23cb0 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e "mixed\" files.. 23cc0 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 23cd0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 23ce0 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 fileName$mixedF
23cf0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23d10 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66  yCopyAssembly $f 23d20 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 ileName false.. 23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 23d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 23d60 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 23d70 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 23d80 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 23d90 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23db0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 23dc0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 23dd0 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d ePlatformFiles)] 23de0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 23df0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 23e00 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
23e10 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
23e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23e30 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 23e40 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 23e50 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 23e70 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d ---- copying \"m 23e80 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 ixed\" files for 23e90 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d platform \"" \. 23ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 23eb0 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
23ec0 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20   \"...\n]....
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
23ee0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
23ef0 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 23f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23f10 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 tryCopyAs 23f20 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
23f30 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d   false $platform 23f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23f50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 23f60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23f70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 23f80 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 23f90 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 no(copySqliteArc 23fa0 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d hitectureFiles)] 23fb0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 23fc0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 23fd0 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 ng length$archi
23fe0 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68  tecture] > 0} th
23ff0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24000 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 24010 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 24020 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24040 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 "---- copying 24050 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 \"mixed\" files 24060 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 for architectur 24070 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
24090 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e  architecture \".
240a0 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n]....
240b0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
240c0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 240d0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 240f0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 24100 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c ly$fileName fal
24110 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65  se $architecture 24120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24130 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 24140 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 24150 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24160 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 24170 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 24180 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 24190 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 opySqliteManaged 241a0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 241b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 241c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
241d0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69  nnel "---- copyi
241e0 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66  ng \"managed\" f
241f0 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
24200 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
24210 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61  ach fileName $ma 24220 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b nagedFileNames { 24230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24240 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 24250 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 y$fileName true
24260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24270 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
24280 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
24290 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
242a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
242b0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c  Skip trying to l
242c0 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66  oad any files if
242d0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
242e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
242f0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
24300 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
24310 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
24320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24330 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
24340 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
24350 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65  liteImplicitFile
24360 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
24370 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
24380 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
24390 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
243a0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
243b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
243c0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
243d0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
243e0 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68  eLinqFiles)]} th
243f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24400 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
24410 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
24420 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d  SQLite.Linq.dll.
24430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24450 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
24460 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45  ::no(loadSqliteE
24470 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  f6Files)]} then
24480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
24490 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
244a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
244b0 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20  ite.EF6.dll..
244c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
244d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
244e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
244f0 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d  (loadSqliteNonIm
24500 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74  plicitFiles)]} t
24510 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24520 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
24530 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
24540 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69  SqlitePlatformFi
24550 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
24570 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 24580 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 24590 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 245a0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 245b0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 245c0 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 .SQLite.dll$pla
245d0 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
245e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
245f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
24600 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
24610 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65  oadSqliteArchite
24620 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20  ctureFiles)] &&
24630 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
24640 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
24650 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 24660 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24680 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 24690 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 246a0 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 te.dll$architec
246b0 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..
246c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
246d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
246e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
246f0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
24700 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61  fileNameOnly $na 24710 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 24720 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 24730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24740 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
24750 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
24760 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
24770 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
24780 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $24790 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 247a0 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ... \"" \.. 247b0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 247c0 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e version [getBin 247d0 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
247e0 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e  eNameOnly]] \"\n
247f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
24800 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24810 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
24820 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64  eNameOnly $mixed 24830 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 24840 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 24850 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 24860 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
24870 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
24880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24890 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
248a0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65  ion of \"" $file 248b0 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 NameOnly "\"... 248c0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 248d0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 [file ver 248e0 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 sion [getBinaryF 248f0 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
24900 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  eOnly]] \"\n]..
24910 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24930 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
24940 65 4f 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 69  eOnly $managedFi 24950 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 24960 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 24970 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 24980 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
24990 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
249b0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
249c0 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61  n of \"" $fileNa 249d0 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 meOnly "\"... \" 249e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 249f0 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 24a00 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 24a10 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f eName$fileNameO
24a20 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20  nly]] \"\n]..
24a30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
24a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
24a50 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
24a60 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 24a70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24a80 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 24a90 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 NameOnly$native
24aa0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
24ab0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
24ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24ad0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24ae0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 24af0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 24b00 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 24b10 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 24b20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20$platform \..
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24b40 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  / $fileNameOnly 24b50 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 24b60 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 24b80 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 24b90 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24$fileNameOnly $24ba0 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d platform]] \"\n] 24bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 24bc0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 24bd0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 24be0 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 h fileNameOnly$
24bf0 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  mixedFileNames {
24c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
24c10 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
24c20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 24c30 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 24c40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 24c50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 24c60 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 24c70 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 f \""$platform
24c80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
24c90 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65       / $fileName 24ca0 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 Only "\"... \"" 24cb0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d [file version \. 24cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 24cd0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 24ce0 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f eName$fileNameO
24cf0 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20  nly $platform]] 24d00 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 24d10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 24d20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 24d30 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 24d40 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
24d50 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
24d60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24d70 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
24d80 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c  eOnly $nativeFil 24d90 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 24da0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 24dc0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
24dd0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
24de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24df0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
24e00 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61  ersion of \"" $a 24e10 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 rchitecture \.. 24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24e30 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 /$fileNameOnly
24e40 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c   "\"... \"" [fil
24e50 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
24e70 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
24e80 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  e $fileNameOnly 24e90 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20$architecture]]
24ea0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
24eb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
24ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
24ed0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
24ee0 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61  nly $mixedFileNa 24ef0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 24f00 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 24f10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 24f20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
24f30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24f50 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
24f60 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68  ion of \"" $arch 24f70 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 itecture \.. 24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 / 24f90 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c$fileNameOnly "\
24fa0 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76  "... \"" [file v
24fb0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
24fd0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $24fe0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 fileNameOnly$ar
24ff0 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c  chitecture]] \"\
25000 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
25010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
25020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25030 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25040 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  # NOTE: Grab the
25050 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64   list of managed
25060 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20   assemblies for
25070 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
25080 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ess..        #
25090 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20       and report
250a0 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  on the System.Da
250b0 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65  ta.SQLite relate
250c0 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20  d ones...
250d0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
250e0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
250f0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
25100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
25110 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a   assemblies [obj
25120 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f  ect invoke AppDo
25130 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61  main.CurrentDoma
25140 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73  in GetAssemblies
25150 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  ]....          o
25160 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73  bject foreach as
25170 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69  sembly $assembli 25180 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 25190 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 251a0 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 tch \{System.Dat 251b0 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d a.SQLite*$assem
251c0 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bly]} then {..
251d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
251e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 251f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 25200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 25210 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 25220 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 oaded assembly: 25230 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d "$assembly \n].
25240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
25260 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25270 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
25280 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 25290 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 252a0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 252b0 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e - define constan 252c0 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e ts for \"System. 252d0 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e Data.SQLite\"... 252e0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 252f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 25300 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 25310 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 25320 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 25330 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 25340 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 25350 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f SQLite3 DefineCo 25360 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 nstants.. 25370 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 } defineConst 25380 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ants] == 0} then 25390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 253a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
253b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
253c0 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c  s [formatList [l
253d0 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  sort \..
253e0 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43          $defineC 253f0 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e onstants] <none> 25400 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 25410 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 25420 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
25430 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b  test_channel unk
25440 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20  nown\n..
25450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
25460 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
25470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
25480 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 25490 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 254a0 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 "---- source 254b0 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 version of \"Sy 254c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 254d0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 .dll\"... ".... 254e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 254f0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 25500 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 25510 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 25520 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 25530 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 25540 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 a.SQLite.SQLiteC 25550 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 onnection Provid 25560 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 erVersion.. 25570 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 } version] 25580 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 25590 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 255a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
255b0 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
255c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
255d0 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e     set version n
255e0 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
255f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
25600 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 25610 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 25620 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a s$version \n]..
25630 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
25640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25650 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 25660 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 25670 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 25680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 25690 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 256a0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
256b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
256d0 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f  -- source checko
256e0 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  ut of \"System.D
256f0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
25700 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
25710 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
25720 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
25730 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
25740 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25760 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
25770 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te.SQLiteConnect
25780 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72  ion ProviderSour
25790 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..
257a0 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30  } sourceId] == 0
257b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
257c0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
257d0 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source 257e0 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { 257f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25800 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul 25810 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 25820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 25830 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
25840 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
25850 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20  $sourceId \n].. 25860 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 25870 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 25880 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
25890 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
258a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
258b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
258c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
258d0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61  OTE: Check the a
258e0 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20  vailable builds
258f0 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29  (and "releases")
25900 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a   of SQLite and..
25910 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
25920 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
25930 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  te...        #..
25940 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
25950 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a  SQLiteBuilds $:: 25960 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 test_channel.. 25970 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 25980 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a LiteReleases$::
25990 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
259a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
259b0 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20     # NOTE: Now,
259c0 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20  we need to know
259d0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
259e0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76  re library is av
259f0 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..
25a00 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62   #       (i.e. b
25a10 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67  ecause the manag
25a20 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44  ed-only System.D
25a30 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d  ata.SQLite assem
25a40 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  bly can..
25a50 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69   #       load wi
25a60 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65  thout it; howeve
25a70 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20  r, it cannot do
25a80 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20  anything useful
25a90 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..
25aa0 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49   #       it).  I
25ab0 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74  f we are using t
25ac0 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
25ad0 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c  sembly and we al
25ae0 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23  ready..        #
25af0 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20         found it
25b00 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68  (above), this sh
25b10 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63  ould always succ
25b20 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  eed...        #.
25b30 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
25b40 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24  rSQLiteLibrary $25b50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 25b60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 25b70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 25b80 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 ck if the SQLite 25b90 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 25ba0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d y is available.. 25bb0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25bc0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 25bd0 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 teInterop$::tes
25be0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
25bf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25c00 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
25c10 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
25c20 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20  e and temporary
25c30 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20  directories...
25c40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25c50 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
25c60 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65  irectories $::te 25c70 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 25c80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25c90 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 25ca0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 to determine if 25cb0 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 various compile 25cc0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 -time options ne 25cd0 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 eded for.. 25ce0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 # test c 25cf0 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 onstraints were 25d00 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 enabled for the 25d10 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 25d20 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 . There.. 25d30 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f # are so 25d40 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 me compile-time 25d50 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 options that mus 25d60 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e t also have been 25d70 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 enabled.. 25d80 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 # for th 25d90 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 25da0 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 ly in order to b 25db0 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f e effective. Fo 25dc0 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 r those.. 25dd0 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 # options 25de0 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 , it will be ass 25df0 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 umed that it was 25e00 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 25e10 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 interop.. 25e20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 25e30 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 ly if it was ena 25e40 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 25e50 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a aged assembly... 25e60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25e70 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e foreach defin 25e80 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 eConstant [list 25e90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 \.. C 25ea0 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 HECK_STATE COUNT 25eb0 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e _HANDLE DEBUG IN 25ec0 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 TEROP_CODEC INTE 25ed0 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 ROP_DEBUG \.. 25ee0 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 25ef0 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT 25f00 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 IONS INTEROP_FTS 25f10 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 5_EXTENSION \.. 25f20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 25f30 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 OP_INCLUDE_CEROD 25f40 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 INTEROP_INCLUDE 25f50 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 _EXTRA INTEROP_I 25f60 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 NCLUDE_SEE \.. 25f70 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 25f80 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 P_INCLUDE_ZIPVFS 25f90 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 INTEROP_JSON1_E 25fa0 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. 25fb0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 25fc0 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 LEGACY_CLOSE INT 25fd0 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 EROP_LOG INTEROP 25fe0 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 _PERCENTILE_EXTE 25ff0 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 NSION \.. 26000 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 INTEROP_REG 26010 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e EXP_EXTENSION IN 26020 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e TEROP_TEST_EXTEN 26030 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 26040 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 INTEROP_TOTY 26050 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 PE_EXTENSION INT 26060 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 26070 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 LE NET_20 NET_35 26080 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26090 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 NET_40 NET_45 NE 260a0 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 T_451 NET_452 NE 260b0 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 4e 45 54 T_46 NET_461 NET 260c0 5f 34 36 32 20 5c 0d 0a 20 20 20 20 20 20 20 20 _462 \.. 260d0 20 20 20 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f NET_COMPACT_ 260e0 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 20 PLATFORM_COMP 260f0 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 ACTFRAMEWORK PRE 26100 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 LOAD_NATIVE_LIBR 26110 41 52 59 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ARY \.. 26120 20 20 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 RETARGETABLE 26130 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 SQLITE_STANDARD 26140 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 THROW_ON_DISPOSE 26150 44 20 54 52 41 43 45 20 5c 0d 0a 20 20 20 20 20 D TRACE \.. 26160 20 20 20 20 20 20 20 54 52 41 43 45 5f 43 4f 4e TRACE_CON 26170 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 NECTION TRACE_DE 26180 54 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 TECTION TRACE_HA 26190 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f NDLE TRACE_PRELO 261a0 41 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 AD \.. 261b0 20 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 TRACE_SHARED T 261c0 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 RACE_STATEMENT T 261d0 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 RACE_WARNING TRA 261e0 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 CK_MEMORY_BYTES 261f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 \.. U 26200 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 SE_ENTITY_FRAMEW 26210 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f ORK_6 USE_INTERO 26220 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 P_DLL USE_PREPAR 26230 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d E_V2 WINDOWS] {. 26240 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 26250 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 26260 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d Check if the com 26270 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 26280 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 is listed in th 26290 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 e list of.. 262a0 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 65 # "de 262b0 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 fine constants" 262c0 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 kept track of by 262d0 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 the managed ass 262e0 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 embly... 262f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 #.. c 26300 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 heckForSQLiteDef 26310 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 ineConstant$::t
26320 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66  est_channel $def 26330 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 ineConstant.. 26340 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26350 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 26360 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 26370 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 26380 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 Lite provider wa 26390 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d s compiled with. 263a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 263b0 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 support for any 263c0 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 encrypted datab 263d0 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ases... # 263e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 263f0 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 aveSQLiteDefineC 26400 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f onstant INTEROP_ 26410 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 CODEC] || \.. 26420 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 [haveSQ 26430 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 26440 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 nt INTEROP_INCLU 26450 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d DE_SEE]} then {. 26460 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 26470 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 26480 59 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69 63 Yes, add generic 26490 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 constraint for 264a0 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 264b0 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 264c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a 264d0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys 264e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 264f0 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 Encryption.. 26500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26510 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 26520 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 TE: Check the cu 26530 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 rrent build year 26540 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 . Basically, th 26550 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 is indicates.. 26560 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 26570 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d ich version of M 26580 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 SBuild and/or Vi 26590 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 sual Studio was 265a0 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 used to.. 265b0 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 # compile 265c0 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 the assembly bi 265d0 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 naries under tes 265e0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 265f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
26600 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
26610 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
26620 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
26630 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
26640 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20  e build year...
26650 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  "....        set
26660 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
26670 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  ear]..        ad
26680 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
26690 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61  endArgs buildYea
266a0 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20  r. $year].. 266b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
266c0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
266d0 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22  Args \" $year \" 266e0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 266f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26700 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 : Check the curr 26710 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 ent build .NET F 26720 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 ramework. Basic 26730 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 ally, this.. 26740 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 # indi 26750 63 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73 cates which vers 26760 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 ion of the .NET 26770 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 Framework is bei 26780 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ng.. # 26790 20 20 20 20 75 73 65 64 20 62 79 20 74 68 65 20 used by the 267a0 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 assembly binarie 267b0 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 s under test... 267c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 267d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
267e0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
267f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
26800 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
26810 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
26820 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  ld .NET Framewor
26830 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  k... "....
26840 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74    set netFx [get
26850 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20  BuildNetFx]..
26860 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
26870 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
26880 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24  uildFramework. $26890 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 netFx].. 268a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
268b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
268c0 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e  s \" $netFx \"\n 268d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 268e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 268f0 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e Check the curren 26900 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 t build configur 26910 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f ation. This sho 26920 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 uld normally.. 26930 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 26940 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 either "Debug" 26950 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 or "Release"... 26960 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 26970 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
26980 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
26990 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
269a0 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
269b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
269c0 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ld configuration
269d0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
269e0 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69   set configurati
269f0 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66  on [getBuildConf
26a00 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20  iguration]..
26a10 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
26a20 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
26a30 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
26a40 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  . $configuration 26a50 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ].. tputs 26a60 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
26a70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
26a80 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c  $configuration \ 26a90 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "\n].... 26aa0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 26ab0 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 E: Try to setup 26ac0 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c an interrupt cal 26ad0 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 lback using the 26ae0 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d script debugger. 26af0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 26b00 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 that will cance 26b10 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 l all SQL querie 26b20 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f s in progress fo 26b30 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a r all database.. 26b40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26b50 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 connections know 26b60 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 n to this interp 26b70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 reter... 26b80 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 26b90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 26ba0 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 o(sqliteInterrup 26bb0 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 tCallback)]} the 26bc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 26bd0 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 etupDbInterruptC 26be0 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f allback$::test_
26bf0 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f  channel $::test_ 26c00 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a log.. }.. 26c10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 26c20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 26c30 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 ck for the nativ 26c40 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e e runtime option 26c50 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 , which would me 26c60 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 an we are.. 26c70 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 # using 26c80 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 the mixed-mode 26c90 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 assembly... 26ca0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 26cb0 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 eckForRuntimeOpt 26cc0 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ion$::test_chan
26cd0 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20  nel native....
26ce0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
26cf0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
26d00 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  f the test suite
26d10 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68   should count th
26d20 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e  e number of conn
26d30 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ections..
26d40 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64   #       "opened
26d50 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66  " and "closed" f
26d60 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65  rom the pool whe
26d70 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66  n determining if
26d80 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20   a test..
26d90 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e   #       passed.
26da0 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73    Disabling this
26db0 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d   behavior is som
26dc0 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79  etimes necessary
26dd0 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20   (e.g...
26de0 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74  #       during t
26df0 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69  he release testi
26e00 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61  ng process) beca
26e10 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65  use there are se
26e20 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23  veral..        #
26e30 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61         tests tha
26e40 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f  t rely on the "o
26e50 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22  pened from pool"
26e60 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65   count being gre
26e70 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20  ater..        #
26e80 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e        than zero.
26e90 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61    These tests ma
26ea0 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68  y fail due to th
26eb0 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73  e non-determinis
26ec0 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20  tic..        #
26ed0 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66       behavior of
26ee0 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65   the CLR GC, eve
26ef0 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20  n when there is
26f00 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f  no bug in the co
26f10 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  de..        #
26f20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64      being tested
26f30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
26f40 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75        checkForRu
26f50 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74  ntimeOption $::t 26f60 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f est_channel noPo 26f70 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 olCounts.... 26f80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 26f90 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 26fa0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 the test suite s 26fb0 68 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 hould use shared 26fc0 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 -cache mode... 26fd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26fe0 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 checkForRuntime 26ff0 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 Option$::test_c
27000 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63  hannel sharedCac
27010 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  he....        #.
27020 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
27030 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f   Report the reso
27040 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72  urce usage prior
27050 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20   to running any
27060 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
27070 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72  #..        repor
27080 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73  tSQLiteResources
27090 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 270a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 270b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 # NOTE: G 270c0 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 rab the list of 270d0 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 native modules f 270e0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 or the current p 270f0 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 rocess and.. 27100 20 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f # repo 27110 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d rt on the System 27120 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c .Data.SQLite rel 27130 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 ated ones... 27140 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 27150 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 27160 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 27170 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 27180 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a set modules [obj 27190 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 ect invoke \.. 271a0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 271b0 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 em.Diagnostics.P 271c0 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e rocess.GetCurren 271d0 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 tProcess Modules 271e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f ].... o 271f0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 27200 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 lias module$mod
27210 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ules {..
27220 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
27230 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d     # NOTE: The m
27240 6f 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20  odule file name
27250 68 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72  here must be nor
27260 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20  malized...
27270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
27280 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
27290 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a  e [file normaliz
272a0 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e  e [$module FileN 272b0 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 ame]].. 272c0 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f set fileNameO 272d0 6e 6c 79 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 nly [file tail$
272e0 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
272f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73           if {[ls
27300 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  earch -exact -no
27310 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20  case -- \..
27320 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 4e             [getN
27330 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65  ativeLibraryFile
27340 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65  NamesOnly] $file 27350 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d NameOnly] != -1} 27360 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 27370 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
27380 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
27390 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
273b0 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64  --- found loaded
273c0 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c   SQLite native l
273d0 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22  ibrary module: "
273e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
273f0 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 27400 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 27410 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 } elseif {[lsea 27420 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 rch -exact -noca 27430 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 se -- \.. 27440 20 20 20 20 20 20 20 20 20 5b 67 65 74 49 6e 74 [getInt 27450 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 eropAssemblyFile 27460 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 NamesOnly]$file
27470 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d  NameOnly] != -1}
27480 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
27490 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 274a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 274b0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 274c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 274d0 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 --- found loaded 274e0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 SQLite interop 274f0 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a assembly module: 27500 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 27510 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
27520 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
27530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
27540 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
27550 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
27560 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
27570 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 27580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27590 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d "---- compile- 275a0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 time options for 275b0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 275c0 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 rary... ".... 275d0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 275e0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 275f0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 27600 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 27610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27620 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 27630 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 SQLite.SQLite3 S 27640 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 QLiteCompileOpti 27650 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d ons.. } 27660 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d compileOptions] 27670 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 27680 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 27690 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
276a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f   [appendArgs [fo
276b0 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20  rmatList [lsort
276c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
276d0 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f     $compileOptio 276e0 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d ns] <none>] \n]. 276f0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 27700 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 27710 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
27720 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
27730 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
27740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
27750 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
27760 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 27770 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 27780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 27790 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 --- compile-time 277a0 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c options for SQL 277b0 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse 277c0 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 mbly... ".... 277d0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 277e0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 277f0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 27800 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 27810 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27820 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 27830 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 SQLite.SQLite3 I 27840 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 nteropCompileOpt 27850 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ions.. 27860 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 } compileOptions 27870 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 27880 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 27890 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
278a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
278b0 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
278c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
278d0 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69      $compileOpti 278e0 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ons] <none>] \n] 278f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 27900 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 27910 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
27920 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
27930 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
27940 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
27950 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27960 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65  # NOTE: Show the
27970 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e   active test con
27980 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20  straints...
27990 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
279a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 279b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 279c0 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 "---- constraint 279d0 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 s: " \.. 279e0 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 [formatList 279f0 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 [lsort [getConst 27a00 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d raints]] <none>] 27a10 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 27a20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 27a30 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 E: Save the test 27a40 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 constraints for 27a50 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 use by threads 27a60 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d created in this. 27a70 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 27a80 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d application dom 27a90 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 ain. This is ne 27aa0 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 cessary because 27ab0 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 all the Eagle.. 27ac0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 # " 27ad0 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e test context" in 27ae0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 formation is per 27af0 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 -thread... 27b00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 27b10 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 27b20 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 :test_constraint 27b30 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 27b40 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 27b50 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a _constraints$::
27b60 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73  eagle_tests(cons
27b70 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20  traints)..
27b80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
27b90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
27ba0 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65  : Load the "afte
27bb0 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63  r-constraints" c
27bc0 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61  ustom per-user a
27bd0 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a  nd/or per-host..
27be0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
27bf0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f  test settings no
27c00 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  w...        #..
27c10 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
27c20 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74   [list loadSQLit
27c30 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a  eTestSettings $: 27c40 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 :test_channel .a 27c50 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 fter].... 27c60 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 27c70 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 TE: If necessary 27c80 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d , enable shared- 27c90 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d cache mode now.. 27ca0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 27cb0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 27cc0 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 imeOption shared 27cd0 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Cache]} then {.. 27ce0 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 enable 27cf0 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 SharedCache$::t
27d00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
27d10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
27d20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
27d30 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77    # NOTE: Show w
27d40 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63  hen our tests ac
27d50 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f  tually began (no
27d60 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  w)...        #..
27d70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 27d80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 27d90 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 27da0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 "---- S 27db0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 27dc0 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 e tests began at 27dd0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 27de0 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 [clock format 27df0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d [clock seconds]] 27e00 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 27e10 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 27e20 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 c runSQLiteTestF 27e30 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 ilesPrologue {} 27e40 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c {.. uplevel 27e50 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 1 {.. #. 27e60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 27e70 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 27e80 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 27e90 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e to the various n 27ea0 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 on-data files.. 27eb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 27ec0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 equired by the t 27ed0 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c ests in this fil 27ee0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 27ef0 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 set entit 27f00 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c yFrameworkDllFil 27f10 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 27f20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 27f30 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f me EntityFramewo 27f40 72 6b 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d rk.dll false]... 27f50 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 . set ins 27f60 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d tallerExeFile \. 27f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 27f80 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 tBuildFileName I 27f90 6e 73 74 61 6c 6c 65 72 2e 65 78 65 20 66 61 6c nstaller.exe fal 27fa0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 se].... s 27fb0 65 74 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 et sqliteDesigne 27fc0 72 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 rDllFile \.. 27fd0 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil 27fe0 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 dFileName SQLite 27ff0 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61 .Designer.dll fa 28000 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 28010 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 set systemDataSQ 28020 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 LiteDllFile \.. 28030 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 28040 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 uildFileName Sys 28050 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 28060 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 dll false].... 28070 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d set system 28080 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c DataSQLiteLinqDl 28090 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 280a0 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 [getBuildFi 280b0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 280c0 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d 280d0 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 ll false].... 280e0 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 set systemD 280f0 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 ataSQLiteEf6DllF 28100 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 28110 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 [getBuildFile 28120 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 Name System.Data 28130 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 .SQLite.EF6.dll 28140 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 false].... 28150 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69 6c set testExeFil 28160 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN 28170 61 6d 65 20 74 65 73 74 2e 65 78 65 20 66 61 6c ame test.exe fal 28180 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 se].. set 28190 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 testLinqExeFile 281a0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 281b0 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 me testlinq.exe 281c0 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 false].. 281d0 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46 69 set testEf6ExeFi 281e0 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 le [getBuildFile 281f0 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 Name testef6.exe 28200 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 false].... 28210 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 28220 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 NOTE: Setup the 28230 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 variables that r 28240 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 efer to the vari 28250 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d 0a ous data files.. 28260 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 28270 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 required by the 28280 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 tests in this fi 28290 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 282a0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 282b0 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c LinqOutFile [fil 282c0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 282d0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 282e0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 282f0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 eTestDataPath] t 28300 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d estlinq.out]]... 28310 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 . set nor 28320 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b thwindEfDbFile [ 28330 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 28340 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 28350 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 28360 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 28370 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 rname [getSQLite 28380 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 TestDataPath]]] 28390 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 283a0 65 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e estlinq northwin 283b0 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 dEF.db]].... 283c0 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 set nonWalDb 283d0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 283e0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 283f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28400 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 28410 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 taPath] nonWal.d 28420 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 b]].... s 28430 65 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 et walDbFile [fi 28440 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 28450 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 28460 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 28470 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 28480 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 wal.db]].... 28490 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 284a0 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f NOTE: The vario 284b0 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 us install/unins 284c0 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 tall log files u 284d0 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d sed to test the. 284e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 284f0 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d design-time com 28500 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 ponent installer 28510 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 28520 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e set testIn 28530 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 stallVs2005LogFi 28540 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 28550 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 28560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 28570 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 28580 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f Path] Installer_ 28590 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d Test_Vs2005.log] 285a0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 285b0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 285c0 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 08LogFile [file 285d0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 285e0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 285f0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 28600 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 28610 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 28620 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 08.log]].... 28630 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 set testInst 28640 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 28650 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 28660 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 28670 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 28680 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 28690 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 286a0 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d st_Vs2010.log]]. 286b0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 286c0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 estInstallVs2012 286d0 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 286e0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 286f0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 28700 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 28710 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 tDataPath] Insta 28720 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 ller_Test_Vs2012 28730 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 28740 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 28750 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b lVs2013LogFile [ 28760 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 28770 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 28780 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 28790 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 287a0 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 ] Installer_Test 287b0 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2013.log]]... 287c0 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 287d0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 287e0 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 287f0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 28800 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 28810 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 28820 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 28830 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c er_Test_Vs2015.l 28840 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 28850 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 28860 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b lVs2005LogFile [ 28870 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 28880 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 28890 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 288a0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 288b0 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 288c0 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d st_Vs2005.log]]. 288d0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 288e0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 288f0 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 08LogFile [file 28900 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 28910 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 28920 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 28930 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 28940 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 28950 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2008.log]].... 28960 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 28970 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 installVs2010Log 28980 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 28990 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 289a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 289b0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 289c0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 289d0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e ler_Test_Vs2010. 289e0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 289f0 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 28a00 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 llVs2012LogFile 28a10 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 28a20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 28a30 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 28a40 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 28a50 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 28a60 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d est_Vs2012.log]] 28a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 28a80 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 28a90 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 013LogFile [file 28aa0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 28ab0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 28ac0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 28ad0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 28ae0 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 28af0 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2013.log]].... 28b00 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 set testU 28b10 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f ninstallVs2015Lo 28b20 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 28b30 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 28b40 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 28b50 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 28b60 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 ataPath] Uninsta 28b70 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 ller_Test_Vs2015 28b80 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 28b90 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 28ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 28bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 28bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 28bd0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 28be0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 28bf0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 28c00 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 28c10 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 28c20 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 tail$entityFra
28c30 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d  meworkDllFile]]]
28c40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
28c50 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
28c60 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
28c70 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
28c80 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  llFile..
28c90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
28ca0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
28cb0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
28cc0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
28cd0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69     [file tail $i 28ce0 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d nstallerExeFile] 28cf0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 28d00 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 28d10 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
28d20 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69   $installerExeFi 28d30 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 le Installer.exe 28d40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 28d50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 28d60 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 28d70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 28d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 28d90 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 le tail$sqliteD
28da0 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d  esignerDllFile]]
28db0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
28dc0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
28dd0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 28de0 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44$sqliteDesignerD
28df0 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  llFile..
28e00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
28e10 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
28e20 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
28e30 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
28e40 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s 28e50 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 ystemDataSQLiteD 28e60 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 llFile]]]} then 28e70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 28e80 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
28e90 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44  channel $systemD 28ea0 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 28eb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 28ec0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 28ed0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 28ee0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 28ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 28f00 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 le tail$systemD
28f10 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c  ataSQLiteLinqDll
28f20 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
28f30 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
28f40 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 28f50 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 annel$systemDat
28f60 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
28f70 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
28f80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
28f90 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
28fa0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
28fb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
28fc0 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65  file tail $syste 28fd0 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 28fe0 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 28ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 29000 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
29010 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61  hannel $systemDa 29020 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 taSQLiteEf6DllFi 29030 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d le.. }... 29040 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 29050 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 29060 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 29070 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29080 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 file tail$testE
29090 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
290a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
290b0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 290c0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 channel$testExe
290d0 46 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20  File test.exe..
290e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
290f0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
29100 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
29110 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
29120 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
29130 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78  tail $testLinqEx 29140 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b eFile]]]} then { 29150 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 29160 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
29170 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71  hannel $testLinq 29180 45 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 ExeFile testlinq 29190 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d .exe.. }. 291a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 291b0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 291c0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 291d0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 291e0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
291f0 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20  tEf6ExeFile]]]}
29200 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
29210 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $29220 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
29230 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73  stEf6ExeFile tes
29240 74 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20  tef6.exe..
29250 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
29260 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
29270 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
29280 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
29290 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
292a0 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65  $testLinqOutFile 292b0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 292c0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 292d0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
292e0 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69  l $testLinqOutFi 292f0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d le.. }... 29300 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 29310 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 29320 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 29330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29340 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 file tail$north
29350 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d  windEfDbFile]]]}
29360 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29370 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
29380 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e  $test_channel$n
29390 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65  orthwindEfDbFile
293a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
293b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
293c0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
293d0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
293e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
293f0 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44  le tail $nonWalD 29400 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b bFile]]]} then { 29410 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 29420 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
29430 68 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62  hannel $nonWalDb 29440 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 29450 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 29460 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 29470 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 29480 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 29490 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c [file tail$wal
294a0 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  DbFile]]]} then
294b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
294c0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 294d0 63 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 channel$walDbFi
294e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
294f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
29500 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
29510 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
29520 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
29530 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49  file tail $testI 29540 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 29550 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 29560 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 29570 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
29580 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  nnel $testInstal 29590 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a lVs2005LogFile.. 295a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 295b0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 295c0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 295d0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 295e0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 295f0 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 tail$testInsta
29600 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d  llVs2008LogFile]
29610 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
29620 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
29630 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 29640 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
29650 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  008LogFile..
29660 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29670 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
29680 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
29690 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
296a0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
296b0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 296c0 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2010LogFile]]]} 296d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 296e0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
296f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 29700 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c stInstallVs2010L 29710 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 29720 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 29730 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 29740 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 29750 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 29760 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
29770 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32  estInstallVs2012
29780 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
29790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
297a0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 297b0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e _channel$testIn
297c0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
297d0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
297e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
297f0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
29800 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
29810 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
29820 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49  file tail $testI 29830 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 29840 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 29850 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 29860 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
29870 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  nnel $testInstal 29880 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a lVs2013LogFile.. 29890 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 298a0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 298b0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 298c0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 298d0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 298e0 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 tail$testInsta
298f0 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d  llVs2015LogFile]
29900 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
29910 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
29920 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 29930 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
29940 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  015LogFile..
29950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29960 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
29970 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
29980 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
29990 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
299a0 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  l $testUninstall 299b0 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2005LogFile]]] 299c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 299d0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 299e0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $299f0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 29a00 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 005LogFile.. 29a10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 29a20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 29a30 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 29a40 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 29a50 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 29a60 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c l$testUninstall
29a70 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2008LogFile]]]
29a80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
29a90 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
29aa0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
29ab0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
29ac0 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  008LogFile..
29ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29ae0 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
29af0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
29b00 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
29b10 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
29b20 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  l $testUninstall 29b30 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2010LogFile]]] 29b40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29b50 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 29b60 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $29b70 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 29b80 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 010LogFile.. 29b90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 29ba0 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 29bb0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 29bc0 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 29bd0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 29be0 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c l$testUninstall
29bf0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2012LogFile]]]
29c00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
29c10 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
29c20 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
29c30 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
29c40 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  012LogFile..
29c50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29c60 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
29c70 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
29c80 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
29c90 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
29ca0 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  l $testUninstall 29cb0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2013LogFile]]] 29cc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29cd0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 29ce0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $29cf0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 29d00 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 013LogFile.. 29d10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 29d20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 29d30 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 29d40 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 29d50 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 29d60 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c l$testUninstall
29d70 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2015LogFile]]]
29d80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
29d90 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
29da0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
29db0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
29dc0 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  015LogFile..
29dd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
29de0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
29df0 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
29e00 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d  FilesEpilogue {}
29e10 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65   {..      upleve
29e20 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  l 1 {..        u
29e30 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
29e40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29e50 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
29e60 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 55  015LogFile testU
29e70 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f  ninstallVs2013Lo
29e80 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  gFile \..
29e90 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61       testUninsta
29ea0 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20  llVs2012LogFile
29eb0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
29ec0 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20  010LogFile \..
29ed0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e            testUn
29ee0 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  installVs2008Log
29ef0 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61  File testUninsta
29f00 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20  llVs2005LogFile
29f10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
29f20 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35  estInstallVs2015
29f30 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74  LogFile testInst
29f40 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65  allVs2013LogFile
29f50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29f60 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
29f70 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73  2LogFile testIns
29f80 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
29f90 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
29fa0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
29fb0 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e  08LogFile testIn
29fc0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
29fd0 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e  le....        un
29fe0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
29ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  \..            n
2a000 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65  orthwindEfDbFile
2a010 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65   testLinqOutFile
2a020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2a030 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c  walDbFile nonWal
2a040 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  DbFile....
2a050 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
2a060 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ain \..
2a070 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69 6c     testEf6ExeFil
2a080 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c  e testLinqExeFil
2a090 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
2a0a0 20 74 65 73 74 45 78 65 46 69 6c 65 20 73 79 73   testExeFile sys
2a0b0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36  temDataSQLiteEf6
2a0c0 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
2a0d0 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 74         systemDat
2a0e0 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
2a0f0 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  le systemDataSQL
2a100 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20  iteDllFile \..
2a110 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2a120 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20  DesignerDllFile
2a130 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
2a140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2a150 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
2a160 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d  llFile..      }.
2a170 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2a180 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73  roc runSQLiteTes
2a190 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a  tEpilogue {} {..
2a1a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2a1b0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e   NOTE: Skip runn
2a1c0 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65  ing our custom e
2a1d0 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d  pilogue if the m
2a1e0 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e  ain one has been
2a1f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2a200 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20  skipped...
2a210 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69  #..      if {![i
2a220 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
2a230 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d  epilogue.eagle)]
2a240 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2a250 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2a260 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f  OTE: Show when o
2a270 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c  ur tests actuall
2a280 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a  y ended (now)...
2a290 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2a2a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2a2b0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 2a2c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 2a2d0 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d "---- System 2a2e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 .Data.SQLite tes 2a2f0 74 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d ts ended at " \. 2a300 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c . [cl 2a310 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 ock format [cloc 2a320 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d k seconds]] \n]. 2a330 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2a340 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f # NOTE: Lo 2a350 61 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 ad the "epilogue 2a360 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 " custom per-use 2a370 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 r and/or per-hos 2a380 74 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 t test.. 2a390 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 # settings 2a3a0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 2a3b0 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 .. upleve 2a3c0 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 l 1 [list loadSQ 2a3d0 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 LiteTestSettings 2a3e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2a3f0 20 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20   .epilogue]....
2a400 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2a410 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f    # BUGFIX: Befo
2a420 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  re checking the
2a430 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20  final resources
2a440 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
2a450 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20  , make..
2a460 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62  #         sure b
2a470 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d  oth of the PRAGM
2a480 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74  A related direct
2a490 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72  ory names are fr
2a4a0 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  eed...        #.
2a4b0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
2a4c0 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
2a4d0 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 2a4e0 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 el true.... 2a4f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2a500 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 NOTE: Also repor 2a510 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 t the resource u 2a520 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 sage after runni 2a530 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 ng the tests... 2a540 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a550 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 reportSQLiteRe 2a560 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f sources$::test_
2a570 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
2a580 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2a590 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65  NOTE: Report the
2a5a0 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
2a5b0 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75   counts after ru
2a5c0 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e  nning the tests.
2a5d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2a5e0 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61       getSQLiteHa
2a5f0 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65  ndleCounts $::te 2a600 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 2a610 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a620 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 # NOTE: If nece 2a630 73 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 ssary, disable s 2a640 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 hared-cache mode 2a650 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 2a660 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 2a670 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 2a680 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 sharedCache]} th 2a690 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2a6a0 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 enableSharedCach 2a6b0 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
2a6c0 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  l false..
2a6d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
2a6e0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23   }.....    #####
2a6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a730 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
2a740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a750 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61  ######### END Ea
2a760 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23  gle ONLY #######
2a770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a780 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
2a790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a7d0 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d  ########..  }...
2a7e0 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
2a7f0 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  Save the name of
2a800 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63   the directory c
2a810 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66  ontaining this f
2a820 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20  ile...  #..  if
2a830 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63  {![info exists c
2a840 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
2a850 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65  } then {..    se
2a860 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  t common_directo
2a870 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
2a880 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d   [info script]].
2a890 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
2a8a0 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74   NOTE: Provide t
2a8b0 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
2a8c0 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61  QLite test packa
2a8d0 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70  ge to the interp
2a8e0 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70  reter...  #..  p
2a8f0 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53  ackage provide S
2a900 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2a910 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a     e.Test 1.0..}..