System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 86ae414fced7ec4faeda81dcc1e92e0451e72281:

• File lib/System.Data.SQLite/common.eagle — part of check-in [f1feb19c18] at 2017-02-02 19:26:24 on branch trunk — Add experimental support for native sha1 extension. (user: mistachkin size: 174766)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51  .    proc haveSQ
0590: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
05a0: 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nt { name } {..
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76       return [hav
05c0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
05d0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
05e0: 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44  Args [getSQLiteD
05f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65  efineConstantPre
0600: 66 69 78 5d 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20  fix] $name]].. 0610: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 0620: 20 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d getBuildYear {} 0630: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 0640: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 0650: 66 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 f the "year" set 0660: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 ting has been ov 0670: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 0680: 75 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 user (e.g... 0690: 20 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 # on the 06a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 command line). 06b0: 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 This helps cont 06c0: 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 rol exactly whic 06d0: 68 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 h set of.. 06e0: 23 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 # binaries 06f0: 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c we are testing, 0700: 20 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 those produced 0710: 75 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c using the Visual 0720: 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 Studio.. # 0730: 20 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 2005, 200 0740: 38 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 8, 2010, 2012, 2 0750: 30 31 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 013, or 2015 bui 0760: 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 ld systems. To 0770: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 0780: 23 20 20 20 20 20 20 20 74 68 69 73 20 76 61 6c # this val 0790: 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ue via the comma 07a0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 nd line, enter a 07b0: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 07c0: 20 74 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 to one.. # 07d0: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f of the fo 07e0: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 llowing (all on 07f0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 0800: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0810: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0820: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0830: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 "set test_year 0840: 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 2005".. # 0850: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 -file .\p 0860: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 0870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0880: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0890: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 08a0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 08b0: 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 _year 2008".. 08c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 08d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 08e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 08f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 0910: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 0920: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 t test_year 2010 0930: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 0940: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 0950: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 0960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0970: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0980: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0990: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 09a0: 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 r 2012".. # 09b0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 09c0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 09d0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 09e0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 09f0: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0a00: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 0a10: 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 st_year 2013".. 0a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 0a30: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 0a40: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 0a50: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 0a60: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a70: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a80: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a90: 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 15".. # 0aa0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0ab0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0ac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0ad0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0ae0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0af0: 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 lize "unset -noc 0b00: 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 omplain test_yea 0b10: 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 r".. # 0b20: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 0b30: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 0b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 0b50: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 0b60: 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b :test_year] && [ 0b70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
0b80: 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d  :test_year] > 0}
0b90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
0ba0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
0bb0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
0bc0: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 2e  ified test year.
0bd0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
0be0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74  le is not set, t
0bf0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
0c00: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
0c10: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
0c20: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
0c30: 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  t Eagle has been
0c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c50: 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e    compiled again
0c60: 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20  st the CLR v2.0
0c70: 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20  or CLR v4.0...
0c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0c90: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 0ca0: 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c year.. } el 0cb0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 0cc0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 0cd0: 20 49 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 If Eagle has be 0ce0: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 en compiled agai 0cf0: 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 nst the CLR v4.0 0d00: 2c 20 75 73 65 20 22 32 30 31 30 22 20 62 79 0d , use "2010" by. 0d10: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0d20: 20 64 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 default (we cou 0d30: 6c 64 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 ld use "2012", " 0d40: 32 30 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 2013", or "2015" 0d50: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0d60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0d70: 20 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 well) as the t 0d80: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 est year; otherw 0d90: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 ise, use "2008" 0da0: 62 79 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a by default (we.. 0db0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0dc0: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 could use "2005" 0dd0: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0de0: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 well). If anot 0df0: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 her major.. 0e00: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f # [inco 0e10: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f mpatible] versio 0e20: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 n of the CLR is 0e30: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 released, this c 0e40: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 heck will.. 0e50: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20 # have 0e60: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 to be changed. 0e70: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 The default test 0e80: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 year to use for 0e90: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 a.. # 0ea0: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 particular C 0eb0: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 LR version may b 0ec0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 e overridden by 0ed0: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 setting the glob 0ee0: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # 0ef0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 variable "te 0f00: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 st_year_clr_v$X"
0f10: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79  , where "$X" may 0f20: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d [currently] be. 0f30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0f40: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 either "2" or " 0f50: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 4"... #.. 0f60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 0f70: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 eConstraint imag 0f80: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 eRuntime40]} the 0f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 0fa0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 0fb0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0fc0: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 v4] && \.. 0fd0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 0fe0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
0ff0: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d  ear_clr_v4] > 0}
1000: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1020: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1030: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
1040: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20  st year for the
1050: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1060: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1080: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 test_year_clr_v4 1090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 10a0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 10b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10c0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 10d0: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 default test ye 10e0: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 ar for the CLR v 10f0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1110: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 return 2010; # 1120: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c TODO: Good "fall 1130: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a back" default?.. 1140: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1150: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1160: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e if {[in 1170: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1180: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 _year_clr_v2] && 1190: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11a0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 11b0: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c$::test_year_cl
11c0: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20  r_v2] > 0} then
11d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
11e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
11f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
1200: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61  ecified test yea
1210: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  r for the CLR v2
1220: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
1230: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1240: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79  return $::test_y 1250: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 ear_clr_v2.. 1260: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1270: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1280: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1290: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 12a0: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 lt test year for 12b0: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a the CLR v2.0... 12c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 12d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 12e0: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 n 2008; # TODO: 12f0: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 Good "fallback" 1300: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 default?.. 1310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1320: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1330: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 ..... #.. 1340: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 1350: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 cedure is only u 1360: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 sed when adding 1370: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e shimmed test con 1380: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 straints... # 1390: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 13a0: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d ildClrVersion {} 13b0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i 13c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 13d0: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e t_clr] && [strin 13e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 g length$::test
13f0: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20  _clr] > 0} then
1400: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1410: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1420: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1430: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1440: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68   the CLR.  If th
1450: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  is variable..
1460: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
1470: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66  not set, the def
1480: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
1490: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  be based on whet
14a0: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20  her or not..
14b0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
14c0: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
14d0: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
14e0: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20  CLR v2.0 or CLR
14f0: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23  v4.0...        #
1500: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1510: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20   $::test_clr.. 1520: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1540: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1550: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e f Eagle has been 1560: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 compiled agains 1570: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 t the CLR v4.0. 1580: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 If so,.. 1590: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 # just us 15a0: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 e that CLR versi 15b0: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 on. Otherwise, 15c0: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 use the version 15d0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 for the.. 15e0: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e # CLR v2. 15f0: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 0. If another m 1600: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 ajor [incompatib 1610: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 le] version of t 1620: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 he CLR.. 1630: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 # is relea 1640: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 sed, this check 1650: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 will have to be 1660: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 changed. The de 1670: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 fault.. # 1680: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 version v 1690: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 alue for a parti 16a0: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f cular CLR versio 16b0: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 n may be overrid 16c0: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 den.. # 16d0: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 by setting 16e0: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 the global varia 16f0: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 ble "test_clr_v$
1700: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d  X", where "$X" m 1710: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ay.. # 1720: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 [currently] 1730: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 be either "2" or 1740: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 "4"... # 1750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 1760: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d aveConstraint im 1770: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 ageRuntime40]} t 1780: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1790: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 17a0: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d s ::test_clr_v4] 17b0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 17c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 17d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f gth$::test_clr_
17e0: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  v4] > 0} then {.
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1800: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1810: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
1820: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69  ified test versi
1830: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  on for the CLR v
1840: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1850: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1860: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1870: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 clr_v4.. 1880: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 18b0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 se the default t 18c0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 18d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 18e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1900: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 4.0.30319; # TO 1910: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1920: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1930: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1940: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1950: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1960: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 exists ::test_c 1970: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 lr_v2] && \.. 1980: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1990: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
19a0: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  t_clr_v2] > 0} t
19b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
19e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
19f0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1a00: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...
1a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 1a30: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 :test_clr_v2.. 1a40: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1a70: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 OTE: Use the def 1a80: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f ault test versio 1a90: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1aa0: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1ab0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1ac0: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 return 2.0.50727 1ad0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 1ae0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 1af0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 1b00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b20: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 1b30: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 Years {} {.. 1b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b50: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 E: See if the li 1b60: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1b70: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 1b80: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 dden by the user 1b90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ba0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d (e.g. on the com 1bb0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 mand line)... 1bc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1bd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1be0: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c est_years] && [l 1bf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
1c00: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ears] > 0} then
1c10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1c30: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1c40: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61  list of test yea
1c50: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rs...        #..
1c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $1c70: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 ::test_years.. 1c80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ca0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1cb0: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 default list of 1cc0: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 test years (i.e 1cd0: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 . all)... 1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1cf0: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 rn [list 2005 20 1d00: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 08 2010 2012 201 1d10: 33 20 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 3 2015].. } 1d20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1d30: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 proc getBuildNet 1d40: 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 Fx {} {.. # 1d50: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1d60: 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 See if the test 1d70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 .NET Framework s 1d80: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 1d90: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 overridden by.. 1da0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1db0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 1dc0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 1dd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1de0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 1df0: 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 ts ::test_net_fx 1e00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1e20: 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d$::test_net_fx]
1e30: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1e40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e50: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1e60: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20   specified test
1e70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  .NET Framework..
1e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e90: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 1ea0: 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 st_net_fx.. 1eb0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1ec0: 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 set year [get 1ed0: 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 BuildYear].. 1ee0: 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72 4e set yearVarN 1ef0: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 1f00: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 ::test_net_fx_$
1f10: 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  year]....
1f20: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1f30: 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20  s $yearVarName] 1f40: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1f50: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1f60: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1f70: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  me]] > 0} then {
1f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1fa0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
1fb0: 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61  ed test .NET Fra
1fc0: 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e  mework, based on
1fd0: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20   the build..
1fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 65        #       ye
1ff0: 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ar...          #
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
2010: 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 72  rn [set $yearVar 2020: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d Name].. } 2030: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2040: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2050: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 2060: 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e to the "well kn 2070: 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 own" .NET Framew 2080: 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 ork version that 2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 20a0: 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 is most clos 20b0: 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 ely associated w 20c0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 ith a particular 20d0: 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 version of.. 20e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 56 # V 20f0: 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 isual Studio... 2100: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2110: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 switch -ex 2120: 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a act --$year {..
2130: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 35              2005
2140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2150: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30    return netFx20
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30  .            200
2180: 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  8 {..
2190: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33     return netFx3
21a0: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  5..            }
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30  ..            20
21c0: 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  10 {..
21d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78      return netFx
21e0: 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..
21f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32  }..            2
2200: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  012 {..
2210: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46       return netF
2220: 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..
2230: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2240: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20  2013 {..
2250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74        return net
2260: 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f  Fx451; # TODO: O
2270: 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20  r "netFx452"?..
2280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2290: 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 7b            2015 {
22a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b0: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20  return netFx46;
22c0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
22d0: 78 34 36 31 22 20 2f 20 22 6e 65 74 46 78 34 36  x461" / "netFx46
22e0: 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2"?..
22f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2300: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
2310: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
2320: 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f 3a  netFx35; # TODO:
2330: 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22   Good "fallback"
2340: 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20   default?..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2360: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2370: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2380: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  .....    #..
2390: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
23a0: 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 65  cedure should re
23b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
23c0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured
23d0: 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 20  test..    #
23e0: 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d 6f    platform is mo
23f0: 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65  st likely the de
2400: 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 6d  fault for this m
2410: 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d 0a  achine...    #..
2420: 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 75      proc isDefau
2430: 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  ltBuildPlatform
2440: 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d  { {verbose true}
2450: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
2460: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e       # NOTE: Run
2470: 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 69 73  ning on WoW64 is
2480: 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 61 75   never the defau
2490: 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  lt platform...
24a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
24b0: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34  {[isRunningWoW64
24c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24d0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} 24e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2500: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
2510: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
2520: 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 65 66  detected non-def
2530: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 28 57  ault platform (W
2540: 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 20 20  oW64)\n"..
2550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
2560: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
2570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
2580: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2590: 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63  his has a good c
25a0: 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74  hance of being t
25b0: 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66  he default platf
25c0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
25d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 25e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 25f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2600: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64  _channel "---- d
2610: 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 20  etected default
2620: 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20  platform\n"..
2630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
2640: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d  turn true..    }
2650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2660: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b  tBuildPlatform {
2670: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
2680: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
2690: 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66  sts ::test_platf
26a0: 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  orm] && \..
26b0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
26c0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74  gth $::test_plat 26d0: 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 26f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 2700: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 2710: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 test platform. 2720: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 2730: 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 is not set,.. 2740: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2750: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 2760: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 2770: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 2780: 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 2790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 27a0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 eturn [expr {$na
27b0: 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70  tive ? $::test_p 27c0: 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a latform : ""}].. 27d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 27e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 27f0: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 est_machine] && 2800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2810: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2820: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30  est_machine] > 0
2830: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2850: 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20  OTE: For native
2860: 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74  builds, return t
2870: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
2880: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
2890: 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
28a0: 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 63 68     the test mach
28b0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ine architecture
28c0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74  ; otherwise, ret
28d0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20  urn an empty..
28e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
28f0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
2900: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2910: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
2920: 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d      $native ? [m 2930: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 2940: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65$::test_machine
2950: 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20  ] : ""..
2960: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
2970: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2980: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
2990: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
29a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
29b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
29c0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
29d0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
29e0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
29f0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
2a00: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2a10: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2a20: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
2a30: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2a40: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2a50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2a60: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  urn [expr {..
2a70: 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f         $native ? 2a80: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 2a90: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
2aa0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20  orm(machine)] :
2ab0: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  ""..        }]..
2ac0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ae0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61     # NOTE: No ma
2af0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2b00: 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  re is available,
2b10: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2b20: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2b30: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20    #       It is
2b40: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74  important to ret
2b50: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
2b60: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65  ing here because
2b70: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2b80: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20        result of
2b90: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  this procedure m
2ba0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ay be used with
2bb0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20  [file join]...
2bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2bd0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
2be0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2bf0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2c00: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d  Configuration {}
2c10: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2c20: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2c30: 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61  f the "configura
2c40: 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61  tion" setting ha
2c50: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2c60: 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  n by the..
2c70: 23 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e  #       user (e.
2c80: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2c90: 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68  d line).  This h
2ca0: 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61  elps control exa
2cb0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ctly..      #
2cc0: 20 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66      which set of
2cd0: 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65   binaries we are
2ce0: 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74   testing (i.e. t
2cf0: 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68  hose built in th
2d00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
2d10: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
2d20: 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66  ease" build conf
2d30: 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f  igurations).  To
2d40: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a   override this..
2d50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
2d60: 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  lue via the comm
2d70: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20  and line, enter
2d80: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61  a command simila
2d90: 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20  r to one of..
2da0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
2db0: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e  ollowing (all on
2dc0: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
2dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2de0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2df0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e00: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e10: 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22  iguration Debug"
2e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e30: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
2e40: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
2e50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2e60: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2e70: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e80: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e90: 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73  iguration Releas
2ea0: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
2eb0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2ec0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2ed0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ee0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ef0: 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74  .exe -file .\pat
2f00: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d  h\to\all.eagle -
2f10: 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23  preTest..      #
2f20: 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20           "unset
2f30: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74  -nocomplain test
2f40: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d  _configuration".
2f50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f60: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2f70: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
2f80: 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  ation] && \..
2f90: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2fa0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f  ength $::test_co 2fb0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 nfiguration] > 0 2fc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fe0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 2ff0: 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 cified test conf 3000: 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 iguration. The 3010: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 default value us 3020: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 3030: 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 for this var 3040: 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c iable is typical 3050: 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 ly "Release", as 3060: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3070: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3080: 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d suite itself.. 3090: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30a0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
30b0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
30c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
30d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72       # NOTE: Nor
30f0: 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e  mally, we will n
3100: 65 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61  ever hit this ca
3110: 73 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76  se because the v
3120: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..
3130: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
3140: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
3150: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61  variable is alwa
3160: 79 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  ys set by the te
3170: 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20  st suite..
3180: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66    #       itself
3190: 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61  ; however, it ca
31a0: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden
31b0: 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20  using the unset
31c0: 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20  command..
31d0: 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68   #       from th
31e0: 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f  e -preTest optio
31f0: 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75  n to the test su
3200: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
3210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3220: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor 3230: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 m(configuration) 3240: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3250: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3260: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 3270: 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ions {} {.. 3280: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3290: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 : See if the lis 32a0: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 32b0: 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 urations has bee 32c0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d n overridden by. 32d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 32e0: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e he user (e.g. on 32f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 3300: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e)... #.. 3310: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3320: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 ists ::test_conf 3330: 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c igurations] && \ 3340: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle 3350: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3360: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30  figurations] > 0
3370: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3380: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3390: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
33a0: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74  cified list of t
33b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
33c0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
33d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $33e0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 33f0: 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 tions.. } e 3400: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 3410: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3420: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c : Use the defaul 3430: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 t list of test c 3440: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 3450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3460: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 3470: 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a Debug Release].. 3480: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3490: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 34a0: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 34b0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 34c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 34d0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 igure out the ba 34e0: 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 se directory whe 34f0: 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 re all the build 3500: 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 s should be.. 3510: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 3520: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 3530: 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 e the directory 3540: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 that contains th 3550: 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 e actual.. 3560: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 # build ou 3570: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 tput directory ( 3580: 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 e.g. parent of " 3590: 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d bin")... #. 35a0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 35b0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 35c0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 35d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35f0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
3600: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
3610: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
3620: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3630: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
3640: 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 64  the build base d
3650: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
3660: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
3670: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3680: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
3690: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
36a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
36b0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62  eturn $::build_b 36c0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ase_directory.. 36d0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 36e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 36f0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 3700: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3710: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3720: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
3730: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
3740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74      # NOTE: Next
3760: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68  , fallback to th
3770: 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69  e grandparent di
3780: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
3790: 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ne..        #
37a0: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74      containing t
37b0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
37c0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
37d0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
37e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
37f0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
3800: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
3810: 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  name $::common_d 3820: 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 irectory]].. 3830: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3840: 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d o exists ::path] 3850: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 3860: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 3870: 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68$::path] > 0} th
3880: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3890: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
38a0: 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61   Finally, fallba
38b0: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ck to the parent
38c0: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68   directory of th
38d0: 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20  e EagleTest..
38e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 74       #       pat
38f0: 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 73  h.  The EagleTes
3900: 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e  t package guaran
3910: 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 76  tees that this v
3920: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
3930: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65   #       will be
3940: 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 65   set to the dire
3950: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
3960: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 20   the first file
3970: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
3980: 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 20      execute the
3990: 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65  [runTestPrologue
39a0: 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  ] script library
39b0: 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
39c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
39d0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72  return [file dir
39e0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20  name $::path].. 39f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 3a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3a10: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 # NOTE: No pat 3a20: 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 h is available, 3a30: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3a40: 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f string. This po 3a50: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 int.. # 3a60: 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 should not 3a70: 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 be reached... 3a80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3a90: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 3aa0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 3ab0: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 3ac0: 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 TestDataPath {} 3ad0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3ae0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 3af0: 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74 6f out the directo 3b00: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 ry where all the 3b10: 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 test data files 3b20: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 should.. # 3b30: 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 be locate 3b40: 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 d. This should 3b50: 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64 69 be the "data" di 3b60: 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 rectory beneath 3b70: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 3b80: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e directory con 3b90: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 taining the actu 3ba0: 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73 2e al test scripts. 3bb0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3bc0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 3bd0: 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d in$::path data]
3be0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3bf0: 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f  proc isRunningWo
3c00: 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  W64 {} {..
3c10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3c20: 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75   For now, just u
3c30: 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  se the existing
3c40: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
3c50: 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20  for detecting..
3c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 57       #       a W
3c70: 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20  oW64 process...
3c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3c90: 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72  turn [haveConstr
3ca0: 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20  aint wow64]..
3cb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3cc0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
3cd0: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
3ce0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
3cf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d00: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d  # NOTE: First, m
3d10: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 73  ake sure the tes
3d20: 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 72  t suite infrastr
3d30: 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65  ucture is allowe
3d40: 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  d to..      #
3d50: 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 65      use the [exe
3d60: 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  c] command...
3d70: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
3d80: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
3d90: 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69  no(exec)] && ![i
3da0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
3db0: 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e  corFlags)]} then
3dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3dd0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
3de0: 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  f the location o
3df0: 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72  f CorFlags is pr
3e00: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76  esent in the env
3e10: 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20  ironment,..
3e20: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69     #       use i
3e30: 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 73  t; otherwise ass
3e40: 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 65  ume it is in the
3e50: 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20   PATH...
3e60: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
3e70: 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d  orFlags [expr {.
3e80: 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f  .          [info
3e90: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f   exists ::env(Co
3ea0: 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e  rFlags)] ? $::en 3eb0: 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 v(CorFlags) : "C 3ec0: 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 orFlags".. 3ed0: 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }].... 3ee0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3ef0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 E: Attempt to ex 3f00: 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f ecute CorFlags o 3f10: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 n the specified 3f20: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 file... # 3f30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 3f40: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 3f50: 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c exec --$corFl
3f60: 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ags [file native
3f70: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  name $fileName]. 3f80: 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d . } exec] 3f90: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 3fa0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 3fb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 3fc0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 3fd0: 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 r caller, attemp 3fe0: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 3ff0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 4000: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 platform f 4010: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 or the specified 4020: 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a file as well... 4030: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4040: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4050: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
4060: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
4070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4080: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
4090: 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c  TE: Store the pl
40a0: 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61  atform in the na
40b0: 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20  med variable in
40c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
40d0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
40e0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4100: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
4110: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61  r 1 $varName pla 4120: 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 tform.... 4130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4140: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4150: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4160: 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 he PE line from 4170: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 the captured.. 4180: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4190: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 41a0: 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 is value is "PE3 41b0: 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 2" or "PE32+", t 41c0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 41d0: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 41e0: 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 file is 32-bit 41f0: 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 or 64-bit, respe 4200: 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 ctively;.. 4210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 4220: 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 herwise, its typ 4230: 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 e is unknown... 4240: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4250: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 4260: 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 ttern {^PE 4270: 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b : (PE32|PE32\+ 4280: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
4290: 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78        if {[regex
42a0: 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74  p -line -- $patt 42b0: 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 ern$exec dummy
42c0: 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  pe32]} then {..
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
42f0: 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74  HACK: This [swit
4300: 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74  ch] assumes that
4310: 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 62   32-bit executab
4320: 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  les are..
4330: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
4340: 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 68  lways x86 and th
4350: 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 74  at 64-bit execut
4360: 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73  ables are always
4370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4380: 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20  #       x64...
4390: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
43b0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70  tch -exact -- $p 43c0: 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e32 {.. 43d0: 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 PE32 {.. 43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43f0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 set platform Wi 4400: 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n32.. 4410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4420: 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d PE32+ {. 4430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 4440: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4450: 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x64.. 4460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4470: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default 4480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4490: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 44a0: 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 m "".. 44b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 44c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 44d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 44f0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 t platform "".. 4500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 4510: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4520: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4530: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4540: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4550: 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 he ILONLY line f 4560: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 rom the captured 4570: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 4580: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4590: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 this value is ze 45a0: 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 ro, the specifie 45b0: 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 d file must.. 45c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 45d0: 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 e a mixed-mode a 45e0: 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 ssembly; otherwi 45f0: 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 se, it contains 4600: 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only.. 4610: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 4620: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 components... 4630: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4640: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4650: 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 {^ILONLY : (0 4660: 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 |1)\s+$}....
4670: 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65        if {![rege
4680: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74  xp -line -- $pat 4690: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 tern$exec dummy
46a0: 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b   ilOnly]} then {
46b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
46c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
46e0: 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c       if {!$ilOnl 46f0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 4700: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 4710: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 4720: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 4730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 4740: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 4750: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 4760: 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 cannot use [exec 4770: 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f ] or execution o 4780: 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 f CorFlags.. 4790: 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 # failed 47a0: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d , return false.. 47b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 47d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 47e0: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 47f0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4800: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4810: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4820: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4830: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 4840: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 4850: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 4860: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 4870: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 4880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4890: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 48a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 48b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 48c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 48d0: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
48e0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
48f0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
4900: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4910: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4920: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
4930: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
4940: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4950: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
4960: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
4970: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
4980: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4990: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $49a0: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 49b0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 49c0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 49d0: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 49e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 49f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 4a00: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f erwise, on Windo 4a10: 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 ws, always use t 4a20: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 he default file 4a30: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 name.. # 4a40: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 "sqlite3.d 4a50: 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ll"... #. 4a60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4a70: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 4a80: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 4a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4aa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4ab0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 4ac0: 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 both the generi 4ad0: 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d c POSIX file nam 4ae0: 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 e and the.. 4af0: 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f # Mac O 4b00: 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 S X file name, s 4b10: 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 ince we do not c 4b20: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e urrently have an 4b30: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 4b40: 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 way to de 4b50: 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 tect which of th 4b60: 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 ose platforms we 4b70: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e are running on. 4b80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4b90: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 4ba0: 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c t libsqlite3.dyl 4bb0: 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f ib libsqlite3.so 4bc0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 4bd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4be0: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 4bf0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4c00: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4c10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4c20: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4c30: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 4c40: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 4c50: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4c60: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4c70: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4ca0: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 4cb0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 4cc0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 4cd0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
4ce0: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
4cf0: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
4d00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4d10: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4d20: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
4d30: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
4d40: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
4d50: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
4d60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4d70: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
4d80: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
4d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4da0: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 4db0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 4dc0: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4dd0: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4de0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4df0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4e00: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4e10: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4e20: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4e30: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4e40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4e50: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 4e60: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 4e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4e80: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 4e90: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 4ea0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 4eb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4ec0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ed0: 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 , return both th 4ee0: 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 e generic POSIX 4ef0: 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 file name and th 4f00: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 4f10: 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 Mac OS X file 4f20: 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 name, since we 4f30: 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 do not currently 4f40: 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 have an easy.. 4f50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 4f60: 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 ay to detect whi 4f70: 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 ch of those plat 4f80: 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e forms we are run 4f90: 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 ning on... 4fa0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4fb0: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 4fc0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 4fd0: 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 b libSQLite.Inte 4fe0: 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d rop.so].. } 4ff0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 5000: 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 proc getCoreExte 5010: 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e nsionBinaryFileN 5020: 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 ame { {default " 5030: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 5040: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 t fileName [getC 5050: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d oreBinaryFileNam 5060: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5070: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5080: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
5090: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
50a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 50b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 50c0: 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 rn$default..
50d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
50e0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
50f0: 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74   { native direct
5100: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
5110: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5120: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
5130: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
5140: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
5150: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
5160: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
5170: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
5180: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
5190: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
51a0: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
51b0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
51c0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
51d0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
51e0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
51f0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
5200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5210: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
5220: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
5230: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
5240: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5250: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5260: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5270: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5280: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 5290: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 52a0: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 52b0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 52c0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
52d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
52e0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
52f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
5300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5310: 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
5320: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69  tically detect i
5330: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  f the primary as
5340: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
5350: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61        contains a
5360: 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  ny native compon
5370: 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61  ents, if necessa
5380: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5390: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
53a0: 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20  length $native] 53b0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 53c0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 53d0: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
53e0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
53f0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
5400: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5410: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ame..        }..
5420: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
5430: 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64  tive [isMixedMod
5440: 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 5450: 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 ame$varName]..
5460: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5470: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5480: 20 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   If the primary
5490: 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f  assembly also co
54a0: 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76  ntains the nativ
54b0: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20  e components,..
54c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20       #       we
54d0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
54e0: 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20  we need...
54f0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 5500: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 5520: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5540: 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 68 OTE: If the mach 5550: 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 ine name is unav 5560: 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 69 ailable, there i 5570: 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 77 s nothign else w 5580: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5590: 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 can do... 55a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 55b0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c nfo exists ::tcl 55c0: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin 55d0: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 55e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 55f0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5600: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5610: 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 OTE: What is the 5620: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 5630: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5640: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5650: 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 5660: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 5670: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
5680: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75  orm(machine) tru
5690: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
56a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
56b0: 74 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72  t is the platfor
56c0: 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69  m for this machi
56d0: 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne?..      #..
56e0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
56f0: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
5700: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf 5710: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d orm(machine)]... 5720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5730: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 5740: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 5750: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 d file name for 5760: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 5770: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 5780: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 containing t 5790: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 57a0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d QLite native com 57b0: 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 ponents. If thi 57c0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 57d0: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 file exists, we 57e0: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 should have eve 57f0: 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e rything we need. 5800: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5810: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 5820: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f eOnly [getIntero 5830: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 5840: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 5850: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5860: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5870: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
5880: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
5890: 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 58a0: 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ure$fileNameOnl
58b0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
58c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
58d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 58e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 58f0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5900: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5910: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5920: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5930: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5940: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5950: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69     $platform$fi
5960: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a  leNameOnly]]....
5970: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
5980: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 5990: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 59a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 59b0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 59c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 59d0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 59e0: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 59f0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a n$directory \..
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 5a10: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5a20: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5a30: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5a40: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5a50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5a60: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
5a70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
5a80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5a90: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
5aa0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
5ab0: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
5ac0: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
5ad0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
5ae0: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
5af0: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
5b00: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
5b10: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
5b20: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
5b30: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
5b40: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
5b50: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
5b60: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
5b70: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5b80: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5b90: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5ba0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5bb0: 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
5bc0: 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61  itecture $fileNa 5bd0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5be0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5bf0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5c00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5c10: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5c20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5c30: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5c40: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5c50: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5c60: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5c70: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
5c80: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 5c90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5ca0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5cb0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5cd0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5cf0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5d00: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5d10: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5d20: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5d30: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5d50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5d60: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5d70: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 5d80: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 5d90: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 5da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5db0: 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 OTE: One or more 5dc0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5dd0: 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 ts needed by Sys 5de0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. 5df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 5e00: 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 re missing... 5e10: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5e20: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 5e30: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5e40: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 eleaseAvailable 5e50: 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 { directory {var 5e60: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 5e70: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 5e80: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
5e90: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5ea0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 5eb0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d arName$varName.
5ec0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5ed0: 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c    return [isBuil
5ee0: 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64  dAvailable "" $d 5ef0: 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d irectory$varNam
5f00: 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  e]..    }.....
5f10: 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64    proc joinBuild
5f20: 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69  Directory { nati
5f30: 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61  ve path year pla
5f40: 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74  tform configurat
5f50: 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
5f60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5f70: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74  Figure out and t
5f80: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66  hen return the f
5f90: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
5fa0: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ath to the build
5fb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5fc0: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20  directory based
5fd0: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d  on all the argum
5fe0: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79  ents provided by
5ff0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
6000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
6010: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b  {$native} then { 6020: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6030: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 [file join$pat
6040: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61  h bin $year$pla
6050: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura 6060: 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 tion].. } e 6070: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 6080: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 6090: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 60a0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
60b0: 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bin]..      }..
60c0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
60d0: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74  c getBuildDirect
60e0: 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c  ory { managedOnl
60f0: 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  y } {..      #..
6100: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
6110: 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65  e if the "native
6120: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
6130: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20   has been set.
6140: 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a  If so, use the..
6150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
6160: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20  rectory for the
6170: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
6180: 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20  bly (a.k.a. the
6190: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a  native interop..
61a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
61b0: 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61  sembly).  To ena
61c0: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ble this option
61d0: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  via the command
61e0: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20  line, enter a..
61f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
6200: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20  mand similar to
6210: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
6220: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65  wing (all on one
6230: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23   line):..      #
6240: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6250: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
6260: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74  initialize -runt
6270: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
6280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6290: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
62a0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
62b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
62c0: 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68      To enable th
62d0: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
62e0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70  e command line p
62f0: 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74  rior to the "bet
6300: 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20  a 16"..      #
6310: 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20       release of
6320: 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Eagle, the follo
6330: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73  wing command mus
6340: 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61  t be used instea
6350: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
6360: 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e   (also all on on
6370: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
6380: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
6390: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
63a0: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73  -initialize -pos
63b0: 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20  tInitialize..
63c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62     #         "ob
63d0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
63e0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
63f0: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69  e AddRuntimeOpti
6400: 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20  on native"..
6410: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
6420: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
6430: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
6440: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
6450: 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64  exists ::build_d
6460: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
6470: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
6480: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 6490: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 d_directory] > 0 64a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 64b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 64c0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 64d0: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 n of the build d 64e0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 64f0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 6500: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 6510: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 6520: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 6530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6540: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 eturn$::build_d
6550: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
6560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
6570: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6580: 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74  OTE: If the "nat
6590: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
65a0: 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20  ion is set, the
65b0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
65c0: 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bly..        #
65d0: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65       is being te
65e0: 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63  sted.  In that c
65f0: 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f  ase, the path to
6600: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
6610: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  tory..        #
6620: 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61        will conta
6630: 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  in the platform
6640: 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65  name and all the
6650: 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
6660: 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
6670: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
6680: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
6690: 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74  directory.  If t
66a0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
66b0: 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ime..        #
66c0: 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e       option is n
66d0: 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c  ot set, the buil
66e0: 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  d directory will
66f0: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74   be considered t
6700: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20  o be..        #
6710: 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d        "platform-
6720: 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74  neutral", with t
6730: 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70  he notable excep
6740: 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69  tion of any nati
6750: 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ve..        #
6760: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e      assembly (e.
6770: 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  g. "SQLite.Inter
6780: 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20  op.dll") copied
6790: 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65  there during the
67a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
67b0: 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20    build process
67c0: 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20  itself.  If the
67d0: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f  build process so
67e0: 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a  mehow does not..
67f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6800: 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20  copy the native
6810: 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69  assembly for thi
6820: 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74  s platform, most
6830: 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20   of the tests..
6840: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
6850: 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c  n the suite will
6860: 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70   simply be skipp
6870: 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73  ed.  Generally s
6880: 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a  peaking, there..
6890: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
68a0: 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20  are two ways to
68b0: 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69  build the binari
68c0: 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  es when preparin
68d0: 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20  g to run the..
68e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
68f0: 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20  st suite:..
6900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6910: 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74        1. Build t
6920: 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61  he separate mana
6930: 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61  ged and native a
6940: 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20  ssemblies using
6950: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
6960: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
6970: 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  s similar to:..
6980: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6990: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
69a0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 69b0: 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e ration}ManagedOn 69c0: 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a ly${Platform}..
69d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69e0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 69f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 onfiguration}Nat 6a00: 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f iveOnly${Platfo
6a10: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
6a20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6a30: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 6a40: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 6a50: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 6a60: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 6a70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6a80: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
6a90: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
6aa0: 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20  r "x64"...
6ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
6ac0: 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68       2. Build th
6ad0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
6ae0: 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f  embly using a co
6af0: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f  mmand similar to
6b00: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
6b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6b20: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e   build.bat ${Con 6b30: 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c figuration}${Pl
6b40: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
6b50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
6b60: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43         Where ${C 6b70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 onfiguration} is 6b80: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 either "Debug" 6b90: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 or "Release" and 6ba0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6bb0: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d${Platform}
6bc0: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33   is either "Win3
6bd0: 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66  2" or "x64".  If
6be0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   this command is
6bf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6c00: 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f       used, vario
6c10: 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65  us tests that re
6c20: 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74  quire supplement
6c30: 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20  ary managed..
6c40: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6c50: 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e  assemblies (e.g.
6c60: 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b   LINQ) may be sk
6c70: 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f  ipped unless tho
6c80: 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20  se binaries..
6c90: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6ca0: 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79  are subsequently
6cb0: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65   copied into the
6cc0: 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f   correct directo
6cd0: 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20  ry (i.e. by..
6ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
6cf0: 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e  "test_all.bat").
6d00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6d10: 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74       #       Not
6d20: 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68  e that all of th
6d30: 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73  e build commands
6d40: 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61   above will defa
6d50: 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20  ult to using..
6d60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
6d70: 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e  e latest version
6d80: 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69   of MSBuild avai
6d90: 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74  lable and the "t
6da0: 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20  est_year" may..
6db0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
6dc0: 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74  eed to be adjust
6dd0: 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74  ed accordingly t
6de0: 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74  o actually run t
6df0: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
6e00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6e10: 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d  Refer to the com
6e20: 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69  ments in [getBui
6e30: 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65  ldYear] for more
6e40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d   information on.
6e50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6e60: 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73   how to set this
6e70: 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20   variable...
6e80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
6e90: 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20  et native [expr
6ea0: 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26  {!$managedOnly & 6eb0: 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 & [hasRuntimeOpt 6ec0: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d ion native]}]... 6ed0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6ee0: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 [joinBuildDirect 6ef0: 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 ory$native [get
6f00: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
6f10: 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ry] \..
6f20: 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72     [getBuildYear
6f30: 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  ] [getBuildPlatf
6f40: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65  orm $native] [ge 6f50: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 6f60: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ion]].. }.. 6f70: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6f80: 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 oc getReleaseVer 6f90: 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 sion {} {.. 6fa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6fb0: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the 6fc0: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 6fd0: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 for use with th 6fe0: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 6ff0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 7000: 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 when checking f 7010: 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c or available rel 7020: 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d eases... #. 7030: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7040: 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 exists ::releas 7050: 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d e_version] && \. 7060: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7070: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c ng length$::rel
7080: 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20  ease_version] >
7090: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
70a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
70b0: 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73  NOTE: The releas
70c0: 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65  e version has be
70d0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74  en overridden; t
70e0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
70f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
7100: 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20    verbatim...
7110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7120: 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73  return $::releas 7130: 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 e_version.. 7140: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 7150: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 7160: 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 NOTE: No release 7170: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 version is avai 7180: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e lable, return an 7190: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 71a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 71b0: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 It is important 71c0: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 to return an emp 71d0: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 ty string here b 71e0: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 ecause the.. 71f0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 7200: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 lt of this proce 7210: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 dure may be used 7220: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e with [file join 7230: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 ]... #.. 7240: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 return "" 7250: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 7260: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 7270: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b tBuildFileName { 7280: 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 fileName manage 7290: 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 dOnly {platform 72a0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 72b0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 72c0: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 Returns the spec 72d0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 72e0: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f as if it were lo 72f0: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 cated in the.. 7300: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 7310: 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 d directory, dis 7320: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 7330: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 7340: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 7350: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 7360: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 7370: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 7380: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 7390: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 73a0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 73b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f 73c0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 ile join [getBui 73d0: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6d 61 6e ldDirectory$man
73e0: 61 67 65 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66  agedOnly] $platf 73f0: 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 7400: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
7410: 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  eName]]]....
7420: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43    #..      # HAC
7430: 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20  K: When running
7440: 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65  on WoW64, assume
7450: 20 74 68 65 20 74 65 73 74 20 65 78 65 63 75 74   the test execut
7460: 61 62 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e  ables are presen
7470: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7480: 20 77 69 74 68 20 74 68 65 20 22 33 32 22 20 73   with the "32" s
7490: 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a  uffix on them...
74a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
74b0: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57  f {[isRunningWoW
74c0: 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74  64] && [file ext
74d0: 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20  ension $result] 74e0: 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 eq ".exe"} then 74f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 {.. set r 7500: 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 esult [appendArg 7510: 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 s [file rootname 7520: 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65$result] 32.exe
7530: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
7540: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 7550: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 lt.. }..... 7560: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7570: 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b alDirectory {} { 7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7590: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 75a0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 ocedure returns 75b0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 the directory wh 75c0: 65 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c ere the external 75d0: 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 binary.. # 75e0: 20 20 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 files are 75f0: 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 located... 7600: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7610: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7620: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 7630: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 [file dirname [i 7640: 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a nfo binary]]]].. 7650: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7660: 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 oc getBinaryDire 7670: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 7680: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7690: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 76a0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 76b0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 76c0: 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 e test applicati 76d0: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 76e0: 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 itself (i.e. t 76f0: 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 he Eagle shell) 7700: 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 is located. Thi 7710: 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 s will be used a 7720: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 7730: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e the destination 7740: 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 for the copied 7750: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 7760: 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 te native and.. 7770: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e # man 7780: 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 aged assemblies 7790: 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 (i.e. because th 77a0: 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 is is one of the 77b0: 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 few places.. 77c0: 20 20 20 23 20 20 20 20 20 20 20 77 68 65 72 65 # where 77d0: 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 the CLR will ac 77e0: 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 tually find and 77f0: 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 load them proper 7800: 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ly)... #.. 7810: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 7820: 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 xists ::binary_d 7830: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 7840: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 7850: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 g length$::bina
7860: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
7870: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
7880: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
7890: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
78a0: 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79  on of the binary
78b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
78c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
78d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
78e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
78f0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
7900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7910: 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72   return $::binar 7920: 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 y_directory.. 7930: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7940: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 return [inf 7950: 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 o binary].. 7960: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 7970: 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e proc getExtern 7980: 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c alFileName { fil 7990: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 eName } {.. 79a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 79b0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 79c0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 79d0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 79e0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 79f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 7a00: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 rectory containi 7a10: 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 ng the external 7a20: 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 binaries... 7a30: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 7a40: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7a50: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 7a60: 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f tExternalDirecto 7a70: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ry]$fileName]].
7a80: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7a90: 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c  roc getBinaryFil
7aa0: 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65  eName { fileName
7ab0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d   {platform ""} }
7ac0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
7ad0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
7ae0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ns the specified
7af0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66   file name as if
7b00: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64   it were located
7b10: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
7b20: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
7b30: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
7b40: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
7b50: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
7b60: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
7b70: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
7b80: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
7b90: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
7ba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7bb0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
7bc0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
7bd0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
7be0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
7bf0: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 7c00: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
7c10: 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  Name]]]..    }..
7c20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
7c30: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  oreBinaryFileNam
7c40: 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  e { {platform ""
7c50: 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22 7d 20  } {standard ""}
7c60: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
7c70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
7c80: 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61 74  rns the full pat
7c90: 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 63  h for the file c
7ca0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
7cb0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
7cc0: 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20   #       native
7cd0: 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f 72  library code for
7ce0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20   this platform.
7cf0: 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61 6e   First, check an
7d00: 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20 20  d see if..
7d10: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
7d20: 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c  te core native l
7d30: 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61  ibrary has alrea
7d40: 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20  dy been loaded.
7d50: 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20   Next,..      #
7d60: 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20 74        fallback t
7d70: 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c 20  o what the full
7d80: 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c 20  path should be,
7d90: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72  based on whether
7da0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
7db0: 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61      mixed-mode a
7dc0: 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e 67  ssembly is being
7dd0: 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e 61   used and the na
7de0: 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  me of the curren
7df0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7e00: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20   platform...
7e10: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
7e20: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
7e30: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
7e40: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
7e50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7e60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7e70: 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
7e80: 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65 4e 61  ethods _SQLiteNa
7e90: 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61  tiveModuleFileNa
7ea0: 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69 6c 65  me..      } file
7eb0: 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5b 73  Name] == 0 && [s
7ec0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi 7ed0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 7ee0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 7ef0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 7f00: 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 The SQLite core 7f10: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 native library h 7f20: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 as already been 7f30: 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 loaded via.. 7f40: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 7f50: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 native library p 7f60: 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 re-loader. Retu 7f70: 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d rn that file nam 7f80: 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 7f90: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 7fa0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
7fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
7fc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
7fd0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
7fe0: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61  untime option ha
7ff0: 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c 77 61  s been set, alwa
8000: 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20  ys return the..
8010: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
8020: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6d  e name for the m
8030: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
8040: 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ly...      #..
8050: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
8060: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
8070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8080: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8090: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
80a0: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
80b0: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  mbly file name..
80c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
80d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
80e0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
80f0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
8100: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
8110: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 8120: 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 form System.Data 8130: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 .SQLite.dll]].. 8140: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 8150: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8160: 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 74 69 Are we attempti 8170: 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 ng to automatica 8180: 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 74 68 lly detect wheth 8190: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 er or not the.. 81a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 # int 81b0: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 73 68 erop assembly sh 81c0: 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d 0a 20 ould be used?.. 81d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 81e0: 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 78 70 t automatic [exp 81f0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt 8200: 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d 3d 20 h$standard] ==
8210: 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  0}]....      #..
8220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
8230: 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72 20 22  rst, in either "
8240: 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20 22 6e  automatic" or "n
8250: 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d 6f 64  on-standard" mod
8260: 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20 20 20  es, attempt..
8270: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 66 69     #       to fi
8280: 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e  nd the native-on
8290: 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  ly interop assem
82a0: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  bly...      #..
82b0: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 82c0: 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 61 72 tic || !$standar
82d0: 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  d} then {..
82e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
82f0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
8300: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
8310: 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72  ative-only inter
8320: 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  op assembly file
8330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8340: 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20    name for this
8350: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
8360: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
8370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8380: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
8390: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f  eOnly [getIntero
83a0: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d  pAssemblyFileNam
83b0: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20  esOnly] {..
83c0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
83d0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
83e0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
83f0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
8400: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
8410: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66  ry] $platform$f
8420: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
8430: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
8440: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 8450: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 8460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 8470: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
8480: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
84a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
84b0: 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20 69 6e  # NOTE: Then, in
84c0: 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74   either "automat
84d0: 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61 72 64  ic" or "standard
84e0: 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74  " modes, attempt
84f0: 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
8500: 20 20 20 66 69 6e 64 20 74 68 65 20 73 74 61 6e     find the stan
8510: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
8520: 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ary...      #..
8530: 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61       if {$automa 8540: 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 72 64 tic ||$standard
8550: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8560: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
8570: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
8580: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61  determine the na
8590: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
85a0: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
85b0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
85c0: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
85d0: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 20 61   this platform a
85e0: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 69  nd then return i
85f0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
8600: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
8610: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
8620: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
8630: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20  eNamesOnly] {..
8640: 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c           set fil
8650: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
8660: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
8670: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
8680: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
8690: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 86a0: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d m$fileNameOnly]
86b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
86c0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
86d0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 86e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 86f0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
8710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
8720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8730: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61 73 20      # NOTE: Was
8740: 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
8750: 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 65 78  mbly compiled ex
8760: 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61 6c 20  pecting to deal
8770: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20  with the..
8780: 23 20 20 20 20 20 20 20 73 74 61 6e 64 61 72 64  #       standard
8790: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f 0d 0a   core library?..
87a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
87b0: 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65  f {[haveSQLiteDe
87c0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53 51 4c  fineConstant SQL
87d0: 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d 20 74  ITE_STANDARD]} t
87e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
87f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
8800: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65  : Fallback to re
8810: 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 69  turning the nati
8820: 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64  ve-only standard
8830: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d   SQLite library.
8840: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
8850: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
8860: 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  he platform...
8870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8880: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e   set fileNamesOn
8890: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  ly [getNativeLib
88a0: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
88b0: 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  y]....        if
88c0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65   {[llength $file 88d0: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d NamesOnly] == 0} 88e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 88f0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 8900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8910: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 8920: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 8930: 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 8940: 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 [getBinaryD 8950: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
8960: 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c  orm [lindex $fil 8970: 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d eNamesOnly 0]]]. 8980: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8990: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 89a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c # NOTE: Fall 89b0: 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e back to returnin 89c0: 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c g the native-onl 89d0: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 89e0: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 ly file.. 89f0: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 66 6f # name fo 8a00: 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d r the platform.. 8a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8a20: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 8a30: 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f sOnly [getIntero 8a40: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 8a50: 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 esOnly].... 8a60: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 8a70: 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20$fileNamesOnly]
8a80: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
8aa0: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
8ab0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
8ac0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
8ad0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
8ae0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
8af0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $8b00: 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 platform [lindex 8b10: 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20$fileNamesOnly
8b20: 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  0]]]..      }..
8b30: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8b40: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
8b50: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
8b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8b70: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
8b80: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
8b90: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
8ba0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
8bb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
8bc0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
8bd0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
8be0: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
8bf0: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
8c00: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
8c10: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
8c20: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
8c30: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
8c40: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
8c50: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
8c60: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 8c70: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 8c80: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 8c90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 8cb0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 8cc0: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 8cd0: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 8ce0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 8cf0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 8d00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
8d20: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
8d30: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
8d40: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
8d50: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
8d60: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
8d70: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
8d80: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 8d90: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 8da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 8db0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 8dc0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 8dd0: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 8de0: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 8df0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 8e00: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 8e10: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 8e20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 8e30: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
8e40: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
8e50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
8e60: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
8e70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
8e80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
8e90: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 8ea0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 8eb0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 8ec0: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
8ed0: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
8ee0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8ef0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
8f00: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
8f10: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
8f20: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
8f30: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
8f40: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
8f50: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
8f60: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
8f70: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
8f80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
8f90: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
8fa0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
8fb0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 8fd0: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 8fe0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 8ff0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9000: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 9010: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 9020: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 9030: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 9040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9050: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 9060: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 9070: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9080: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 9090: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 90a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 90b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 90c0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 90d0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 90e0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 90f0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 9100: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 9110: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 9120: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 9130: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 9140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 9150: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 9160: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 9170: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 9180: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 9190: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 91a0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 91b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 91c0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
91d0: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
91e0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
91f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9200: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9210: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
9220: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
9230: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9240: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9250: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9260: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9270: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9280: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 9290: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 92a0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 92b0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 92c0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 92d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 92e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
92f0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
9300: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9310: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9320: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
9330: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
9340: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
9350: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
9360: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
9370: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
9380: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
9390: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
93a0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 93b0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 93c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 93d0: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 93e0: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 93f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9400: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 9410: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 9420: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 9430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 9440: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 9450: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 9460: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 9470: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 9480: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 9490: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 94a0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 94b0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 94c0: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 94d0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 94e0: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 94f0: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 9500: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9510: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9520: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 9530: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 9540: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 9550: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
9560: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
9570: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9580: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9590: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
95a0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
95b0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
95c0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
95d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
95e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
95f0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
9600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $9610: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9620: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 9630: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 9640: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 9650: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 9660: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 9670: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
9680: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
9690: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
96a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
96b0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
96c0: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
96d0: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
96e0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
96f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9700: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
9710: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
9720: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
9730: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 9740: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 9750: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 9760: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 9770: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 9780: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9790: 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f proc getExecuteO 97a0: 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 nSetup {} {.. 97b0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 97c0: 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e sts ::execute_on 97d0: 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 _setup] && \.. 97e0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 97f0: 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 length$::execut
9800: 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d  e_on_setup] > 0}
9810: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9820: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9830: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63  TE: Return the c
9840: 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f  onfigured SQL to
9850: 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20   execute during
9860: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
9870: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9880: 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20  setup procedure
9890: 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20  (i.e. for every
98a0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  test database co
98b0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
98c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
98d0: 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65  eturn $::execute 98e0: 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 _on_setup.. 98f0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9910: 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 NOTE: By default 9920: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 , there is no SQ 9930: 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 L to execute dur 9940: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti 9950: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 on.. # 9960: 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 setup proced 9970: 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 ure (i.e. for ev 9980: 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 ery test databas 9990: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a e connection)... 99a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 99b0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 99c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 99d0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 74 72 . proc getStr 99e0: 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 ingMapForTclEsca 99f0: 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 pe {} {.. r 9a00: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c 20 5c eturn [list \\ \ 9a10: 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c \\\ $\\\[$ \ 9a20: 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a 20 20 \\] \$ \\\$].. 9a30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9a40: 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 getTestOverride 9a50: 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 sPreamble { {ext 9a60: 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d raVarNames ""} } 9a70: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 {.. set va 9a80: 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d rNames [list]... 9a90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9aa0: 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c # NOTE: If avail 9ab0: 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 able, start with 9ac0: 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 the master list 9ad0: 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 of test overrid 9ae0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9af0: 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 variables... 9b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 9b10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 9b20: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 est_overrides] & 9b30: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 9b40: 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f llength$::test_
9b50: 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20  overrides] > 0}
9b60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9b70: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
9b80: 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76  Names $::test_ov 9b90: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d errides.. } 9ba0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9bb0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 # NOTE: If re 9bc0: 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 quested by our c 9bd0: 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 aller, add any a 9be0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 dditional variab 9bf0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 le.. # 9c00: 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 names to copy 9c10: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 now... #.. 9c20: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 9c30: 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 h$extraVarNames
9c40: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9c50: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
9c60: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78  end varNames $ex 9c70: 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 traVarNames.. 9c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 9c90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 9ca0: 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 uild the script 9cb0: 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 fragment to be r 9cc0: 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 eturned by proce 9cd0: 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 ssing each.. 9ce0: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 9cf0: 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 le name and addi 9d00: 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 ng the nececessa 9d10: 72 79 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 ry script fragme 9d20: 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 nts for.. # 9d30: 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e each one. 9d40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9d50: 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a set result "".. 9d60: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 9d70: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 varName$varName
9d80: 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  s {..        #..
9d90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9da0: 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66  Build the qualif
9db0: 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  ied global varia
9dc0: 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ble name...
9dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
9de0: 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61  t fullVarName [a
9df0: 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61  ppendArgs :: $va 9e00: 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 rName].... 9e10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9e20: 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 OTE: Does the va 9e30: 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 riable exist in 9e40: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 this interpreter 9e50: 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 context?.. 9e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 9e70: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 {[info exists$
9e80: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68  fullVarName]} th
9e90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9ea0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
9eb0: 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63  OTE: Append a sc
9ec0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f  ript fragment to
9ed0: 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 61 74   the result that
9ee0: 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d   will correctly.
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
9f00: 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74     copy any cont
9f10: 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61  ained value to a
9f20: 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74  nother interpret
9f30: 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20  er context...
9f40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9f50: 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c      append resul
9f60: 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c  t \n "set " $ful 9f70: 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b lVarName " \{" [ 9f80: 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a 20 20 string map \.. 9f90: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 9fa0: 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 StringMapForTclE 9fb0: 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 75 6c scape] [set$ful
9fc0: 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d 0a 20  lVarName]] \}..
9fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9ff0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
a000: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
a010: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  ns one or more s
a020: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c  cript fragments,
a030: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20   append a..
a040: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65   #       newline
a050: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
a060: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
a070: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20  ngth $result] > a080: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a090: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result a0a0: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n.. }.... a0b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
a0c0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
a0d0: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73      proc moveSys
a0e0: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
a0f0: 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72  Config { {restor
a100: 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73  e false} {verbos
a110: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
a120: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
a130: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
a140: 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  tory]....      i
a150: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
a160: 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d  h $directory] == a170: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. a180: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a190: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a1a0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a1b0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a1c0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a1d0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski a1e0: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 79 pped moving \"Sy a1f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a200: 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 .dll.config\", " a210: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a220: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 "no binary dir a230: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 ectory\n"].. a240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... a250: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } a260: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 .... set fi a270: 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 leName(1) [file a280: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 normalize \.. a290: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi a2a0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 n$directory Sys
a2b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a2c0: 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a  dll.config]]....
a2d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
a2e0: 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67  me(2) [appendArg
a2f0: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e  s $fileName(1) . a300: 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 moved].... a310: 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 if {$restore} th
a320: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
a330: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a340: 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 fileName(2)]} th a350: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a360: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a370: 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61  eName(2) $fileNa a380: 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(1).... a390: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a3a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a3b0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a3c0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a3d0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a3e0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a3f0: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a400: 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22  ame(2) "\" to \"
a410: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a420: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31       $fileName(1 a430: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a440: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a450: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a460: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a470: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a480: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a490: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a4a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a4b0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a4c0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a4d0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c "$fileName(2) \
a4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a4f0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a500: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a510: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
a530: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  se {..        if
a540: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a550: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 fileName(1)]} th a560: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a570: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a580: 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61  eName(1) $fileNa a590: 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(2).... a5a0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a5b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a5c0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a5d0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a5e0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a5f0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a600: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a610: 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22  ame(1) "\" to \"
a620: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a630: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32       $fileName(2 a640: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a650: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a660: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a670: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a680: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a690: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a6a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a6b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a6c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a6d0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a6e0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c "$fileName(1) \
a6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a700: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a710: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a720: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a730: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
a740: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a750: 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72  c getAppDomainPr
a760: 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78  eamble { {prefix
a770: 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d   ""} {suffix ""}
a780: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
a790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
a7a0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
a7b0: 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70  rns a test setup
a7c0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a7d0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20   suitable for..
a7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61       #       eva
a7f0: 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e  luation by an in
a800: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
a810: 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64  d in an isolated
a820: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20   application..
a830: 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61      #       doma
a840: 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20  in.  The script
a850: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
a860: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a870: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20  surrounded by..
a880: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a890: 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66   prefix and suff
a8a0: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d  ix "script fragm
a8b0: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20  ents" specified
a8c0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a  by our caller,..
a8d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66        #       if
a8e0: 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72   any.  The entir
a8f0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72  e script being r
a900: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a910: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d  substituted via.
a920: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
a930: 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63  subst], in the c
a940: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
a950: 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69  ller, before bei
a960: 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  ng returned...
a970: 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73      #       This
a980: 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61   step is necessa
a990: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20  ry so that some
a9a0: 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20  limited context
a9b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20  information,..
a9c0: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d      #       prim
a9d0: 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f  arily related to
a9e0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
a9f0: 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65  ectories, can be
aa00: 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20   transferred..
aa10: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74      #       to t
aa20: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  he interpreter i
aa30: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61  n the isolated a
aa40: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
aa50: 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20  n, making it..
aa60: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65      #       able
aa70: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79   to successfully
aa80: 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20   run tests that
aa90: 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d  require one or m
aaa0: 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ore of the..
aab0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20    #       files
aac0: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65  in one of the te
aad0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
aae0: 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75  s.  Callers shou
aaf0: 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20  ld keep in..
ab00: 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74    #       mind t
ab10: 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72  hat the test scr
ab20: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69  ipt fragment bei
ab30: 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e  ng returned cann
ab40: 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20  ot rely on..
ab50: 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63    #       any sc
ab60: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f  ript library pro
ab70: 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65  cedures that are
ab80: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79   not provided by
ab90: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
aba0: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72    #       librar
abb0: 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20  y package (i.e.
abc0: 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69  "init.eagle"), i
abd0: 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70  ncluding those p
abe0: 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20  rovided by..
abf0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61    #       the Ea
ac00: 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  gle test package
ac10: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c  , unless the fil
ac20: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ac30: 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  m is loaded..
ac40: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61     #       manua
ac50: 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68  lly via some oth
ac60: 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e  er mechanism (e.
ac70: 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20  g. by including
ac80: 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20  appropriate..
ac90: 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b     #       [pack
aca0: 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20  age require] or
acb0: 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64  [source] command
acc0: 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20  s in the prefix
acd0: 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20  or suffix..
ace0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
acf0: 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73  fragments).  Als
ad00: 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20  o, all variable
ad10: 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61  references and a
ad20: 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20  ll nested..
ad30: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
ad40: 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e  s (i.e. those in
ad50: 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
ad60: 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  ) contained in t
ad70: 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20  he final..
ad80: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66  #       script f
ad90: 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64  ragment will end
ada0: 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61   up being evalua
adb0: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  ted in the conte
adc0: 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  xt of the..
add0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67   #       calling
ade0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64   interpreter and
adf0: 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20   not the target
ae00: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
ae10: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
ae20: 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74    #       isolat
ae30: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ed application d
ae40: 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65  omain unless the
ae50: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e   dollar signs an
ae60: 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20  d/or square..
ae70: 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b     #       brack
ae80: 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c  ets are speciall
ae90: 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61  y quoted with ba
aea0: 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20  ckslashes...
aeb0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
aec0: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69  n [uplevel 1 [li
aed0: 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64  st subst [append
aee0: 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a  Args $prefix {.. aef0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. af00: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c # NOTE: The \ af10: 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e [object\] comman af20: 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 d may be missing af30: 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 in some Eagle c af40: 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ore.. # af50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e library con af60: 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c figurations. Cl af70: 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 oning and using af80: 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 the procedure.. af90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c # \ afa0: 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e [changeNativeRun afb0: 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 timeOption\] may afc0: 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 help to mitigat afd0: 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 e this... afe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 #.. proc aff0: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun b000: 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 timeOption \.. b010: 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f {[info b020: 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 args changeNati b030: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d veRuntimeOption] b040: 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. b050: 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 {[info body cha b060: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime b070: 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 Option]}.... b080: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. b090: 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 changeNat b0a0: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption b0b0: 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 [hasRuntimeOpti b0c0: 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 on native].. b0d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b }.. } [ b0e0: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 getTestOverrides b0f0: 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 Preamble [list p b100: 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c ath test_channel b110: 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 ]]$suffix]]]..
b120: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
b130: 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61  c tryCopyExterna
b140: 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  lFile {..
b150: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
b160: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77  latform ""} {new
b170: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65  FileName ""} {ve
b180: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d  rbose true} } {.
b190: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
b1a0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78  eFileName [getEx
b1b0: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24  ternalFileName $b1c0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... b1d0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex b1e0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
b1f0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
b200: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb b210: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b220: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
b230: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
b240: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
b250: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b260: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
b270: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22  external file \"
b280: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam b290: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. b2a0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does b2b0: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. b2c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b2d0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b2e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b2f0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b300: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b310: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b320: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b330: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
b340: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil b350: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
b360: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b370: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
b380: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
b390: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
b3a0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
b3b0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  orm]..      }...
b3c0: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65  .      set targe
b3d0: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  tDirectory [file
b3e0: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74   dirname $target b3f0: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... b400: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. b410: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 . if {![f b420: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
b430: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
b440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b450: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67  file mkdir $targ b460: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 etDirectory.. b470: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b480: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for b490: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
b4a0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa b4b0: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 me.. }] == b4c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. b4d0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
b4e0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
b4f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
b500: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
b510: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66   external file f
b520: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46  rom \"" $sourceF b530: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c ileName "\" to \ b540: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. b550: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d$targetFileNam
b560: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
b570: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
b580: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c b590: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b5a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b5b0: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t b5c0: 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 o copy external b5d0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
b5e0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
b5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
b600: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF b610: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. b620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b630: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo b640: 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a pyBinaryFile {.. b650: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file b660: 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 Name managedOnly b670: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { b680: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d newFileName ""}. b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 . {ve b6a0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. b6b0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 . set sourc b6c0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 eFileName [getBi b6d0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
b6e0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform b6f0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! b700: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f [file exists$so
b710: 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  urceFileName]} t
b720: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
b730: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the b740: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t b750: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b760: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b770: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b780: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
b790: 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66  copying binary f
b7a0: 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46  ile \"" $sourceF b7b0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. b7c0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it b7d0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ b7e0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. b7f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return b800: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... b810: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b820: 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 ength$newFileNa
b830: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
b840: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
b850: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
b860: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d  BuildFileName \.
b870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65  .            $ne b880: 77 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 wFileName$manag
b890: 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d  edOnly $platform b8a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else b8b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t b8c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g b8d0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName b8e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
b8f0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage b900: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d dOnly$platform]
b910: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b920: 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72     set targetDir
b930: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
b940: 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65  name $targetFile b950: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i b960: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. b970: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b980: 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 exists$targetDi
b990: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
b9a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
b9b0: 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69   mkdir $targetDi b9c0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 rectory.. b9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 }.... fi b9e0: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
b9f0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $ba00: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. ba10: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t ba20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t ba30: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
ba40: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ba50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ba60: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e  "---- copied bin
ba70: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ary file from \"
ba80: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam ba90: 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a e "\" to \"" \.. baa0: 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72$tar
bab0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
bac0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
bad0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bae0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel baf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bb00: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bb10: 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 - failed to copy bb20: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f binary file fro bb30: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
bb40: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
bb50: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20       "\" to \""
bb60: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName bb70: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a \"\n].. }.. bb80: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr bb90: 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 oc tryCopyBuildF bba0: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. bbb0: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana bbc0: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor bbd0: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa bbe0: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. bbf0: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru bc00: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se bc10: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName bc20: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa bc30: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 me$fileName $ma bc40: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
bc50: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
bc60: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
bc70: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d  $sourceFileName] bc80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bc90: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
bca0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bcb0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ bcc0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA bcd0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. bce0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp bcf0: 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 ed copying build bd00: 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 file \""$sourc
bd10: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
bd20: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
bd30: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
bd40: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t\n"]..        }
bd50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
bd60: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
bd70: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
bd80: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65   length $newFile bd90: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then bda0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t bdb0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g bdc0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName bdd0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70$newFileName $p bde0: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. bdf0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. be00: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile be10: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF be20: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
be30: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20  e $platform].. be40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s be50: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f et targetDirecto be60: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 ry [file dirname be70: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
be80: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
be90: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
bea0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
beb0: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ts $targetDirect bec0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. bed0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 file mkd bee0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ir$targetDirect
bef0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ory..        }..
bf00: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
bf10: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour bf20: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
bf30: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
bf40: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
bf50: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
bf60: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel bf70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bf80: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- bf90: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f bfa0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
bfb0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
bfc0: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
bfd0: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi bfe0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. bff0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. c000: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c010: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c020: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c030: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
c040: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
c050: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
c060: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName c070: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " c080: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
c090: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
c0a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
c0b0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
c0c0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
c0d0: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61   { fileName {pla
c0e0: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f  tform ""} {verbo
c0f0: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
c100: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
c110: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
c120: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ame $fileName$p
c130: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20  latform]....
c140: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
c150: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} c160: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c170: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
c180: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
c190: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch c1a0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c1b0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. c1c0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c1d0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 deleting binary c1e0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
c1f0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
c200: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
c210: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
c220: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
c230: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
c240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
c250: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
c260: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName c270: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. c280: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
c290: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
c2a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
c2b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
c2c0: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66  deleted binary f
c2d0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam c2e0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } c2f0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c300: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
c310: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
c320: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c330: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
c340: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20  o delete binary
c350: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa c360: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. c370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... c380: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 proc tryDeleteB c390: 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 uildFile {.. c3a0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c3b0: 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c managedOnly {pl c3c0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb c3d0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. c3e0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam c3f0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN c400: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d ame$fileName $m c410: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 anagedOnly$plat
c420: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
c430: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
c440: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the c450: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if c460: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
c480: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c490: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c4b0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 "---- skipped de c4c0: 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c leting build fil c4d0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
c4e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
c4f0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
c500: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
c510: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
c520: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
c530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
c540: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
c550: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d  te $fileName}] = c560: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. c570: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c580: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c590: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c5a0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65        "---- dele
c5b0: 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ted build file \
c5c0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c5d0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else c5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput c5f0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
c600: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
c610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
c620: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  -- failed to del
c630: 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ete build file \
c640: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ c650: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. c660: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c670: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly c680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f c690: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO c6a0: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" c6b0: 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 } {pdb true} {ve c6c0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. c6d0: 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 . tryCopyBu c6e0: 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d ildFile$fileNam
c6f0: 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24  e $managedOnly$
c700: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72  platform "" $ver c710: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if c720: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
c730: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42          tryCopyB
c740: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64  uildFile [append
c750: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c760: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c770: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c780: 64 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 db]$managedOnly
c790: 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76   $platform ""$v
c7a0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d  erbose..      }.
c7b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c7c0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73  roc tryDeleteAss
c7d0: 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  embly {..
c7e0: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
c7f0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62  latform ""} {pdb
c800: 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20   true} {verbose
c810: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c820: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
c830: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
c840: 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73  platform $verbos c850: 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 e.... if {$
c860: 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  pdb} then {..
c870: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
c880: 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64  naryFile [append
c890: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c8a0: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
c8b0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p c8c0: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 db]$platform $v c8d0: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d erbose.. }. c8e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p c8f0: 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d roc tryLoadAssem c900: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b bly { fileName { c910: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b platform ""} } { c920: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file c930: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF c940: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
c950: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a  e $platform].... c960: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch c970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set c980: 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 assembly [object c990: 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 load -loadtype c9a0: 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c File -alias$fil
c9b0: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d  eName]..      }]
c9c0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
c9d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c9e0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61    # NOTE: Now, a
c9f0: 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
ca00: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
ca10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
ca20: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
ca30: 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  int [file rootna
ca40: 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  me [file tail $f ca50: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 ileName]].... ca60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ca70: 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the ca80: 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 image runtime v ca90: 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 ersion from the caa0: 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 assembly because cab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # cac0: 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 several tests cad0: 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e rely on it havin cae0: 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 g a certain valu caf0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. cb00: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr cb10: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs cb20: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
cb30: 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20  eName] _ \..
cb40: 20 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62          [$assemb cb50: 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 ly ImageRuntimeV cb60: 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 ersion]].... cb70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # cb80: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th cb90: 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 e full path of t cba0: 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d he loaded file.. cbb0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. cbc0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
cbd0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
cbe0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
cbf0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
cc00: 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61  proc isSQLiteRea
cc10: 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  dy {} {..      #
cc20: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
cc30: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  This procedure m
cc40: 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a  ust return non-z
cc50: 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  ero only if the
cc60: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20  SQLite native..
cc70: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62       #       lib
cc80: 72 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73  rary and the Sys
cc90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
cca0: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
ccb0: 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20   are loaded..
ccc0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
ccd0: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
cce0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20  the test suite.
ccf0: 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73   Currently, this
cd00: 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20   procedure..
cd10: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
cd20: 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20   be called only
cd30: 61 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f  after the [tryLo
cd40: 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63  adAssembly] proc
cd50: 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20  edure has..
cd60: 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61   #       been ca
cd70: 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f  lled to probe fo
cd80: 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  r the System.Dat
cd90: 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64  a.SQLite managed
cda0: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
cdb0: 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65   #       and the
cdc0: 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65   [checkForSQLite
cdd0: 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20  ] procedure has
cde0: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
cdf0: 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20  robe for..
ce00: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
ce10: 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  te native librar
ce20: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68  y; otherwise, th
ce30: 69 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c  is procedure wil
ce40: 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20  l simply..
ce50: 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72  #       always r
ce60: 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...
ce70: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
ce80: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20  rn [expr {..
ce90: 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61      [haveConstra
cea0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
ceb0: 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65  SQLite] && [have
cec0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
ced0: 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20  e]..      }]..
cee0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
cef0: 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b   matchPlatform {
cf00: 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20   platform } {..
cf10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
cf20: 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73  NOTE: An empty s
cf30: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c  tring for the pl
cf40: 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61  atform means tha
cf50: 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e  t the build is n
cf60: 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ot..      #
cf70: 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20    [primarily] a
cf80: 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68  native build; th
cf90: 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61  erefore, it alwa
cfa0: 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20  ys matches...
cfb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
cfc0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $cfd0: 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 platform] == 0} cfe0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cff0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. d000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d010: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I d020: 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 f the machine na d030: 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c me is unavailabl d040: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 e, there is noth d050: 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 ign else we.. d060: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 # can d d070: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. d080: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex d090: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf d0a0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t d0b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r d0c0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. d0d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. d0e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 . # NOTE: D d0f0: 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 oes the specifie d100: 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 d platform match d110: 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 up to the curre d120: 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 nt process?.. d130: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { d140: 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61$platform eq [ma
d150: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
d160: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( d170: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 machine)]} then d180: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur d190: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. d1a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d1b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 # NOTE: The sp d1c0: 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d ecified platform d1d0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 does not match d1e0: 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 up with the plat d1f0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 form.. # d200: 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 for the curr d210: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ent process... d220: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret d230: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d urn false.. } d240: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 ..... proc ha d250: 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo d260: 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 mmand {} {.. d270: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d280: 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 E: Is the [objec d290: 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 t] command curre d2a0: 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d ntly available?. d2b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d2c0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c return [expr {[l d2d0: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d length [info com d2e0: 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e mands object]] > d2f0: 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 0}].. }..... d300: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo d310: 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d rSQLiteObjectCom d320: 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d mand { channel } d330: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs d340: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
d350: 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62  hecking for \"ob
d360: 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75  ject\" command u
d370: 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  sage... "....
d380: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
d390: 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
d3a0: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20  ObjectCommand)]
d3b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
d3c0: 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
d3d0: 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
d3e0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
d3f0: 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n. d400: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. d410: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d420: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 # NOTE: Unle d430: 73 73 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 ss we are forbid d440: 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 den from doing s d450: 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 o, add some cons d460: 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 traints.. d470: 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 # that wi d480: 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 ll allow most of d490: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite d4a0: 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f to run (i.e. tho d4b0: 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 se.. # d4c0: 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 64 tests that d d4d0: 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 o not directly r d4e0: 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 ely upon the [ob d4f0: 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d ject] command).. d500: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d510: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e d520: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 xists ::no(shimS d530: 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e QLiteAssemblyCon d540: 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e straints)]} then d550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 {.. ad d560: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d570: 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 te.. ad d580: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi d590: 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 teInterop.. d5a0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d5b0: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S d5c0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 QLite.. d5d0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S d5e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit d5f0: 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 e.Encryption.. d600: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d610: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat d620: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d a.SQLite.Linq... d630: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo d640: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append d650: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d660: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat d670: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b a.SQLite.dll_v [ d680: 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 getBuildClrVersi d690: 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d on]].. }. d6a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! d6b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n d6c0: 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 o(shimSQLiteDefi d6d0: 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 neConstantConstr d6e0: 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. d6f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea d700: 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e ch defineConstan d710: 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 t [list \.. d720: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP d730: 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT d740: 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 IONS INTEROP_FTS d750: 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 5_EXTENSION \.. d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT d770: 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e EROP_JSON1_EXTEN d780: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 SION INTEROP_PER d790: 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f CENTILE_EXTENSIO d7a0: 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. d7b0: 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 INTEROP_REGEX d7c0: 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 P_EXTENSION INTE d7d0: 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 ROP_TEST_EXTENSI d7e0: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. d7f0: 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 48 41 31 INTEROP_SHA1 d800: 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 _EXTENSION INTER d810: 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 OP_TOTYPE_EXTENS d820: 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. d830: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 56 49 52 INTEROP_VIR d840: 54 55 41 4c 5f 54 41 42 4c 45 20 55 53 45 5f 49 TUAL_TABLE USE_I d850: 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 NTEROP_DLL] {.. d860: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f addCo d870: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append d880: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d890: 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi d8a0: 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant d8b0: 50 72 65 66 69 78 5d 20 24 64 65 66 69 6e 65 43 Prefix]$defineC
d8c0: 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20  onstant]..
d8d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
d8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
d8f0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
d900: 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 56 69 73  no(shimSQLiteVis
d910: 75 61 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 61  ualStudioConstra
d920: 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ints)]} then {..
d930: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
d940: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
d950: 72 67 73 20 76 69 73 75 61 6c 53 74 75 64 69 6f  rgs visualStudio
d960: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 5d   [getBuildYear]]
d970: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
d980: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch d990: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. d9a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... d9b0: 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 proc changeNa d9c0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio d9d0: 6e 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a n { native } {.. d9e0: 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng d9f0: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command da00: 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 s debug]] > 0 && da10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c \.. [l da20: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 length [info sub da30: 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 20 72 commands debug r da40: 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e untimeoption]] > da50: 20 30 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 0 && [catch {.. da60: 20 20 20 20 20 20 20 20 64 65 62 75 67 20 72 75 debug ru da70: 6e 74 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 ntimeoption [exp da80: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 r {$native ? "ad
da90: 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20  d" : "remove"}]
daa0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d  native..      }]
dab0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
dac0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
dad0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ue..      }....
dae0: 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
daf0: 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
db00: 64 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a  d] && [catch {..
db10: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
db20: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
db30: 72 2e 47 65 74 41 63 74 69 76 65 20 5b 65 78 70  r.GetActive [exp
db40: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a  r {$native ? \.. db50: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64 "Add db60: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a RuntimeOption" : db70: 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f "RemoveRuntimeO db80: 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d ption"}] native. db90: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 . }] == 0} dba0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. dbb0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. dbc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re dbd0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. dbe0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c dbf0: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 heckForSQLiteBui dc00: 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 lds { channel {s dc10: 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b elect false} } { dc20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. dc30: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f dc40: 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c or every possibl dc50: 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 e valid combinat dc60: 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 ion of values us dc70: 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 ed when.. # dc80: 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 locating dc90: 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 out the build ou dca0: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 tput directory, dcb0: 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 showing each ava dcc0: 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 ilable.. # dcd0: 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 build vari dce0: 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 ation along the dcf0: 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 way... #.. dd00: 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 foreach nat dd10: 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 ive [list false dd20: 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 true] {.. dd30: 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 foreach year [g dd40: 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d etBuildYears] {. dd50: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea dd60: 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ch configuration dd70: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig dd80: 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 urations] {.. dd90: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. dda0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: ddb0: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 Figure out the e ddc0: 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 ffective build p ddd0: 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 latform. This i dde0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 s.. # ddf0: 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 based on de00: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 whether or not a de10: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 [primarily] nat de20: 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 ive build.. de30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i de40: 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 s being used. F de50: 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e or [primarily] n de60: 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 on-native builds de70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ,.. # de80: 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c this will de90: 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 be an empty str dea0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ing... deb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. dec0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 set platform [g ded0: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 etBuildPlatform dee0: 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20$native]....
def0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c df00: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr df10: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. df20: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec df30: 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. df40: 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil df50: 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 d \"" [expr \.. df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b { df70: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76$native ? "nativ
df80: 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72  e/" : ""}] [expr
df90: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
dfa0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
dfb0: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e      $platform] > dfc0: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 0 ? [appendArgs dfd0: 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20$platform /] :
dfe0: 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20  ""}] $year \.. dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 / e000: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22$configuration "
e010: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20  \"... "]....
e020: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e030: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
e040: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
e050: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f  ualified directo
e060: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63  ry where the nec
e070: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20  essary..
e080: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70      #       comp
e090: 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65  onents for Syste
e0a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68  m.Data.SQLite sh
e0b0: 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a  ould be found...
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
e0d0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
e0e0: 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75  irectory [joinBu
e0f0: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61  ildDirectory $na e100: 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 tive \.. e110: 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil e120: 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 dBaseDirectory] e130: 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20$year $platform e140: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d$configuration].
e150: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
e160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
e170: 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63  NOTE: Do the nec
e180: 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 69  essary files exi
e190: 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20  st?  Currently,
e1a0: 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a  no other steps..
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
e1c0: 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f      are taken to
e1d0: 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75 69   verify this bui
e1e0: 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76  ld is actually v
e1f0: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  iable...
e200: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e210: 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41     if {[isBuildA
e220: 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65  vailable $native e230: 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68$directory]} th
e240: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
e250: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e260: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65       # NOTE: Whe
e270: 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f  n in "select" mo
e280: 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  de, automaticall
e290: 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72  y select the fir
e2a0: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..
e2b0: 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61    #       availa
e2c0: 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73  ble build of Sys
e2d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
e2e0: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d  and then return.
e2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
e300: 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65         immediate
e310: 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly...
e320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e330: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20      if {$select e340: 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 && [matchPlatfor e350: 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 m$platform]} th
e360: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
e370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
e380: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
e390: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   Manually overri
e3a0: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64  de all the build
e3b0: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63   directory selec
e3c0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
e3d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
e3e0: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69  lated test setti
e3f0: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ngs in order to
e400: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64  force this build
e410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e420: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73    #       of Sys
e430: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
e440: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e470: 69 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69  if {![changeNati
e480: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  veRuntimeOption
e490: 24 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b  $native]} then { e4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e4b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
e4c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
e4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e4e0: 20 20 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69          "no, fai
e4f0: 6c 65 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b  led to " [expr {
e500: 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20  $native ? "add" e510: 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a : "remove"}] \.. e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e530: 20 20 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61 " the \"na e540: 74 69 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f tive\" runtime o e550: 70 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 ption\n"].... e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r e570: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e5a0: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 set ::test_yea e5b0: 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 r$year..
e5c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74           set ::t
e5d0: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c  est_platform $pl e5e0: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 atform.. e5f0: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 set ::te e600: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration e610: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d$configuration.
e620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
e630: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe e640: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. e650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e660: 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 "yes, selec e670: 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e ted (" [expr {$n
e680: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f  ative ? "native/
e690: 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  " : ""}] \..
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e6b0: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c  [expr {[string l
e6c0: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] e6d0: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 > 0 ? [appendAr e6e0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. e6f0: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
e700: 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79  orm /] : ""}] $y e710: 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 ear /$configura
e720: 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  tion ")\n"]....
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
e740: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
e750: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
e760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e770: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann e780: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 el yes\n.. e790: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. e7a0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. e7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t e7c0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
e7d0: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n..
e7e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
e7f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
e800: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
e810: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d  rn false..    }.
e820: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
e830: 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61  ckForSQLiteRelea
e840: 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73  ses { channel {s
e850: 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b  elect false} } {
e860: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e870: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66   # NOTE: Check f
e880: 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 73  or past releases
e890: 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e   of System.Data.
e8a0: 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69  SQLite in the di
e8b0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23  rectory..      #
e8c0: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64         contained
e8d0: 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e   in the "System.
e8e0: 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76  Data.SQLite" env
e8f0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
e900: 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20  e, if..      #
e910: 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20       present...
e920: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
e930: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
e940: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61  :env(System.Data
e950: 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a  .SQLite)] && \..
e960: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
e970: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28  g length $::env( e980: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi e990: 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b te)] > 0} then { e9a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e9b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui e9c0: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 ld the fully qua e9d0: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 lified directory e9e0: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 where the neces e9f0: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 sary.. # ea00: 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 components ea10: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data ea20: 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 .SQLite should b ea30: 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 e found... ea40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set ea50: 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 directory [file ea60: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil ea70: 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. ea80: 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73$::env(Sys
ea90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
eaa0: 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 73   [getReleaseVers
eab0: 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  ion]]]....
eac0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel ead0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. eae0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- eaf0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S eb00: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit eb10: 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d e release \"" \. eb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 .$di
eb30: 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22  rectory "\"... "
eb40: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ]....        if
eb50: 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c  {[isReleaseAvail
eb60: 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20  able $directory eb70: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 platform]} then eb80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if eb90: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length eba0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d$platform] == 0}
ebb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ebc0: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
ebd0: 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20  m unknown..
ebe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
ebf0: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20      if {$select ec00: 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 && [matchPlatfor ec10: 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 m$platform]} th
ec20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
ec30: 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69    set ::build_di
ec40: 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f  rectory $directo ec50: 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ry.... ec60: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
ec70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
ec80: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24  s, selected (" $ec90: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. eca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r ecb0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. ecc0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput ece0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ecf0: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $ed00: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. ed10: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. ed20: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ed30: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs ed40: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d$channel no\n...
ed50: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
ed60: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d  ch path [lsort -
ed70: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65  decreasing [file
ed80: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79   list $directory ed90: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 *]] {.. eda0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex edb0: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b ists$path] && [
edc0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79  file isdirectory
edd0: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d   $path]} then {. ede0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t edf0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
ee00: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ee20: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
ee30: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
ee40: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22  Lite release \""
ee50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ee60: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e        $path "\". ee70: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... ee80: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 if {[isRe ee90: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 leaseAvailable$
eea0: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20  path platform]}
eeb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
eec0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
eed0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat eee0: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e form] == 0} then eef0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. ef00: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f set platfo ef10: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 rm unknown.. ef20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... ef30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ef40: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
ef50: 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24  [matchPlatform $ef60: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 platform]} then ef70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. ef80: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 set ::build ef90: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 _directory$path
efa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
efb0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha efc0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs efd0: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 "yes, selected efe0: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
eff0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
f000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
f010: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
f020: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f040: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f050: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye f060: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 s ("$platform "
f070: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  )\n"]..
f080: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
f090: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
f0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f0b0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f0c0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 no\n.. f0d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. f0e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. f0f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. f100: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. f110: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
f120: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f130: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
f140: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65   "---- environme
f150: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79  nt variable \"Sy
f160: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f170: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20  \" is not " \..
f180: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c             "set,
f190: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20   skipping check
f1a0: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c  for releases...\
f1b0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  n"]..      }....
f1c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
f1d0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
f1e0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
f1f0: 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63  QLiteLibrary { c
f200: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20  hannel } {..
f210: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f220: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking f230: 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 for SQLite core f240: 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a library... ".... f250: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch f260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje f270: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags f280: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. f290: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste f2a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ f2b0: 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 Lite3 SQLiteVers f2c0: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver f2d0: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then f2e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. f2f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C f300: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu f310: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was f320: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m f330: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. f340: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to f350: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # f360: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s f370: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
f380: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
f390: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
f3a0: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
f3b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
f3c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f3d0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
f3e0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
f3f0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
f400: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
f410: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
f420: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
f430: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
f440: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
f450: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
f460: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
f470: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
f480: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f490: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
f4a0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c  Lite.SQLite3 SQL
f4b0: 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20  iteSourceId..
f4c0: 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d       } sourceId]
f4d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f4e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f4f0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c   # NOTE: We fail
f500: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the
f510: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64  Fossil source id
f520: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20  entifier...
f530: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f540: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75    set sourceId u
f550: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  nknown..
f560: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
f570: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
f580: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74  Check if the ret
f590: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75  urned Fossil sou
f5a0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77  rce identifier w
f5b0: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20  as null.  If..
f5c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f        #       so
f5d0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74  , make it easy t
f5e0: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20  o spot...
f5f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
f600: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $f610: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} f620: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f630: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e set sourceId n f640: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ull.. }.. f650: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. f660: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes f670: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 , the SQLite cor f680: 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 e library appear f690: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c s to be availabl f6a0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. f6b0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr f6c0: 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 aint SQLite.... f6d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
f6e0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f6f0: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69  s "yes (" $versi f700: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 on " "$sourceId
f710: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d   ")\n"]..      }
f720: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
f730: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel f740: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 no\n.. }.. f750: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro f760: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite f770: 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 Interop { channe f780: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 l } {.. tpu f790: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
f7a0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
f7b0: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
f7c0: 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  sembly... "....
f7d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
f7e0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
f7f0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
f800: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
f810: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
f820: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
f830: 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73  ite3 InteropVers
f840: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
f850: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
f860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
f870: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
f880: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
f890: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
f8a0: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
f8b0: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
f8c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
f8d0: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
f8e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
f8f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve f900: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the f910: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s f920: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. f930: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... f940: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f950: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt f960: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo f970: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden f980: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S f990: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # f9a0: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr f9b0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. f9c0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca f9d0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. f9e0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - f9f0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic fa00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. fa10: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ fa20: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 Lite.SQLite3 Int fa30: 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 eropSourceId.. fa40: 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 } sourceId fa50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. fa60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. fa70: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 # NOTE: We fai fa80: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 led to query the fa90: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i faa0: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 dentifier... fab0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. fac0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId fad0: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. fae0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. faf0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: fb00: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 Check if the re fb10: 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f turned Fossil so fb20: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier fb30: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 was null. If.. fb40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s fb50: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 o, make it easy fb60: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 to spot... fb70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if fb80: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length fb90: 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d$sourceId] == 0}
fba0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
fbb0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
fbc0: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d  null..        }.
fbd0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
fbe0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65        # NOTE: Be
fbf0: 66 6f 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64  fore actually ad
fc00: 64 69 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f  ding the test co
fc10: 6e 73 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73  nstraint, make s
fc20: 75 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ure the..
fc30: 20 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e   #       version
fc40: 20 69 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20   is valid (i.e.
fc50: 6e 6f 74 20 6a 75 73 74 20 74 68 61 74 20 77 65  not just that we
fc60: 20 63 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29   could query it)
fc70: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
fc80: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 73 69        if {$versi fc90: 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 on ne "null"} th fca0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. fcb0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N fcc0: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ fcd0: 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass fce0: 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f embly appears to fcf0: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a be available... fd00: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. fd10: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr fd20: 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 aint SQLiteInter fd30: 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 op.... fd40: 73 65 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a set answer yes.. fd50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { fd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set fd70: 61 6e 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 answer no.. fd80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... fd90: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
fda0: 61 70 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77  appendArgs $answ fdb0: 65 72 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e er " ("$version
fdc0: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22   " " $sourceId " fdd0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 )\n"].. } e fde0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t fdf0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
fe00: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
fe10: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
fe20: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65  checkForSQLiteDe
fe30: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63  fineConstant { c
fe40: 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d  hannel name } {.
fe50: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch fe60: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg fe70: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 s \.. " fe80: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo fe90: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ fea0: 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 Lite define cons feb0: 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c tant \""$name \
fec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e  ..          "\".
fed0: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  .. "]....      i
fee0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
fef0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
ff00: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
ff10: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
ff20: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
ff30: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44  SQLite.SQLite3 D
ff40: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
ff50: 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f        } defineCo
ff60: 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74  nstants] == 0} t
ff70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
ff80: 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61  f {[lsearch -exa
ff90: 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69  ct -nocase $defi ffa0: 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d neConstants$nam
ffb0: 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b  e] != -1} then {
ffc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
ffd0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
ffe0: 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e   Yes, this defin
fff0: 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65  e constant was e
10000 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20  nabled when the
10010 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..
10020 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d     #       assem
10030 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  bly was compiled
10040 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
10050 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
10060 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
10070 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65  rgs [getSQLiteDe
10080 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66  fineConstantPref
10090 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  ix] $name].... 100a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
100b0 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
100c0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
100d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
100e0 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. 100f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10100 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10110 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10120 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20   error\n..
10130 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
10140 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d   proc getDateTim
10150 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a  eFormat { {timeZ
10160 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  one true} } {..
10170 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
10180 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
10190 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75  dure simply retu
101a0 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74  rns the "default
101b0 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  " DateTime forma
101c0 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20  t used..      #
101d0 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73        by the tes
101e0 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
101f0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
10200 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65  fo exists ::date
10210 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20  time_format] &&
10220 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
10230 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64  ring length $::d 10240 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 atetime_format] 10250 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 10260 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10270 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t 10280 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 he manually over 10290 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 ridden value for 102a0 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f the DateTime fo 102b0 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 rmat... # 102c0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 102d0 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72$::datetime_for
102e0 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  mat..      } els
102f0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
10300 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10310 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30  Return an ISO860
10320 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
10330 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  t compatible wit
10340 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20  h SQLite,..
10350 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65     #       Syste
10360 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61  m.Data.SQLite, a
10370 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nd suitable for
10380 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77  round-tripping w
10390 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ith the..
103a0 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d   #       DateTim
103b0 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66  e class of the f
103c0 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68  ramework.  If th
103d0 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e  is value is chan
103e0 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ged,..        #
103f0 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65        various te
10400 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20  sts may fail...
10410 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10420 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
10430 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
10440 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20      "yyyy-MM-dd
10450 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
10460 22 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f  " [expr {$timeZo 10470 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d ne ? "K" : ""}]] 10480 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 10490 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 104a0 74 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b tDateTimeTicks { 104b0 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22 value {local "" 104c0 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d } {default ""} } 104d0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 104e0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
104f0 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  lue] == 0} then
10500 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
10510 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20  n $default.. 10520 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 10530 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 10540 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 set dateTime 10550 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - 10560 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20 create \.. 10570 20 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72 -parameter 10580 74 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69 types [list Stri 10590 6e 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61 ng String IForma 105a0 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20 tProvider \.. 105b0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 105c0 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61 Globalization.Da 105d0 74 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61 teTimeStyles] Da 105e0 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63 teTime ParseExac 105f0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 10600 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65$value [getDate
10610 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c  TimeFormat] null
10620 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73   AdjustToUnivers
10630 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74  al]..      }]} t
10640 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
10650 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a  eturn $default.. 10660 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 10670 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 if {[string is 10680 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20 boolean -strict 10690 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d$local]} then {.
106a0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
106b0 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e  eTime [object in
106c0 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74  voke -create Dat
106d0 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e  eTime SpecifyKin
106e0 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d \..
106f0 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d   $dateTime Utc]. 10700 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 10710 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 10720 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
10730 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d  dateTime Ticks].
10740 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
10750 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68    if {$local} th 10760 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 10770 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 turn [object inv 10780 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f oke$dateTime To
10790 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d  LocalTime.Ticks]
107a0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
107b0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
107c0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
107d0 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76  $dateTime ToUniv 107e0 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d ersalTime.Ticks] 107f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 10800 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 10810 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62 tProperties { ob 10820 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b ject varName } { 10830 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 10840 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74$varName propert
10850 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74  ies....      set
10860 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20   count 0..
10870 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d  set names [list]
10880 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69  ....      if {[i
10890 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f  sObjectHandle $o 108a0 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63 bject] &&$objec
108b0 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65  t ne "null"} the
108c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61  n {..        eva
108d0 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20  l lappend names
108e0 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20  [object members
108f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d  \..            -
10900 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70  membertypes Prop
10910 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24  erty -nameonly $10920 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20 object].... 10930 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 eval lappend 10940 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65 names [object me 10950 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 mbers \.. 10960 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65 -membertype 10970 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c s Field -nameonl 10980 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20 y$object]..
10990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72    }....      for
109a0 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73  each name $names 109b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 109c0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 109d0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 109e0 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b e -objectflags + 109f0 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63 NoDispose$objec
10a00 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20  t $name.. 10a10 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 } value] == 0} 10a20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10a30 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 if {[isObjectH 10a40 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26 andle$value] &&
10a50 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c   $value ne "null 10a60 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 10a70 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 set error 10a80 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e null; object in 10a90 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 10aa0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 10ab0 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68 -marsh 10ac0 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c alflags +NoHandl 10ad0 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 e Interpreter.Ge 10ae0 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 tActive \.. 10af0 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62 AddOb 10b00 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b jectReference Ok 10b10 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d$value error...
10b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
10b30 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28  pend properties(
10b40 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24  objects) [list $10b50 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 name$value]..
10b60 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
10b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61  ..            la
10b80 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
10b90 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24  (values) [list $10ba0 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 name$value]..
10bb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10bc0 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e         incr coun
10bd0 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  t..        } els
10be0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  e {..          l
10bf0 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65  append propertie
10c00 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20  s(errors) [list
10c10 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f  $name$::errorCo
10c20 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  de]..        }..
10c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10c40 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a   return $count.. 10c50 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 10c60 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 oc getAllPropert 10c70 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72 ies { object var 10c80 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 Name } {.. 10c90 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
10ca0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   properties..
10cb0 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62     set value $ob 10cc0 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68 ject.... wh 10cd0 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20 ile {true} {.. 10ce0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 10cf0 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 exists properti 10d00 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d es(seenObjects)] 10d10 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 10d20 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72$value ni $pr 10d30 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a operties(seenObj 10d40 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 ects)} then {.. 10d50 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70 getProp 10d60 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72 erties$value pr
10d70 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..
10d80 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70      lappend prop
10d90 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63  erties(seenObjec
10da0 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20  ts) $value.. 10db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 10dc0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 10dd0 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 ts properties(ob 10de0 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d jects)]} then {. 10df0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b . break 10e00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 10e10 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e if {[llen 10e20 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28 gth$properties(
10e30 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20  objects)] == 0}
10e40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10e50 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69    unset properti
10e60 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65  es(objects); bre
10e70 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ak..        }...
10e80 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c  .        set val
10e90 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64  ue [lindex [lind
10ea0 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f  ex $properties(o 10eb0 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d bjects) 0] end]. 10ec0 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f . set pro 10ed0 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 10ee0 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72 [lrange$proper
10ef0 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20  ties(objects) 1
10f00 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  end]..      }...
10f10 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
10f20 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69   exists properti
10f30 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d  es(seenObjects)]
10f40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10f50 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20    foreach value
10f60 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e  $properties(seen 10f70 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20 Objects) {.. 10f80 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 if {$value
10f90 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e   eq $object} con 10fa0 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 tinue.. 10fb0 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 catch {object d 10fc0 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a ispose$value}..
10fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10fe0 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65       unset prope
10ff0 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74  rties(seenObject
11000 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  s)..      }..
11010 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
11020 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76  getVariables { v
11030 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73  arNames {objects
11040 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
11050 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c     set result [l
11060 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  ist]....      fo
11070 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76  reach varName $v 11080 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 arNames {.. 11090 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 if {[uplevel 110a0 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78 1 [list array ex 110b0 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d ists$varName]]}
110c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
110d0 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65     set arrayName
110e0 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20   $varName.... 110f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65 foreach e 11100 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65 lementName [uple 11110 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61 vel 1 [list arra 11120 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61 y names$arrayNa
11130 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  me]] {..
11140 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70      set name [ap
11150 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e  pendArgs $arrayN 11160 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61 ame ($elementNa
11170 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  me )]..
11180 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20     set varValue
11190 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74  [uplevel 1 [list
111a0 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a   set $name]].... 111b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 111c0 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f$objects && [isO
111d0 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72  bjectHandle $var 111e0 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Value]} then {.. 111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e un 11200 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 11210 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 properties.. 11220 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c getAll 11230 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56 Properties$varV
11240 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d  alue properties.
11250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
11260 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
11270 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72  [list $name [arr 11280 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65 ay get propertie 11290 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s]].. 112a0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 112b0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 112c0 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e result [list$n
112d0 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a  ame $varValue].. 112e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 112f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 11300 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 11310 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56 set varV 11320 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 alue [uplevel 1 11330 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61 [list set$varNa
11340 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me]]....
11350 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26    if {$objects & 11360 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c & [isObjectHandl 11370 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68 e$varValue]} th
11380 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
11390 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
113a0 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a  ain properties..
113b0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41              getA
113c0 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61  llProperties $va 113d0 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 rValue propertie 113e0 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s.... 113f0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 11400 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b [list$varName [
11410 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72  array get proper
11420 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20  ties]]..
11430 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
11440 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
11450 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61  result [list $va 11460 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d rName$varValue]
11470 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
11480 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11490 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
114a0 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d  n $result.. } 114b0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e ..... proc en 114c0 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b umerableToList { 114d0 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d enumerable } {. 114e0 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 114f0 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 t [list].... 11500 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 11510 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 ngth$enumerable
11520 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65  ] == 0 || $enume 11530 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d rable eq "null"} 11540 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11550 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
11560 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11570 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
11580 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e   -alias item $en 11590 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 umerable {.. 115a0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 115b0 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 length$item] >
115c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
115d0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
115e0 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72  ult [$item ToStr 115f0 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d ing].. }. 11600 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11610 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
11620 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
11630 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74  proc catchAndRet
11640 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74  urn { script {st
11650 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20  ackTrace false}
11660 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20  {strict true} }
11670 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11680 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61    # NOTE: Evalua
11690 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72  te the script pr
116a0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
116b0 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f  ller in their co
116c0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20  ntext,..      #
116d0 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20        capturing
116e0 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20  both the result
116f0 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63  and the return c
11700 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ode...      #..
11710 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
11720 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20  atch {uplevel 1
11730 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d  $script} result] 11740 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11750 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 # NOTE: Did t 11760 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 he script provid 11770 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 11780 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 NOT raise an er 11790 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ror?.. #.. 117a0 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 if {$strict
117b0 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c   && $code == 0 | 117c0 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63 | !$strict && $c 117d0 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b ode != 1} then { 117e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 117f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 # NOTE: Suc 11800 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 cess. Return a 11810 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 list with the re 11820 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 turn code and th 11830 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 e result... 11840 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 11850 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
11860 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20   $result].. 11870 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 } elseif {$stac
11880 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a  kTrace} then {..
11890 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
118a0 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75     # NOTE: Failu
118b0 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20  re.  Our caller
118c0 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61  wants a full sta
118d0 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70  ck trace (if app
118e0 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20  licable),..
118f0 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72     #       retur
11900 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  n a list with th
11910 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  e return code an
11920 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72  d the result ver
11930 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
11940 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
11950 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72  n [list $code$r
11960 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20  esult]..      }
11970 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
11980 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
11990 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72  E: Failure.  Our
119a0 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74   caller does not
119b0 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61   want a full sta
119c0 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20  ck trace (if..
119d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70        #       ap
119e0 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72  plicable), retur
119f0 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  n a list with th
11a00 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74  e return code, t
11a10 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..
11a20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66    #       code f
11a30 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  or the interpret
11a40 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f  er, and the erro
11a50 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20  r message up to
11a60 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
11a70 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65       point where
11a80 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65   the stack trace
11a90 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a   should start...
11aa0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11ab0 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
11ac0 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f  $code$::errorCo
11ad0 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  de \..
11ae0 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d    [extractSystem
11af0 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74  DataSQLiteExcept
11b00 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75  ionMessage $resu 11b10 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 lt]].. }.. 11b20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 11b30 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 c compileCSharpW 11b40 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ith {.. 11b50 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 text memory s 11b60 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65 ymbols strict re 11b70 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72 sultsVarName err 11b80 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e orsVarName fileN 11b90 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ames.. 11ba0 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 args } {.. 11bb0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11bc0 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 20 E: Since we are 11bd0 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 69 going to use thi 11be0 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 s method name a 11bf0 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20 74 lot, assign it t 11c00 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 o a.. # 11c10 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72 73 variable firs 11c20 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. 11c30 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65 72 set add Refer 11c40 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e encedAssemblies. 11c50 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a Add.... #.. 11c60 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 # NOTE: Cr 11c70 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63 6f eate the base co 11c80 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 mmand to evaluat 11c90 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 72 e and add the pr 11ca0 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 0d operty settings. 11cb0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 11cc0 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 hat are almost a 11cd0 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79 20 lways needed by 11ce0 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20 28 our unit tests ( 11cf0 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d 0d i.e. the System. 11d00 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 11d10 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61 nd System.Data a 11d20 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 ssembly referenc 11d30 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 es)... #.. 11d40 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 set command 11d50 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 11d60 20 20 20 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 compileCShar 11d70 70 20 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 p$text $memory 11d80 24 73 79 6d 62 6f 6c 73 20 24 73 74 72 69 63 74$symbols $strict 11d90 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 results errors 11da0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64 \..$ad
11db0 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64  d System.dll $ad 11dc0 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c d System.Data.dl 11dd0 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 54 72 l$add System.Tr
11de0 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c  ansactions.dll \
11df0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64 64  ..          $add 11e00 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d System.Xml.dll] 11e10 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11e20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 # NOTE: Add a 11e30 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 ll the provided 11e40 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61 73 file names as as 11e50 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 sembly reference 11e60 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 11e70 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 11e80 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b ame$fileNames {
11e90 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  ..        lappen
11ea0 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b  d command $add [ 11eb0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 11ec0 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 e$fileName]..
11ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
11ee0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
11ef0 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61 72  Add the extra ar
11f00 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c  guments, if any,
11f10 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   to the command
11f20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20  to evaluate...
11f30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61      #..      eva
11f40 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e  l lappend comman
11f50 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20  d $args.... 11f60 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11f70 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 : Alias the comp 11f80 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c iler local resul 11f90 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76 61 ts and errors va 11fa0 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a riables to the.. 11fb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 11fc0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f riable names pro 11fd0 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 11fe0 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 11ff0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 12000 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 73 length$results
12010 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  VarName] > 0} th
12020 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
12030 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56 61  var 1 $resultsVa 12040 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 rName results.. 12050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12060 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 12070 74 68 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d th$errorsVarNam
12080 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
12090 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20          upvar 1
120a0 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65  $errorsVarName e 120b0 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 7d 0d 0a rrors.. }.. 120c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 120d0 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 # NOTE: Evaluat 120e0 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 e the constructe 120f0 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 d [compileCSharp 12100 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 ] command and re 12110 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 turn the.. 12120 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d # result.. 12130 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12140 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 eval$command..
12150 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
12160 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66  c isMemoryDb { f
12170 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  ileName } {..
12180 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
12190 54 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69  TE: Is the speci
121a0 66 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69  fied database fi
121b0 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61  le name really a
121c0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  n in-memory data
121d0 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  base?..      #..
121e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
121f0 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71  pr {$fileName eq 12200 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c ":memory:" || \ 12210 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 12220 69 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e ing range$fileN
12230 61 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69  ame 0 12] eq "fi
12240 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a  le::memory:"}]..
12250 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
12260 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b  oc isTableInDb {
12270 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64   name {varName d
12280 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  b} } {..      #.
12290 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
122a0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
122b0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
122c0 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
122d0 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
122e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
122f0 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74  caller.  It cont
12300 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  ains the databas
12310 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
12320 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65  dle that will be
12330 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
12340 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute
12350 74 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74  the query used t
12360 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74  o determine if t
12370 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69  he named table i
12380 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
12390 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74   present in that
123a0 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
123b0 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
123c0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a   1 $varName db.. 123d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 123e0 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 123f0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 sqlite_master t 12400 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e able to determin 12410 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 e if the named t 12420 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 able is.. # 12430 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 present i 12440 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d n the database.. 12450 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12460 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 set sql {.. 12470 20 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 SELECT COUNT( 12480 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d *) FROM sqlite_m 12490 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 aster WHERE type 124a0 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e = 'table' AND n 124b0 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 ame = ?;.. 124c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 124d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 124e0 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 rn non-zero if t 124f0 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 he named table i 12500 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 s present... 12510 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 12520 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. 12530 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 [sql execute 12540 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 -execute scalar 12550 24 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20 70$db $sql [list p 12560 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 aram1 String$na
12570 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20  me]] > 0..
12580 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
12590 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61    proc getDbDefa
125a0 75 6c 74 50 61 67 65 53 69 7a 65 20 7b 7d 20 7b  ultPageSize {} {
125b0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
125c0 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47  executeSql "PRAG
125d0 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 20 73  MA page_size;" s
125e0 63 61 6c 61 72 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  calar]..    }...
125f0 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62  ..    proc getDb
12600 44 65 66 61 75 6c 74 43 61 63 68 65 53 69 7a 65  DefaultCacheSize
12610 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74   {} {..      ret
12620 75 72 6e 20 5b 65 78 65 63 75 74 65 53 71 6c 20  urn [executeSql
12630 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
12640 7a 65 3b 22 20 73 63 61 6c 61 72 5d 0d 0a 20 20  ze;" scalar]..
12650 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12660 20 75 73 65 4c 65 67 61 63 79 44 62 50 61 67 65   useLegacyDbPage
12670 41 6e 64 43 61 63 68 65 53 69 7a 65 73 20 7b 20  AndCacheSizes {
12680 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  varName } {..
12690 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
126a0 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65  TE: Refer to the
126b0 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61   specified varia
126c0 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20  ble (e.g. "db")
126d0 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
126e0 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20  f our..      #
126f0 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74       caller.  It
12700 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61   contains the da
12710 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12720 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69  n handle that wi
12730 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ll be..      #
12740 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65       used to exe
12750 63 75 74 65 20 71 75 65 72 69 65 73 20 75 73 65  cute queries use
12760 64 20 74 6f 20 73 65 74 20 74 68 65 20 70 61 67  d to set the pag
12770 65 20 61 6e 64 20 63 61 63 68 65 20 73 69 7a 65  e and cache size
12780 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
12790 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 127a0 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 ame db.... 127b0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 sql execute$db
127c0 7b 0d 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  {..        PRAGM
127d0 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30  A page_size = 10
127e0 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 50 52 41  24;..        PRA
127f0 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 3d  GMA cache_size =
12800 20 32 30 30 30 3b 0d 0a 20 20 20 20 20 20 7d 0d   2000;..      }.
12810 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
12820 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
12830 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20     [sql execute
12840 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar
12850 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 67 65  $db "PRAGMA page 12860 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a 20 20 20 20 _size;"] \.. 12870 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 [sql execu 12880 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c te -execute scal 12890 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 ar$db "PRAGMA c
128a0 61 63 68 65 5f 73 69 7a 65 3b 22 5d 5d 0d 0a 20  ache_size;"]]..
128b0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
128c0 63 20 65 78 74 72 61 63 74 53 79 73 74 65 6d 44  c extractSystemD
128d0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
128e0 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76 61 6c 75  onMessage { valu
128f0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  e } {..      #..
12900 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
12910 20 74 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 66   the string conf
12920 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f  orms to format o
12930 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63  f the normal exc
12940 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  eption..      #
12950 20 20 20 20 20 20 65 72 72 6f 72 20 73 74 72 69        error stri
12960 6e 67 73 2c 20 65 78 74 72 61 63 74 20 61 6e 64  ngs, extract and
12970 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65   return only the
12980 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a   error message..
12990 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f        #       po
129a0 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20  rtion itself...
129b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
129c0 74 20 70 61 74 74 65 72 6e 73 20 5b 6c 69 73 74  t patterns [list
129d0 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65   \..      {Syste
129e0 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c  m\.Data\.SQLite\
129f0 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  .SQLiteException
12a00 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29 3a   $$0x80004005$$:
12a10 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74   (.+?)  (?: )?at
12a20 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73 74  } \..      {Syst
12a30 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65  em\.Data\.SQLite
12a40 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  \.SQLiteExceptio
12a50 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f  n: (.+?)  (?: )?
12a60 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 45 61  at} \..      {Ea
12a70 67 6c 65 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73  gle\._Components
12a80 5c 2e 50 75 62 6c 69 63 5c 2e 53 63 72 69 70 74  \.Public\.Script
12a90 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29  Exception: (.+?)
12aa0 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a    (?: )?at}]....
12ab0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61        foreach pa
12ac0 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 73 20  ttern $patterns 12ad0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 12ae0 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74 65 regexp --$patte
12af0 72 6e 20 24 76 61 6c 75 65 20 64 75 6d 6d 79 20  rn $value dummy 12b00 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 6e 20 7b message]} then { 12b10 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 12b20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 20 message [string 12b30 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c map [list \r\n \ 12b40 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 n] [string trim 12b50 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 20 20 20$message]]..
12b60 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65 73 20        set lines
12b70 5b 73 70 6c 69 74 20 24 6d 65 73 73 61 67 65 20  [split $message 12b80 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 12b90 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c if {[llength$l
12ba0 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74 68 65 6e  ines] == 2} then
12bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12bc0 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 6e  if {[lindex $lin 12bd0 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e 64 65 78 es 0] eq [lindex 12be0 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 68 65 6e$lines 1]} then
12bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12c00 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78    return [lindex
12c10 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20 20 20 20   $lines 0].. 12c20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 12c30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 12c40 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 6c 69 6e [appendArgs [lin 12c50 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 22 20 dex$lines 0] "
12c60 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20 24 6c 69  -- " [lindex $li 12c70 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20 20 20 20 nes 1]].. 12c80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 12c90 20 20 72 65 74 75 72 6e 20 24 6d 65 73 73 61 67 return$messag
12ca0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
12cb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
12cc0 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20  eturn $value.. 12cd0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 12ce0 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d trimSql { sql } 12cf0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e {.. return 12d00 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d [regsub -all -- 12d10 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 {\s+} [string t 12d20 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a rim$sql] " "]..
12d30 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
12d40 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20  oc executeSql {
12d50 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e  sql {execute non
12d60 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d  e} {format none}
12d70 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d   {fileName ""} }
12d80 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
12d90 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi 12da0 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 leName] == 0} th 12db0 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 en {set fileName 12dc0 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 :memory:}.. 12dd0 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e setupDb$fileN
12de0 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20  ame "" "" "" ""
12df0 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66  "" false false f
12e00 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20 74 72  alse false db tr
12e10 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20  ue....      try
12e20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
12e30 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69  n [uplevel 1 [li
12e40 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
12e50 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
12e60 78 65 63 75 74 65 20 24 65 78 65 63 75 74 65 20  xecute $execute 12e70 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 -format$format
12e80 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20  $db$sql]]..
12e90 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20    } finally {..
12ea0 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65         set conne
12eb0 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
12ec0 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ection]....
12ed0 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20     try {..
12ee0 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f 12ef0 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false 12f00 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. 12f10 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 } finally 12f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 12f30 65 63 74 20 66 6c 61 67 73 20 24 63 6f 6e 6e 65 ect flags$conne
12f40 63 74 69 6f 6e 20 2d 4e 6f 44 69 73 70 6f 73 65  ction -NoDispose
12f50 3b 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69  ; freeDbConnecti
12f60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }..
12f70 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
12f80 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e 6f  ..    proc hasNo
12f90 46 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 20  Flags { varName
12fa0 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  none } {..
12fb0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 12fc0 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 flags.... 12fd0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 12fe0 73 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b s flags]} then { 12ff0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 13000 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. 13010 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 13020 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 ing length$flag
13030 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
13040 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
13050 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
13060 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65  .      if {$none 13070 20 26 26 20 24 66 6c 61 67 73 20 65 71 20 22 4e &&$flags eq "N
13080 6f 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  one"} then {..
13090 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
130a0 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
130b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
130c0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
130d0 70 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 69  proc getConnecti
130e0 6f 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61  onFlags { fileNa
130f0 6d 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 20  me flags {quiet
13100 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
13110 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
13120 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68  E: Figure out wh
13130 69 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ich database fil
13140 65 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63  e name or connec
13150 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 73  tion string thes
13160 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
13170 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
13180 73 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20  s will actually
13190 61 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 20  apply to.  This
131a0 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79  is not necessary
131b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
131c0 69 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 65  in quiet mode be
131d0 63 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72  cause this infor
131e0 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  mation is only u
131f0 73 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d  sed for logging.
13200 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
13210 6e 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 72  nd reporting pur
13220 70 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  poses...      #.
13230 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui 13240 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 13250 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 13260 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 length$fileName
13270 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
13280 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74           set dat
13290 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67  abase [appendArg
132a0 73 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22  s "file name \""
132b0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a   $fileName \"].. 132c0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 132d0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 132e0 3a 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26 20 :dataSource] && 132f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 21 \.. ! 13300 5b 61 72 72 61 79 20 65 78 69 73 74 73 20 3a 3a [array exists :: 13310 64 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 dataSource]} the 13320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 13330 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 et database [app 13340 65 6e 64 41 72 67 73 20 22 64 61 74 61 20 73 6f endArgs "data so 13350 75 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 urce \""$::data
13360 53 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20  Source \"]..
13370 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
13380 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61          set data
13390 62 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a  base <unknown>..
133a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
133b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
133c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 65       # NOTE: Eve
133d0 6e 20 74 68 6f 75 67 68 20 74 68 65 72 65 20 69  n though there i
133e0 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f 75 72 63  s only one sourc
133f0 65 20 6f 66 20 66 6c 61 67 73 20 73 6f 20 66 61  e of flags so fa
13400 72 2c 20 74 68 65 79 0d 0a 20 20 20 20 20 20 23  r, they..      #
13410 20 20 20 20 20 20 20 6d 75 73 74 20 62 65 20 63         must be c
13420 6f 6d 62 69 6e 65 64 20 75 73 69 6e 67 20 74 68  ombined using th
13430 65 20 63 6f 72 72 65 63 74 20 73 79 6e 74 61 78  e correct syntax
13440 20 66 6f 72 20 65 6e 75 6d 65 72 61 74 65 64 0d   for enumerated.
13450 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
13460 6c 61 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74  lag values for t
13470 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
13480 6b 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  k...      #..
13490 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f     set flags [co
134a0 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67  mbineFlags $flag 134b0 73 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 s ""].... # 134c0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 134d0 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 Show (and log) t 134e0 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 he local connect 134f0 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 ion flags and th 13500 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 e associated.. 13510 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data 13520 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65 20 source or file 13530 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a name... #.. 13540 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
13550 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
13560 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
13570 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f  ists ::no(emitLo
13580 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d  calFlags)] && \.
13590 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b  .            (![
135a0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
135b0 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 49  (emitLocalFlagsI
135c0 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20  fNone)] || \..
135d0 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73             ![has
135e0 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61  NoFlags flags fa
135f0 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  lse])} then {..
13600 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $13610 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 13620 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 13630 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 13640 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 - local connecti 13650 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
13660 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
13670 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
13680 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e   " [expr {![hasN
13690 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c  oFlags flags fal
136a0 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  se] ? \..
136b0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
136c0 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d  gs \" $flags \"] 136d0 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e : "<none>"}] \n 136e0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 136f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 13700 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 13710 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 Show (and log) t 13720 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 he shared connec 13730 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 tion flags... 13740 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 13750 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
13760 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
13770 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
13780 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53   object invoke S
13790 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
137a0 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
137b0 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d 0a  on SharedFlags..
137c0 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 64          } shared
137d0 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65  Flags] == 0} the
137e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
137f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
13800 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64   ::no(emitShared
13810 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Flags)] && \..
13820 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69              (![i
13830 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
13840 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49  emitSharedFlagsI
13850 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20  fNone)] || \..
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68               ![h
13870 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64  asNoFlags shared
13880 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 68  Flags true])} th
13890 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
138a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 138b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 138c0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 138d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 "---- sha 138e0 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 red connection f 138f0 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 lags for "$data
13900 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  base \..
13910 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22          " are: "
13920 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46   [expr {![hasNoF
13930 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73  lags sharedFlags
13940 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 20   true] ? \..
13950 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
13960 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72  endArgs \" $shar 13970 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c edFlags \"] : "< 13980 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 none>"}] \n].. 13990 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 139a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 139b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 139c0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 139d0 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20 itSharedFlags)] 139e0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 139f0 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 ![info exist 13a00 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 s ::no(emitShare 13a10 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c 61 dFlagsIfUnavaila 13a20 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ble)]} then {.. 13a30 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 13a40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
13a50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a70 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e  "---- shared con
13a80 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f  nection flags fo
13a90 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d  r " $database \. 13aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13ab0 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c " are: <unavail 13ac0 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 able>\n"].. 13ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 13ae0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13af0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 13b00 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 13b10 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 65 64 og) the detected 13b20 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 global connecti 13b30 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e 79 on flags, if any 13b40 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 13b50 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
13b60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
13b70 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
13b80 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c   ::no(emitGlobal
13b90 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Flags)] && \..
13ba0 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66            (![inf
13bb0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d  o exists ::no(em
13bc0 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 4e  itGlobalFlagsIfN
13bd0 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20  one)] || \..
13be0 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f           ![hasNo
13bf0 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69  Flags ::connecti
13c00 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 29  on_flags false])
13c10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13c20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13c30 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13c40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13c50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f "---- glo 13c60 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 bal connection f 13c70 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a 20 lags are: " \.. 13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 13c90 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags 13ca0 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c ::connection_fl 13cb0 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a ags false] ? \.. 13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 [a 13cd0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a 3a ppendArgs \"$::
13ce0 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73  connection_flags
13cf0 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d   \"] : "<none>"}
13d00 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
13d10 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
13d20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
13d30 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65  TE: If there are
13d40 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72   any global (per
13d50 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65   test run) conne
13d60 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72  ction flags curr
13d70 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  ently..      #
13d80 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68       set, use th
13d90 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20  em now (i.e. by
13da0 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77  combining them w
13db0 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72  ith the ones for
13dc0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
13dd0 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29       connection)
13de0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13df0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
13e00 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ts ::connection_
13e10 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  flags]} then {..
13e20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13e30 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69     # NOTE: Combi
13e40 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63  ne and/or replac
13e50 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  e the connection
13e60 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20   flags and then
13e70 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20  show the..
13e80 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 61    #       new va
13e90 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  lue...        #.
13ea0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 6c 61  .        set fla
13eb0 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73  gs [combineFlags
13ec0 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65   $flags$::conne
13ed0 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a  ction_flags]....
13ee0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13ef0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
13f00 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65  (and log) the ne
13f10 77 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e  w effective conn
13f20 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20  ection flags...
13f30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13f40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 13f50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13f60 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 13f70 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 ts ::no(emitComb 13f80 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c inedFlags)] && \ 13f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13fa0 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a (![info exists : 13fb0 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 :no(emitCombined 13fc0 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c FlagsIfNone)] || 13fd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13fe0 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 ![hasNoFlags 13ff0 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 flags false])} t 14000 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14010 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
14020 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
14030 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
14040 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
14050 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f  mbined connectio
14060 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64  n flags for " $d 14070 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 atabase \.. 14080 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are 14090 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 : " [expr {![has 140a0 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 NoFlags flags fa 140b0 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 lse] ? \.. 140c0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 140d0 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 dArgs \"$flags
140e0 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d  \"] : "<none>"}]
140f0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
14100 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
14110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
14120 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 20  eturn $flags.. 14130 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 14140 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 getFlagsPropert 14150 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b y { {flags ""} { 14160 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 14170 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14180 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 # NOTE: Determi 14190 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d 62 ne what the comb 141a0 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e 64 ined (global and 141b0 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 69 local) connecti 141c0 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 141d0 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 flags should b 141e0 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 65 e, possibly quie 141f0 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 tly... #.. 14200 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b set flags [ 14210 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 getConnectionFla 14220 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 75 gs ""$flags $qu 14230 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d iet].... #. 14240 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 14250 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 6c f no global or l 14260 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ocal connection 14270 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 69 flags were speci 14280 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 20 fied, the.. 14290 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 # default 142a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 142b0 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 s should be used 142c0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 74 ; therefore, ret 142d0 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 urn.. # 142e0 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 an empty stri 142f0 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 2e ng in that case. 14300 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14310 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 14320 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 gth$flags] == 0
14330 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14340 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
14350 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
14360 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
14370 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b  n order to check
14380 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   if the default
14390 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
143a0 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 0d   are being used.
143b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
143c0 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74  t is necessary t
143d0 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e 76  o attempt a conv
143e0 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 63  ersion to the ac
143f0 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 0d  tual enumerated.
14400 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
14410 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 68  ype.  Failing th
14420 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 67  at, the check ag
14430 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 6c  ainst the defaul
14440 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d  t value will be.
14450 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
14460 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
14470 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
14480 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ch {..        se
14490 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20  t error null; #
144a0 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 20  IGNORED....
144b0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
144c0 20 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 73   Utility TryPars
144d0 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c 0d  eFlagsEnum "" \.
144e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
144f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
14500 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
14510 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20  Flags "" $flags 14520 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 null true \.. 14530 20 20 20 20 20 20 20 20 20 74 72 75 65 20 74 72 true tr 14540 75 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 ue error.. 14550 7d 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b } value]} then { 14560 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14570 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 14580 65 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 73 65 empting to parse 14590 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 145a0 66 6c 61 67 73 20 63 61 75 73 65 64 20 61 20 73 flags caused a s 145b0 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 cript.. # 145c0 20 20 20 20 20 20 20 65 72 72 6f 72 2e 20 20 45 error. E 145d0 6d 69 74 20 61 20 77 61 72 6e 69 6e 67 20 74 6f mit a warning to 145e0 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 the test log fi 145f0 6c 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d le and continue. 14600 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 14610 20 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 using an emtpy 14620 73 74 72 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d string instead.. 14630 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14640 20 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 tlog [append 14650 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 14660 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 14670 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 G: failed to par 14680 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c se connection fl 14690 61 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ags, error: " \. 146a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ 146b0 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a t$value \n]....
146c0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
146d0 65 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e ""..      }...
146e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
146f0 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  # NOTE: If the c
14700 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 74  ombined flags st
14710 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61  ring could not a
14720 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65  ctually be conve
14730 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  rted..      #
14740 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d 65      to the enume
14750 72 61 74 65 64 20 74 79 70 65 20 69 74 20 69 73  rated type it is
14760 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
14770 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 73  ue, then just us
14780 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
14790 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f 74   it verbatim; ot
147a0 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 65  herwise, just re
147b0 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
147c0 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a  ring.  In that..
147d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
147e0 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  se, the default
147f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14800 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a   will be used...
14810 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
14820 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
14830 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c  h $value] == 0 | 14840 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 66 |$value ne "Def
14850 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  ault"} then {..
14860 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14870 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69    # WARNING: Thi
14880 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74  s returns the st
14890 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 68  ring value of th
148a0 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73  e combined flags
148b0 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23  , not..        #
148c0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e            the en
148d0 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e 20  umerated value.
148e0 20 54 68 69 73 20 69 73 20 62 79 20 64 65 73 69   This is by desi
148f0 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f  gn and should no
14900 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
14910 20 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 64        be changed
14920 20 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 6c   without careful
14930 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 28   consideration (
14940 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20  e.g. it would..
14950 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
14960 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 51    prevent the SQ
14970 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
14980 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69  lass from allowi
14990 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20  ng invalid..
149a0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 5b      #          [
149b0 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d  "magical"] meta-
149c0 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 20  flags)...
149d0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
149e0 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  rn [appendArgs "
149f0 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 5c  Flags=" $flags \ 14a00 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ;].. }.... 14a10 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 14a20 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 14a30 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 oc enableSharedC 14a40 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 ache { channel e 14a50 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c nable {quiet fal 14a60 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 se} } {.. i 14a70 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 14a80 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 14a90 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 14aa0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 14ab0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 14ac0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 14ad0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 14ae0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 14af0 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 3_enable_shared_ 14b00 63 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 cache [expr int( 14b10 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20$enable)]..
14b20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
14b30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14b40 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 14b50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14b60 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
14b70 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
14b80 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
14b90 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65  - call sqlite3_e
14ba0 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
14bb0 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a  he(" $enable \.. 14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 ") 14bd0 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c ... ok: "$resul
14be0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t \n]..        }
14bf0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
14c00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$14c10 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 14c20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
14c30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
14c40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
14c50 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
14c60 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
14c70 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65  hared_cache(" $e 14c80 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 nable \.. 14c90 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 ")... err 14ca0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 or: " \n\t$resu
14cb0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
14cc0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
14cd0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
14ce0 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20  etupDb {..
14cf0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b        fileName {
14d00 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69  mode ""} {dateTi
14d10 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61  meFormat ""} {da
14d20 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b  teTimeKind ""} {
14d30 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20  flags ""}..
14d40 20 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 22         {extra ""
14d50 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d  } {qualify true}
14d60 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b   {delete true} {
14d70 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20  uri false}..
14d80 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61          {tempora
14d90 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d  ry true} {varNam
14da0 65 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c  e db} {quiet fal
14db0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
14dc0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
14dd0 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75  First, see if ou
14de0 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71  r caller has req
14df0 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d  uested an in-mem
14e00 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  ory database...
14e10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
14e20 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65  t isMemory [isMe
14e30 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65  moryDb $fileName 14e40 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 14e50 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 14e60 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 now, all test da 14e70 74 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 tabases used by 14e80 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 the test suite a 14e90 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 re placed.. 14ea0 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 # into th 14eb0 65 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 e database direc 14ec0 74 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 tory. Each data 14ed0 62 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 base and related 14ee0 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 files.. # 14ef0 20 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 used by a 14f00 74 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 test should be c 14f10 6c 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 leaned up by tha 14f20 74 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 t test using the 14f30 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14f40 22 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 "cleanupDb" proc 14f50 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 edure, below... 14f60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 14f70 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
14f80 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b  $qualify} then { 14f90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi 14fa0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 leName [file joi 14fb0 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 n [getDatabaseDi 14fc0 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 rectory] [file t 14fd0 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ail$fileName]].
14fe0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14ff0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
15000 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64  E: By default, d
15010 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78  elete any pre-ex
15020 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database
15030 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69  with the same fi
15040 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
15050 20 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72    name if it cur
15060 72 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a  rently exists...
15070 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
15080 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26  f {!$isMemory && 15090 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c$delete && [fil
150a0 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 150b0 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 150c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 150d0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 150e0 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 to delete any pr 150f0 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 e-existing datab 15100 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d ase with the sam 15110 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 e file.. 15120 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 # name... 15130 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15140 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 15150 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
15160 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  ame} error]} the
15170 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
15180 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
15190 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
151a0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
151b0 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74  the file, report
151c0 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   why...
151d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
151e0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 151f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 15200 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
15210 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
15220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15230 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
15240 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  G: failed to del
15250 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ete database fil
15260 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 15270 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15280 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 "\" during se 15290 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e tup, error: " \n 152a0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
152b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
152c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
152d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
152e0 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
152f0 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
15300 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
15310 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
15320 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
15330 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
15340 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f  .  The handle to
15350 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61   the opened data
15360 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f  base will be sto
15370 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
15380 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
15390 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a   1 $varName db.. 153a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 153b0 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 # NOTE: Start b 153c0 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e uilding the conn 153d0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 ection string. 153e0 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 The only require 153f0 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 d portion.. 15400 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 # of the 15410 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 15420 67 20 69 73 20 74 68 65 20 64 61 74 61 20 73 6f g is the data so 15430 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 urce, which cont 15440 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 ains the.. 15450 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 # database 15460 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c file name itsel 15470 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 f. If our calle 15480 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 r wants to use a 15490 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 URI as.. # 154a0 20 20 20 20 20 20 20 74 68 65 20 64 61 74 61 20 the data 154b0 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 source, use the 154c0 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 FullUri connecti 154d0 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 on string proper 154e0 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 ty to.. # 154f0 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 prevent the 15500 20 64 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 data source str 15510 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d ing from being m 15520 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 angled... # 15530 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 .. if {$uri
15540 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15550 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e    set connection
15560 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65   {FullUri=${file 15570 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 Name}}.. } 15580 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15590 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b set connection { 155a0 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 Data Source=${fi
155b0 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20  leName}}..
155c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
155d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63      # NOTE: Sinc
155e0 65 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  e this procedure
155f0 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20   has no special
15600 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61  knowledge of wha
15610 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20  t the default..
15620 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
15630 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20  ting is for the
15640 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65  ToFullPath conne
15650 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f  ction string pro
15660 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20  pery, always..
15670 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20      #       add
15680 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f  the value we kno
15690 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63  w about to the c
156a0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
156b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
156c0 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
156d0 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68  ion {;ToFullPath
156e0 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a  =${qualify}}.... 156f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 15700 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 NOTE: If our ca 15710 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 ller specified a 15720 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 journal mode, a 15730 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 dd the necessary 15740 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 portion.. 15750 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 # of the c 15760 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 15770 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 15780 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15790 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 g length$mode]
157a0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
157b0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
157c0 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c  ection {;Journal
157d0 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a   Mode=${mode}}.. 157e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 157f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 15800 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller 15810 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 specified a Date 15820 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 Time format, add 15830 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a the necessary.. 15840 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f # po 15850 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e rtion of the con 15860 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e nection string n 15870 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 15880 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 15890 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 length$dateTime
158a0 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65  Format] > 0} the
158b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70  n {..        app
158c0 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b  end connection {
158d0 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d  ;DateTimeFormat=
158e0 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  ${dateTimeFormat 158f0 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 15900 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 15910 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal 15920 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 ler specified a 15930 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 DateTimeKind, ad 15940 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 d the necessary 15950 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 portion.. # 15960 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f of the co 15970 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 nnection string 15980 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 now... #.. 15990 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 159a0 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d length$dateTim
159b0 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e  eKind] > 0} then
159c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
159d0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
159e0 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64  DateTimeKind=${d 159f0 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 ateTimeKind}}.. 15a00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 15a10 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15a20 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 Figure out what 15a30 20 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 the final flags 15a40 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 for this connec 15a50 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e tion need to be. 15a60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15a70 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 set flags [getC 15a80 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 onnectionFlags$
15a90 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20  fileName $flags 15aa0 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20$quiet]....
15ab0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
15ac0 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
15ad0 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53  specified some S
15ae0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
15af0 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20  lags, add the..
15b00 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63       #       nec
15b10 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f  essary portion o
15b20 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
15b30 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
15b40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
15b50 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
15b60 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65  $flags] > 0} the 15b70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app 15b80 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { 15b90 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d ;Flags=${flags}}
15ba0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
15bb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15bc0 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
15bd0 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65  r specified an e
15be0 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20  xtra payload to
15bf0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
15c00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
15c10 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20  ring, append it
15c20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
15c30 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
15c40 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20   length $extra] 15c50 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 15c60 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn 15c70 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 ection \;$extra
15c80 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
15c90 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15ca0 54 45 3a 20 46 6f 72 20 63 6c 61 72 69 74 79 2c  TE: For clarity,
15cb0 20 61 70 70 65 6e 64 20 61 20 66 69 6e 61 6c 20   append a final
15cc0 73 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 68 65  semicolon to the
15cd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
15ce0 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
15cf0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
15d00 63 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 20  ction \;....
15d10 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
15d20 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61  E: Open the data
15d30 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
15d40 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65  now, placing the
15d50 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76   opaque handle v
15d60 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20  alue..      #
15d70 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72      into the var
15d80 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  iable specified
15d90 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
15da0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
15db0 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20  et db [sql open
15dc0 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75  -type SQLite [su
15dd0 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d  bst $connection] 15de0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 15df0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 # NOTE: Conf 15e00 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 igure the tempor 15e10 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f ary directory fo 15e20 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e r the newly open 15e30 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 ed database.. 15e40 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 # conne 15e50 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 ction now unless 15e60 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 our caller forb 15e70 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 ids it... # 15e80 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d .. if {$tem
15e90 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f  porary && ![info
15ea0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74   exists ::no(set
15eb0 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f  TemporaryDirecto
15ec0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ry)]} then {..
15ed0 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
15ee0 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67  e $db [appendArg 15ef0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15f00 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 "PRAGMA temp_st 15f10 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 ore_directory = 15f20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 \"" [getTemporar 15f30 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b yDirectory] \"\; 15f40 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 15f50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15f60 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 OTE: Perform any 15f70 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 extra per-conne 15f80 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 ction setup for 15f90 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 the newly opened 15fa0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 15fb0 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c database now unl 15fc0 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 ess our caller f 15fd0 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 orbids it... 15fe0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 #.. set e 15ff0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 xecuteOnSetup [g 16000 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 etExecuteOnSetup 16010 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 16020 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 string length$e
16030 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e  xecuteOnSetup] >
16040 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20   0 && \..
16050 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73     ![info exists
16060 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53   ::no(executeOnS
16070 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  etup)]} then {..
16080 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16090 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
160a0 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73  command may rais
160b0 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73  e an error; if s
160c0 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c  o, that is fine,
160d0 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20   as..        #
160e0 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69       the enclosi
160f0 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65  ng test will the
16100 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75  n fail.  The [su
16110 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d  bst] command is.
16120 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
16130 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c   used on the SQL
16140 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64   in case it need
16150 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74  s to refer to st
16160 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20  ate in our..
16170 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74      #       cont
16180 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ext...        #.
16190 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65  .        sql exe
161a0 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 20  cute $db [subst 161b0 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d$executeOnSetup]
161c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
161d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
161e0 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72  TE: Always retur
161f0 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
16200 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63   handle upon suc
16210 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  cess...      #..
16220 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62        return $db 16230 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 16240 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 proc getDbConnec 16250 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 tion { {varName 16260 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 db} } {.. # 16270 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 16280 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe 16290 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable 162a0 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t 162b0 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou 162c0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 162d0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha 162e0 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ndle to the data 162f0 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 base previously 16300 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a opened via the.. 16310 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 # [s 16320 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 etupDb] procedur 16330 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 e should be stor 16340 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 16350 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 16360 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
16370 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16380 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74  # NOTE: This ret
16390 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54  urns the ADO.NET
163a0 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f   IDbConnection o
163b0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66  bject instance f
163c0 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  or the..      #
163d0 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20        specified
163e0 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20  databse handle.
163f0 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74   Since getting t
16400 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65  his object relie
16410 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20  s upon..      #
16420 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65        Eagle inte
16430 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72  rnals, great car
16440 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  e should be take
16450 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f  n to avoid dispo
16460 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23  sing of..      #
16470 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65         this obje
16480 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20  ct or otherwise
16490 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20  putting it into
164a0 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65  an invalid state
164b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
164c0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
164d0 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ts db]} then {..
164e0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
164f0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
16500 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
16510 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
16520 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f  -objectflags +No
16530 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c  Dispose -alias \
16540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16550 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
16560 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e  ctive.connection
16570 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20  s Item $db.. 16580 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d } result] == 16590 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 165a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 165b0 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 # NOTE: Succe 165c0 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f ss, return the o 165d0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e paque object han 165e0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 dle... 165f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 #.. ret 16600 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
16610 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
16620 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
16630 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
16640 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68  ilure, report wh
16650 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
16660 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
16670 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16680 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 166a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 166b0 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 led to get conne 166c0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 ction handle for 166d0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d database \"" \. 166e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 .$
166f0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  db "\", error: "
16700 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 16710 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 16720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 16730 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 16740 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 Failure, return 16750 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 an obviously inv 16760 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 alid opaque obje 16770 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 16780 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 16790 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a n "".. }..... 167a0 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 43 proc freeDbC 167b0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 onnection { {var 167c0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d Name connection} 167d0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 167e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 # NOTE: Ref 167f0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 er to the specif 16800 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e ied variable (e. 16810 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 g. "connection") 16820 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 in the.. # 16830 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 16840 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 f our caller. T 16850 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object 16860 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 handle for an A 16870 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 DO.NET.. # 16880 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 16890 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 previously retu 168a0 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f rned by [getDbCo 168b0 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 nnection] should 168c0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 be.. # 168d0 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e stored there. 168e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 168f0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
16900 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a  e connection....
16910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16920 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
16930 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61  o remove the opa
16940 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
16950 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72  e from the inter
16960 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20  preter..      #
16970 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73        now.  This
16980 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65   [object dispose
16990 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20  ] call will not
169a0 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65  actually dispose
169b0 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23   of the..      #
169c0 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e         underlyin
169d0 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65  g object because
169e0 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20   the +NoDispose
169f0 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20  flag was set on
16a00 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  it..      #
16a10 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f    during creatio
16a20 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20  n of the opaque
16a30 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a  object handle...
16a40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
16a50 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
16a60 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c  connection] && \
16a70 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74  ..          [cat
16a80 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f  ch {object dispo
16a90 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20  se $connection} 16aa0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 16ab0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16ac0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f # NOTE: We so 16ad0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 mehow failed to 16ae0 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c remove the handl 16af0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 16b00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16b10 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
16b20 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
16b30 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
16b40 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
16b50 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d  G: failed to rem
16b60 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ove connection h
16b70 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65  andle \"" $conne 16b80 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 ction \.. 16b90 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a "\", error: 16ba0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
16bb0 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
16bc0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
16bd0 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  addDbConnection
16be0 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61  { connection {va
16bf0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
16c00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
16c10 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
16c20 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
16c30 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
16c40 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
16c50 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
16c60 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
16c70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
16c80 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 16c90 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 16ca0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 # NOTE: Cre 16cb0 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20 ate a correctly 16cc0 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 formatted name f 16cd0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 or the database 16ce0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 connection to.. 16cf0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 16d00 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 added to the lis 16d10 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 t managed by the 16d20 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 Eagle interpret 16d30 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 16d40 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 set db [obje 16d50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 16d60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 16d70 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f Eagle._ 16d80 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 Components.Priva 16d90 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 te.FormatOps Dat 16da0 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 abaseObjectName 16db0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20$connection \..
16dc0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
16dd0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63  onnection [objec
16de0 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
16df0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
16e00 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20  extId]]....
16e10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16e20 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62 61  : Add the databa
16e30 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72  se connection pr
16e40 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
16e50 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74  ller to the list
16e60 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16e70 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74  of those known t
16e80 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65  o the Eagle inte
16e90 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20  rpreter...
16ea0 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  #..      object
16eb0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
16ec0 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72  onPublic Interpr
16ed0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63  eter.GetActive.c
16ee0 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c  onnections Add \
16ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 20  ..          $db 16f00 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20$connection..
16f10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
16f20 72 65 6d 6f 76 65 44 62 54 72 61 6e 73 61 63 74  removeDbTransact
16f30 69 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74 69 6f  ion { transactio
16f40 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  n } {..      #..
16f50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
16f60 6d 6f 76 65 20 74 68 65 20 64 61 74 61 62 61 73  move the databas
16f70 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 70 72  e transaction pr
16f80 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
16f90 6c 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d 0a 20  ller from the..
16fa0 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 73       #       lis
16fb0 74 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e  t of those known
16fc0 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e   to the Eagle in
16fd0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
16fe0 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63    #..      objec
16ff0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
17000 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72  +NonPublic Inter
17010 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
17020 2e 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 5c 0d  .transactions \.
17030 0a 20 20 20 20 20 20 20 20 20 20 52 65 6d 6f 76  .          Remov
17040 65 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a  e $transaction.. 17050 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 17060 6f 63 20 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 oc getRowsFromDa 17070 74 61 54 61 62 6c 65 20 7b 20 64 61 74 61 54 61 taTable { dataTa 17080 62 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c 62 61 ble {valueCallba 17090 63 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 ck ""} } {.. 170a0 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74 set rows [list 170b0 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 ].. set cou 170c0 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20 43 nt [$dataTable C
170d0 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d  olumns.Count]...
170e0 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20  .      for {set
170f0 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78  index 0} {$index 17100 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 <$count} {incr
17110 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..
17120 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75 6d     set dataColum
17130 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d 61  n [$dataTable -a 17140 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 lias Columns.get 17150 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 _Item$index]..
17160 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73         set names
17170 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61 43  ($index) [$dataC
17180 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn ColumnName
17190 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
171a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
171b0 4f 54 45 3a 20 53 65 74 75 70 20 73 6f 6d 65 20  OTE: Setup some
171c0 54 63 6c 20 72 65 74 75 72 6e 20 63 6f 64 65 20  Tcl return code
171d0 63 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 20 20  constants...
171e0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 4f    #..      set O
171f0 6b 20 30 3b 20 73 65 74 20 45 72 72 6f 72 20 31  k 0; set Error 1
17200 3b 20 73 65 74 20 52 65 74 75 72 6e 20 32 3b 20  ; set Return 2;
17210 73 65 74 20 42 72 65 61 6b 20 33 3b 20 73 65 74  set Break 3; set
17220 20 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a 20   Continue 4....
17230 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
17240 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 52  ach -alias dataR
17250 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 73  ow [set dataRows
17260 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f 77   [$dataTable Row 17270 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 s]] {.. s 17280 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d et row [list]... 17290 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 . for {se 172a0 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 t index 0} {$ind
172b0 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  ex < $count} {in 172c0 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 172d0 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 172e0 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 61 [$dataRow -crea
172f0 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 74  te -alias get_It
17300 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20  em $index].... 17310 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 17320 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 ing length$valu
17330 65 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d 20  eCallback] > 0}
17340 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17350 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61      set code [ca
17360 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
17370 20 20 20 20 20 24 76 61 6c 75 65 43 61 6c 6c 62       $valueCallb 17380 61 63 6b 20 24 64 61 74 61 54 61 62 6c 65 20 24 ack$dataTable $17390 64 61 74 61 52 6f 77 20 24 69 6e 64 65 78 20 24 dataRow$index $173a0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 value.. 173b0 20 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d 0d 0a } newValue].. 173c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 173d0 20 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d 20 {$code == $Ok} 173e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 173f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17400 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 17410 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 17420 20 28 6e 65 77 3f 29 20 72 6f 77 20 76 61 6c 75 (new?) row valu 17430 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 17440 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 17450 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b lappend row [ 17460 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 list$names($ind 17470 65 78 29 20 24 6e 65 77 56 61 6c 75 65 5d 0d 0a ex)$newValue]..
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 45 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a 20  Error} 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 55 73 65 20 74 68 65 20 28 6e  NOTE: Use the (n
174e0 65 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 76 61  ew?) NULL row va
174f0 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  lue...
17500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
17510 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77       lappend row
17520 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69   [list $names($i
17530 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20  ndex)]..
17540 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63      } elseif {$c 17550 6f 64 65 20 3d 3d 20 24 52 65 74 75 72 6e 7d 20 ode ==$Return}
17560 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17580 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
17590 6b 69 70 20 72 65 6d 61 69 6e 69 6e 67 20 76 61  kip remaining va
175a0 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20 72 6f  lues for this ro
175b0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...
175c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
175d0 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20     break..
175e0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
175f0 24 63 6f 64 65 20 3d 3d 20 24 42 72 65 61 6b 7d  $code ==$Break}
17600 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17620 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17630 53 6b 69 70 20 70 72 6f 63 65 73 73 69 6e 67 20  Skip processing
17640 74 68 69 73 20 72 6f 77 20 76 61 6c 75 65 2e 0d  this row value..
17650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
17660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
17670 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d  elseif {$code == 17680 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65 6e$Continue} then
17690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
176a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
176b0 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 64     # NOTE: Use d
176c0 65 66 61 75 6c 74 20 72 6f 77 20 76 61 6c 75 65  efault row value
176d0 20 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20 20   handling...
176e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
176f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
17700 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
17710 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
17720 63 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65 0d 0a  code $Continue.. 17730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 17740 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f if {$co
17750 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d  de == $Continue} 17760 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17770 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 17780 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 length$value]
17790 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  > 0 && \..
177a0 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a 65            ![obje
177b0 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72  ct invoke Conver
177c0 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75  t IsDBNull $valu 177d0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 177e0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 177f0 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d d row [list$nam
17800 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c  es($index) [$val
17810 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20  ue ToString]]..
17820 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
17830 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
17840 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b     lappend row [
17850 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64  list $names($ind
17860 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ex)]..
17870 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
17880 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
17890 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
178a0 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20 20  ows $row.. 178b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 178c0 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a n$rows..    }..
178d0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d 70  ...    proc dump
178e0 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c  RowsFromDataTabl
178f0 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73  e { channel rows
17900 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
17910 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20  sequence 1....
17920 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77 20      foreach row
17930 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20 20  $rows {.. 17940 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
17950 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
17960 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72             [expr
17970 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31 20   {$sequence > 1 17980 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d ? "\n" : ""}] "- 17990 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 75 --- ROW #"$sequ
179a0 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20  ence :\n]....
179b0 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 69       foreach pai
179c0 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20  r $row {.. 179d0 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength 179e0 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68$pair] >= 2} th
179f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17a00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17a10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 [appendArgs \t 17a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17a30 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 [list [lindex 17a40 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 20$pair 0]] ": "
17a50 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70  [list [lindex $p 17a60 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 air 1]] \n].. 17a70 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif 17a80 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 5d {[llength$pair]
17a90 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 1} then {..
17aa0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
17ab0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 17ac0 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 dArgs \t \.. 17ad0 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 [lis 17ae0 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 t [lindex$pair
17af0 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22  0]] ": <null>\n"
17b00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
17b10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
17b20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 17b30 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 l \t<empty>\n; # 17b40 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d NOTE: No data?. 17b50 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17b60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17b70 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 65 incr sequence 17b80 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 17b90 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c ..... proc cl 17ba0 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 eanupDb { fileNa 17bb0 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 me {varName db} 17bc0 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b {collect true} { 17bd0 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 qualify true}.. 17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17bf0 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 65 {delete true 17c00 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 17c10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 17c20 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 tempt to force a 17c30 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 ll pending "garb 17c40 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 age" objects to 17c50 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 be collected,.. 17c60 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 # inc 17c70 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 luding SQLite st 17c80 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 atements and bac 17c90 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 kup objects; thi 17ca0 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a s should allow.. 17cb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 17cc0 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 e underlying dat 17cd0 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 abase file to be 17ce0 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 deleted... 17cf0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 #.. if {$c
17d00 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  ollect} then {..
17d10 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47          collectG
17d20 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63  arbage $::test_c 17d30 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d hannel.. }. 17d40 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17d50 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer 17d60 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified 17d70 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. 17d80 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con 17d90 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. 17da0 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle 17db0 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 r. The handle t 17dc0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 o the database p 17dd0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 reviously opened 17de0 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 via the.. 17df0 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 # [setupDb 17e00 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 ] procedure shou 17e10 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ld be stored the 17e20 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 17e30 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
17e40 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
17e50 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
17e60 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e  : Close the conn
17e70 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
17e80 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69  tabase now.  Thi
17e90 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75  s should allow u
17ea0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
17eb0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 75   to delete the u
17ec0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
17ed0 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  se file...
17ee0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
17ef0 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 26  fo exists db] &&
17f00 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f   [catch {sql clo
17f10 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20  se $db} error]} 17f20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17f30 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17f40 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 17f50 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 iled to close th 17f60 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f e database, repo 17f70 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 17f80 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 17f90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
17fa0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
17fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
17fc0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
17fd0 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61  ed to close data
17fe0 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22  base \"" $db "\" 17ff0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 18000 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
18010 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
18020 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
18030 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
18040 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63  st, see if our c
18050 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
18060 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
18070 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
18080 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
18090 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
180a0 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. 180b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 180c0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 180d0 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 he full path to 180e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c the database fil 180f0 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 e name. For now 18100 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 , all test.. 18110 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa 18120 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f se files are sto 18130 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f red in the tempo 18140 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d rary directory.. 18150 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18160 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
18170 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then 18180 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 18190 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j 181a0 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase 181b0 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file 181c0 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
181d0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
181e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
181f0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
18200 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
18210 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
18220 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 18230 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
18240 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $18250 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 18260 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 18270 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 18280 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 ip deleting data 18290 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f base files if so 182a0 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the 182b0 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 182c0 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 182d0 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. 182e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 182f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 18300 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e xists ::no(clean 18310 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e upDbFile)]} then 18320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 18330 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 18340 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 18350 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 61 lete the test da 18360 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e tabase file now. 18370 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18380 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se 18390 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f 183a0 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
183b0 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
183c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
183d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
183e0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
183f0 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
18400 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
18410 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
18420 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
18430 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 18440 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 18450 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18460 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 18470 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 18480 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat 18490 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
184a0 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
184b0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
184c0 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
184d0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 184e0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 184f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 18500 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 18510 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18520 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha 18530 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del 18540 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. 18550 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 18560 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 18570 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... 18580 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
18590 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
185a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
185b0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
185c0 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
185d0 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
185e0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 185f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18600 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean 18610 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 up\n"].. 18620 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 18630 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 18640 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 18650 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 e file does not 18660 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d exist, success!. 18670 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 18680 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. 18690 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 186a0 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 return$code..
186b0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
186c0 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e  c saveEnvironmen
186d0 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d  tVariables { nam
186e0 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  es {varName ""}
186f0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
18700 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20      # NOTE: For
18710 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20  each name, does
18720 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e  the live environ
18730 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 78  ment variable ex
18740 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 20  ist?  If..
18750 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61 76 65  #       so, save
18760 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 6c   the value for l
18770 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73 65 2c  ater; otherwise,
18780 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73   make sure the s
18790 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  aved..      #
187a0 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73 20 6e      value does n
187b0 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 2e  ot exist either.
187c0 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76 69 72    The live envir
187d0 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73  onment variables
187e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
187f0 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65 64 20  ARE NOT changed
18800 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  by this procedur
18810 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
18820 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
18830 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 18840 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 18850 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d set varNam 18860 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 e savedEnv.. 18870 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 }.... upv 18880 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73 61 ar 1$varName sa
18890 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
188a0 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61  foreach name $na 188b0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 mes {.. i 188c0 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 188d0 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 ::env($name)]} t
188e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
188f0 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 24 6e   set savedEnv($n 18900 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e 61 6d ame)$::env($nam 18910 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c e).. } el 18920 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 18930 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 18940 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 n savedEnv($name
18950 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  )..        }..
18960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
18970 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18980 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 6c 65  This is self-cle
18990 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73 61  aning.  If no sa
189a0 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ved environment
189b0 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a 20  variables now..
189c0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 69       #       exi
189d0 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 61  st, remove the a
189e0 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  rray...      #..
189f0 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 61 79        if {[array
18a00 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 5d 20   size savedEnv]
18a10 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
18a20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
18a30 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76  omplain savedEnv
18a40 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18a50 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65  .....    proc re
18a60 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  storeEnvironment
18a70 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d 65  Variables { name
18a80 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d  s {varName ""} }
18a90 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
18aa0 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 65     # NOTE: For e
18ab0 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20 74  ach name, does t
18ac0 68 65 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e  he saved environ
18ad0 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 78  ment variable ex
18ae0 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 20  ist?  If..
18af0 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65 73 74  #       so, rest
18b00 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 76 61  ore the saved va
18b10 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20 69 74  lue and unset it
18b20 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b  ; otherwise, mak
18b30 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20 23 20  e sure..      #
18b40 20 20 20 20 20 20 74 68 65 20 6c 69 76 65 20 65        the live e
18b50 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
18b60 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ble does not exi
18b70 73 74 20 65 69 74 68 65 72 20 28 69 2e 65 2e 20  st either (i.e.
18b80 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  it..      #
18b90 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20 74 6f    was not set to
18ba0 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20 20 42   begin with).  B
18bb0 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20 6c 69  oth saved and li
18bc0 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d 0a  ve environment..
18bd0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
18be0 72 69 61 62 6c 65 73 20 41 52 45 20 63 68 61 6e  riables ARE chan
18bf0 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f 63  ged by this proc
18c00 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  edure...      #.
18c10 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
18c20 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61  ng length $varNa 18c30 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b me] == 0} then { 18c40 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 .. set va 18c50 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a rName savedEnv.. 18c60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18c70 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
18c80 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  e savedEnv....
18c90 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
18ca0 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20   $names {.. 18cb0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 18cc0 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 6e 61 sts savedEnv($na
18cd0 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  me)]} then {..
18ce0 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e          set ::en
18cf0 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65 64 45  v($name)$savedE
18d00 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20  nv($name).. 18d10 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 18d20 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 mplain savedEnv( 18d30 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20$name)..
18d40 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
18d50 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
18d60 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e 61 6d  plain ::env($nam 18d70 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e).. }.. 18d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 18d90 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 18da0 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 6c This is self-cl 18db0 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73 eaning. If no s 18dc0 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 aved environment 18dd0 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a variables now.. 18de0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 18df0 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 ist, remove the 18e00 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d array... #. 18e10 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 61 . if {[arra 18e20 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 5d y size savedEnv] 18e30 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 18e40 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 18e50 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 18e60 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 v.. }.. 18e70 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 18e80 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c aveGetSettingVal 18e90 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d ueEnvironment {} 18ea0 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 18eb0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 1 savedEnv saved 18ec0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 Env.... sav 18ed0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 eEnvironmentVari 18ee0 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 ables [list \.. 18ef0 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70 61 No_Expa 18f00 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53 nd No_SQLiteGetS 18f10 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 ettingValue No_S 18f20 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69 QLiteXmlConfigFi 18f30 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le] \.. 18f40 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d savedEnv.. } 18f50 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 ..... proc re 18f60 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67 56 storeGetSettingV 18f70 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 alueEnvironment 18f80 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 18f90 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 18fa0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 edEnv.... r 18fb0 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 18fc0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 18fd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f \.. No 18fe0 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 _Expand No_SQLit 18ff0 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 eGetSettingValue 19000 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e No_SQLiteXmlCon 19010 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 figFile] \.. 19020 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a savedEnv.. 19030 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 19040 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e oc saveSQLiteCon 19050 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 nectionEnvironme 19060 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 nt {} {.. u 19070 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 pvar 1 savedEnv 19080 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 savedEnv.... 19090 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e saveEnvironmen 190a0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 190b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 \.. De 190c0 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 faultFlags_SQLit 190d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 eConnection No_S 190e0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e QLiteConnectionN 190f0 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 ewParser] \.. 19100 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d savedEnv. 19110 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 19120 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 roc restoreSQLit 19130 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 eConnectionEnvir 19140 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 19150 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 19160 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 19170 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 19180 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 19190 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 191a0 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 DefaultFlag 191b0 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 s_SQLiteConnecti 191c0 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e on No_SQLiteConn 191d0 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d ectionNewParser] 191e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 191f0 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 19200 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 .. proc saveS 19210 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 QLiteConvertEnvi 19220 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 19230 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 19240 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 19250 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 . saveEnvir 19260 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 19270 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 19280 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e Use_SQLiteCon 19290 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79 vert_DefaultDbTy 192a0 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e pe Use_SQLiteCon 192b0 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65 vert_DefaultType 192c0 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 Name] \.. 192d0 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 savedEnv.. 192e0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 192f0 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e restoreSQLiteCon 19300 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 vertEnvironment 19310 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 19320 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 19330 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 edEnv.... r 19340 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 19350 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 19360 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73 \.. Us 19370 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f e_SQLiteConvert_ 19380 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 73 DefaultDbType Us 19390 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f e_SQLiteConvert_ 193a0 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d DefaultTypeName] 193b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 193c0 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 193d0 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 .. proc setup 193e0 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 DbInterruptCallb 193f0 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f ack { channel lo 19400 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 g } {.. tpu 19410 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
19420 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62  - setting up deb
19430 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20  ugger interrupt
19440 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d  callback... "...
19450 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
19460 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 76  h {..        sav
19470 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
19480 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  ables [list \..
19490 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 74             quiet
194a0 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54  FindInterpreterT
194b0 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 74  estPath quietSet
194c0 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73  upInterpreterTes
194d0 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20  tPath]....
194e0 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20    try {..
194f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19500 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20  # NOTE: Prevent
19510 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 70  the vendor scrip
19520 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69  t from being noi
19530 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67  sy when creating
19540 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
19550 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 64      the isolated
19560 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
19570 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19580 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28        set ::env(
19590 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72  quietFindInterpr
195a0 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 0d  eterTestPath) 1.
195b0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a  .          set :
195c0 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49  :env(quietSetupI
195d0 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61  nterpreterTestPa
195e0 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20  th) 1....
195f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19600 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72  # NOTE: Make sur
19610 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62  e the script deb
19620 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73  ugger and the is
19630 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74  olated interpret
19640 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  er..          #
19650 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 20        are setup
19660 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
19670 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
19680 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67  .          debug
19690 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65   setup true true
196a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
196b0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
196c0 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65  E: Load the nece
196d0 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69  ssary packages i
196e0 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
196f0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
19700 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19710 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c        debug eval
19720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19730 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require
19740 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  Eagle..
19750 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
19760 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79  re Eagle.Library
19770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ..            pa
19780 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
19790 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20  gle.Test..
197a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
197b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
197c0 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
197d0 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61   necessary varia
197e0 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73  bles into the is
197f0 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74  olated interpret
19800 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
19810 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75  ..          debu
19820 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a  g invoke 0 set :
19830 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63  :test_channel $c 19840 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 hannel; # NOTE: 19850 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 For [tputs]... 19860 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e debug in 19870 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 voke 0 set ::tes 19880 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f t_log$log; # NO
19890 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d  TE: For [tlog]..
198a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
198b0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
198c0 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61  : Install the ca
198d0 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f  llback script to
198e0 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e   be evaluated in
198f0 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20   the isolated..
19900 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
19910 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65   interpreter whe
19920 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74  n this interpret
19930 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  er is interrupte
19940 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20  d by script..
19950 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
19960 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63  ancellation, etc
19970 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
19980 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20            debug
19990 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b  callback apply {
199a0 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20  {sender e} {..
199b0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
199c0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
199d0 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 64   Check if this d
199e0 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 6b  ebugger callback
199f0 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20   is one that we
19a00 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20  care about...
19a10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19a20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 65          set inte
19a30 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c 69  rruptTypes [spli
19a40 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54  t [$e InterruptT 19a50 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20 ype] ", "].... 19a60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 if {"C 19a70 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e 74 anceled" in$int
19a80 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 5c  erruptTypes || \
19a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19aa0 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24    "Unwound" in $19ab0 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d 20 interruptTypes} 19ac0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19ae0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d # NOTE: M 19af0 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62 ake sure the [ob 19b00 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 ject] command is 19b10 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e available. Sin 19b20 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ce.. 19b30 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 69 # this i 19b40 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e s an isolated in 19b50 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b terpreter, check 19b60 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 64 for it the hard 19b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19b80 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20 # way... 19b90 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 19bb0 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 {[llength [info 19bc0 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d commands object] 19bd0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 19bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19c00 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 # NOTE: Iterat 19c10 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 e through all da 19c20 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 19c30 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d ns known to the. 19c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19c50 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 # parent 19c60 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 19c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19c90 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach 19ca0 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a -alias pair [obj 19cb0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 19cc0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19ce0 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65 74$e Interpret
19cf0 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20  er.connections]
19d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
19d10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19d20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
19d30 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e  : Attempt to can
19d40 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72  cel any SQL quer
19d50 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ies in progress
19d60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
19d70 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
19d80 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
19d90 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...
19da0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19dc0 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69  if {[catch {$pai 19dd0 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 r Value.Cancel} 19de0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19e00 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
19e10 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
19e20 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20  dArgs \n \..
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e40 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
19e50 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e  G: failed to can
19e60 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20  cel query for "
19e70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19e80 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e             "conn
19e90 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69  ection \"" [$pai 19ea0 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f r Key] "\", erro 19eb0 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 r: " \n\t \.. 19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19ed0 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d$error \n].
19ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19ef0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
19f00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
19f10 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19f30 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19f40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19f50 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 gs \n \.. 19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 19f70 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e == WARNING: cann 19f80 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75 ot cancel any qu 19f90 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20 eries: " \.. 19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19fb0 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20 "the \"object\" 19fc0 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 command is not a 19fd0 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20 vailable\n"].. 19fe0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19ff0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1a000 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 }}.. 1a010 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d } finally {. 1a020 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74 6f . resto 1a030 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 reEnvironmentVar 1a040 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 qu 1a060 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 ietFindInterpret 1a070 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74 erTestPath quiet 1a080 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 SetupInterpreter 1a090 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 20 TestPath].. 1a0a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 }.. } er 1a0b0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 1a0c0 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo 1a0d0 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 nstraint interru 1a0e0 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 ptCallback.sqlit 1a0f0 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 e3.... tp 1a100 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
1a110 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  \n..      } else
1a120 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
1a130 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1a140 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f ndArgs "no, erro 1a150 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
1a160 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
1a170 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1a180 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20  c cleanupFile {
1a190 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63  fileName {collec
1a1a0 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66  t true} {force f
1a1b0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
1a1c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1a1d0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
1a1e0 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22  ce all pending "
1a1f0 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73  garbage" objects
1a200 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64   to be collected
1a210 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
1a220 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74   including SQLit
1a230 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  e statements and
1a240 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b   backup objects;
1a250 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c   this should all
1a260 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
1a270 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    the underlying
1a280 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
1a290 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20  o be deleted...
1a2a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1a2b0 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e   {$collect} then 1a2c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c {.. coll 1a2d0 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 ectGarbage$::te
1a2e0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
1a2f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
1a300 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
1a310 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20  eck if the file
1a320 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20  still exists...
1a330 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1a340 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $1a350 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 1a360 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1a370 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 1a380 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 ip deleting test 1a390 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f files if somebo 1a3a0 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 dy sets the glob 1a3b0 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. 1a3c0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 1a3d0 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 prevent it... 1a3e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a3f0 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b if {$force || ![
1a400 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1a410 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20  (cleanupFile)]}
1a420 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a430 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1a440 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
1a450 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73  o delete the tes
1a460 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  t file now...
1a470 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a480 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
1a490 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
1a4a0 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 1a4b0 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { 1a4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1a4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1a4e0 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 1a4f0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 1a500 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor 1a510 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 1a520 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1a530 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1a540 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1a550 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1a560 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1a570 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1a580 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c   delete test fil
1a590 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 1a5a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a5b0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1a5c0 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " 1a5d0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1a5e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a5f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1a600 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1a610 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1a620 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70  how that we skip
1a630 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65  ped deleting the
1a640 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
1a650 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
1a660 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20  et code 0....
1a670 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1a680 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1a690 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1a6a0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1a6b0 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 WARNING: skipped 1a6c0 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f 1a6d0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
1a6e0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1a6f0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
1a700 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
1a710 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
1a720 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
1a730 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1a740 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   The file does n
1a750 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73  ot exist, succes
1a760 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s!..        #..
1a770 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
1a780 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....
1a790 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65      return $code 1a7a0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1a7b0 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f proc cleanupMemo 1a7c0 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75 ry { varName {qu 1a7d0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 1a7e0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 1a7f0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 1a800 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 nd] && \.. 1a810 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 1a820 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 th$varName] > 0
1a830 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a840 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1a850 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
1a860 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
1a870 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e  able (e.g. "conn
1a880 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d  ection") in the.
1a890 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1a8a0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
1a8b0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61  caller.  The opa
1a8c0 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
1a8d0 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20  e for an..
1a8e0 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e 45    #       ADO.NE
1a8f0 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65  T connection pre
1a900 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
1a910 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
1a920 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23  tion]..        #
1a930 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
1a940 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
1a950 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a960 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 1a970 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a ame connection.. 1a980 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1a990 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a9a0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1a9b0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65$connection Rele
1a9c0 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  aseMemory..
1a9d0 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68     } result]} th
1a9e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1a9f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1aa00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1aa10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1aa20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1aa30 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1aa40 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1aa50 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
1aa60 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 20  elease database
1aa70 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22  memory, error: "
1aa80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1aa90 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74      \n\t $result 1aaa0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1aab0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1aac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 1aad0 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 f {[llength [inf 1aae0 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 o commands debug 1aaf0 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ]] > 0} then {.. 1ab00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1ab10 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1ab20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 1ab30 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 20 debug purge].. 1ab40 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d } result]} 1ab50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1ab60 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1ab70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ab80 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1ab90 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1aba0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1abb0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1abc0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1abd0 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 61 o purge call fra 1abe0 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a me, error: " \.. 1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ac00 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1ac10 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1ac20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ac30 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1ac40 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65  ..          uple
1ac50 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75  vel 1 [list debu
1ac60 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20  g cleanup]..
1ac70 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74      } result]} t
1ac80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ac90 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1aca0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1acb0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1acc0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1acd0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1ace0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1acf0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
1ad00 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 65  cleanup interpre
1ad10 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  ter, error: " \.
1ad20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ad30 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1ad40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1ad50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1ad60 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1ad70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c {.. upl 1ad80 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 evel 1 [list deb 1ad90 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20 ug collect].. 1ada0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 } result]} 1adb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1adc0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1add0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ade0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1adf0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1ae00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ae10 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1ae20 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1ae30 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 collect garbage 1ae40 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e \n 1ae60 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
1ae70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1ae80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1ae90 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1aea0 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 43  roc setupMemoryC
1aeb0 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 6d  ounters { varNam
1aec0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  e } {..      if
1aed0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
1aee0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
1aef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61   {..        upva
1af00 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75  r 1 $varName cou 1af10 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nter.... 1af20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 5b set counter(1) [ 1af30 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 object create -a 1af40 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 lias \.. 1af50 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e System.Diagn 1af60 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e ostics.Performan 1af70 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 ceCounter Proces 1af80 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1af90 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b "Working Set" [ 1afa0 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 file rootname [f 1afb0 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f ile tail$::bin_
1afc0 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20  file]]]....
1afd0 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 32     set counter(2
1afe0 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  ) [object create
1aff0 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
1b000 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69         System.Di
1b010 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72  agnostics.Perfor
1b020 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f  manceCounter Pro
1b030 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  cess \..
1b040 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74      "Working Set
1b050 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f   Peak" [file roo
1b060 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c  tname [file tail
1b070 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d   $::bin_file]]]. 1b080 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 ... set c 1b090 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 63 ounter(3) [objec 1b0a0 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 t create -alias 1b0b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 1b0c0 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 ystem.Diagnostic 1b0d0 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 s.PerformanceCou 1b0e0 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a nter Process \.. 1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 69 "Pri 1b100 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 6c vate Bytes" [fil 1b110 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 e rootname [file 1b120 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c tail$::bin_fil
1b130 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e]]]..      }...
1b140 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
1b150 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1b160 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72  proc reportMemor
1b170 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 6e  yCounters { chan
1b180 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 66  nel varName pref
1b190 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  ix } {..      if
1b1a0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1b1b0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1b1c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76  n {..        upv
1b1d0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 1b1e0 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 unter.... 1b1f0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1b200 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1b210 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1b220 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75   " $prefix " cou 1b230 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 nter \"" \.. 1b240 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 [object 1b250 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 invoke$counter(
1b260 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20  1) CounterName]
1b270 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c  "\" value is " \
1b280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f  ..            [o
1b290 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co 1b2a0 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c 75 unter(1) RawValu 1b2b0 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 e] \n].... 1b2c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1b2d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1b2f0 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f  - " $prefix " co 1b300 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 unter \"" \.. 1b310 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 [object 1b320 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 invoke$counter
1b330 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d  (2) CounterName]
1b340 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20   "\" value is "
1b350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1b360 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c 1b370 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 6c ounter(2) RawVal 1b380 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ue] \n].... 1b390 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1b3a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1b3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1b3c0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63  -- " $prefix " c 1b3d0 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 ounter \"" \.. 1b3e0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 [objec 1b3f0 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 t invoke$counte
1b400 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65  r(3) CounterName
1b410 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22  ] "\" value is "
1b420 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b430 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $1b440 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56 61 counter(3) RawVa 1b450 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 lue] \n].. 1b460 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 1b470 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 proc collectGar 1b480 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b bage { channel { 1b490 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 milliseconds 100 1b4a0 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 0} {quiet true} 1b4b0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 1b4c0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 1b4d0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 1b4e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1b4f0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1b500 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1b510 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 GC GetTotalMemor 1b520 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 y false.. 1b530 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d } result] == 0} 1b540 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b550 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1b560 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b570 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1b580 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1b590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b5a0 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 "---- memory i 1b5b0 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 n use by the CLR 1b5c0 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 before collecti 1b5d0 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 on... " \.. 1b5e0 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75$resu
1b5f0 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a  lt " bytes\n"]..
1b600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1b610 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1b620 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1b630 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1b640 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1b650 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1b660 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 1b670 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 t CLR memory usa 1b680 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a ge, error: " \.. 1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e \n 1b6a0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
1b6b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1b6c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23   }....      ####
1b6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b710 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23  #####....      #
1b720 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1b730 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d  Repeatedly attem
1b740 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  pt to collect ga
1b750 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20  rbage until the
1b760 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d  allotted number.
1b770 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
1b780 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68  f milliseconds h
1b790 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77  as elapsed.  Alw
1b7a0 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63  ays attempt to c
1b7b0 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a  ollect garbage..
1b7c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74        #       at
1b7d0 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20   least once...
1b7e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1b7f0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
1b800 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
1b810 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
1b820 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63  start [clock sec
1b830 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 73  onds]..        s
1b840 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b 24  et stop [expr {$1b850 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 start + ($millis
1b860 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d  econds / 1000)}]
1b870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20 7b  ....        do {
1b880 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1b890 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1b8a0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63   Attempt to forc
1b8b0 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65  e a full garbage
1b8c0 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e   collection now.
1b8d0 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20    Report any..
1b8e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1b8f0 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e  error that is en
1b900 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65 20  countered if we
1b910 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20  fail...
1b920 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
1b930 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1b940 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1b950 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61  nvoke GC GetTota
1b960 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20 20  lMemory true..
1b970 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d          } error]
1b980 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b990 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1b9a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1b9b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b9c0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1b9d0 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 G: failed full g 1b9e0 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f arbage collectio 1b9f0 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 n, error: " \.. 1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 1ba10 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1ba20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1ba30 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77           set now
1ba40 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
1ba50 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c  ..        } whil
1ba60 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f  e {$start <=$no
1ba70 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f  w && $now <$sto
1ba80 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  p}..      }....
1ba90 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23       ###########
1baa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1bae0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
1baf0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
1bb00 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
1bb10 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1bb20 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
1bb30 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
1bb40 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
1bb50 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20  alse..        }
1bb60 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
1bb70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1bb80 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1bb90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bba0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1bbb0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1bbd0 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  ---- memory in u
1bbe0 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66  se by the CLR af
1bbf0 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e  ter collection..
1bc00 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
1bc10 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22         $result " 1bc20 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 1bc30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1bc40 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1bc50 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1bc60 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1bc70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1bc80 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1bc90 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c  failed to get CL
1bca0 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20  R memory usage,
1bcb0 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
1bcc0 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $1bcd0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 1bce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1bcf0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1bd00 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 oc getSQLiteHand 1bd10 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e leCounts { chann 1bd20 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d el {quiet false} 1bd30 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 1bd40 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d result [list]... 1bd50 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 1bd60 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 1bd70 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 and] && \.. 1bd80 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 [haveSQLite 1bd90 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 43 DefineConstant C 1bda0 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 OUNT_HANDLE]} th 1bdb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 1bdc0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1bdd0 20 41 64 64 20 65 61 63 68 20 63 72 69 74 69 63 Add each critic 1bde0 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 1bdf0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 to the resulting 1be00 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 list... 1be10 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 #.. forea 1be20 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 5c 0d ch name [list \. 1be30 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e . con 1be40 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 nectionCount sta 1be50 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b tementCount back 1be60 75 70 43 6f 75 6e 74 20 62 6c 6f 62 43 6f 75 6e upCount blobCoun 1be70 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 t] {.. 1be80 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 1be90 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1bea0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 1beb0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1bed0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1bee0 44 65 62 75 67 44 61 74 61 20 24 6e 61 6d 65 0d DebugData$name.
1bef0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 76 61 6c  .          } val
1bf00 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ue] == 0} then {
1bf10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1bf20 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1bf30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bf40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1bf50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bf70 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20   "---- critical
1bf80 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22  handle count \""
1bf90 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20   $name "\" is " 1bfa0 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20$value \n]..
1bfb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1bfc0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
1bfd0 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a   result $value.. 1bfe0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1bff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c000 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1c010 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1c030 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1c040 6c 65 64 20 74 6f 20 67 65 74 20 63 72 69 74 69  led to get criti
1c050 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
1c060 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
1c070 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c          $name "\ 1c080 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 1c090 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20$value \n]..
1c0a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c0b0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1c0c0 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68  eif {!$quiet} th 1c0d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 1c0e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1c0f0 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64 The actual hand 1c100 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f le counts are no 1c110 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 t available; the 1c120 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 refore, just.. 1c130 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1c140 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 turn an empty li 1c150 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 1c160 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1c170 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69  hannel "---- cri
1c180 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75  tical handle cou
1c190 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c  nts unavailable\
1c1a0 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  n"..      }....
1c1b0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 1c1c0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 1c1d0 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e proc shutdown 1c1e0 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c SQLite { channel 1c1f0 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b {force false} { 1c200 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 1c210 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c220 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 # NOTE: Make su 1c230 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 re that SQLite c 1c240 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 63 ore library is c 1c250 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f ompletely shutdo 1c260 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20 wn. This.. 1c270 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65 64 # is used 1c280 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20 63 by tests that c 1c290 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74 hange configurat 1c2a0 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f ion options and/ 1c2b0 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 or those.. 1c2c0 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 65 # that nee 1c2d0 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c d to make sure l 1c2e0 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61 ogging is initia 1c2f0 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 lized (i.e. just 1c300 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20 in case.. 1c310 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 # the SQLi 1c320 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 1c330 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 was initialized 1c340 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 70 in the process p 1c350 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 rior to.. # 1c360 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 the SQLit 1c370 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67 eLog class being 1c380 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69 able to setup i 1c390 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 ts logging callb 1c3a0 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 ack)... # 1c3b0 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 Normally, t 1c3c0 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 his should only 1c3d0 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 be performed if 1c3e0 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 SQLite is loaded 1c3f0 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 and.. # 1c400 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 73 ready for us 1c410 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 e by the test su 1c420 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ite... #.. 1c430 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 if {$force
1c440 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64  || [isSQLiteRead
1c450 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
1c460 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1c470 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75   BUGFIX: Make su
1c480 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61  re that any "lea
1c490 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e  ked" transaction
1c4a0 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74  s and/or connect
1c4b0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ions..        #
1c4c0 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 61          are clea
1c4d0 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 61  ned up before ca
1c4e0 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  lling the native
1c4f0 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69   shutdown functi
1c500 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  on...        #..
1c510 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
1c520 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66  transaction [inf
1c530 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20  o transactions]
1c540 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1c550 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c  {[string match \
1c560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c570 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69  System#Data#SQLi
1c580 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63  te#SQLiteTransac
1c590 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74  tion#* $transact 1c5a0 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ion]} then {.. 1c5b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 1c5c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1c5d0 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61 sql transa 1c5e0 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 ction rollback$
1c5f0 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20  transaction..
1c600 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
1c610 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c630 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1c640 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c650 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1c660 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1c670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c680 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65       "---- rolle
1c690 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72  d back leaked tr
1c6a0 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d  ansaction \"" \.
1c6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c6c0 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f       $transactio 1c6d0 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 n \"\n].. 1c6e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c6f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1c710 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1c720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1c730 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1c740 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1c750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c760 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1c770 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f NG: failed to ro 1c780 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 llback leaked tr 1c790 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d ansaction \"" \. 1c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c7b0 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f$transactio
1c7c0 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  n "\", error: "
1c7d0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1c7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 1c7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1c800 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1c810 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c820 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69 foreach db [i 1c830 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d nfo connections] 1c840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1c850 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 1c860 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c870 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c System#Data#SQL 1c880 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite#SQLiteConnec 1c890 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 tion#*$db]} the
1c8a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1c8b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c   if {[catch {sql
1c8c0 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f   close $db} erro 1c8d0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 1c8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1c8f0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1c900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1c910 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1c920 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1c930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c940 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 "---- clos 1c950 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 ed leaked databa 1c960 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d se \""$db \"\n]
1c970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c980 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c990 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1c9a0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1c9b0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1c9d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1c9e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1ca00 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1ca10 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61  led to close lea
1ca20 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22  ked database \""
1ca30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ca40 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c          $db "\", 1ca50 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
1ca60 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
1ca70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ca80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ca90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1caa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
1cab0 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58          # BUGFIX
1cac0 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67  : Before calling
1cad0 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74   the native shut
1cae0 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d  down function, m
1caf0 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20  ake sure both..
1cb00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
1cb10 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72   of the PRAGMA r
1cb20 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79  elated directory
1cb30 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64   names are freed
1cb40 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1cb50 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
1cb60 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
1cb70 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d  $channel true... 1cb80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 1cb90 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1cba0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 1cbb0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1cbc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cbd0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1cbe0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 1cbf0 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 eMethods sqlite3 1cc00 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 _shutdown.. 1cc10 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 1cc20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1cc30 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1cc40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1cc50 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1cc60 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1cc70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cc80 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 1cc90 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 qlite3_shutdown( 1cca0 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 )... ok: "$resu
1ccb0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1ccc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1ccd0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1cce0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1ccf0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1cd00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1cd10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cd30 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74  "---- call sqlit
1cd40 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e  e3_shutdown()...
1cd50 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $1cd60 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 1cd70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1cd80 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 1cd90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1cda0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f reportSQLiteReso 1cdb0 75 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 urces {.. 1cdc0 20 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 channel {qu 1cdd0 69 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 iet false} {rese 1cde0 74 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 t true} {collect 1cdf0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 1ce00 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ce10 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 1ce20 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 report on (and 1ce30 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 possibly reset) 1ce40 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 the runtime.. 1ce50 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 # confi 1ce60 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 guration statist 1ce70 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ics... #.. 1ce80 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1ce90 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1cea0 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 d] && \.. 1ceb0 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 [haveConstrai 1cec0 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 nt buildConfigur 1ced0 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 ation.Debug]} th 1cee0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 1cef0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1cf00 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1cf10 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1cf20 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1cf40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1cf50 2e 44 65 62 75 67 44 61 74 61 20 73 65 74 74 69 .DebugData setti 1cf60 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 ngReadCounts.. 1cf70 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 1cf80 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 1cf90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1cfa0 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 set nameCount 1cfb0 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f [$settingReadCo
1cfc0 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20  unts Count]..
1cfd0 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65         set value
1cfe0 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20  Count 0....
1cff0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
1d000 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20  ach -alias pair
1d010 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 1d020 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ts {.. 1d030 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e incr valueCoun 1d040 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d t [$pair Value].
1d050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d060 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1d070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d080 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1d090 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d0b0 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20    "---- setting
1d0c0 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20  \"" [$pair Key] 1d0d0 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c "\" was read " \ 1d0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d0f0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1d100 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20  ] " times\n"]..
1d110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1d120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1d130 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 1d140 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1d150 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1d160 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64 43 h {$settingReadC
1d170 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72  ounts Clear} err
1d180 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1d190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d1a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1d1b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1d1c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1d1d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1d1e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d1f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73         "---- res
1d200 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69  et setting stati
1d210 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 72  stics for the pr
1d220 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20  evious " \..
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d240 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1d250 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1d260 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65  ount " values re
1d270 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  ad\n"]..
1d280 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d290 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1d2b0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1d2c0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1d2e0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1d2f0 65 64 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 ed to reset sett 1d300 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 ing statistics f 1d310 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 or " \.. 1d320 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70 "the p 1d330 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 revious "$nameC
1d340 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64  ount " names and
1d350 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c   " $valueCount \ 1d360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d370 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 " values rea 1d380 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 d, error: " \n\t 1d390 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
1d3a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1d3b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d3c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1d3d0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1d3e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1d3f0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1d400 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a  ublic -alias \..
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1d420 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1d430 2e 44 65 62 75 67 44 61 74 61 20 73 65 74 74 69  .DebugData setti
1d440 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73  ngFileReadCounts
1d450 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 65 74 74  ..        } sett
1d460 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74  ingFileReadCount
1d470 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
1d480 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e  .          set n
1d490 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69  ameCount [$setti 1d4a0 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 ngFileReadCounts 1d4b0 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 Count].. 1d4c0 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e set valueCoun 1d4d0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 t 0.... 1d4e0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach 1d4f0 2d 61 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 -alias pair$set
1d500 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e  tingFileReadCoun
1d510 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ts {..
1d520 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e    incr valueCoun
1d530 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d  t [$pair Value]. 1d540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 1d550 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1d560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d570 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1d580 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d5a0 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 "---- setting 1d5b0 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 \"" [$pair Key]
1d5c0 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c  "\" was read " \
1d5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d5e0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65      [$pair Value 1d5f0 5d 20 22 20 74 69 6d 65 73 20 66 72 6f 6d 20 74 ] " times from t 1d600 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 1d610 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 file\n"].. 1d620 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1d630 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1d640 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 if {$reset} t
1d650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d660 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24     if {[catch {$1d670 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 settingFileReadC 1d680 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72 ounts Clear} err 1d690 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { 1d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d6b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1d6c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1d6d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1d6e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1d6f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d700 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 "---- res 1d710 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 et setting stati 1d720 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 stics for the pr 1d730 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 evious " \.. 1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d750 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d$nameCount " nam
1d760 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43  es and " $valueC 1d770 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 ount " values re 1d780 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 ad " \.. 1d790 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 6f "fro 1d7a0 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 m the configurat 1d7b0 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 ion file\n"].. 1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1d7d0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1d7e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1d7f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1d800 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1d810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d820 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1d830 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65  : failed to rese
1d840 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
1d850 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20  tics for " \..
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d870 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20  "the previous "
1d880 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1d890 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1d8a0 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  ount \..
1d8b0 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75            " valu
1d8c0 65 73 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  es read from the
1d8d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1d8e0 69 6c 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  ile, error: " \n
1d8f0 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  \t \..
1d900 20 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c          $error \ 1d910 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 1d920 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1d930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1d940 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 1d950 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1d960 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a tCommand] && \.. 1d970 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 [haveS 1d980 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 QLiteDefineConst 1d990 61 6e 74 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 ant INTEROP_VIRT 1d9a0 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d UAL_TABLE] && \. 1d9b0 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 . [have 1d9c0 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 SQLiteDefineCons 1d9d0 74 61 6e 74 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 tant TRACK_MEMOR 1d9e0 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b Y_BYTES]} then { 1d9f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
1da00 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1da10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1da20 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 channel "---- cu 1da30 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 rrent memory in 1da40 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d use by SQLiteMem 1da50 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 ory... ".. 1da60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 1da70 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1da80 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1da90 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1daa0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1dab0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1dac0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 1dad0 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c eMemory bytesAll 1dae0 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 ocated.. 1daf0 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 1db00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1db10 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1db20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1db30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1db40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1db50 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
1db60 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1db70 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1db80 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1db90 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
1dba0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1dbb0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1dbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1dbd0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1dbe0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1dbf0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1dc00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1dc10 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1dc20 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1dc30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1dc40 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d nnel "---- maxim 1dc50 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 um memory in use 1dc60 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 by SQLiteMemory 1dc70 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d ... ".. } 1dc80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1dc90 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1dca0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1dcb0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 1dcc0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 1dcd0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1dce0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 .SQLite.SQLiteMe 1dcf0 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 mory maximumByte 1dd00 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 sAllocated.. 1dd10 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d } memory] == 1dd20 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1dd30 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1dd40 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1dd50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1dd60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1dd70 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
1dd80 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
1dd90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
1dda0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1ddb0 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
1ddc0 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
1ddd0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1dde0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ddf0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1de00 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1de10 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 1de20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1de30 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1de40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1de50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
1de60 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 1de70 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f --- current memo 1de80 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c ry in use by SQL 1de90 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 ite... ".. 1dea0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 1deb0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 1dec0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 1ded0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1dee0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1def0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1df00 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1df10 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1df20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1df30 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 1df40 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 veMethods sqlite 1df50 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 3_memory_used.. 1df60 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 1df70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1df80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1df90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1dfa0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1dfb0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1dfc0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
1dfd0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
1dfe0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1dff0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1e000 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1e010 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68  # NOTE: Maybe th
1e020 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
1e030 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c  brary is unavail
1e040 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20  able?..
1e050 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
1e060 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
1e070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1e080 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1e090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1e0a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1e0b0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1e0c0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 1e0d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1e0e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1e0f0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1e100 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d y unavailable... 1e110 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
1e120 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1e130 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1e140 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1e150 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1e160 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1e170 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20   }....      set
1e180 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20  result $memory; 1e190 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d # NOTE: Return m 1e1a0 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 emory in-use to 1e1b0 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 our caller..... 1e1c0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e1d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e1e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1e1f0 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d "---- maximum m 1e200 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 1e210 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 SQLite... ".. 1e220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 1e230 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1e240 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1e250 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1e260 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1e270 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1e280 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1e290 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1e2a0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1e2b0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1e2c0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 1e2e0 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 lite3_memory_hig 1e2f0 68 77 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20 hwater 0.. 1e300 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 1e310 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e320 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1e330 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e340 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1e350 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1e360 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
1e370 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
1e380 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1e390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1e3a0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1e3b0 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c  E: Maybe the SQL
1e3c0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1e3d0 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f   is unavailable?
1e3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1e3f0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d           set mem
1e400 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20  ory unknown....
1e410 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1e420 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1e430 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1e440 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1e450 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 1e460 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1e470 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1e480 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1e490 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 set memory una 1e4a0 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 vailable.... 1e4b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1e4c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e4d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1e4e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1e4f0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
1e500 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1e510 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 1e520 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 1e530 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 1e540 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 age$channel..
1e550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
1e560 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1e570 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 1e580 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1e590 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20   current memory
1e5a0 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
1e5b0 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  R... "..      }.
1e5c0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1e5d0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1e5e0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1e5f0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1e600 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1e610 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43  object invoke GC
1e620 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20   GetTotalMemory
1e630 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
1e640 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
1e650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1e660 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20   if {[string is
1e670 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20  integer -strict
1e680 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  $memory]} then { 1e690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1e6a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1e6b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1e6c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1e6d0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
1e6e0 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
1e6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e700 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1e710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e720 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c  set memory inval
1e730 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  id....
1e740 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1e750 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e760 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1e770 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1e780 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 1e790 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1e7a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1e7b0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1e7c0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 1e7d0 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 1e7e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e7f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e800 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1e810 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e820 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
1e830 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1e840 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
1e850 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
1e860 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c  t memory unavail
1e870 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  able....
1e880 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1e890 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 1e8a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1e8b0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1e8c0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d y \n].. } 1e8d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1e8e0 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
1e8f0 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
1e900 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
1e910 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
1e920 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74  { channel {reset
1e930 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
1e940 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1e950 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
1e960 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1e970 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
1e980 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ction is availab
1e990 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  le...      #..
1e9a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1e9b0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 1e9c0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 1e9d0 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 or function sqli 1e9e0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 1e9f0 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a rectory... ".... 1ea00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1ea10 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c NOTE: This call 1ea20 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f to the sqlite3_ 1ea30 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1ea40 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 ory function use 1ea50 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 s the.. # 1ea60 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c invalid val 1ea70 75 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 ue 0 for the fir 1ea80 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 st argument. Th 1ea90 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 is code is desig 1eaa0 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ned.. # 1eab0 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 to check if c 1eac0 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 alling the funct 1ead0 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 ion will raise a 1eae0 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 n exception (i.e 1eaf0 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ... # 1eb00 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 the actual resu 1eb10 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 lt of the functi 1eb20 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 on does not matt 1eb30 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f er as long as no 1eb40 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1eb50 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 directory is cha 1eb60 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d nged)... #. 1eb70 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 57 69 . if {[isWi 1eb80 6e 64 6f 77 73 5d 20 26 26 20 5b 63 61 74 63 68 ndows] && [catch 1eb90 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje 1eba0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1ebb0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1ebc0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1ebd0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 1ebe0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 1ebf0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ec00 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 1ec10 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e et_directory 0 n 1ec20 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d ull.. }] == 1ec30 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1ec40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ec50 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 NOTE: Calling t 1ec60 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 1ec70 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 1ec80 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 unction does not 1ec90 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1eca0 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 cause an excep 1ecb0 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c tion; therefore, 1ecc0 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 it must be avai 1ecd0 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 lable (i.e... 1ece0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 65 # eve 1ecf0 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 n though it shou 1ed00 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c ld return a fail 1ed10 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 ure return code 1ed20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 in this.. 1ed30 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d # case).. 1ed40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ed50 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 1ed60 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f t sqlite3_win32_ 1ed70 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d set_directory... 1ed80 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1ed90 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d  channel yes\n...
1eda0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1edb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73      # NOTE: Does
1edc0 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   our caller want
1edd0 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69   to reset the di
1ede0 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20  rectories?..
1edf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
1ee00 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 1ee10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 1ee20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1ee30 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 : Now make sure 1ee40 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 the database and 1ee50 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc 1ee60 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 tories are.. 1ee70 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1ee80 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c set their defaul 1ee90 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 t values, which 1eea0 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 should be null f 1eeb0 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 or both... 1eec0 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 # Sinc 1eed0 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 e the sqlite3_wi 1eee0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 1eef0 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 y function is av 1ef00 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 ailable,.. 1ef10 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 # use 1ef20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 it... # 1ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 .. for 1ef40 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 {set index 1} {$
1ef50 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72  index < 3} {incr
1ef60 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..
1ef70 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1ef80 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
1ef90 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1efa0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1efb0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
1efc0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
1efd0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
1efe0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
1eff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f000 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33      sqlite3_win3
1f010 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
1f020 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20  $index null.. 1f030 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c } resul 1f040 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 1f050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1f060 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1f070 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f090 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65  ---- call sqlite
1f0a0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
1f0b0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c  ctory(" $index \ 1f0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f0d0 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 ", null)... 1f0e0 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e ok: "$result \n
1f0f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1f100 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1f110 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1f120 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1f130 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1f140 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 1f150 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f l sqlite3_win32_ 1f160 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 set_directory(" 1f170 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20$index \..
1f180 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e              ", n
1f190 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22  ull)... error: "
1f1a0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1f1b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 1f1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1f1d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1f1e0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1f1f0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1f200 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20   no\n....
1f210 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1f220 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c  TE: Does our cal
1f230 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65  ler want to rese
1f240 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65  t the directorie
1f250 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c  s?  This can onl
1f260 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
1f270 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20     be performed
1f280 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
1f290 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f  ded and ready fo
1f2a0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73  r use by the tes
1f2b0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
1f2c0 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20     suite...
1f2d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
1f2e0 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53   {$reset && [isS 1f2f0 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 QLiteReady]} the 1f300 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 1f310 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 1f320 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 TE: Now make sur 1f330 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 e the database a 1f340 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 nd temporary dir 1f350 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 ectories are.. 1f360 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1f370 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 reset their defa 1f380 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 ult values, whic 1f390 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c h should be null 1f3a0 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 for both... 1f3b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69 # Si 1f3c0 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f nce the sqlite3_ 1f3d0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1f3e0 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 ory function doe 1f3f0 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 s not.. 1f400 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 20 # appear 1f410 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c to be available, 1f420 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 use the associa 1f430 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 ted PRAGMA comma 1f440 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23 nds.. # 1f450 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d instead.. 1f460 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1f470 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1f480 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 directory [list 1f490 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 data_store_direc 1f4a0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f tory temp_store_ 1f4b0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 directory] {.. 1f4c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 1f4d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 1f4e0 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
1f4f0 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a  ry " = \"\";"]..
1f500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1f510 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74   {[catch {execut
1f520 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c  eSql $sql} resul 1f530 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 1f540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1f550 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1f560 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f580 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41  ---- execute PRA
1f590 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 1f5a0 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d "... ok: \"" \. 1f5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f5c0 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d$result \"\n]
1f5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
1f5e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1f5f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1f600 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1f610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f620 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 "---- exec 1f630 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 ute PRAGMA "$di
1f640 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72  rectory "... err
1f650 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
1f660 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
1f670 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 1f680 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f6a0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 1f6b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1f6c0 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 NOTE: Finally, s 1f6d0 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 how the current 1f6e0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 value of the dat 1f6f0 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor 1f700 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ary.. # 1f710 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 directories. 1f720 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 This can only b 1f730 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S 1f740 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d QLite is loaded. 1f750 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 1f760 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 1f770 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui 1f780 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. 1f790 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 if {[isSQLit 1f7a0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d eReady]} then {. 1f7b0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 1f7c0 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 directory [list 1f7d0 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 data_store_dire 1f7e0 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 ctory temp_store 1f7f0 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 _directory] {.. 1f800 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1f810 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1f820 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  rgs "---- checki
1f830 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  ng " $directory 1f840 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 "... "].... 1f850 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 set sql [ap 1f860 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 pendArgs "PRAGMA 1f870 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b "$directory \;
1f880 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
1f890 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75  f {[catch {execu
1f8a0 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61  teSql $sql scala 1f8b0 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d r} result] == 0} 1f8c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1f8d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1f8e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1f8f0 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74  "ok: \"" $result 1f900 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 1f910 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1f920 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1f930 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1f940 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  gs "error: " \n\
1f950 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 1f960 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f970 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1f980 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1f990 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 oc loadSQLiteTes 1f9a0 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e tSettings { chan 1f9b0 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20 nel {suffix ""} 1f9c0 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } 1f9d0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1f9e0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c # NOTE: Skip l 1f9f0 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69 oading the setti 1fa00 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61 ngs if their usa 1fa10 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 ge has been disa 1fa20 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a bled... #.. 1fa30 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1fa40 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql 1fa50 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29 iteTestSettings) 1fa60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1fa70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1fa80 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f NOTE: Load custo 1fa90 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f m per-user and/o 1faa0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 r per-host test 1fab0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 settings now... 1fac0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1fad0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 1fae0 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 1faf0 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b m(user)]} then { 1fb00 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1fb10 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 1fb20 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 1fb30 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 [getCommonDirect 1fb40 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ory] \.. 1fb50 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 1fb60 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 s settings$suff
1fb70 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  ix . $::tcl_plat 1fb80 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c form(user) .eagl 1fb90 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 1fba0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 1fbb0 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 s$userSettingsF
1fbc0 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
1fbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1fbe0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1fbf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1fc00 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1fc10 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fc30 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70   "---- loading p
1fc40 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74  er-user test set
1fc50 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
1fc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1fc70 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting 1fc80 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c sFileName \"...\ 1fc90 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 1fca0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 1fcb0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c upl 1fcd0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 evel 1 [list sou 1fce0 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67 rce$userSetting
1fcf0 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  sFileName]..
1fd00 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d          } error]
1fd10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1fd20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1fd30 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 1fd50 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1fd60 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1fd80 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1fd90 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72  iled to load per
1fda0 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 66  -user settings f
1fdb0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1fdd0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 1fde0 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a Name "\", error: 1fdf0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
1fe00 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1fe10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1fe20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   }..          }
1fe30 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1fe40 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1fe50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fe60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1fe70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1fe80 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1fe90 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
1fea0 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72  pped loading per
1feb0 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69  -user test setti
1fec0 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fee0 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46    $userSettingsF 1fef0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 ileName "\", it 1ff00 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n 1ff10 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "].. 1ff20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1ff30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1ff40 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 1ff50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1ff60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1ff70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1ff80 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a ############.... 1ff90 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 1ffa0 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 o exists ::tcl_p 1ffb0 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 latform(host)]} 1ffc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ffd0 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e set hostSettin 1ffe0 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 gsFileName [file 1fff0 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e join [getCommon 20000 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 Directory] \.. 20010 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 [app 20020 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 endArgs settings 20030 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63$suffix . $::tc 20040 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 l_platform(host) 20050 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 .eagle]].... 20060 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 20070 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 65 74 exists$hostSet
20080 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20  tingsFileName]}
20090 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
200a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 200b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 200c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
200d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
200e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
200f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61         "---- loa
20100 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65  ding per-host te
20110 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  st settings file
20120 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
20130 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53            $hostS 20140 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 20150 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 \"...\n].. 20160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 20170 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 20180 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 20190 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 uplevel 1 [li 201a0 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53 st source$hostS
201b0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d  ettingsFileName]
201c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
201d0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
201f0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 20200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20210 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
20220 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
20230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20240 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
20250 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f  NG: failed to lo
20260 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74  ad per-host sett
20270 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d  ings file \"" \.
20280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20290 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 202a0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 202b0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
202c0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
202d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
202e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
202f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
20300 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$20310 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 20320 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 20330 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
20340 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
20360 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69  -- skipped loadi
20370 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74  ng per-host test
20380 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
20390 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
203a0 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 203b0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 203c0 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e 203d0 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. 203e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 203f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 20400 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 20410 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 70 .... proc cop 20420 79 53 61 6d 70 6c 65 44 61 74 61 62 61 73 65 46 ySampleDatabaseF 20430 69 6c 65 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 iles {} {.. 20440 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 uplevel 1 {.. 20450 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 20460 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 28 6f # NOTE: Copy (o 20470 72 20 72 65 2d 63 6f 70 79 29 20 74 68 65 20 72 r re-copy) the r 20480 65 66 65 72 65 6e 63 65 20 64 61 74 61 62 61 73 eference databas 20490 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 e file used for 204a0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 204b0 20 20 20 20 20 20 75 6e 69 74 20 74 65 73 74 20 unit test 204c0 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 to the build dir 204d0 65 63 74 6f 72 79 20 69 6e 20 63 61 73 65 20 69 ectory in case i 204e0 74 20 68 61 73 20 62 65 65 6e 20 63 68 61 6e 67 t has been chang 204f0 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 20500 20 20 20 20 62 79 20 61 20 70 72 65 76 69 6f 75 by a previou 20510 73 20 74 65 73 74 20 72 75 6e 2e 0d 0a 20 20 20 s test run... 20520 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20530 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 file copy -force 20540 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46$northwindEfDbF
20550 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
20560 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
20570 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66  BuildDirectory f
20580 61 6c 73 65 5d 20 5b 66 69 6c 65 20 74 61 69 6c  alse] [file tail
20590 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46   $northwindEfDbF 205a0 69 6c 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ile]].. }.. 205b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 205c0 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 205d0 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Prologue {} {.. 205e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 205f0 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 NOTE: Skip runni 20600 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 ng our custom pr 20610 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 ologue if the ma 20620 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d in one has been. 20630 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 20640 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 kipped... # 20650 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 20660 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 fo exists ::no(p 20670 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d rologue.eagle)]} 20680 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20690 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 206a0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 TE: Load the "be 206b0 66 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 fore-constraints 206c0 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 " custom per-use 206d0 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 r and/or per-hos 206e0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 206f0 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 test settings 20700 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 20710 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 .. upleve 20720 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 l 1 [list loadSQ 20730 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 LiteTestSettings 20740 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20750 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20   .before]....
20760 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20770 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
20780 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f   the [object] co
20790 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62  mmand is availab
207a0 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20  le; if not, add
207b0 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
207c0 20 20 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d        shims to m
207d0 61 6b 65 20 74 68 65 20 74 65 73 74 20 73 75 69  ake the test sui
207e0 74 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e  te run smoother.
207f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
20800 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
20810 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
20820 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 20830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 20840 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 20850 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d etermine the nam 20860 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 es of the native 20870 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 platform and ar 20880 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 chitecture... 20890 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 208a0 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 set platform [ge 208b0 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 tBuildPlatform t 208c0 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 rue].. se 208d0 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b t architecture [ 208e0 61 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 architectureForP 208f0 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 latform$platfor
20900 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  m]....        #.
20910 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
20920 20 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f   Show the platfo
20930 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74  rm and architect
20940 75 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ure used to help
20950 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20   locate the..
20960 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74       #       nat
20970 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e  ive build files.
20980 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
20990 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 209a0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 209b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 209c0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 "---- plat 209d0 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e form for locatin 209e0 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 g native build f 209f0 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 iles is \"" \.. 20a00 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74$plat
20a10 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  form \"\n]....
20a20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 20a30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 20a40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 20a50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 "---- arc 20a60 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f hitecture for lo 20a70 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 cating native bu 20a80 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 ild files is \"" 20a90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20aa0 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22$architecture \"
20ab0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
20ac0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
20ad0 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f  : Build a list o
20ae0 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  f configuration
20af0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
20b00 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
20b10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
20b20 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  nfigFileNames [l
20b30 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
20b40 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
20b50 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67  QLite.dll.config
20b60 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
20b70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
20b80 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20  Build a list of
20b90 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65  auxiliary Manage
20ba0 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69  d Debugging Assi
20bb0 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20  stants (MDA)..
20bc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
20bd0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
20be0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
20bf0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20c00 20 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e        set mdaCon
20c10 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
20c20 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
20c30 20 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65    EagleShell32.e
20c40 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e  xe.mda.config In
20c50 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e  staller.exe.mda.
20c60 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20  config \..
20c70 20 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d        test.exe.m
20c80 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69  da.config testli
20c90 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  nq.exe.mda.confi
20ca0 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g \..
20cb0 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61   testef6.exe.mda
20cc0 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
20cd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
20ce0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
20cf0 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61   list of externa
20d00 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  l files that we
20d10 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66  handle.  Some of
20d20 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
20d30 20 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61    these files ma
20d40 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f  y be native and/
20d50 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  or managed assem
20d60 62 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a  blies that are..
20d70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20d80 72 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66  required to perf
20d90 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74  orm various test
20da0 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
20db0 20 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72         set exter
20dc0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  nalFileNames [li
20dd0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
20de0 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74    [file join Ent
20df0 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62  ityFramework lib
20e00 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
20e10 73 74 20 46 78 20 22 22 5d 20 5c 0d 0a 20 20 20  st Fx ""] \..
20e20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
20e30 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78   map [list netFx
20e40 34 35 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46  451 netFx45 netF
20e50 78 34 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74  x452 netFx45 net
20e60 46 78 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20  Fx46 \..
20e70 20 20 20 20 6e 65 74 46 78 34 35 20 6e 65 74 46      netFx45 netF
20e80 78 34 36 31 20 6e 65 74 46 78 34 35 20 6e 65 74  x461 netFx45 net
20e90 46 78 34 36 32 20 6e 65 74 46 78 34 35 5d 20 5b  Fx462 netFx45] [
20ea0 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d  getBuildNetFx]]]
20eb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20ec0 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e  EntityFramework.
20ed0 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  dll]]....
20ee0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
20ef0 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69  TE: Build the li
20f00 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73  st of native ass
20f10 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
20f20 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
20f30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20f40 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61  set nativeFileNa
20f50 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  mes [list]....
20f60 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
20f70 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  nd nativeFileNam
20f80 65 73 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  es [getNativeLib
20f90 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
20fa0 79 5d 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c  y]..        eval
20fb0 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46   lappend nativeF
20fc0 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 49 6e 74  ileNames [getInt
20fd0 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65  eropAssemblyFile
20fe0 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20  NamesOnly]....
20ff0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
21000 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
21010 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64  he list of mixed
21020 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66  -mode assembly f
21030 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
21040 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
21050 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 69 78  .        set mix
21060 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  edFileNames [lis
21070 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t]....        if
21080 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
21090 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65  ion native]} the
210a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  n {..          l
210b0 61 70 70 65 6e 64 20 6d 69 78 65 64 46 69 6c 65  append mixedFile
210c0 4e 61 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 74  Names System.Dat
210d0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20  a.SQLite.dll..
210e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
210f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
21100 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
21110 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20  list of managed
21120 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74  assembly files t
21130 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a  hat we handle...
21140 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21150 20 20 20 73 65 74 20 6d 61 6e 61 67 65 64 46 69     set managedFi
21160 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
21170 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
21180 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
21190 4c 69 6e 71 2e 64 6c 6c 20 53 79 73 74 65 6d 2e  Linq.dll System.
211a0 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
211b0 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dll]....
211c0 69 66 20 7b 21 5b 68 61 73 52 75 6e 74 69 6d 65  if {![hasRuntime
211d0 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20  Option native]}
211e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
211f0 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 61 67 65    lappend manage
21200 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 65  dFileNames Syste
21210 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
21220 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
21230 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21240 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
21250 74 68 65 20 76 61 72 69 6f 75 73 20 6c 69 73 74  the various list
21260 73 20 6f 66 20 66 69 6c 65 20 6e 61 6d 65 73 20  s of file names
21270 74 68 61 74 20 61 72 65 20 68 61 6e 64 6c 65 64  that are handled
21280 20 62 79 20 74 68 69 73 0d 0a 20 20 20 20 20 20   by this..
21290 20 20 23 20 20 20 20 20 20 20 70 72 6f 63 65 64    #       proced
212a0 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ure...        #.
212b0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $212c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 212d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 212e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 212f0 6c 69 73 74 20 6f 66 20 5c 22 63 6f 6e 66 69 67 list of \"config 21300 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e uration\" file n 21310 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20 ames is: " \.. 21320 20 20 20 20 20 20 20 20 20 20 24 63 6f 6e 66 69$confi
21330 67 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a  gFileNames \n]..
21340 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
21350 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 21360 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21370 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 21380 20 6c 69 73 74 20 6f 66 20 5c 22 4d 44 41 20 63 list of \"MDA c 21390 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 onfiguration\" f 213a0 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 213b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
213c0 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  mdaConfigFileNam
213d0 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  es \n]....
213e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 213f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21400 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 21410 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 "---- list of 21420 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 66 69 \"external\" fi 21430 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 le names is: "$
21440 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
21450 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
21460 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 21470 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 21480 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 21490 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 214a0 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 20 \"native\" file 214b0 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6e 61 74 names is: "$nat
214c0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d  iveFileNames \n]
214d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
214e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 214f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 21500 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 21510 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 69 78 -- list of \"mix 21520 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 ed\" file names 21530 69 73 3a 20 22 20 24 6d 69 78 65 64 46 69 6c 65 is: "$mixedFile
21540 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  Names \n]....
21550 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 21560 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 21570 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 21580 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 "---- list 21590 20 6f 66 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 of \"managed\" 215a0 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 215b0 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d$managedFileNam
215c0 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  es \n]....
215d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
215e0 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20  OTE: Remove any
215f0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
21600 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
21610 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  he native and/or
21620 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
21630 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62    managed assemb
21640 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
21650 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66   handle unless f
21660 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20  orbidden from..
21670 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
21680 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20  oing so...
21690 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
216a0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
216b0 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65  :no(sqliteRemove
216c0 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
216d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
216e0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
216f0 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 21700 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 21710 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 21720 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 21730 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
21740 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
21750 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
21760 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 21770 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 21780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 21790 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 217a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 217b0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
217c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
217d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
217e0 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c  leName $external 217f0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 21800 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 21810 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 21820 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c dArgs file_ [fil 21830 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
21840 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ]]..          }.
21850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
21860 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 21870 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 21880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 21890 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 218a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 218b0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
218c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
218d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
218e0 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c  leName $mixedFil 218f0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 21900 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 21910 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 21920 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
21930 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
21940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
21950 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $21960 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 21970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21980 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 21990 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 219a0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 e_$fileName]..
219b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
219c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
219d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
219e0 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73  TE: Skip all Sys
219f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
21a00 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e  related file han
21a10 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c  dling (deleting,
21a20 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
21a30 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c    copying, and l
21a40 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72  oading) if instr
21a50 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
21a60 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
21a70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
21a80 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  o(sqliteFiles)]}
21a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21aa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
21ab0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
21ac0 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e  ing to delete an
21ad0 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72  y files if instr
21ae0 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
21af0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
21b00 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
21b10 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
21b20 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
21b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
21b40 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
21b50 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
21b60 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d  teConfigFiles)]}
21b70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21b80 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
21b90 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46  ileName $configF 21ba0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 21bb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 21bc0 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 21bd0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
21be0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21bf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
21c00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
21c10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
21c20 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65  deleteSqliteExte
21c30 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65  rnalFiles)]} the
21c40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21c50 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
21c60 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69  ame $mdaConfigFi 21c70 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 21c80 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 21c90 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 leteBuildFile$f
21ca0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20  ileName false..
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21cd0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
21ce0 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61   $externalFileNa 21cf0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 21d00 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 21d10 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
21d20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
21d30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
21d40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
21d50 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
21d60 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
21d70 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c  eSqliteNativeFil
21d80 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
21d90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
21da0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
21db0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49  no(deleteSqliteI
21dc0 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c  mplicitNativeFil
21dd0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
21df0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $21e00 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 21e10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21e20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 tryDeleteAs 21e30 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
21e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21e50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
21e60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
21e70 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
21e80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
21e90 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c  eteSqliteNonImpl
21ea0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
21eb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21ec0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
21ed0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
21ee0 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d  teSqlitePlatform
21ef0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f10 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
21f20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d   $platform] > 0} 21f30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21f40 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 21f50 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
21f60 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f80 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
21f90 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 21fa0 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20$platform..
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21fd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
21fe0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
21ff0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
22000 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63  teSqliteArchitec
22010 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c  tureFiles)] && \
22020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22030 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
22040 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75  ngth $architectu 22050 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d re] > 0} then {. 22060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22070 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 22080 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
22090 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
220a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44              tryD
220b0 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66  eleteAssembly $f 220c0 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 ileName$archite
220d0 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20  cture..
220e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
220f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22120 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
22130 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
22140 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
22150 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68  MixedFiles)]} th
22160 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22170 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
22180 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
22190 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e  the "native" run
221a0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73  time option is s
221b0 65 74 2c 20 64 65 6c 65 74 65 20 69 6d 70 6c 69  et, delete impli
221c0 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  cit..
221d0 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64     #       mixed
221e0 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66  -mode assembly f
221f0 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54  iles as well.  T
22200 68 69 73 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  his runtime opti
22210 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
22220 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20    #       check
22230 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20  is handled when
22240 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73  building the lis
22250 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d  t of mixed-mode.
22260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
22270 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
22280 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20  file names...
22290 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
222a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
222b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
222c0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49  no(deleteSqliteI
222d0 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65  mplicitMixedFile
222e0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
22300 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 22310 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 22320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22330 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 22340 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a mbly$fileName..
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22360 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
22370 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
22380 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
22390 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
223a0 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63  eSqliteNonImplic
223b0 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  itFiles)]} then
223c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
223d0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
223e0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
223f0 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69  SqlitePlatformFi
22400 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22420 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $22430 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 platform] > 0} t 22440 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 22450 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 22460 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 fileName$mixed
22470 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22490 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
224a0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  ly $fileName$pl
224b0 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
224c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
224e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
224f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
22500 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
22510 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72  qliteArchitectur
22520 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20  eFiles)] && \..
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22540 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
22550 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  h $architecture] 22560 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22580 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 22590 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
225a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
225b0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
225c0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 225d0 61 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 ame$architectur
225e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
225f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
22600 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
22610 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
22620 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
22630 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
22640 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
22650 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61  deleteSqliteMana
22660 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  gedFiles)]} then
22670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22680 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
22690 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e  me $managedFileN 226a0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 226b0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 226c0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
226d0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
226e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
226f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
22700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
22710 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
22720 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65  E: Check for the
22730 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75   "autoSelect" ru
22740 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49  ntime option.  I
22750 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20  f present,..
22760 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74        #       at
22770 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74  tempt to automat
22780 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68  ically select th
22790 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c  e first availabl
227a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
227b0 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22       build (or "
227c0 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c  release") of SQL
227d0 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44  ite and System.D
227e0 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20  ata.SQLite..
227f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
22800 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 74  r use with the t
22810 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
22820 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
22830 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
22840 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c  meOption autoSel
22850 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ect]} then {..
22860 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
22870 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75  checkForSQLiteBu
22880 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ilds $::test_cha 22890 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e nnel true]} then 228a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 228b0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 228c0 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 Releases$::test
228d0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20  _channel true..
228e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
228f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
22900 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22910 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
22920 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66   trying to verif
22930 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  y the build dire
22940 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63  ctory if instruc
22950 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..
22960 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  #       otherwis
22970 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  e, make sure it
22980 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20  actually exists
22990 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69  or halt the enti
229a0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  re..          #
229b0 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 70 72        testing pr
229c0 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73  ocess if it does
229d0 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20   not exist...
229e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
229f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
22a00 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66  xists ::no(verif
22a10 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29  yBuildDirectory)
22a20 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
22a30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22a40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
22a50 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65   this point, the
22a60 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
22a70 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61   MUST exist as a
22a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
22a90 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65        valid dire
22aa0 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65  ctory for the te
22ab0 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f  sting process to
22ac0 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20   continue...
22ad0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22ae0 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63         set direc
22af0 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69  tory [getBuildDi
22b00 72 65 63 74 6f 72 79 20 66 61 6c 73 65 5d 0d 0a  rectory false]..
22b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22b20 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
22b30 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c  $directory] || \ 22b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22b50 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 ![file isdirec 22b60 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 5d tory$directory]
22b70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22b80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22b90 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
22ba0 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 61   Just prior to a
22bb0 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20  ctually halting
22bc0 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63  the testing proc
22bd0 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ess,..
22be0 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20      #       add
22bf0 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 20  an error to the
22c00 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a  test log file...
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
22c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
22c30 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22c40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22c50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22c60 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c "---- coul 22c70 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 d not verify bui 22c80 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 ld directory \"" 22c90 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20$directory \..
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22cb0 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e   "\", all testin
22cc0 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a  g halted\n"]....
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
22ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
22cf0 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61   NOTE: Raising a
22d00 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 72   script error fr
22d10 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68  om this point sh
22d20 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20  ould halt..
22d30 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
22d40 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f   the testing pro
22d50 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...
22d60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22d70 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70        error [app
22d80 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
22da0 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62  uld not verify b
22db0 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c  uild directory \
22dc0 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  "" $directory \. 22dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22de0 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 "\", all test 22df0 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 ing halted"].. 22e00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 22e10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 22e20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 22e30 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 22e40 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 trying to copy a 22e50 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 ny files if inst 22e60 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 ructed... 22e70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 22e80 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 22e90 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 22ea0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 22eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 22ec0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 22ed0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 ::no(copySqliteC 22ee0 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 onfigFiles)]} th 22ef0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22f00 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
22f10 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22f30 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 63  ---- copying \"c
22f40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66  onfiguration\" f
22f50 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
22f60 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
22f70 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f  ach fileName $co 22f80 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 22f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22fa0 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c tryCopyBuildFil 22fb0 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 e$fileName fals
22fc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
22fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
22fe0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
22ff0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
23000 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
23010 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29  teExternalFiles)
23020 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23030 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
23040 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
23050 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 67  : Copy the Manag
23060 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73  ed Debugging Ass
23070 69 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 6f  istants (MDA) co
23080 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..
23090 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
230a0 20 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20     file for the
230b0 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74  Eagle shell to t
230c0 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20  he build output
230d0 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..
230e0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
230f0 20 20 77 68 69 6c 65 20 75 73 69 6e 67 20 65 61    while using ea
23100 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20  ch of the names
23110 6f 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 6c  of the various l
23120 65 67 61 63 79 20 74 65 73 74 0d 0a 20 20 20 20  egacy test..
23130 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
23140 20 20 65 78 65 63 75 74 61 62 6c 65 73 2e 20 20    executables.
23150 54 68 69 73 20 77 69 6c 6c 20 68 65 6c 70 20 74  This will help t
23160 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
23170 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20   all the..
23180 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23190 6c 65 67 61 63 79 20 74 65 73 74 73 20 72 75 6e  legacy tests run
231a0 20 77 69 74 68 20 65 78 61 63 74 6c 79 20 74 68   with exactly th
231b0 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20 4d 61  e same set of Ma
231c0 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..
231d0 20 20 20 20 20 23 20 20 20 20 20 20 20 44 65 62       #       Deb
231e0 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74  ugging Assistant
231f0 73 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20  s configured...
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
23220 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 23230 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 23240 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 23250 6f 70 79 69 6e 67 20 5c 22 4d 44 41 20 63 6f 6e opying \"MDA con 23260 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c figuration\" fil 23270 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 23280 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 23290 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 h fileName$mdaC
232a0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
232b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
232c0 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46    tryCopyBinaryF
232d0 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65  ile EagleShell.e
232e0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 72  xe.mda.config tr
232f0 75 65 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d  ue "" $fileName. 23300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 23310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 23320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 23330 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 # NOTE: Copy 23340 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e the external bin 23350 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 aries, if any, t 23360 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 o the directory 23370 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 that.. 23380 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 23390 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65 20 73 ains the Eagle s 233a0 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73 20 74 hell. This is t 233b0 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20 74 6f ypically used to 233c0 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 make.. 233d0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 72 # sur 233e0 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72 65 66 e assemblies ref 233f0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 6f erenced by the o 23400 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 nes being tested 23410 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 are.. 23420 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 # avai 23430 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74 68 65 lable during the 23440 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 testing process 23450 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 23460 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 23470 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
23480 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f  channel "---- co
23490 70 79 69 6e 67 20 5c 22 65 78 74 65 72 6e 61 6c  pying \"external
234a0 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a  \" files...\n"..
234b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
234c0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
234d0 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61   $externalFileNa 234e0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 234f0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 45 78 tryCopyEx 23500 74 65 72 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 ternalFile$file
23510 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
23520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
23530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
23540 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
23550 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
23560 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73  qliteNativeFiles
23570 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
23580 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
23590 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
235a0 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 70  E: If the test p
235b0 6c 61 74 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c  latform is likel
235c0 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f  y the default fo
235d0 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  r this..
235e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61        #       ma
235f0 63 68 69 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20  chine, also try
23600 74 6f 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69  to copy the nati
23610 76 65 20 66 69 6c 65 73 20 74 6f 20 74 68 65 0d  ve files to the.
23620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
23630 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 6c 6f         binary lo
23640 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...
23650 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23660 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
23670 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
23680 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69  opySqliteImplici
23690 74 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 20 26  tNativeFiles)] &
236a0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
236b0 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c         [isDefaul
236c0 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d  tBuildPlatform]}
236d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
236e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $236f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 23700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23710 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 "---- copy 23720 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22 6e ing implicit \"n 23730 61 74 69 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e ative\" files... 23740 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n".... 23750 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 23760 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
23770 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23790 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66  yCopyAssembly $f 237a0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 ileName false.. 237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 237c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 237d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 237e0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 237f0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 23800 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 23810 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23830 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 23840 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 23850 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d ePlatformFiles)] 23860 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 23870 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 23880 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
23890 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
238a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
238b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 238c0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 238d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 238f0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e ---- copying \"n 23900 61 74 69 76 65 5c 22 20 66 69 6c 65 73 20 66 6f ative\" files fo 23910 72 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c r platform \"" \ 23920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23930 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
23940 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20  m \"...\n]....
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23960 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
23970 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 23980 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 23990 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 239a0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
239b0 6d 65 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f  me false $platfo 239c0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 239d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 239e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 23a00 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 23a10 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 ::no(copySqliteA 23a20 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 rchitectureFiles 23a30 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 23a50 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 ring length$arc
23a60 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20  hitecture] > 0}
23a70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
23a80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
23a90 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 23aa0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23ac0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 "---- copyi 23ad0 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 ng \"native\" fi 23ae0 6c 65 73 20 66 6f 72 20 61 72 63 68 69 74 65 63 les for architec 23af0 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 ture \"" \.. 23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23b10 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20$architecture
23b20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  \"...\n]....
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
23b40 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $23b50 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 23b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23b70 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 tryCopyAs 23b80 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
23b90 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 65 63   false $architec 23ba0 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture.. 23bb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23bc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 23bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 23be0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 23bf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 23c00 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 23c10 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 69 78 no(copySqliteMix 23c20 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 edFiles)]} then 23c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23c40 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 23c50 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 # NOTE: If the 23c60 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 23c70 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c e option is set, 23c80 20 63 6f 70 79 20 69 6d 70 6c 69 63 69 74 0d 0a copy implicit.. 23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 23ca0 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 mixed-mode 23cb0 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 assembly files 23cc0 61 73 20 77 65 6c 6c 2e 20 20 54 68 65 20 72 75 as well. The ru 23cd0 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 ntime option.. 23ce0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 23cf0 20 20 20 20 63 68 65 63 6b 20 69 73 20 68 61 6e check is han 23d00 64 6c 65 64 20 77 68 65 6e 20 62 75 69 6c 64 69 dled when buildi 23d10 6e 67 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d ng the list of m 23d20 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 ixed-mode.. 23d30 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 23d40 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 23d50 61 6d 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 ames... 23d60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 23d70 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 23d80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 23d90 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d ySqliteImplicitM 23da0 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 ixedFiles)]} the 23db0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 23dc0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
23dd0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23df0 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
23e00 69 6d 70 6c 69 63 69 74 20 5c 22 6d 69 78 65 64  implicit \"mixed
23e10 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a  \" files...\n"..
23e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23e30 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
23e40 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 23e50 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 23e60 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 23e70 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
23e80 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  e false..
23e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
23ea0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
23ec0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
23ed0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f  :no(copySqliteNo
23ee0 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  nImplicitFiles)]
23ef0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23f00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
23f10 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
23f20 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 66  (copySqlitePlatf
23f30 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
23f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23f50 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
23f60 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 23f70 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 23f90 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
23fa0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
23fb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
23fc0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
23fd0 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22  opying \"mixed\"
23fe0 20 66 69 6c 65 73 20 66 6f 72 20 70 6c 61 74 66   files for platf
23ff0 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  orm \"" \..
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24010 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e   $platform \"... 24020 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 24030 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 24040 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 fileName$mixed
24050 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24070 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
24080 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65   $fileName false 24090 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
240b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
240c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
240d0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
240e0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
240f0 79 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74  ySqliteArchitect
24100 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ureFiles)] && \.
24110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24120 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
24130 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 24140 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24160 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
24170 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
24180 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
241a0 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69 78  -- copying \"mix
241b0 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61  ed\" files for a
241c0 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20  rchitecture \""
241d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
241e0 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74           $archit 241f0 65 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d ecture \"...\n]. 24200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 24210 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 24220 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
24230 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
24250 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 24260 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 leName false$ar
24270 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
242a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
242b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
242c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
242d0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
242e0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
242f0 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29  iteManagedFiles)
24300 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24310 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $24320 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 ::test_channel " 24330 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d ---- copying \"m 24340 61 6e 61 67 65 64 5c 22 20 66 69 6c 65 73 2e 2e anaged\" files.. 24350 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 24360 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 24370 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 leName$managedF
24380 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
24390 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
243a0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 243b0 65 4e 61 6d 65 20 74 72 75 65 0d 0a 20 20 20 20 eName true.. 243c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 243d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 243e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 243f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24400 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 24410 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e rying to load an 24420 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 y files if instr 24430 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 24440 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 24450 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 24460 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 24470 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 24480 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 24490 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 244a0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d :no(loadSqliteIm 244b0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 244c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 244d0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 244e0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 244f0 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 .SQLite.dll.. 24500 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 24510 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 24520 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 24530 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 (loadSqliteLinqF 24540 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 24560 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 24570 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 24580 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 .Linq.dll.. 24590 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 245a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 245b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 245c0 6f 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 oadSqliteEf6File 245d0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 245e0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f tryLo 245f0 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 adAssembly Syste 24600 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 m.Data.SQLite.EF 24610 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 6.dll.. 24620 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 24630 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 24640 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 24650 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 qliteNonImplicit 24660 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 24670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 24680 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 24690 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 246a0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 PlatformFiles)] 246b0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 246c0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 246d0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
246e0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24700 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
24710 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
24720 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d  e.dll $platform. 24730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 24740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 24750 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 24760 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 24770 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 iteArchitectureF 24780 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 247a0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 string length$a
247b0 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30  rchitecture] > 0
247c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
247d0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61            tryLoa
247e0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  dAssembly System
247f0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
24800 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a   $architecture.. 24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 24820 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 24830 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 24840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 24850 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 24860 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 meOnly$nativeFi
24870 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
24880 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
24890 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
248a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 248b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 248d0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 248e0 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 n of \""$fileNa
248f0 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22  meOnly "\"... \"
24900 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
24910 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69       [file versi
24920 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  on [getBinaryFil
24930 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f  eName $fileNameO 24940 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 nly]] \"\n].. 24950 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 24960 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 }.... f 24970 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 24980 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 nly$mixedFileNa
24990 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
249a0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
249b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 249c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 249d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 249e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 249f0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 24a00 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e \""$fileNameOn
24a10 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d  ly "\"... \"" \.
24a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24a30 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b   [file version [
24a40 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
24a50 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  e $fileNameOnly] 24a60 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ] \"\n].. 24a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 24a80 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 ... forea 24a90 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 ch fileNameOnly 24aa0 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65$managedFileName
24ab0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  s {..          c
24ac0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
24ad0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 24ae0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 24af0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 24b00 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 24b10 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 24b20 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 ""$fileNameOnly
24b30 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20   "\"... \"" \..
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
24b50 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
24b60 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
24b70 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20  $fileNameOnly]] 24b80 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 24b90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 24ba0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 24bb0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
24bc0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
24bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   {..          fo
24be0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
24bf0 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  ly $nativeFileNa 24c00 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 24c10 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 24c20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 24c30 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
24c40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24c60 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
24c70 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74  ion of \"" $plat 24c80 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 form \.. 24c90 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c /$fil
24ca0 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e  eNameOnly "\"...
24cb0 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69   \"" [file versi
24cc0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
24cd0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61          [getBina
24ce0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 24cf0 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66 6f NameOnly$platfo
24d00 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  rm]] \"\n]..
24d10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
24d20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
24d30 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
24d40 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46  NameOnly $mixedF 24d50 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 24d60 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 24d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 24d80 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
24d90 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
24da0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24db0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
24dc0 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
24dd0 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20  $platform \.. 24de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / 24df0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22$fileNameOnly "
24e00 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20  \"... \"" [file
24e10 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
24e30 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
24e40 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70  $fileNameOnly$p
24e50 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d  latform]] \"\n].
24e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
24e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
24e90 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
24ea0 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75  ngth $architectu 24eb0 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d re] > 0} then {. 24ec0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 24ed0 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 ch fileNameOnly 24ee0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
24ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
24f00 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
24f10 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 24f20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 24f30 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 24f50 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 24f60 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
24f70 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
24f80 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69             / $fi 24f90 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e leNameOnly "\".. 24fa0 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 . \"" [file vers 24fb0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 24fc0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 24fd0 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
24fe0 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69  eNameOnly $archi 24ff0 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d tecture]] \"\n]. 25000 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 25010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 25020 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 25030 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d fileNameOnly$m
25040 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  ixedFileNames {.
25050 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
25060 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
25070 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 25080 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 25090 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 250a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 250b0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 250c0 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 \""$architectu
250d0 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  re \..
250e0 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e          / $fileN 250f0 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c ameOnly "\"... \ 25100 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e "" [file version 25110 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25120 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 25130 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
25140 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63  meOnly $architec 25150 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 ture]] \"\n].. 25160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 25170 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 25180 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 25190 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 251a0 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 : Grab the list 251b0 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d of managed assem 251c0 62 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 blies for the cu 251d0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20 rrent process.. 251e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 251f0 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 nd report on the 25200 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 25210 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 ite related ones 25220 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 25230 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 25240 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 25250 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 nd]} then {.. 25260 20 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d set assem 25270 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e blies [object in 25280 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 voke AppDomain.C 25290 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 urrentDomain Get 252a0 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 Assemblies].... 252b0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 252c0 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 foreach assembly 252d0 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a$assemblies {..
252e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
252f0 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b  [string match \{
25300 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
25310 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20  te* $assembly]} 25320 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 25330 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
25340 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
25350 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
25370 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20  -- found loaded
25380 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73  assembly: " $ass 25390 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 embly \n].. 253a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 253b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 253c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 253d0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 253e0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
253f0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
25400 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69        "---- defi
25410 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ne constants for
25420 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
25430 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a  QLite\"... "....
25440 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
25450 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
25460 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
25470 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
25480 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
25490 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
254a0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
254b0 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  3 DefineConstant
254c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 64  s..          } d
254d0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20  efineConstants]
254e0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
254f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
25500 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 25510 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 [appendArgs [for 25520 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c matList [lsort \ 25530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25540 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e$defineConstan
25550 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d  ts] <none>] \n].
25560 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
25570 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
25580 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 25590 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 255a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 255b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 255c0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 255d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
255e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
25600 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 73 69  --- source versi
25610 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  on of \"System.D
25620 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
25630 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
25640 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
25650 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
25660 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
25670 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25690 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
256a0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te.SQLiteConnect
256b0 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73  ion ProviderVers
256c0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ion..          }
256d0 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20   version] == 0}
256e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
256f0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
25700 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version] 25710 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 25720 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 25730 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. 25740 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 25750 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 25760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
25770 5b 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72  [appendArgs $ver 25780 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sion \n].. 25790 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 257a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 257b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
257c0 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
257d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
257e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
257f0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
25800 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 25810 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 25820 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 "---- sou 25830 72 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 rce checkout of 25840 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 25850 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d Lite.dll\"... ". 25860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 25870 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 25880 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 25890 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 258a0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 258b0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 258c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 258d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 iteConnection Pr 258e0 6f 76 69 64 65 72 53 6f 75 72 63 65 49 64 0d 0a oviderSourceId.. 258f0 20 20 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 } sour 25900 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 25910 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25920 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 25930 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d th$sourceId] ==
25940 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
25950 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
25960 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20  urceId null..
25970 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
25980 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 25990 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 259a0 70 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 ppendArgs$sourc
259b0 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  eId \n]..
259c0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
259d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $259e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 259f0 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 25a00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 25a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 25a20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 25a30 68 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 heck the availab 25a40 6c 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 le builds (and " 25a50 72 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 releases") of SQ 25a60 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 Lite and.. 25a70 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d # System 25a80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 .Data.SQLite... 25a90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25aa0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 25ab0 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 Builds$::test_c
25ac0 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20  hannel..
25ad0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65  checkForSQLiteRe
25ae0 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63  leases $::test_c 25af0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 25b00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 25b10 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 OTE: Now, we nee 25b20 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 d to know if the 25b30 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 25b40 72 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c rary is availabl 25b50 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 25b60 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 (i.e. because 25b70 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c the managed-onl 25b80 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 25b90 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 Lite assembly ca 25ba0 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 25bb0 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 load without 25bc0 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 it; however, it 25bd0 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 cannot do anythi 25be0 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 ng useful withou 25bf0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 25c00 20 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 it). If we a 25c10 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 re using the mix 25c20 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 25c30 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d and we already. 25c40 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25c50 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 found it (above 25c60 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 ), this should a 25c70 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a lways succeed... 25c80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25c90 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 25ca0 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 eLibrary$::test
25cb0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
25cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
25cd0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
25ce0 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72  the SQLite inter
25cf0 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61  op assembly is a
25d00 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20  vailable...
25d10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
25d20 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65  eckForSQLiteInte
25d30 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  rop $::test_chan 25d40 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 25d50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 25d60 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 : Check the SQLi 25d70 74 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 te database and 25d80 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 25d90 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ories... 25da0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 25db0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f ForSQLiteDirecto 25dc0 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ries$::test_cha
25dd0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
25de0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
25df0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
25e00 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f  termine if vario
25e10 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  us compile-time
25e20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66  options needed f
25e30 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
25e40 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61      test constra
25e50 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65  ints were enable
25e60 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65  d for the manage
25e70 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65  d assembly.  The
25e80 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
25e90 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d      are some com
25ea0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
25eb0 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f  s that must also
25ec0 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c   have been enabl
25ed0 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ed..        #
25ee0 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65      for the inte
25ef0 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20  rop assembly in
25f00 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65  order to be effe
25f10 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73  ctive.  For thos
25f20 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
25f30 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77     options, it w
25f40 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74  ill be assumed t
25f50 68 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c  hat it was enabl
25f60 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72  ed for the inter
25f70 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  op..        #
25f80 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20      assembly if
25f90 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66  it was enabled f
25fa0 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  or the managed a
25fb0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
25fc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
25fd0 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74  each defineConst
25fe0 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ant [list \..
25ff0 20 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53           CHECK_S
26000 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  TATE COUNT_HANDL
26010 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f  E DEBUG INTEROP_
26020 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45  CODEC INTEROP_DE
26030 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  BUG \..
26040 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e     INTEROP_EXTEN
26050 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49  SION_FUNCTIONS I
26060 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45  NTEROP_FTS5_EXTE
26070 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
26080 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43       INTEROP_INC
26090 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 54 45 52  LUDE_CEROD INTER
260a0 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41  OP_INCLUDE_EXTRA
260b0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
260c0 5f 53 45 45 20 5c 0d 0a 20 20 20 20 20 20 20 20  _SEE \..
260d0 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c      INTEROP_INCL
260e0 55 44 45 5f 5a 49 50 56 46 53 20 49 4e 54 45 52  UDE_ZIPVFS INTER
260f0 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49  OP_JSON1_EXTENSI
26100 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
26110 20 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59    INTEROP_LEGACY
26120 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c  _CLOSE INTEROP_L
26130 4f 47 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45  OG INTEROP_PERCE
26140 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20  NTILE_EXTENSION
26150 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
26160 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58  NTEROP_REGEXP_EX
26170 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f  TENSION INTEROP_
26180 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c  SHA1_EXTENSION \
26190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e  ..            IN
261a0 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e  TEROP_TEST_EXTEN
261b0 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 4f 54  SION INTEROP_TOT
261c0 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d  YPE_EXTENSION \.
261d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54  .            INT
261e0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
261f0 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  LE \..
26200 20 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20    NET_20 NET_35
26210 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45  NET_40 NET_45 NE
26220 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45  T_451 NET_452 NE
26230 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a  T_46 NET_461 \..
26240 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f              NET_
26250 34 36 32 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  462 NET_COMPACT_
26260 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  20 PLATFORM_COMP
26270 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a  ACTFRAMEWORK \..
26280 20 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c              PREL
26290 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41  OAD_NATIVE_LIBRA
262a0 52 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20  RY RETARGETABLE
262b0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20  SQLITE_STANDARD
262c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  \..            T
262d0 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
262e0 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e   TRACE TRACE_CON
262f0 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45  NECTION TRACE_DE
26300 54 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TECTION \..
26310 20 20 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e         TRACE_HAN
26320 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41  DLE TRACE_PRELOA
26330 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54  D TRACE_SHARED T
26340 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c  RACE_STATEMENT \
26350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52  ..            TR
26360 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43  ACE_WARNING TRAC
26370 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55  K_MEMORY_BYTES U
26380 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57  SE_ENTITY_FRAMEW
26390 4f 52 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20  ORK_6 \..
263a0 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50       USE_INTEROP
263b0 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45  _DLL USE_PREPARE
263c0 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a  _V2 WINDOWS] {..
263d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
263e0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
263f0 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70  heck if the comp
26400 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option
26410 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65  is listed in the
26420 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20   list of..
26430 20 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66      #       "def
26440 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b  ine constants" k
26450 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20  ept track of by
26460 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
26470 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  mbly...
26480 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   #..          ch
26490 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
264a0 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65  neConstant $::te 264b0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 st_channel$defi
264c0 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20  neConstant..
264d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
264e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
264f0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
26500 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
26510 69 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 73  ite provider was
26520 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a   compiled with..
26530 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26540 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20  support for any
26550 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61  encrypted databa
26560 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ses...        #.
26570 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
26580 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
26590 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 43  nstant INTEROP_C
265a0 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20  ODEC] || \..
265b0 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c          [haveSQL
265c0 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
265d0 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  t INTEROP_INCLUD
265e0 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a  E_SEE]} then {..
265f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
26600 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
26610 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69 63 20  es, add generic
26620 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75  constraint for u
26630 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
26640 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
26650 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64   #..          ad
26660 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74  dConstraint Syst
26670 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
26680 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20  ncryption..
26690 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
266a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
266b0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
266c0 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e  rent build year.
266d0 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69    Basically, thi
266e0 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20  s indicates..
266f0 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
26700 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  ch version of MS
26710 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73  Build and/or Vis
26720 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75  ual Studio was u
26730 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..
26740 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20  #       compile
26750 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e  the assembly bin
26760 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
26770 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
26780 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 26790 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 267a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 267b0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 267c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 267d0 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 build year... " 267e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 267f0 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 26800 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 ar].. add 26810 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 26820 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 ndArgs buildYear 26830 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 .$year]..
26840 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 26850 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 26860 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
26870 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
26880 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
26890 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
268a0 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72  nt build .NET Fr
268b0 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61  amework.  Basica
268c0 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20  lly, this..
268d0 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63     #       indic
268e0 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69  ates which versi
268f0 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46  on of the .NET F
26900 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e  ramework is bein
26910 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
26920 20 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61     used by the a
26930 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73  ssembly binaries
26940 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20   under test...
26950 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
26960 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 26970 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 26980 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 26990 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 269a0 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 269b0 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b d .NET Framework 269c0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 269d0 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 set netFx [getB 269e0 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 uildNetFx].. 269f0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 26a00 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 t [appendArgs bu 26a10 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e ildFramework.$n
26a20 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74  etFx]..        t
26a30 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26a40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26a50 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d \"$netFx \"\n]
26a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
26a70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
26a80 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
26a90 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61   build configura
26aa0 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75  tion.  This shou
26ab0 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ld normally..
26ac0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
26ad0 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f  either "Debug" o
26ae0 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20  r "Release"...
26af0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
26b00 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 26b10 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 26b20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 26b30 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 26b40 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 26b50 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 26b60 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 26b70 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f set configuratio 26b80 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi 26b90 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 26ba0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 26bb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 26bc0 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 26bd0 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
26be0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
26bf0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 26c00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
26c10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22  configuration \"
26c20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
26c30 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
26c40 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61  : Try to setup a
26c50 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  n interrupt call
26c60 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73  back using the s
26c70 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a  cript debugger..
26c80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26c90 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c  that will cancel
26ca0 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73   all SQL queries
26cb0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72   in progress for
26cc0 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20   all database..
26cd0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
26ce0 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e  onnections known
26cf0 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72   to this interpr
26d00 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
26d10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
26d20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
26d30 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74  (sqliteInterrupt
26d40 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e  Callback)]} then
26d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
26d60 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61  tupDbInterruptCa
26d70 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63  llback $::test_c 26d80 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c hannel$::test_l
26d90 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  og..        }...
26da0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
26db0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
26dc0 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  k for the native
26dd0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c   runtime option,
26de0 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61   which would mea
26df0 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20  n we are..
26e00 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20    #       using
26e10 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
26e20 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
26e30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
26e40 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69  ckForRuntimeOpti
26e50 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 26e60 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 el native.... 26e70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 26e80 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 26e90 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 26ea0 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 should count the 26eb0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 number of conne 26ec0 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 ctions.. 26ed0 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 # "opened" 26ee0 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 and "closed" fr 26ef0 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e om the pool when 26f00 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 determining if 26f10 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 a test.. 26f20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 # passed. 26f30 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 Disabling this 26f40 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 behavior is some 26f50 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 times necessary 26f60 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 (e.g... # 26f70 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 during th 26f80 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e e release testin 26f90 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 g process) becau 26fa0 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 se there are sev 26fb0 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 eral.. # 26fc0 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 tests that 26fd0 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 rely on the "op 26fe0 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 ened from pool" 26ff0 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 count being grea 27000 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ter.. # 27010 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 than zero. 27020 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 These tests may 27030 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 fail due to the 27040 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 non-determinist 27050 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ic.. # 27060 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 behavior of 27070 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e the CLR GC, even 27080 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e when there is n 27090 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 o bug in the cod 270a0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 270b0 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e being tested. 270c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 270d0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e checkForRun 270e0 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 timeOption$::te
270f0 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f  st_channel noPoo
27100 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20  lCounts....
27110 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
27120 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
27130 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68  he test suite sh
27140 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d  ould use shared-
27150 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20  cache mode...
27160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27170 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
27180 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 27190 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 annel sharedCach 271a0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 271b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 271c0 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 Report the resou 271d0 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 rce usage prior 271e0 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 to running any t 271f0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 27200 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 .. report 27210 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 27220 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
27230 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
27240 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72        # NOTE: Gr
27250 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e  ab the list of n
27260 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f  ative modules fo
27270 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
27280 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20  ocess and..
27290 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f 72     #       repor
272a0 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e  t on the System.
272b0 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
272c0 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20  ted ones...
272d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
272e0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
272f0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
27300 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
27310 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65  et modules [obje
27320 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20  ct invoke \..
27330 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
27340 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72  m.Diagnostics.Pr
27350 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
27360 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d  Process Modules]
27370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
27380 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
27390 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75  ias module $modu 273a0 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 les {.. 273b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 273c0 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f # NOTE: The mo 273d0 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 dule file name h 273e0 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d ere must be norm 273f0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 alized... 27400 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27410 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 27420 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 [file normalize 27430 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 [$module FileNa
27440 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  me]]..
27450 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e    set fileNameOn
27460 6c 79 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  ly [file tail $f 27470 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 27480 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 if {[lse 27490 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 arch -exact -noc 274a0 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 ase -- \.. 274b0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 4e 61 [getNa 274c0 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e tiveLibraryFileN 274d0 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e amesOnly]$fileN
274e0 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20  ameOnly] != -1}
274f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
27500 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 27510 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 27520 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 27530 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 27540 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 -- found loaded 27550 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 SQLite native li 27560 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 brary module: " 27570 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27580 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c$fileName \
27590 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
275a0 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72  } elseif {[lsear
275b0 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73  ch -exact -nocas
275c0 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20  e -- \..
275d0 20 20 20 20 20 20 20 20 5b 67 65 74 49 6e 74 65          [getInte
275e0 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
275f0 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e  amesOnly] $fileN 27600 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 ameOnly] != -1} 27610 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 27620 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
27630 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
27640 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
27660 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20  -- found loaded
27670 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61  SQLite interop a
27680 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20  ssembly module:
27690 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
276a0 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName 276b0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 276c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 276d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 276e0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 276f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 27700 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
27710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
27720 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74   "---- compile-t
27730 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20  ime options for
27740 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
27750 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ary... "....
27760 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
27770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
27780 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
27790 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
277a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
277b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
277c0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51  QLite.SQLite3 SQ
277d0 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
277e0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  ns..          }
277f0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20  compileOptions]
27800 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
27810 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
27820 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 27830 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 [appendArgs [for 27840 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c matList [lsort \ 27850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27860 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e$compileOption
27870 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  s] <none>] \n]..
27880 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
27890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
278a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 278b0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 278c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 278d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 278e0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 278f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
27900 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
27920 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  -- compile-time
27930 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69  options for SQLi
27940 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
27950 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  bly... "....
27960 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
27970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
27980 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
27990 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
279a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
279b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
279c0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e  QLite.SQLite3 In
279d0 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69  teropCompileOpti
279e0 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ons..          }
279f0 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d   compileOptions]
27a00 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
27a10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
27a20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 27a30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f [appendArgs [fo 27a40 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 rmatList [lsort 27a50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27a60 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f$compileOptio
27a70 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d  ns] <none>] \n].
27a80 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
27a90 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
27aa0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 27ab0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 27ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 27ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27ae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 27af0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 NOTE: Show the 27b00 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 active test cons 27b10 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 traints... 27b20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 27b30 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
27b40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
27b50 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73  ---- constraints
27b60 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
27b70 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b     [formatList [
27b80 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72  lsort [getConstr
27b90 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20  aints]] <none>]
27ba0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
27bb0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
27bc0 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20  : Save the test
27bd0 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for
27be0 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63  use by threads c
27bf0 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a  reated in this..
27c00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
27c10 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
27c20 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63  in.  This is nec
27c30 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61  essary because a
27c40 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20  ll the Eagle..
27c50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74        #       "t
27c60 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66  est context" inf
27c70 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d  ormation is per-
27c80 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  thread...
27c90 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
27ca0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
27cb0 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
27cc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
27cd0 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
27ce0 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65  constraints $::e 27cf0 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 agle_tests(const 27d00 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 raints).. 27d10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 27d20 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 27d30 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 Load the "after 27d40 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 -constraints" cu 27d50 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 27d60 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 d/or per-host.. 27d70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 27d80 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 27d90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 27da0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 27db0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 [list loadSQLite 27dc0 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a TestSettings$::
27dd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66  test_channel .af
27de0 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ter]....
27df0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
27e00 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c  E: If necessary,
27e10 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63   enable shared-c
27e20 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a  ache mode now...
27e30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
27e40 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
27e50 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43  meOption sharedC
27e60 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ache]} then {..
27e70 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53           enableS
27e80 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65  haredCache $::te 27e90 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d st_channel true. 27ea0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 27eb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27ec0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 27ed0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 27ee0 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 ually began (now 27ef0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 27f00 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
27f10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
27f20 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
27f30 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
27f40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
27f50 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20   tests began at
27f60 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
27f70 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
27f80 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
27f90 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
27fa0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
27fb0 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69   runSQLiteTestFi
27fc0 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b  lesPrologue {} {
27fd0 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20  ..      uplevel
27fe0 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  1 {..        #..
27ff0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
28000 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62  Setup the variab
28010 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  les that refer t
28020 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f  o the various no
28030 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20  n-data files..
28040 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
28050 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65  quired by the te
28060 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
28070 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28080 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 79        set entity
28090 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
280a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
280b0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
280c0 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  e EntityFramewor
280d0 6b 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a  k.dll false]....
280e0 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 74          set inst
280f0 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a  allerExeFile \..
28100 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
28110 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e  BuildFileName In
28120 73 74 61 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73  staller.exe fals
28130 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  e]....        se
28140 74 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72  t sqliteDesigner
28150 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
28160 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64         [getBuild
28170 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e  FileName SQLite.
28180 44 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61 6c  Designer.dll fal
28190 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  se]....        s
281a0 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  et systemDataSQL
281b0 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20  iteDllFile \..
281c0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
281d0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  ildFileName Syst
281e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
281f0 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20  ll false]....
28200 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44       set systemD
28210 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c  ataSQLiteLinqDll
28220 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
28230 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
28240 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
28250 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
28260 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20  l false]....
28270 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61      set systemDa
28280 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69  taSQLiteEf6DllFi
28290 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
282a0 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
282b0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
282c0 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66  SQLite.EF6.dll f
282d0 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alse]....
282e0 20 73 65 74 20 74 65 73 74 45 78 65 46 69 6c 65   set testExeFile
282f0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
28300 6d 65 20 74 65 73 74 2e 65 78 65 20 66 61 6c 73  me test.exe fals
28310 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  e]..        set
28320 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20  testLinqExeFile
28330 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
28340 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 66  e testlinq.exe f
28350 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 73  alse]..        s
28360 65 74 20 74 65 73 74 45 66 36 45 78 65 46 69 6c  et testEf6ExeFil
28370 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
28380 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 20  ame testef6.exe
28390 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  false]....
283a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
283b0 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76  OTE: Setup the v
283c0 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65  ariables that re
283d0 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f  fer to the vario
283e0 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d 0a 20  us data files..
283f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
28400 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74  equired by the t
28410 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ests in this fil
28420 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
28430 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c         set testL
28440 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65  inqOutFile [file
28450 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
28460 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
28470 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
28480 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65  TestDataPath] te
28490 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a  stlinq.out]]....
284a0 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 74          set nort
284b0 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b 66  hwindEfDbFile [f
284c0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
284d0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
284e0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64           [file d
284f0 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
28500 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54  name [getSQLiteT
28510 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c  estDataPath]]] \
28520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
28530 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64  stlinq northwind
28540 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  EF.db]]....
28550 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46     set nonWalDbF
28560 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
28570 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
28580 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
28590 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
285a0 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62  aPath] nonWal.db
285b0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
285c0 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c  t walDbFile [fil
285d0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
285e0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
285f0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
28600 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 77  eTestDataPath] w
28610 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  al.db]]....
28620 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
28630 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f 75  NOTE: The variou
28640 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74  s install/uninst
28650 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 73  all log files us
28660 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d 0a  ed to test the..
28670 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
28680 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70  design-time comp
28690 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e  onent installer.
286a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
286b0 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73       set testIns
286c0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
286d0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
286e0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
286f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
28700 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
28710 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
28720 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d  est_Vs2005.log]]
28730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
28740 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
28750 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  8LogFile [file n
28760 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
28770 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
28780 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
28790 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74  stDataPath] Inst
287a0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30  aller_Test_Vs200
287b0 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  8.log]]....
287c0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
287d0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20  llVs2010LogFile
287e0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
287f0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
28800 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
28810 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
28820 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73  h] Installer_Tes
28830 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2010.log]]..
28840 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
28850 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c  stInstallVs2012L
28860 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
28870 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
28880 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
28890 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
288a0 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
288b0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e  ler_Test_Vs2012.
288c0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
288d0 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c   set testInstall
288e0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66  Vs2013LogFile [f
288f0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
28900 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
28910 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
28920 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
28930 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
28940 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2013.log]]....
28950 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
28960 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  InstallVs2015Log
28970 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
28980 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
28990 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
289a0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
289b0 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65  taPath] Installe
289c0 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f  r_Test_Vs2015.lo
289d0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
289e0 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
289f0 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66  Vs2005LogFile [f
28a00 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
28a10 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
28a20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
28a30 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
28a40 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
28a50 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2005.log]]..
28a60 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
28a70 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
28a80 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  8LogFile [file n
28a90 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
28aa0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
28ab0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
28ac0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
28ad0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
28ae0 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  008.log]]....
28af0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
28b00 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
28b10 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
28b20 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
28b30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
28b40 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
28b50 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
28b60 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c  er_Test_Vs2010.l
28b70 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
28b80 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  set testUninstal
28b90 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b  lVs2012LogFile [
28ba0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
28bb0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
28bc0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
28bd0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
28be0 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65  ] Uninstaller_Te
28bf0 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d  st_Vs2012.log]].
28c00 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
28c10 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
28c20 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  13LogFile [file
28c30 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
28c40 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
28c50 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
28c60 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
28c70 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
28c80 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2013.log]]....
28c90 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
28ca0 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  installVs2015Log
28cb0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
28cc0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
28cd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28ce0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
28cf0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
28d00 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e  ler_Test_Vs2015.
28d10 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
28d20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
28d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d60 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
28d70 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
28d80 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
28d90 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
28da0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
28db0 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d  tail $entityFram 28dc0 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d eworkDllFile]]]} 28dd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 28de0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 28df0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65$test_channel $e 28e00 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c ntityFrameworkDl 28e10 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d lFile.. } 28e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28e30 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 28e40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 28e50 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 28e60 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e [file tail$in
28e70 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d  stallerExeFile]]
28e80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
28e90 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
28ea0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 28eb0 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c$installerExeFil
28ec0 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d  e Installer.exe.
28ed0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
28ee0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
28ef0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
28f00 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
28f10 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
28f20 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65  e tail $sqliteDe 28f30 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d signerDllFile]]] 28f40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 28f50 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 28f60 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $28f70 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c sqliteDesignerDl 28f80 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d lFile.. } 28f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28fa0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 28fb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 28fc0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 28fd0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 [file tail$sy
28fe0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c  stemDataSQLiteDl
28ff0 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  lFile]]]} then {
29000 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
29010 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 29020 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 hannel$systemDa
29030 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d  taSQLiteDllFile.
29040 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
29050 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
29060 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
29070 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
29080 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
29090 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61  e tail $systemDa 290a0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 290b0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 290c0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 290d0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
290e0 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61  nnel $systemData 290f0 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c SQLiteLinqDllFil 29100 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 29110 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 29120 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 29130 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 29140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 29150 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d ile tail$system
29160 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
29170 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
29180 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
29190 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 291a0 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 annel$systemDat
291b0 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
291c0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
291d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
291e0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
291f0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
29200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
29210 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78  ile tail $testEx 29220 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b eFile]]]} then { 29230 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 29240 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
29250 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46  hannel $testExeF 29260 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 ile test.exe.. 29270 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 29280 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 29290 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 292a0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 292b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 292c0 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 ail$testLinqExe
292d0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
292e0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
292f0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 29300 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 annel$testLinqE
29310 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e  xeFile testlinq.
29320 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  exe..        }..
29330 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
29340 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
29350 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
29360 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29370 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 29380 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 Ef6ExeFile]]]} t 29390 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 293a0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
293b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 293c0 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 tEf6ExeFile test 293d0 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 ef6.exe.. 293e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 293f0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 29400 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 29410 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 29420 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
29430 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d  testLinqOutFile]
29440 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
29450 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
29460 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 29470 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c$testLinqOutFil
29480 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
29490 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
294a0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
294b0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
294c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
294d0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77  ile tail $northw 294e0 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 indEfDbFile]]]} 294f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29500 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
29510 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f  test_channel $no 29520 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d rthwindEfDbFile. 29530 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 29540 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 29550 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 29560 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 29570 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 29580 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 e tail$nonWalDb
29590 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
295a0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
295b0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 295c0 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 annel$nonWalDbF
295d0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
295e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
295f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
29600 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
29610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29620 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44  [file tail $walD 29630 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b bFile]]]} then { 29640 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 29650 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
29660 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c  hannel $walDbFil 29670 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 29680 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 29690 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 296a0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 296b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 296c0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
296d0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
296e0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
296f0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
29700 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 29710 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
29720 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2005LogFile..
29730 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29740 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
29750 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
29760 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
29770 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
29780 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 29790 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d lVs2008LogFile]] 297a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 297b0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 297c0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
297d0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 297e0 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 08LogFile.. 297f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29800 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 29810 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 29820 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 29830 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 29840 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
29850 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  010LogFile]]]} t
29860 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
29870 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 29880 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
29890 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  tInstallVs2010Lo
298a0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
298b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
298c0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
298d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
298e0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
298f0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 29900 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 29910 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 29920 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 29930 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
29940 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73  channel $testIns 29950 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c tallVs2012LogFil 29960 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 29970 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 29980 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 29990 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 299a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 299b0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
299c0 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
299d0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
299e0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
299f0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 29a00 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
29a10 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2013LogFile..
29a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29a30 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
29a40 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
29a50 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
29a60 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
29a70 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 29a80 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d lVs2015LogFile]] 29a90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 29aa0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 29ab0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
29ac0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 29ad0 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 15LogFile.. 29ae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29af0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 29b00 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 29b10 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 29b20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 29b30 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56$testUninstallV
29b40 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2005LogFile]]]}
29b50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29b60 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
29b70 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
29b80 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
29b90 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  05LogFile..
29ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29bb0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
29bc0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
29bd0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
29be0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
29bf0 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56   $testUninstallV 29c00 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2008LogFile]]]} 29c10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 29c20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 29c30 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 29c40 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 29c50 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 08LogFile.. 29c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29c70 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 29c80 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 29c90 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 29ca0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 29cb0 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56$testUninstallV
29cc0 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2010LogFile]]]}
29cd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29ce0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
29cf0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
29d00 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
29d10 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  10LogFile..
29d20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29d30 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
29d40 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
29d50 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
29d60 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
29d70 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56   $testUninstallV 29d80 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2012LogFile]]]} 29d90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 29da0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 29db0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 29dc0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 29dd0 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 12LogFile.. 29de0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29df0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 29e00 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 29e10 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 29e20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 29e30 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56$testUninstallV
29e40 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2013LogFile]]]}
29e50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29e60 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
29e70 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
29e80 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
29e90 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  13LogFile..
29ea0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29eb0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
29ec0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
29ed0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
29ee0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
29ef0 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56   $testUninstallV 29f00 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2015LogFile]]]} 29f10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 29f20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 29f30 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 29f40 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 29f50 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 15LogFile.. 29f60 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 29f70 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 29f80 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 c runSQLiteTestF 29f90 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 ilesEpilogue {} 29fa0 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c {.. uplevel 29fb0 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 1 {.. un 29fc0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 29fd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 29fe0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 29ff0 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 15LogFile testUn 2a000 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 installVs2013Log 2a010 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 2a020 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c testUninstal 2a030 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 lVs2012LogFile t 2a040 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 2a050 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 10LogFile \.. 2a060 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 testUni 2a070 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 2a080 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c ile testUninstal 2a090 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5c lVs2005LogFile \ 2a0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 2a0b0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c stInstallVs2015L 2a0c0 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 ogFile testInsta 2a0d0 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 llVs2013LogFile 2a0e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 2a0f0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 estInstallVs2012 2a100 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 2a110 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 2a120 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a130 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 2a140 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 8LogFile testIns 2a150 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c tallVs2005LogFil 2a160 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 e.... uns 2a170 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c et -nocomplain \ 2a180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f .. no 2a190 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 rthwindEfDbFile 2a1a0 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 testLinqOutFile 2a1b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 \.. w 2a1c0 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 alDbFile nonWalD 2a1d0 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 bFile.... 2a1e0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 2a1f0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2a200 20 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 testEf6ExeFile 2a210 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 testLinqExeFile 2a220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a230 74 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 testExeFile syst 2a240 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 2a250 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 2a260 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 systemData 2a270 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c SQLiteLinqDllFil 2a280 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 e systemDataSQLi 2a290 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 teDllFile \.. 2a2a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 sqliteD 2a2b0 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 esignerDllFile i 2a2c0 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 nstallerExeFile 2a2d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 \.. e 2a2e0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c ntityFrameworkDl 2a2f0 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a lFile.. }.. 2a300 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 2a310 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 2a320 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Epilogue {} {.. 2a330 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2a340 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 NOTE: Skip runni 2a350 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 ng our custom ep 2a360 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 ilogue if the ma 2a370 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d in one has been. 2a380 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 2a390 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 kipped... # 2a3a0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 2a3b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 2a3c0 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d pilogue.eagle)]} 2a3d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a3e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2a3f0 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 TE: Show when ou 2a400 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 r tests actually 2a410 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 ended (now)... 2a420 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a430 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2a440 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2a450 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2a460 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e     "---- System.
2a470 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
2a480 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a  s ended at " \..
2a490 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f              [clo
2a4a0 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b  ck format [clock
2a4b0 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a   seconds]] \n]..
2a4c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2a4d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
2a4e0 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22  d the "epilogue"
2a4f0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72   custom per-user
2a500 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74   and/or per-host
2a510 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
2a520 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20         settings
2a530 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
2a540 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c  .        uplevel
2a550 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c   1 [list loadSQL
2a560 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20  iteTestSettings
2a570 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2a580 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 .epilogue].... 2a590 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a5a0 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 # BUGFIX: Befor 2a5b0 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 e checking the f 2a5c0 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 inal resources i 2a5d0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c n use by SQLite, 2a5e0 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 make.. # 2a5f0 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f sure bo 2a600 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 th of the PRAGMA 2a610 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f related directo 2a620 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 ry names are fre 2a630 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 2a640 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2a650 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 2a660 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2a670 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  l true....
2a680 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2a690 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74  OTE: Also report
2a6a0 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73   the resource us
2a6b0 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e  age after runnin
2a6c0 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20  g the tests...
2a6d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2a6e0 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
2a6f0 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63  ources $::test_c 2a700 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 2a710 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a720 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 2a730 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle 2a740 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e counts after run 2a750 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d ning the tests.. 2a760 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a770 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e getSQLiteHan 2a780 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 dleCounts$::tes
2a790 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
2a7a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2a7b0 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73  # NOTE: If neces
2a7c0 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68  sary, disable sh
2a7d0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode
2a7e0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
2a7f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2a800 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73  sRuntimeOption s
2a810 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65  haredCache]} the
2a820 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  n {..          e
2a830 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65  nableSharedCache
2a840 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   \$::test_channel
2a850 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
2a860 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
2a870 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23  }.....    ######
2a880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a8c0 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
2a8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a8e0 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67  ######## END Eag
2a8f0 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  le ONLY ########
2a900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a910 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
2a920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a960 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a  #######..  }....
2a970 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53    #..  # NOTE: S
2a980 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ave the name of
2a990 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
2a9a0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
2a9b0 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b  le...  #..  if {
2a9c0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f  ![info exists co
2a9d0 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d  mmon_directory]}
2a9e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
2a9f0 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
2aa00 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
2aa10 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a  [info script]]..
2aa20 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
2aa30 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68  NOTE: Provide th
2aa40 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
2aa50 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67  Lite test packag
2aa60 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
2aa70 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
2aa80 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79  ckage provide Sy
2aa90 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2aaa0 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a        .Test 1.0..}..