System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 77130de1822b5601534091dc0859d6a7aa179b73:

• File lib/System.Data.SQLite/common.eagle — part of check-in [cd91b8e6bf] at 2016-10-10 20:48:53 on branch trunk — Enhance the 'getRowsFromDataTable' test suite helper procedure. (user: mistachkin size: 174304)

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 54 65 73 . proc getTes 99e0: 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 tOverridesPreamb 99f0: 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 le { {extraVarNa 9a00: 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 mes ""} } {.. 9a10: 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 set varNames 9a20: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 9a30: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9a40: 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 If available, s 9a50: 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 tart with the ma 9a60: 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 ster list of tes 9a70: 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 t override.. 9a80: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 9a90: 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 les... #.. 9aa0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 9ab0: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 xists ::test_ove 9ac0: 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 rrides] && \.. 9ad0: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 [llength 9ae0: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64$::test_overrid
9af0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
9b00: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
9b10: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $9b20: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 ::test_overrides 9b30: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 9b40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9b50: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 TE: If requested 9b60: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 by our caller, 9b70: 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e add any addition 9b80: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. 9b90: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 # names 9ba0: 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 to copy now... 9bb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9bc0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 {[llength$extr
9bd0: 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20  aVarNames] > 0}
9be0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9bf0: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
9c00: 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e  Names $extraVarN 9c10: 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ames.. }... 9c20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9c30: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 9c40: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e e script fragmen 9c50: 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 t to be returned 9c60: 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 by processing e 9c70: 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ach.. # 9c80: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 variable name 9c90: 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 and adding the 9ca0: 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 69 nececessary scri 9cb0: 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 pt fragments for 9cc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9cd0: 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 each one... 9ce0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 #.. set re 9cf0: 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 sult "".... 9d00: 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 foreach varName 9d10: 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20$varNames {..
9d20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9d30: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
9d40: 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f  he qualified glo
9d50: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  bal variable nam
9d60: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
9d70: 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56         set fullV
9d80: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
9d90: 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d  gs :: $varName]. 9da0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 9db0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 9dc0: 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 es the variable 9dd0: 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e exist in this in 9de0: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 terpreter contex 9df0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t?.. #.. 9e00: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 9e10: 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 exists$fullVar
9e20: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
9e30: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
9e40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70        # NOTE: Ap
9e50: 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 72  pend a script fr
9e60: 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65  agment to the re
9e70: 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63  sult that will c
9e80: 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20  orrectly..
9e90: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79      #       copy
9ea0: 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76   any contained v
9eb0: 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20  alue to another
9ec0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74  interpreter cont
9ed0: 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ext...
9ee0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  #..          app
9ef0: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73  end result \n "s
9f00: 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d  et " $fullVarNam 9f10: 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 e " \{" [set$fu
9f20: 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20  llVarName] \}..
9f30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9f40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9f50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
9f60: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
9f70: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  ns one or more s
9f80: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c  cript fragments,
9f90: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20   append a..
9fa0: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65   #       newline
9fb0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
9fc0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
9fd0: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20  ngth $result] > 9fe0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9ff0: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result a000: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n.. }.... a010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
a020: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
a030: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73      proc moveSys
a040: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
a050: 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72  Config { {restor
a060: 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73  e false} {verbos
a070: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
a080: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
a090: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
a0a0: 41 70 70 44 6f 6d 61 69 6e 20 43 75 72 72 65 6e  AppDomain Curren
a0b0: 74 44 6f 6d 61 69 6e 2e 42 61 73 65 44 69 72 65  tDomain.BaseDire
a0c0: 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
a0d0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
a0e0: 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d  th $directory] = a0f0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. a100: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a110: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a120: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a130: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a140: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a150: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk a160: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 ipped moving \"S a170: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a180: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 e.dll.config\", a190: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. a1a0: 20 20 20 22 6e 6f 20 62 61 73 65 20 64 69 72 65 "no base dire a1b0: 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 ctory\n"].. a1c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... a1d0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. a1e0: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c ... set fil a1f0: 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e eName(1) [file n a200: 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 ormalize \.. a210: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join a220: 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74$directory Syst
a230: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
a240: 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20  ll.config]]....
a250: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
a260: 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67 73  e(2) [appendArgs
a270: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e 6d   $fileName(1) .m a280: 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 oved].... i a290: 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 65 f {$restore} the
a2a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
a2b0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f a2c0: 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 65 ileName(2)]} the a2d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f a2e0: 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 ile rename$file
a2f0: 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61 6d  Name(2) $fileNam a300: 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e(1).... a310: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a320: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a330: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a340: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a350: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a360: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d "---- m a370: 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 oved \""$fileNa
a380: 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22 22  me(2) "\" to \""
a390: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a3a0: 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31 29      $fileName(1) a3b0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. a3c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e a3d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. a3e0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
a3f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
a400: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test a410: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append a420: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. a430: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk a440: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 ipped moving \"" a450: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 0d$fileName(2) \.
a460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
a470: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
a480: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
a490: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
a4a0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
a4b0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e {..        if
a4c0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f a4d0: 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 65 ileName(1)]} the a4e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f a4f0: 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 ile rename$file
a500: 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 6d  Name(1) $fileNam a510: 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 e(2).... a520: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a530: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a540: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a550: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a560: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a570: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d "---- m a580: 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 oved \""$fileNa
a590: 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22 22  me(1) "\" to \""
a5a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a5b0: 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32 29      $fileName(2) a5c0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. a5d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e a5e0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. a5f0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
a600: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
a610: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test a620: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append a630: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. a640: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk a650: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 ipped moving \"" a660: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 0d$fileName(1) \.
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
a680: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
a690: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
a6a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
a6b0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
a6c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
a6d0: 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65   getAppDomainPre
a6e0: 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20  amble { {prefix
a6f0: 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20  ""} {suffix ""}
a700: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
a710: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
a720: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
a730: 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70 20  ns a test setup
a740: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
a750: 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20  suitable for..
a760: 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61 6c      #       eval
a770: 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74  uation by an int
a780: 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64  erpreter created
a790: 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 20   in an isolated
a7a0: 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20  application..
a7b0: 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61 69     #       domai
a7c0: 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20 66  n.  The script f
a7d0: 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65  ragment being re
a7e0: 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73  turned will be s
a7f0: 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20  urrounded by..
a800: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
a810: 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66 69  prefix and suffi
a820: 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d 65  x "script fragme
a830: 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20 62  nts" specified b
a840: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20  y our caller,..
a850: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66 20       #       if
a860: 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72 65  any.  The entire
a870: 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 65   script being re
a880: 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73  turned will be s
a890: 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d 0a  ubstituted via..
a8a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
a8b0: 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f  ubst], in the co
a8c0: 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c  ntext of our cal
a8d0: 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69 6e  ler, before bein
a8e0: 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  g returned...
a8f0: 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20     #       This
a900: 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61 72  step is necessar
a910: 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c  y so that some l
a920: 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20 69  imited context i
a930: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20  nformation,..
a940: 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d 61     #       prima
a950: 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f 20  rily related to
a960: 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65  the testing dire
a970: 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 20  ctories, can be
a980: 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 20  transferred..
a990: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68     #       to th
a9a0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 6e  e interpreter in
a9b0: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70   the isolated ap
a9c0: 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e  plication domain
a9d0: 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20  , making it..
a9e0: 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65 20     #       able
a9f0: 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  to successfully
aa00: 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20 72  run tests that r
aa10: 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f  equire one or mo
aa20: 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  re of the..
aa30: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 69   #       files i
aa40: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 73  n one of the tes
aa50: 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73  ting directories
aa60: 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c  .  Callers shoul
aa70: 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 20  d keep in..
aa80: 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74 68   #       mind th
aa90: 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72 69  at the test scri
aaa0: 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e  pt fragment bein
aab0: 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f  g returned canno
aac0: 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20  t rely on..
aad0: 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63 72   #       any scr
aae0: 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63  ipt library proc
aaf0: 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65 20  edures that are
ab00: 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20  not provided by
ab10: 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  the Eagle..
ab20: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
ab30: 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 22   package (i.e. "
ab40: 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e  init.eagle"), in
ab50: 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70 72  cluding those pr
ab60: 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20 20  ovided by..
ab70: 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61 67   #       the Eag
ab80: 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 2c  le test package,
ab90: 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c 65   unless the file
aba0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d   containing them
abb0: 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20   is loaded..
abc0: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c    #       manual
abd0: 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 65  ly via some othe
abe0: 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e 67  r mechanism (e.g
abf0: 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 61  . by including a
ac00: 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20  ppropriate..
ac10: 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b 61    #       [packa
ac20: 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20 5b  ge require] or [
ac30: 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73  source] commands
ac40: 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20 6f   in the prefix o
ac50: 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20  r suffix..
ac60: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66  #       script f
ac70: 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f  ragments).  Also
ac80: 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 72  , all variable r
ac90: 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61 6c  eferences and al
aca0: 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 20  l nested..
acb0: 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73  #       commands
acc0: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20   (i.e. those in
acd0: 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 29  square brackets)
ace0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
acf0: 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23  e final..      #
ad00: 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72         script fr
ad10: 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20  agment will end
ad20: 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  up being evaluat
ad30: 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ed in the contex
ad40: 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  t of the..
ad50: 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 20  #       calling
ad60: 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20  interpreter and
ad70: 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20 69  not the target i
ad80: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74  nterpreter creat
ad90: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
ada0: 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74 65   #       isolate
adb0: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  d application do
adc0: 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 20  main unless the
add0: 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e 64  dollar signs and
ade0: 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20 20  /or square..
adf0: 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b 65    #       bracke
ae00: 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c 79  ts are specially
ae10: 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61 63   quoted with bac
ae20: 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 20  kslashes...
ae30: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
ae40: 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73   [uplevel 1 [lis
ae50: 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64 41  t subst [appendA
ae60: 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a 20  rgs $prefix {.. ae70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ae80: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c 5b # NOTE: The $ae90: 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 object$ command aea0: 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 20 may be missing aeb0: 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 6f in some Eagle co aec0: 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # aed0: 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 library conf aee0: 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c 6f igurations. Clo aef0: 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 74 ning and using t af00: 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 he procedure.. af10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c 5b # $af20: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt af30: 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 20 imeOption$ may af40: 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 65 help to mitigate af50: 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 this... af60: 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 #.. proc af70: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt af80: 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 20 imeOption \.. af90: 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 {[info afa0: 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 76 args changeNativ afb0: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d eRuntimeOption]} afc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. afd0: 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 6e {[info body chan afe0: 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f geNativeRuntimeO aff0: 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 20 ption]}.... b000: 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. b010: 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 69 changeNati b020: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption b030: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f [hasRuntimeOptio b040: 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 n native].. b050: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 }.. } [g b060: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP b070: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 reamble [list pa b080: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d th test_channel] b090: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 ]$suffix]]]..
b0a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
b0b0: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c   tryCopyExternal
b0c0: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
b0d0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
b0e0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46  atform ""} {newF
b0f0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72  ileName ""} {ver
b100: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  bose true} } {..
b110: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
b120: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 74  FileName [getExt
b130: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66  ernalFileName $f b140: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... b150: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi b160: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
b170: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
b180: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo b190: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. b1a0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
b1b0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
b1c0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
b1d0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
b1e0: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 65  kipped copying e
b1f0: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22  xternal file \""
b200: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName b210: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b220: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n b230: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. b240: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... b250: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. b260: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { b270: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
b280: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  newFileName] > 0
b290: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b2a0: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
b2b0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
b2c0: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65  ileName $newFile b2d0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
b2e0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
b2f0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
b300: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
b310: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $b320: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
b330: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rm]..      }....
b340: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
b350: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  Directory [file
b360: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46  dirname $targetF b370: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... b380: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. b390: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 if {![fi b3a0: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 le exists$targe
b3b0: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  tDirectory]} the
b3c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
b3d0: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65  ile mkdir $targe b3e0: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 tDirectory.. b3f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... b400: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc b410: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
b420: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam b430: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 e.. }] == 0 b440: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b450: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
b460: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
b470: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
b480: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20     "---- copied
b490: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72  external file fr
b4a0: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi b4b0: 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 leName "\" to \" b4c0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. b4d0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
b4e0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20   \"\n]..      }
b4f0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
b500: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch b510: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg b520: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. b530: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f "---- failed to b540: 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 copy external f b550: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
b560: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
b570: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
b580: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi b590: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. b5a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... b5b0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop b5c0: 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 yBinaryFile {.. b5d0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN b5e0: 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 ame managedOnly b5f0: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e {platform ""} {n b600: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a ewFileName ""}.. b610: 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 {ver b620: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. b630: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source b640: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin b650: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
b660: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] b670: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ b680: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
b690: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
b6a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
b6b0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then b6c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp b6d0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
b6e0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b6f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
b700: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
b710: 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66 69  opying binary fi
b720: 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  le \"" $sourceFi b730: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. b740: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it b750: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n b760: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d "].. }... b770: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. b780: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... b790: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le b7a0: 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d ngth$newFileNam
b7b0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
b7c0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
b7d0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
b7e0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  uildFileName \..
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65 77              $new b800: 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 FileName$manage
b810: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d  dOnly $platform] b820: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { b830: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta b840: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge b850: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c tBuildFileName \ b860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 ..$f
b870: 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed b880: 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Only$platform].
b890: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
b8a0: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
b8b0: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
b8c0: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN b8d0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if b8e0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. b8f0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e b900: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
b910: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
b920: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
b930: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir b940: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. b950: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c }.... fil b960: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
b970: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t b980: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 argetFileName.. b990: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th b9a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp b9b0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
b9c0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b9d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b9e0: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61  ---- copied bina
b9f0: 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ry file from \""
ba00: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName ba10: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 "\" to \"" \.. ba20: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67$targ
ba30: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
ba40: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
ba50: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
ba60: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel ba70: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. ba80: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- ba90: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 failed to copy baa0: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d binary file from bab0: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
bac0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
bad0: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $bae0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ baf0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. bb00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro bb10: 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 c tryCopyBuildFi bb20: 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 le {.. bb30: 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 fileName manag bb40: 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d edOnly {platform bb50: 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d ""} {newFileNam bb60: 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 e ""}.. bb70: 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 {verbose true bb80: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set bb90: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName bba0: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam bbb0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e e$fileName $man bbc0: 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f agedOnly$platfo
bbd0: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
bbe0: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $bbf0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d sourceFileName]} bc00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. bc10: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
bc20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
bc30: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c bc40: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr bc50: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. bc60: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 "---- skippe bc70: 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 d copying build bc80: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 file \""$source
bc90: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
bca0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
bcb0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
bcc0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
bcd0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
bce0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
bcf0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
bd00: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e  length $newFileN bd10: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { bd20: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta bd30: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge bd40: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName bd50: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c$newFileName $pl bd60: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } bd70: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. bd80: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN bd90: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi bda0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
bdb0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. bdc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se bdd0: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 t targetDirector bde0: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 y [file dirname bdf0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d$targetFileName]
be00: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
be10: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
be20: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
be30: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  s $targetDirecto be40: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ry]} then {.. be50: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 file mkdi be60: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f r$targetDirecto
be70: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ry..        }...
be80: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f  .        file co
be90: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63  py -force $sourc bea0: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 eFileName$targe
beb0: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  tFileName..
bec0: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
bed0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
bee0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel bef0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. bf00: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- bf10: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 copied build fi bf20: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
bf30: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20  rceFileName "\"
bf40: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
bf50: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c        $targetFil bf60: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. bf70: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. bf80: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
bf90: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
bfa0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
bfb0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
bfc0: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64  ed to copy build
bfd0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $bfe0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ bff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ c000: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
c010: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
c020: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
c030: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44  ...    proc tryD
c040: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
c050: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
c060: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73  form ""} {verbos
c070: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
c080: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
c090: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
c0a0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
c0b0: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
c0c0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
c0d0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t c0e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i c0f0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
c100: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
c110: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha c120: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs c130: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c140: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped c150: 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 20 deleting binary c160: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
c170: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
c180: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
c190: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
c1a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
c1b0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
c1c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
c1d0: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64   {[catch {file d
c1e0: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} c1f0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. c200: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
c210: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
c220: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c230: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64           "---- d
c240: 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69  eleted binary fi
c250: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName c260: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 \"\n].. } c270: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. c280: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
c290: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
c2a0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
c2b0: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f   "---- failed to
c2c0: 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66   delete 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: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... c300: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 proc tryDeleteBu c310: 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 ildFile {.. c320: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName c330: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 managedOnly {pla c340: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f tform ""} {verbo c350: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 se true} } {.. c360: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName c370: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa c380: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 me$fileName $ma c390: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
c3a0: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
c3b0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
c3c0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then c3d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { c3e0: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
c400: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe c410: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " c430: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c ---- skipped del c440: 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 eting build file c450: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
c460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c470: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
c480: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
c490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
c4a0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
c4b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
c4c0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
c4d0: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d  e $fileName}] == c4e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. c4f0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
c500: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
c510: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
c520: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74       "---- delet
c530: 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ed build file \"
c540: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n c550: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else c560: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs c570: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
c580: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
c590: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
c5a0: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
c5b0: 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  te build file \"
c5c0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n c5d0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. c5e0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 }..... proc t c5f0: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b ryCopyAssembly { c600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi c610: 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e leName managedOn c620: 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d ly {platform ""} c630: 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 {pdb true} {ver c640: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. c650: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui c660: 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ldFile$fileName
c670: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70   $managedOnly$p
c680: 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62  latform "" $verb c690: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ose.... if c6a0: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 {$pdb} then {..
c6b0: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
c6c0: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  ildFile [appendA
c6d0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
c6e0: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d     [file rootnam
c6f0: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64  e $fileName] .pd c700: 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 b]$managedOnly
c710: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65  $platform ""$ve
c720: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  rbose..      }..
c730: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
c740: 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 65  oc tryDeleteAsse
c750: 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  mbly {..
c760: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
c770: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20  atform ""} {pdb
c780: 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74  true} {verbose t
c790: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
c7a0: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
c7b0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ile $fileName$p
c7c0: 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65  latform $verbose c7d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 .... if {$p
c7e0: 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  db} then {..
c7f0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e      tryDeleteBin
c800: 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  aryFile [appendA
c810: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
c820: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d     [file rootnam
c830: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64  e $fileName] .pd c840: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 b]$platform $ve c850: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a rbose.. }.. c860: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr c870: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 oc tryLoadAssemb c880: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 ly { fileName {p c890: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d latform ""} } {. c8a0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN c8b0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi c8c0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
c8d0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20   $platform].... c8e0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch c8f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 {.. set a c900: 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20 ssembly [object c910: 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 load -loadtype F c920: 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 ile -alias$file
c930: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20  Name]..      }]
c940: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
c950: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c960: 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64   # NOTE: Now, ad
c970: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
c980: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e  test constraint.
c990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
c9a0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
c9b0: 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d  nt [file rootnam
c9c0: 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  e [file tail $fi c9d0: 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 leName]].... c9e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # c9f0: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the ca00: 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 image runtime ve ca10: 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 rsion from the a ca20: 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d ssembly because. ca30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # ca40: 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72 several tests r ca50: 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 ely on it having ca60: 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65 a certain value ca70: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ca80: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra ca90: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs caa0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
cab0: 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20  Name] _ \..
cac0: 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c         [$assembl cad0: 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 y ImageRuntimeVe cae0: 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 rsion]].... caf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # cb00: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the cb10: 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 full path of th cb20: 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a e loaded file... cb30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. cb40: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
cb50: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ame..      }....
cb60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
cb70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
cb80: 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64  roc isSQLiteRead
cb90: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
cba0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
cbb0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75  his procedure mu
cbc0: 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  st return non-ze
cbd0: 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53  ro only if the S
cbe0: 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20  QLite native..
cbf0: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
cc00: 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74  ary and the Syst
cc10: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d  em.Data.SQLite m
cc20: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
cc30: 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20  are loaded..
cc40: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
cc50: 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74  ady for use by t
cc60: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20  he test suite.
cc70: 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20  Currently, this
cc80: 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20  procedure..
cc90: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
cca0: 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61  be called only a
ccb0: 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61  fter the [tryLoa
ccc0: 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65  dAssembly] proce
ccd0: 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20  dure has..
cce0: 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c  #       been cal
ccf0: 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72  led to probe for
cd00: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
cd10: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20  .SQLite managed
cd20: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
cd30: 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  #       and the
cd40: 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d  [checkForSQLite]
cd50: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62   procedure has b
cd60: 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72  een called to pr
cd70: 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23  obe for..      #
cd80: 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
cd90: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
cda0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69  ; otherwise, thi
cdb0: 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c  s procedure will
cdc0: 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23   simply..      #
cdd0: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65         always re
cde0: 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...
cdf0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
ce00: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20  n [expr {..
ce10: 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69     [haveConstrai
ce20: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt System.Data.S
ce30: 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43  QLite] && [haveC
ce40: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
ce50: 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20  ]..      }]..
ce60: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
ce70: 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b 20  matchPlatform {
ce80: 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20  platform } {..
ce90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
cea0: 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74  OTE: An empty st
ceb0: 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61  ring for the pla
cec0: 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74  tform means that
ced0: 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f   the build is no
cee0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
cef0: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e   [primarily] a n
cf00: 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65  ative build; the
cf10: 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79  refore, it alway
cf20: 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20  s matches...
cf30: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
cf40: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p cf50: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 latform] == 0} t cf60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r cf70: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. cf80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. cf90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If cfa0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d the machine nam cfb0: 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 e is unavailable cfc0: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 , there is nothi cfd0: 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 gn else we.. cfe0: 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 6f # can do cff0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d000: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi d010: 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f sts ::tcl_platfo d020: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 rm(machine)]} th d030: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re d040: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. d050: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. d060: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do d070: 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 es the specified d080: 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 platform match d090: 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e up to the curren d0a0: 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 t process?.. d0b0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
d0c0: 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63  platform eq [mac
d0d0: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $d0e0: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d ::tcl_platform(m d0f0: 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b achine)]} then { d100: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return d110: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. d120: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. d130: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 # NOTE: The spe d140: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform d150: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 does not match u d160: 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 p with the platf d170: 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 orm.. # d180: 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 for the curre d190: 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 nt process... d1a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu d1b0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. d1c0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 76 .... proc hav d1d0: 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom d1e0: 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 mand {} {.. d1f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d200: 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 : Is the [object d210: 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e ] command curren d220: 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a tly available?.. d230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r d240: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c eturn [expr {[ll d250: 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d ength [info comm d260: 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 ands object]] > d270: 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 0}].. }..... d280: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor d290: 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm d2a0: 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 and { channel } d2b0: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
d2c0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
d2d0: 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a  ecking for \"obj
d2e0: 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73  ect\" command us
d2f0: 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  age... "....
d300: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
d310: 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f  sts ::no(sqliteO
d320: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26  bjectCommand)] &
d330: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
d340: 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
d350: 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
d360: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
d370: 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. d380: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. d390: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d3a0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 # NOTE: Unles d3b0: 73 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 64 s we are forbidd d3c0: 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f en from doing so d3d0: 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 , add some const d3e0: 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 raints.. d3f0: 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c # that wil d400: 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 l allow most of d410: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 74 the test suite t d420: 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 o run (i.e. thos d430: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # d440: 20 20 20 74 65 73 74 73 20 74 68 61 74 20 64 6f tests that do d450: 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 65 not directly re d460: 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a ly upon the [obj d470: 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a ect] command)... d480: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d490: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex d4a0: 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 ists ::no(shimSQ d4b0: 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 LiteAssemblyCons d4c0: 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 traints)]} then d4d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 {.. add d4e0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 Constraint SQLit d4f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 e.. add d500: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 Constraint SQLit d510: 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 eInterop.. d520: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain d530: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ d540: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. d550: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 addConstraint Sy d560: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite d570: 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 .Encryption.. d580: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr d590: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 aint System.Data d5a0: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a .SQLite.Linq.... d5b0: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon d5c0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA d5d0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. d5e0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data d5f0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 .SQLite.dll_v [g d600: 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f etBuildClrVersio d610: 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n]].. }.. d620: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ d630: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no d640: 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 6e (shimSQLiteDefin d650: 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 eConstantConstra d660: 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. d670: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac d680: 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 h defineConstant d690: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. d6a0: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ d6b0: 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 EXTENSION_FUNCTI d6c0: 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 ONS INTEROP_FTS5 d6d0: 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 _EXTENSION \.. d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE d6f0: 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 ROP_JSON1_EXTENS d700: 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 ION INTEROP_PERC d710: 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e ENTILE_EXTENSION d720: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d730: 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 INTEROP_REGEXP d740: 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 _EXTENSION INTER d750: 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f OP_TEST_EXTENSIO d760: 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. d770: 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 INTEROP_TOTYP d780: 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 E_EXTENSION INTE d790: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c ROP_VIRTUAL_TABL d7a0: 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 E \.. d7b0: 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 USE_INTEROP_D d7c0: 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 LL] {.. d7d0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint d7e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d800: 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 [getSQLiteDefine d810: 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d 20 ConstantPrefix] d820: 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 5d$defineConstant]
d830: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
d840: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
d850: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
d860: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53  xists ::no(shimS
d870: 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64 69  QLiteVisualStudi
d880: 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20  oConstraints)]}
d890: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d8a0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
d8b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69 73 75  [appendArgs visu
d8c0: 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75 69  alStudio [getBui
d8d0: 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20 20  ldYear]]..
d8e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74    }....        t
d8f0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no d900: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. d910: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc d920: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt d930: 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 69 imeOption { nati d940: 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 ve } {.. if d950: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f {[llength [info d960: 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d commands debug] d970: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. d980: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 5b [llength [ d990: 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 73 info subcommands d9a0: 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 debug runtimeop d9b0: 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b 63 tion]] > 0 && [c d9c0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. d9d0: 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 debug runtimeopt d9e0: 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 ion [expr {$nati
d9f0: 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65  ve ? "add" : "re
da00: 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d 0a  move"}] native..
da10: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
da20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
da30: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
da40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
da50: 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
da60: 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 63  ctCommand] && [c
da70: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
da80: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
da90: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
daa0: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  ive [expr {$nati dab0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. dac0: 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d 65 4f "AddRuntimeO dad0: 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 65 ption" : "Remove dae0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d RuntimeOption"}] daf0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d native.. } db00: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. db10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t db20: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... db30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal db40: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... db50: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS db60: 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68 QLiteBuilds { ch db70: 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 annel {select fa db80: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. db90: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: dba0: 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72 79 Check for every dbb0: 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 20 possible valid dbc0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76 combination of v dbd0: 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e 0d alues used when. dbe0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c . # l dbf0: 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65 20 ocating out the dc00: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 build output dir dc10: 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 20 ectory, showing dc20: 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d 0a each available.. dc30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu dc40: 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61 6c ild variation al dc50: 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 20 ong the way... dc60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 #.. for dc70: 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 73 each native [lis dc80: 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b 0d t false true] {. dc90: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach dca0: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 year [getBuildY dcb0: 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ears] {.. dcc0: 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 69 foreach confi dcd0: 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 guration [getBui dce0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 ldConfigurations dcf0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. dd00: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. dd10: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o dd20: 75 74 20 74 68 65 20 65 66 66 65 63 74 69 76 65 ut the effective dd30: 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e build platform. dd40: 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 This is.. dd50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b dd60: 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 ased on whether dd70: 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 72 or not a [primar dd80: 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 75 69 6c ily] native buil dd90: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 d.. # dda0: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being ddb0: 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d used. For [prim ddc0: 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 arily] non-nativ ddd0: 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 e builds,.. dde0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t ddf0: 68 69 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 65 his will be an e de00: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 mpty string... de10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. de20: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 set pla de30: 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 tform [getBuildP de40: 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d latform$native]
de50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
de60: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ de70: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- de90: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for dea0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL deb0: 69 74 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 ite build \"" [e dec0: 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 xpr \.. ded0: 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 65 20 {$native
dee0: 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22  ? "native/" : ""
def0: 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e  }] [expr {[strin
df00: 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20  g length \..
df10: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla df20: 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 tform] > 0 ? [ap df30: 70 65 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f pendArgs$platfo
df40: 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65  rm /] : ""}] $ye df50: 61 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ar \.. df60: 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 69 67 75 /$configu
df70: 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d  ration "\"... "]
df80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
df90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
dfa0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
dfb0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
dfc0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
dfd0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a   the necessary..
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
dff0: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66      components f
e000: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
e010: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20  QLite should be
e020: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20  found...
e030: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e040: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
e050: 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63   [joinBuildDirec
e060: 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5c 0d 0a  tory $native \.. e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e080: 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 [getBuildBaseDir e090: 65 63 74 6f 72 79 5d 20 24 79 65 61 72 20 24 70 ectory]$year $p e0a0: 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 latform$configu
e0b0: 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ration]....
e0c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e0d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
e0e0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 66   the necessary f
e0f0: 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75 72  iles exist?  Cur
e100: 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72  rently, no other
e110: 20 73 74 65 70 73 0d 0a 20 20 20 20 20 20 20 20   steps..
e120: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
e130: 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66 79 20  taken to verify
e140: 74 68 69 73 20 62 75 69 6c 64 20 69 73 20 61 63  this build is ac
e150: 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d 0a  tually viable...
e160: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
e170: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
e180: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
e190: 20 24 6e 61 74 69 76 65 20 24 64 69 72 65 63 74   $native$direct
e1a0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
e1d0: 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20 22 73 65  OTE: When in "se
e1e0: 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61 75 74 6f  lect" mode, auto
e1f0: 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74  matically select
e200: 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   the first..
e210: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
e220: 20 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c    available buil
e230: 64 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61  d of System.Data
e240: 2e 53 51 4c 69 74 65 20 61 6e 64 20 74 68 65 6e  .SQLite and then
e250: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20   return..
e260: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
e270: 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20 20  mmediately...
e280: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
e290: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
e2a0: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc e2b0: 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 hPlatform$platf
e2c0: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
e2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e2f0: 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 6c   # NOTE: Manuall
e300: 79 20 6f 76 65 72 72 69 64 65 20 61 6c 6c 20 74  y override all t
e310: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  he build directo
e320: 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d 0a 20 20  ry selection..
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
e340: 20 20 20 20 20 20 72 65 6c 61 74 65 64 20 74 65        related te
e350: 73 74 20 73 65 74 74 69 6e 67 73 20 69 6e 20 6f  st settings in o
e360: 72 64 65 72 20 74 6f 20 66 6f 72 63 65 20 74 68  rder to force th
e370: 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20  is build..
e380: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
e390: 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61    of System.Data
e3a0: 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 20 75 73  .SQLite to be us
e3b0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
e3c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e3d0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68          if {![ch
e3e0: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d  angeNativeRuntim
e3f0: 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76 65 5d  eOption $native] e400: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e410: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput e420: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
e430: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e450: 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22  "no, failed to "
e460: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native e470: 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 ? "add" : "remov e480: 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 e"}] \.. e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " e4a0: 74 68 65 20 5c 22 6e 61 74 69 76 65 5c 22 20 72 the \"native\" r e4b0: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 5c 6e 22 untime option\n" e4c0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... e4d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa e4e0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. e4f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e500: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: e510: 74 65 73 74 5f 79 65 61 72 20 24 79 65 61 72 0d test_year$year.
e520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e530: 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74   set ::test_plat
e540: 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  form $platform.. e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e560: 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 set ::test_confi e570: 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 guration$config
e580: 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  uration....
e590: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
e5a0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen e5b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 65 "ye e5d0: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b s, selected (" [ e5e0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
e5f0: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d  "native/" : ""}]
e600: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e610: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b          [expr {[
e620: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p e630: 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b latform] > 0 ? [ e640: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e660: 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a$platform /] :
e670: 20 22 22 7d 5d 20 24 79 65 61 72 20 2f 20 24 63   ""}] $year /$c
e680: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 29 5c  onfiguration ")\
e690: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
e6a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
e6b0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
e6c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
e6e0: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e  s $channel yes\n e6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e700: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } e710: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. e720: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
e730: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
e740: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
e750: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
e760: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
e770: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
e780: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
e790: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
e7a0: 69 74 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68  iteReleases { ch
e7b0: 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61  annel {select fa
e7c0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
e7d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
e7e0: 20 43 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20   Check for past
e7f0: 72 65 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74  releases of Syst
e800: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69  em.Data.SQLite i
e810: 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d  n the directory.
e820: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
e830: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the
e840: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
e850: 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ite" environment
e860: 20 76 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20   variable, if..
e870: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65       #       pre
e880: 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sent...      #..
e890: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
e8a0: 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73  exists ::env(Sys
e8b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
e8c0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
e8d0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
e8e0: 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44   $::env(System.D e8f0: 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 ata.SQLite)] > 0 e900: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e910: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N e920: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 OTE: Build the f e930: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 ully qualified d e940: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 irectory where t e950: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 he necessary.. e960: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co e970: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 mponents for Sys e980: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite e990: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e should be found. e9a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e9b0: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f set directo e9c0: 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e ry [file nativen e9d0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ e9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 3a ..$:
e9f0: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61  :env(System.Data
ea00: 2e 53 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c  .SQLite) [getRel
ea10: 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a  easeVersion]]]..
ea20: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
ea30: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append ea40: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. ea50: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki ea60: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da ea70: 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 ta.SQLite releas ea80: 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. ea90: 20 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20$directory
eaa0: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
eab0: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65       if {[isRele
eac0: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69  aseAvailable $di ead0: 72 65 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d rectory platform eae0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. eaf0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string eb00: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
eb10: 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  m] == 0} then {.
eb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
eb30: 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77   platform unknow
eb40: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
eb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
eb60: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc eb70: 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 hPlatform$platf
eb80: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
eb90: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
eba0: 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20  build_directory
ebb0: 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20  $directory.... ebc0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs ebd0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
ebe0: 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63  Args "yes, selec
ebf0: 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  ted (" $platform ec00: 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ")\n"].... ec10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr ec20: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } ec30: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. ec40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ec50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
ec60: 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  yes (" $platform ec70: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ")\n"].. ec80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } ec90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. eca0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
ecb0: 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20   no\n....
ecc0: 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68 20     foreach path
ecd0: 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 73 69  [lsort -decreasi
ece0: 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 24 64  ng [file list $d ecf0: 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a irectory *]] {.. ed00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { ed10: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 70 61 [file exists$pa
ed20: 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 73 64  th] && [file isd
ed30: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 5d 7d  irectory $path]} ed40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. ed50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
ed60: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ed70: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
ed80: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
ed90: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
eda0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c  .Data.SQLite rel
edb0: 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  ease \"" \..
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p edd0: 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d ath "\"... "]... ede0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i edf0: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 f {[isReleaseAva ee00: 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 6c 61 ilable$path pla
ee10: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee30: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
ee40: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d  th $platform] == ee50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se ee70: 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f t platform unkno ee80: 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 wn.. ee90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... eea0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 if {$se
eeb0: 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50 6c  lect && [matchPl
eec0: 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d  atform $platform eed0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set eef0: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f ::build_directo ef00: 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20 20 ry$path....
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
ef20: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap ef30: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s ef40: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
ef50: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef70: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                }
ef90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
efa0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
efb0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append efc0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c Args "yes ("$pl
efd0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20  atform ")\n"]..
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
eff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f000: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
f010: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f020: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. f040: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. f050: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. f060: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e f070: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t f080: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f090: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f0a0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65           "---- e
f0b0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
f0c0: 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 74  ble \"System.Dat
f0d0: 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 6e 6f  a.SQLite\" is no
f0e0: 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
f0f0: 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 69 6e     "set, skippin
f100: 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 6c 65  g check for rele
f110: 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20  ases...\n"]..
f120: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
f130: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
f140: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
f150: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62  heckForSQLiteLib
f160: 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  rary { channel }
f170: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
f180: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c f190: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi f1a0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e te core library. f1b0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if f1c0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. f1d0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok f1e0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub f1f0: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. f200: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S f210: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ f220: 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 LiteVersion.. f230: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d } version] == f240: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f250: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # f260: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if f270: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 the returned ver f280: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 sion was null. f290: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 If so, make it e f2a0: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 asy.. # f2b0: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 to spot... f2c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f2d0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le f2e0: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d ngth$version] =
f2f0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f300: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69         set versi
f310: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  on null..
f320: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
f330: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
f340: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72   Attempt to quer
f350: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75  y the Fossil sou
f360: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66  rce identifier f
f370: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20  or the SQLite..
f380: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
f390: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...
f3a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f3b0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
f3c0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
f3d0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
f3e0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
f3f0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
f400: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
f410: 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 72 63  ite3 SQLiteSourc
f420: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73  eId..        } s
f430: 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b  ourceId]} then {
f440: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
f450: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
f460: 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75   We failed to qu
f470: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
f480: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
f490: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
f4a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
f4b0: 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a  urceId unknown..
f4c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
f4d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f4e0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
f4f0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f   the returned Fo
f500: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
f510: 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e  tifier was null.
f520: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20    If..        #
f530: 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69        so, make i
f540: 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d  t easy to spot..
f550: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f560: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
f570: 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId f580: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. f590: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so f5a0: 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 urceId null.. f5b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... f5c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N f5d0: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ f5e0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar f5f0: 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 y appears to be f600: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... f610: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a f620: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL f630: 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ite.... t f640: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f650: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
f660: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
f670: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
f680: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
f690: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $f6a0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. f6b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... f6c0: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF f6d0: 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 orSQLiteInterop f6e0: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. f6f0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
f700: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
f710: 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ng for SQLite in
f720: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
f730: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  . "....      if
f740: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
f750: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
f760: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
f770: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
f780: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
f790: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
f7a0: 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..
f7b0: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
f7c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
f7d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
f7e0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
f7f0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72  the returned ver
f800: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20  sion was null.
f810: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65  If so, make it e
f820: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
f830: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20       to spot...
f840: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f850: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
f860: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = f870: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. f880: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi f890: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. f8a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. f8b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: f8c0: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 Attempt to quer f8d0: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou f8e0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 rce identifier f f8f0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 or the SQLite.. f900: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c f910: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 ore library... f920: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f930: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. f940: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object f950: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N f960: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. f970: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System f980: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL f990: 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 ite3 InteropSour f9a0: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ceId.. } f9b0: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then f9c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. f9d0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE f9e0: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q f9f0: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil fa00: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie fa10: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. fa20: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s fa30: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. fa40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... fa50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. fa60: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i fa70: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F fa80: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide fa90: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null faa0: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # fab0: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make fac0: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. fad0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. fae0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string faf0: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
fb00: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
fb10: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
fb20: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
fb30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
fb40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
fb50: 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63 74  NOTE: Before act
fb60: 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 65  ually adding the
fb70: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
fb80: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 0d  , make sure the.
fb90: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
fba0: 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c 69   version is vali
fbb0: 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 74  d (i.e. not just
fbc0: 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20 71   that we could q
fbd0: 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 20  uery it)...
fbe0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
fbf0: 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 6e   {$version ne "n fc00: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. fc10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fc20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes fc30: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 , the SQLite int fc40: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 erop assembly ap fc50: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai fc60: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... fc70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a fc80: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL fc90: 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 iteInterop.... fca0: 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 set answ fcb0: 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20 20 er yes.. fcc0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. fcd0: 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 20 6e set answer n fce0: 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a o.. }.... fcf0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
fd00: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
fd10: 67 73 20 24 61 6e 73 77 65 72 20 22 20 28 22 20  gs $answer " (" fd20: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f$version " " $so fd30: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 urceId ")\n"].. fd40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. fd50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
fd60: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
fd70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
fd80: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
fd90: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
fda0: 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e  tant { channel n
fdb0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ame } {..      t
fdc0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a fdd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. fde0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che fdf0: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System fe00: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 .Data.SQLite def fe10: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 ine constant \"" fe20: 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20$name \..
fe30: 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d      "\"... "]...
fe40: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
fe50: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
fe60: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
fe70: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
fe90: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
fea0: 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
feb0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20  stants..      }
fec0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d  defineConstants]
fed0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
fee0: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61         if {[lsea
fef0: 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61  rch -exact -noca
ff00: 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61  se $defineConsta ff10: 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 nts$name] != -1
ff20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ff30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
ff40: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68   # NOTE: Yes, th
ff50: 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  is define consta
ff60: 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77  nt was enabled w
ff70: 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d  hen the managed.
ff80: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
ff90: 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20     assembly was
ffa0: 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20  compiled...
ffb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ffc0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
ffd0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74  [appendArgs [get
ffe0: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
fff0: 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 6d  tantPrefix] $nam 10000 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 10010 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
10020 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20  es\n..        }
10030 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
10040 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 10050 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d no\n.. } 10060 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 10070 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 10080 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e$channel error\n
10090 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
100a0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
100b0 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20  tDateTimeFormat
100c0 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74 72 75 65  { {timeZone true
100d0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
100e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
100f0 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d  is procedure sim
10100 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20  ply returns the
10110 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69  "default" DateTi
10120 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a  me format used..
10130 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79        #       by
10140 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
10150 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10160 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
10170 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72  s ::datetime_for
10180 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  mat] && \..
10190 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
101a0 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f  gth $::datetime_ 101b0 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 format] > 0} the 101c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 101d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 101e0 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 Return the manua 101f0 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76 lly overridden v 10200 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74 alue for the Dat 10210 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 eTime format... 10220 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 10230 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 return$::date
10240 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20  time_format..
10250 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
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 61  # NOTE: Return a
10280 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69  n ISO8601 DateTi
10290 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74  me format compat
102a0 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65  ible with SQLite
102b0 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
102c0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
102d0 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61  QLite, and suita
102e0 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72  ble for round-tr
102f0 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d  ipping with the.
10300 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
10310 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20   DateTime class
10320 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
10330 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
10340 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20   is changed,..
10350 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
10360 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20  rious tests may
10370 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23  fail...        #
10380 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
10390 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
103a0 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79 79              "yyy
103b0 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
103c0 2e 46 46 46 46 46 46 46 22 20 5b 65 78 70 72 20  .FFFFFFF" [expr
103d0 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20 22 4b 22  {$timeZone ? "K" 103e0 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 20 20 20 : ""}]].. 103f0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 10400 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d proc getDateTim 10410 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 65 20 7b eTicks { value { 10420 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 66 61 75 local ""} {defau 10430 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 lt ""} } {.. 10440 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 10450 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 ngth$value] ==
10460 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
10470 20 20 20 72 65 74 75 72 6e 20 24 64 65 66 61 75     return $defau 10480 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 lt.. }.... 10490 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 104a0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 {.. set d 104b0 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 ateTime [object 104c0 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 invoke -create D 104d0 61 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 ateTime ParseExa 104e0 63 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ct \.. 104f0 20 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74$value [getDat
10500 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c  eTimeFormat] nul
10510 6c 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72  l AdjustToUniver
10520 73 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20  sal]..      }]}
10530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10540 72 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d  return $default. 10550 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 10560 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 if {[string is 10570 20 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 boolean -strict 10580 20 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b$local]} then {
10590 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61  ..        set da
105a0 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69  teTime [object i
105b0 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61  nvoke -create Da
105c0 74 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69  teTime SpecifyKi
105d0 6e 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nd \..
105e0 20 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d    $dateTime Utc] 105f0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 10600 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 10610 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 10620 24 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d$dateTime Ticks]
10630 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
10640 20 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74     if {$local} t 10650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 10660 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e eturn [object in 10670 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 voke$dateTime T
10680 6f 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73  oLocalTime.Ticks
10690 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
106a0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
106b0 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
106c0 20 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69   $dateTime ToUni 106d0 76 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 versalTime.Ticks 106e0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 106f0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 10700 65 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f etProperties { o 10710 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 bject varName } 10720 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 10730 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72$varName proper
10740 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65  ties....      se
10750 74 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20  t count 0..
10760 20 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74   set names [list
10770 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
10780 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $10790 6f 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 object] &&$obje
107a0 63 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68  ct ne "null"} th
107b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
107c0 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73  al lappend names
107d0 20 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73   [object members
107e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
107f0 2d 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f  -membertypes Pro
10800 70 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20  perty -nameonly
10810 24 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20  $object].... 10820 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 eval lappend 10830 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d names [object m 10840 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 embers \.. 10850 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 -membertyp 10860 65 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e es Field -nameon 10870 6c 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 ly$object]..
10880 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f     }....      fo
10890 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65  reach name $name 108a0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s {.. if 108b0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 108c0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 108d0 6b 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 ke -objectflags 108e0 2b 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 +NoDispose$obje
108f0 63 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ct $name.. 10900 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d } value] == 0} 10910 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10920 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 if {[isObject 10930 48 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 Handle$value] &
10940 26 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c  & $value ne "nul 10950 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 l"} then {.. 10960 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f set erro 10970 72 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 r null; object i 10980 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 10990 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 109a0 20 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 -mars 109b0 68 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 halflags +NoHand 109c0 6c 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 le Interpreter.G 109d0 65 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 etActive \.. 109e0 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f AddO 109f0 62 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f bjectReference O 10a00 6b 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a k$value error..
10a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61  ..            la
10a20 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
10a30 28 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20  (objects) [list
10a40 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20  $name$value]..
10a50 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
10a60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
10a70 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65  append propertie
10a80 73 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20  s(values) [list
10a90 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20  $name$value]..
10aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
10ab0 20 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75          incr cou
10ac0 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  nt..        } el
10ad0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
10ae0 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69  lappend properti
10af0 65 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74  es(errors) [list
10b00 20 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43   $name$::errorC
10b10 6f 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ode]..        }.
10b20 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
10b30 20 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d    return $count. 10b40 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 10b50 72 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 roc getAllProper 10b60 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 ties { object va 10b70 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 rName } {.. 10b80 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
10b90 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  e properties..
10ba0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f      set value $o 10bb0 62 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 bject.... w 10bc0 68 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 hile {true} {.. 10bd0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 10be0 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 o exists propert 10bf0 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 ies(seenObjects) 10c00 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 10c10 20 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70$value ni $p 10c20 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 roperties(seenOb 10c30 6a 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a jects)} then {.. 10c40 20 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f getPro 10c50 70 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 perties$value p
10c60 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..
10c70 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f       lappend pro
10c80 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65  perties(seenObje
10c90 63 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20  cts) $value.. 10ca0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10cb0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 10cc0 73 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f sts properties(o 10cd0 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b bjects)]} then { 10ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 .. brea 10cf0 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a k.. }.... 10d00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 if {[lle 10d10 6e 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 ngth$properties
10d20 28 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d  (objects)] == 0}
10d30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10d40 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74     unset propert
10d50 69 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72  ies(objects); br
10d60 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  eak..        }..
10d70 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61  ..        set va
10d80 6c 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e  lue [lindex [lin
10d90 64 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28  dex $properties( 10da0 6f 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d objects) 0] end] 10db0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 .. set pr 10dc0 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 10dd0 29 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 ) [lrange$prope
10de0 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31  rties(objects) 1
10df0 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a   end]..      }..
10e00 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
10e10 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74  o exists propert
10e20 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29  ies(seenObjects)
10e30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
10e40 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65     foreach value
10e50 20 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65   $properties(see 10e60 6e 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 nObjects) {.. 10e70 20 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 if {$valu
10e80 65 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f  e eq $object} co 10e90 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 ntinue.. 10ea0 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 catch {object 10eb0 64 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d dispose$value}.
10ec0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
10ed0 20 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70        unset prop
10ee0 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63  erties(seenObjec
10ef0 74 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ts)..      }..
10f00 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
10f10 20 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20   getVariables {
10f20 76 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74  varNames {object
10f30 73 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  s false} } {..
10f40 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
10f50 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66  list]....      f
10f60 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24  oreach varName $10f70 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 varNames {.. 10f80 20 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c if {[uplevel 10f90 20 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 1 [list array e 10fa0 78 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d xists$varName]]
10fb0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10fc0 20 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d      set arrayNam
10fd0 65 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20  e $varName.... 10fe0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 10ff0 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c elementName [upl 11000 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 evel 1 [list arr 11010 61 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e ay names$arrayN
11020 61 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ame]] {..
11030 20 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61       set name [a
11040 70 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79  ppendArgs $array 11050 4e 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e Name ($elementN
11060 61 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20  ame )]..
11070 20 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65      set varValue
11080 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73   [uplevel 1 [lis
11090 74 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d  t set $name]]... 110a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 110b0 7b 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 {$objects && [is
110c0 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61  ObjectHandle $va 110d0 72 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d rValue]} then {. 110e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 . u 110f0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 11100 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 properties.. 11110 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c getAl 11120 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 lProperties$var
11130 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73  Value properties
11140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
11150 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
11160 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72   [list $name [ar 11170 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 ray get properti 11180 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 es]].. 11190 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 111a0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 111b0 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 d result [list$
111c0 6e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d  name $varValue]. 111d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 111e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 111f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 11200 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 set var 11210 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 Value [uplevel 1 11220 20 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e [list set$varN
11230 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ame]]....
11240 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20     if {$objects 11250 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 && [isObjectHand 11260 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 le$varValue]} t
11270 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11280 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70     unset -nocomp
11290 6c 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d  lain properties.
112a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
112b0 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76  AllProperties $v 112c0 61 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 arValue properti 112d0 65 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 es.... 112e0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result 112f0 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 [list$varName
11300 5b 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65  [array get prope
11310 72 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20  rties]]..
11320 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
11330 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
11340 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76   result [list $v 11350 61 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 arName$varValue
11360 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
11370 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
11380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
11390 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 113a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 113b0 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 numerableToList 113c0 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b { enumerable } { 113d0 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 113e0 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 lt [list].... 113f0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 11400 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c ength$enumerabl
11410 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d  e] == 0 || $enum 11420 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 erable eq "null" 11430 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11440 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
11450 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
11460 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
11470 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65  h -alias item $e 11480 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 numerable {.. 11490 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 114a0 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e length$item] >
114b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
114c0 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
114d0 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74  sult [$item ToSt 114e0 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d ring].. } 114f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11500 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
11510 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
11520 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65   proc catchAndRe
11530 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73  turn { script {s
11540 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d  tackTrace false}
11550 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d   {strict true} }
11560 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
11570 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75     # NOTE: Evalu
11580 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70  ate the script p
11590 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
115a0 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63  aller in their c
115b0 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23  ontext,..      #
115c0 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67         capturing
115d0 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74   both the result
115e0 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20   and the return
115f0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  code...      #..
11600 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b        set code [
11610 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31  catch {uplevel 1
11620 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74   $script} result 11630 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 11640 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 # NOTE: Did 11650 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 the script provi 11660 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 11670 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 r NOT raise an e 11680 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a rror?.. #.. 11690 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 if {$stric
116a0 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20  t && $code == 0 116b0 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 || !$strict && $116c0 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 code != 1} then 116d0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 116e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 # NOTE: Su 116f0 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 ccess. Return a 11700 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 list with the r 11710 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 eturn code and t 11720 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 he result... 11730 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 11740 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 eturn [list$cod
11750 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20  e $result].. 11760 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 } elseif {$sta
11770 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d  ckTrace} then {.
11780 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11790 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
117a0 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72  ure.  Our caller
117b0 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74   wants a full st
117c0 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70  ack trace (if ap
117d0 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20  plicable),..
117e0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75      #       retu
117f0 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
11800 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  he return code a
11810 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65  nd the result ve
11820 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20  rbatim...
11830 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
11840 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  rn [list $code$
11850 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d  result]..      }
11860 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
11870 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
11880 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75  TE: Failure.  Ou
11890 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f  r caller does no
118a0 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74  t want a full st
118b0 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20  ack trace (if..
118c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
118d0 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75  pplicable), retu
118e0 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
118f0 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20  he return code,
11900 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..
11910 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20     #       code
11920 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65  for the interpre
11930 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72  ter, and the err
11940 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f  or message up to
11950 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
11960 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72        point wher
11970 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63  e the stack trac
11980 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d  e should start..
11990 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
119a0 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
119b0 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43   $code$::errorC
119c0 6f 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ode \..
119d0 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65     [extractSyste
119e0 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
119f0 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73  tionMessage $res 11a00 75 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ult]].. }.. 11a10 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 11a20 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 oc compileCSharp 11a30 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 With {.. 11a40 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 text memory 11a50 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 symbols strict r 11a60 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 esultsVarName er 11a70 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 rorsVarName file 11a80 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 Names.. 11a90 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 args } {.. 11aa0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11ab0 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 TE: Since we are 11ac0 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 going to use th 11ad0 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 is method name a 11ae0 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20 lot, assign it 11af0 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 to a.. # 11b00 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72 variable fir 11b10 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 st... #.. 11b20 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65 set add Refe 11b30 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 rencedAssemblies 11b40 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d .Add.... #. 11b50 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 11b60 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63 reate the base c 11b70 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 ommand to evalua 11b80 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 te and add the p 11b90 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 roperty settings 11ba0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11bb0 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 that are almost 11bc0 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79 always needed by 11bd0 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20 our unit tests 11be0 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d (i.e. the System 11bf0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11c00 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 and System.Data 11c10 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e assembly referen 11c20 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ces)... #.. 11c30 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e set comman 11c40 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 d [list \.. 11c50 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 53 68 61 compileCSha 11c60 72 70 20 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 rp$text $memory 11c70 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 72 69 63$symbols $stric 11c80 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 t results errors 11c90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 \..$a
11ca0 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61  dd System.dll $a 11cb0 64 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 dd System.Data.d 11cc0 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 54 ll$add System.T
11cd0 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20  ransactions.dll
11ce0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64  \..          $ad 11cf0 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c d System.Xml.dll 11d00 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 11d10 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 11d20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64 all the provided 11d30 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61 file names as a 11d40 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 ssembly referenc 11d50 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 11d60 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 11d70 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 Name$fileNames
11d80 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65  {..        lappe
11d90 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20  nd command $add 11da0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 11db0 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 me$fileName]..
11dc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11dd0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
11de0 20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61   Add the extra a
11df0 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79  rguments, if any
11e00 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , to the command
11e10 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20   to evaluate...
11e20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76       #..      ev
11e30 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61  al lappend comma
11e40 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20  nd $args.... 11e50 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11e60 45 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d E: Alias the com 11e70 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75 piler local resu 11e80 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76 lts and errors v 11e90 61 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d ariables to the. 11ea0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 11eb0 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 ariable names pr 11ec0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 11ed0 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ller... #.. 11ee0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 11ef0 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 g length$result
11f00 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  sVarName] > 0} t
11f10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
11f20 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56  pvar 1 $resultsV 11f30 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a arName results.. 11f40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11f50 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 11f60 67 74 68 20 24 65 72 72 6f 72 73 56 61 72 4e 61 gth$errorsVarNa
11f70 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
11f80 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31  .        upvar 1
11f90 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20   $errorsVarName 11fa0 65 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 7d 0d errors.. }. 11fb0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11fc0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 11fd0 74 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 te the construct 11fe0 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 ed [compileCShar 11ff0 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 p] command and r 12000 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 eturn the.. 12010 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e # result. 12020 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12030 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a eval$command..
12040 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
12050 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20  oc isMemoryDb {
12060 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20  fileName } {..
12070 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
12080 4f 54 45 3a 20 49 73 20 74 68 65 20 73 70 65 63  OTE: Is the spec
12090 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20 66  ified database f
120a0 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20  ile name really
120b0 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
120c0 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d  abase?..      #.
120d0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
120e0 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65  xpr {$fileName e 120f0 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 q ":memory:" || 12100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 12110 72 69 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 ring range$file
12120 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66  Name 0 12] eq "f
12130 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d  ile::memory:"}].
12140 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
12150 72 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20  roc isTableInDb
12160 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20  { name {varName
12170 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  db} } {..      #
12180 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12190 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
121a0 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
121b0 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
121c0 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
121d0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
121e0 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e   caller.  It con
121f0 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61  tains the databa
12200 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
12210 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62  ndle that will b
12220 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
12230 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
12240 20 74 68 65 20 71 75 65 72 79 20 75 73 65 64 20   the query used
12250 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
12260 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20  the named table
12270 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  is..      #
12280 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61    present in tha
12290 74 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  t database...
122a0 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
122b0 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. 122c0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 122d0 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 122e0 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 e sqlite_master 122f0 74 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 table to determi 12300 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ne if the named 12310 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 table is.. 12320 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 # present 12330 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e in the database. 12340 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12350 20 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 set sql {.. 12360 20 20 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 SELECT COUNT 12370 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f (*) FROM sqlite_ 12380 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 master WHERE typ 12390 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 e = 'table' AND 123a0 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 name = ?;.. 123b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 123c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 123d0 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 urn non-zero if 123e0 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 the named table 123f0 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 is present... 12400 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 12410 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 rn [expr {.. 12420 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 [sql execute 12430 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 -execute scalar 12440 20 24 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20$db $sql [list 12450 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e param1 String$n
12460 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20  ame]] > 0..
12470 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   }]..    }.....
12480 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66     proc getDbDef
12490 61 75 6c 74 50 61 67 65 53 69 7a 65 20 7b 7d 20  aultPageSize {}
124a0 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  {..      try {..
124b0 20 20 20 20 20 20 20 20 73 65 74 20 64 62 20 5b          set db [
124c0 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53  sql open -type S
124d0 51 4c 69 74 65 20 7b 44 61 74 61 20 53 6f 75 72  QLite {Data Sour
124e0 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d 5d 0d 0a  ce=:memory:;}]..
124f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
12500 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
12510 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 12520 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a "PRAGMA page_siz 12530 65 3b 22 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 e;"].. } fi 12540 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 nally {.. 12550 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 12560 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 s db]} then {.. 12570 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 12580 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 0d 0a sql close$db}..
12590 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset
125a0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 0d 0a  -nocomplain db..
125b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
125c0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
125d0 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61    proc getDbDefa
125e0 75 6c 74 43 61 63 68 65 53 69 7a 65 20 7b 7d 20  ultCacheSize {}
125f0 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  {..      try {..
12600 20 20 20 20 20 20 20 20 73 65 74 20 64 62 20 5b          set db [
12610 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53  sql open -type S
12620 51 4c 69 74 65 20 7b 44 61 74 61 20 53 6f 75 72  QLite {Data Sour
12630 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d 5d 0d 0a  ce=:memory:;}]..
12640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
12650 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
12660 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 12670 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 "PRAGMA cache_si 12680 7a 65 3b 22 5d 0d 0a 20 20 20 20 20 20 7d 20 66 ze;"].. } f 12690 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 inally {.. 126a0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 126b0 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a ts db]} then {.. 126c0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 126d0 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 0d {sql close$db}.
126e0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74  .          unset
126f0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 0d   -nocomplain db.
12700 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
12710 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
12720 20 20 20 70 72 6f 63 20 75 73 65 4c 65 67 61 63     proc useLegac
12730 79 44 62 50 61 67 65 41 6e 64 43 61 63 68 65 53  yDbPageAndCacheS
12740 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d 65 20 7d  izes { varName }
12750 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
12760 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
12770 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
12780 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
12790 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
127a0 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
127b0 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
127c0 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73  er.  It contains
127d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
127e0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
127f0 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20  that will be..
12800 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64      #       used
12810 20 74 6f 20 65 78 65 63 75 74 65 20 71 75 65 72   to execute quer
12820 69 65 73 20 75 73 65 64 20 74 6f 20 73 65 74 20  ies used to set
12830 74 68 65 20 70 61 67 65 20 61 6e 64 20 63 61 63  the page and cac
12840 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 20 20 20  he sizes...
12850 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
12860 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... 12870 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 . sql execu 12880 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 20 20 te$db {..
12890 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69    PRAGMA page_si
128a0 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 20 20 20  ze = 1024;..
128b0 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
128c0 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b 0d 0a 20  _size = 2000;..
128d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
128e0 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a  return [list \..
128f0 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65            [sql e
12900 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
12910 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG 12920 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d 20 MA page_size;"] 12930 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 \.. [sq 12940 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 l execute -execu 12950 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 te scalar$db "P
12960 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
12970 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  ;"]]..    }.....
12980 20 20 20 20 70 72 6f 63 20 65 78 74 72 61 63 74      proc extract
12990 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
129a0 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
129b0 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20   { value } {..
129c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
129d0 4f 54 45 3a 20 49 66 20 74 68 65 20 73 74 72 69  OTE: If the stri
129e0 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 66  ng conforms to f
129f0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 6e 6f 72  ormat of the nor
12a00 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e 0d 0a 20  mal exception..
12a10 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72       #       err
12a20 6f 72 20 73 74 72 69 6e 67 73 2c 20 65 78 74 72  or strings, extr
12a30 61 63 74 20 61 6e 64 20 72 65 74 75 72 6e 20 6f  act and return o
12a40 6e 6c 79 20 74 68 65 20 65 72 72 6f 72 20 6d 65  nly the error me
12a50 73 73 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20  ssage..      #
12a60 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 69 74 73       portion its
12a70 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  elf...      #..
12a80 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e       set pattern
12a90 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
12aa0 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e   {System\.Data\.
12ab0 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78  SQLite\.SQLiteEx
12ac0 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 30 30  ception $$0x8000 12ad0 34 30 30 35 5c 29 3a 20 28 2e 2b 3f 29 20 20 28 4005$$: (.+?)  (
12ae0 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20  ?: )?at} \..
12af0 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c    {System\.Data\
12b00 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45  .SQLite\.SQLiteE
12b10 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20  xception: (.+?)
12b20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20   (?: )?at} \..
12b30 20 20 20 20 7b 45 61 67 6c 65 5c 2e 5f 43 6f 6d      {Eagle\._Com
12b40 70 6f 6e 65 6e 74 73 5c 2e 50 75 62 6c 69 63 5c  ponents\.Public\
12b50 2e 53 63 72 69 70 74 45 78 63 65 70 74 69 6f 6e  .ScriptException
12b60 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61  : (.+?)  (?: )?a
12b70 74 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t}]....      for
12b80 65 61 63 68 20 70 61 74 74 65 72 6e 20 24 70 61  each pattern $pa 12b90 74 74 65 72 6e 73 20 7b 0d 0a 20 20 20 20 20 20 tterns {.. 12ba0 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d if {[regexp -- 12bb0 20 24 70 61 74 74 65 72 6e 20 24 76 61 6c 75 65$pattern $value 12bc0 20 64 75 6d 6d 79 20 6d 65 73 73 61 67 65 5d 7d dummy message]} 12bd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12be0 20 20 20 73 65 74 20 6d 65 73 73 61 67 65 20 5b set message [ 12bf0 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list 12c00 20 5c 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e \r\n \n] [strin 12c10 67 20 74 72 69 6d 20 24 6d 65 73 73 61 67 65 5d g trim$message]
12c20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ]..          set
12c30 20 6c 69 6e 65 73 20 5b 73 70 6c 69 74 20 24 6d   lines [split $m 12c40 65 73 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 essage \n].... 12c50 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 if {[lle 12c60 6e 67 74 68 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 ngth$lines] ==
12c70 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..
12c80 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64         if {[lind
12c90 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 65 71 20  ex $lines 0] eq 12ca0 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 [lindex$lines 1
12cb0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
12cd0 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30  [lindex $lines 0 12ce0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 12cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 12d00 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 return [appendAr 12d10 67 73 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 gs [lindex$line
12d20 73 20 30 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 6e  s 0] " -- " [lin
12d30 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a  dex $lines 1]].. 12d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 12d50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 12d60 24 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20$message..
12d70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
12d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61        return $va 12d90 6c 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 lue.. }..... 12da0 20 20 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 proc trimSql 12db0 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 { sql } {.. 12dc0 20 72 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 return [regsub 12dd0 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 -all -- {\s+} [s 12de0 74 72 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d tring trim$sql]
12df0 20 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d   " "]..    }....
12e00 0a 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 74  .    proc execut
12e10 65 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63  eSql { sql {exec
12e20 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61  ute none} {forma
12e30 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d  t none} {fileNam
12e40 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
12e50 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
12e60 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d  gth $fileName] = 12e70 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 = 0} then {set f 12e80 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a ileName :memory: 12e90 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 }.. setupDb 12ea0 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22$fileName "" ""
12eb0 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 20   "" "" "" false
12ec0 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
12ed0 65 20 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20  e db true....
12ee0 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20     try {..
12ef0 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65    return [upleve
12f00 6c 20 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  l 1 [list \..
12f10 20 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65           sql exe
12f20 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 65  cute -execute $e 12f30 78 65 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 xecute -format$
12f40 66 6f 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d  format $db$sql]
12f50 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c  ]..      } final
12f60 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c  ly {..        cl
12f70 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam 12f80 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 e db false false 12f90 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d false.. }. 12fa0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 12fb0 72 6f 63 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b roc hasNoFlags { 12fc0 20 76 61 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 varName none } 12fd0 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 12fe0 20 24 76 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d$varName flags.
12ff0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69  ...      if {![i
13000 6e 66 6f 20 65 78 69 73 74 73 20 66 6c 61 67 73  nfo exists flags
13010 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
13020 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
13030 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
13040 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
13050 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30  gth $flags] == 0 13060 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13070 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 13080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 13090 69 66 20 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c if {$none && $fl 130a0 61 67 73 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74 ags eq "None"} t 130b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 130c0 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 130d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 130e0 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d urn false.. } 130f0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 13100 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 tConnectionFlags 13110 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 { fileName flag 13120 73 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 s {quiet false} 13130 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 13140 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 13150 72 65 20 6f 75 74 20 77 68 69 63 68 20 64 61 74 re out which dat 13160 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 abase file name 13170 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 or connection st 13180 72 69 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20 ring these.. 13190 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 131a0 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 tion flags will 131b0 61 63 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 actually apply t 131c0 6f 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 o. This is not 131d0 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 necessary.. 131e0 20 23 20 20 20 20 20 20 20 69 6e 20 71 75 69 65 # in quie 131f0 74 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74 t mode because t 13200 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 his information 13210 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 is only used for 13220 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 logging.. 13230 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f # and repo 13240 72 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d rting purposes.. 13250 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13260 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
13270 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
13280 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
13290 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  $fileName] > 0} 132a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 132b0 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b set database [ 132c0 61 70 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65 appendArgs "file 132d0 20 6e 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e name \""$fileN
132e0 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20  ame \"]..
132f0 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
13300 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f   exists ::dataSo
13310 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20  urce] && \..
13320 20 20 20 20 20 20 20 20 21 5b 61 72 72 61 79 20          ![array
13330 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75  exists ::dataSou
13340 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  rce]} then {..
13350 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61          set data
13360 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73  base [appendArgs
13370 20 22 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22   "data source \"
13380 22 20 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20  " $::dataSource 13390 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 \"].. } e 133a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 133b0 20 73 65 74 20 64 61 74 61 62 61 73 65 20 3c 75 set database <u 133c0 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 nknown>.. 133d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 133e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 133f0 4e 4f 54 45 3a 20 45 76 65 6e 20 74 68 6f 75 67 NOTE: Even thoug 13400 68 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 h there is only 13410 6f 6e 65 20 73 6f 75 72 63 65 20 6f 66 20 66 6c one source of fl 13420 61 67 73 20 73 6f 20 66 61 72 2c 20 74 68 65 79 ags so far, they 13430 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13440 6d 75 73 74 20 62 65 20 63 6f 6d 62 69 6e 65 64 must be combined 13450 20 75 73 69 6e 67 20 74 68 65 20 63 6f 72 72 65 using the corre 13460 63 74 20 73 79 6e 74 61 78 20 66 6f 72 20 65 6e ct syntax for en 13470 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20 umerated.. 13480 23 20 20 20 20 20 20 20 66 6c 61 67 20 76 61 6c # flag val 13490 75 65 73 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 ues for the .NET 134a0 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 Framework... 134b0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 134c0 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c flags [combineFl 134d0 61 67 73 20 24 66 6c 61 67 73 20 22 22 5d 0d 0a ags$flags ""]..
134e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
134f0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61   # NOTE: Show (a
13500 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61  nd log) the loca
13510 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
13520 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f 63  gs and the assoc
13530 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  iated..      #
13540 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63 65       data source
13550 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a   or file name...
13560 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
13570 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 13580 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 13590 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 135a0 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 no(emitLocalFlag 135b0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 135c0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 (![info ex 135d0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f ists ::no(emitLo 135e0 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d calFlagsIfNone)] 135f0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 13600 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 ![hasNoFlags 13610 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 flags false])} 13620 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13630 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
13640 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
13650 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
13660 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c       "---- local
13670 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
13680 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73  s for " $databas 13690 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 136a0 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 " are: " [exp 136b0 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 r {![hasNoFlags 136c0 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c flags false] ? \ 136d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 136e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
136f0 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f  flags \"] : "<no
13700 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ne>"}] \n]..
13710 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
13720 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13730 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61   # NOTE: Show (a
13740 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61 72  nd log) the shar
13750 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ed connection fl
13760 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ags...      #..
13770 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 13780 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13790 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 137a0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 137b0 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 invoke System.D 137c0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 137d0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61 72 eConnection Shar 137e0 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 edFlags.. 137f0 20 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d 20 } sharedFlags] 13800 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 13810 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 13820 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 13830 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d mitSharedFlags)] 13840 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 13850 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 (![info exi 13860 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 sts ::no(emitSha 13870 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d redFlagsIfNone)] 13880 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 13890 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 ![hasNoFla 138a0 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 gs sharedFlags t 138b0 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 rue])} then {.. 138c0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 138d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
138e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13900 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e  "---- shared con
13910 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f  nection flags fo
13920 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d  r " $database \. 13930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13940 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 " are: " [expr 13950 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 {![hasNoFlags sh 13960 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 20 aredFlags true] 13970 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ? \.. 13980 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 [appendArgs 13990 20 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67 73 \"$sharedFlags
139a0 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d   \"] : "<none>"}
139b0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
139c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
139d0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
139e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
139f0 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65  s ::no(emitShare
13a00 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20  dFlags)] && \..
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 69               ![i
13a20 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
13a30 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49  emitSharedFlagsI
13a40 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d 20  fUnavailable)]}
13a50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13a60 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13a70 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13a80 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13a90 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 13aa0 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e hared connection 13ab0 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 flags for "$da
13ac0 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20  tabase \..
13ad0 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
13ae0 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c 6e   <unavailable>\n
13af0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
13b00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
13b10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
13b20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
13b30 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65  ow (and log) the
13b40 20 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61 6c   detected global
13b50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
13b60 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20  s, if any...
13b70 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
13b80 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 13b90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 13ba0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 13bb0 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29 5d mitGlobalFlags)] 13bc0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 13bd0 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 (![info exist 13be0 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 s ::no(emitGloba 13bf0 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c lFlagsIfNone)] | 13c00 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | \.. 13c10 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a ![hasNoFlags : 13c20 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 13c30 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 s false])} then 13c40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 13c50 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
13c60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
13c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13c80 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e  "---- global con
13c90 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72  nection flags ar
13ca0 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  e: " \..
13cb0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b 68        [expr {![h
13cc0 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e  asNoFlags ::conn
13cd0 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c  ection_flags fal
13ce0 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  se] ? \..
13cf0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
13d00 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74  gs \" $::connect 13d10 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20 ion_flags \"] : 13d20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a "<none>"}] \n].. 13d30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13d40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 13d50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 13d60 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c there are any gl 13d70 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 obal (per test r 13d80 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 un) connection f 13d90 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a lags currently.. 13da0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 13db0 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 t, use them now 13dc0 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 (i.e. by combini 13dd0 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 ng them with the 13de0 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a ones for this.. 13df0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 13e00 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 nnection)... 13e10 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 13e20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 13e30 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d nnection_flags]} 13e40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13e50 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13e60 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f TE: Combine and/ 13e70 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 63 or replace the c 13e80 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 13e90 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 68 and then show th 13ea0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 13eb0 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 new value... 13ec0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13ed0 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d set flags [com 13ee0 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 bineFlags$flags
13ef0 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66   $::connection_f 13f00 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 lags].... 13f10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13f20 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f TE: Show (and lo 13f30 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 63 g) the new effec 13f40 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 tive connection 13f50 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 flags... 13f60 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 13f70 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13f80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
13f90 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
13fa0 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61  (emitCombinedFla
13fb0 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  gs)] && \..
13fc0 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f           (![info
13fd0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
13fe0 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49 66  tCombinedFlagsIf
13ff0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20  None)] || \..
14000 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61              ![ha
14010 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66  sNoFlags flags f
14020 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a  alse])} then {..
14030 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
14040 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 14050 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 14060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14070 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 "---- combined 14080 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 14090 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 for "$database
140a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
140b0 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78      " are: " [ex
140c0 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73  pr {![hasNoFlags
140d0 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20   flags false] ?
140e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
140f0 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c     [appendArgs \
14100 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22  " $flags \"] : " 14110 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 <none>"}] \n].. 14120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14130 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 14140 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
14150 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  flags..    }....
14160 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c 61  .    proc getFla
14170 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c  gsProperty { {fl
14180 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66  ags ""} {quiet f
14190 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
141a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
141b0 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61 74  : Determine what
141c0 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28 67   the combined (g
141d0 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29  lobal and local)
141e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..
141f0 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 73     #       flags
14200 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73   should be, poss
14210 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20  ibly quietly...
14220 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
14230 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e  t flags [getConn
14240 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24  ectionFlags "" $14250 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d flags$quiet]...
14260 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14270 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c  # NOTE: If no gl
14280 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f  obal or local co
14290 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77  nnection flags w
142a0 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 74  ere specified, t
142b0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
142c0 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63    default connec
142d0 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c  tion flags shoul
142e0 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72 65  d be used; there
142f0 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20  fore, return..
14300 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20 65      #       an e
14310 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20 74  mpty string in t
14320 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 20  hat case...
14330 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
14340 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c  tring length $fl 14350 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ags] == 0} then 14360 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 14370 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d n "".. }... 14380 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14390 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72 # NOTE: In order 143a0 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 to check if the 143b0 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 default connect 143c0 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 65 ion flags are be 143d0 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 20 ing used.. 143e0 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e 65 # it is ne 143f0 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 6d cessary to attem 14400 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20 pt a conversion 14410 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 6e to the actual en 14420 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20 umerated.. 14430 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 46 # type. F 14440 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 65 ailing that, the 14450 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 74 check against t 14460 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 he default value 14470 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 will be.. 14480 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e # skipped. 14490 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 144a0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 144b0 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 set error 144c0 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 44 null; # IGNORED 144d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 .... obje 144e0 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74 ct invoke Utilit 144f0 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 73 45 y TryParseFlagsE 14500 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 num "" \.. 14510 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 14520 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 a.SQLite.SQLiteC 14530 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 onnectionFlags " 14540 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72 "$flags null tr
14550 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ue \..
14560 20 20 74 72 75 65 20 74 72 75 65 20 65 72 72 6f    true true erro
14570 72 0d 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65  r..      } value
14580 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
14590 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
145a0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67  NOTE: Attempting
145b0 20 74 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f   to parse the co
145c0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63  nnection flags c
145d0 61 75 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a  aused a script..
145e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
145f0 65 72 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77  error.  Emit a w
14600 61 72 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65  arning to the te
14610 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20  st log file and
14620 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20  continue..
14630 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20    #       using
14640 61 6e 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20  an emtpy string
14650 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20  instead...
14660 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f    #..        tlo
14670 67 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  g [appendArgs \.
14680 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
14690 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
146a0 65 64 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e  ed to parse conn
146b0 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72  ection flags, er
146c0 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
146d0 20 20 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75        \n\t $valu 146e0 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 e \n].... 146f0 20 73 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20 set value "".. 14700 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14710 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 14720 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 If the combined 14730 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f flags string co 14740 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 uld not actually 14750 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 be converted.. 14760 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 14770 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74 the enumerated t 14780 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64 65 ype it is the de 14790 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 fault value, the 147a0 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20 n just use.. 147b0 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65 72 # it ver 147c0 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 batim; otherwise 147d0 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e , just return an 147e0 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 empty string. 147f0 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23 In that.. # 14800 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 65 case, the 14810 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 default connect 14820 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 ion flags will b 14830 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 e used... # 14840 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 14850 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 ing length$valu
14860 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75  e] == 0 || $valu 14870 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20 e ne "Default"} 14880 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14890 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 52 #.. # WAR 148a0 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72 NING: This retur 148b0 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 ns the string va 148c0 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 lue of the combi 148d0 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a ned flags, not.. 148e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 148f0 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 the enumerate 14900 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 d value. This i 14910 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20 s by design and 14920 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 should not.. 14930 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 14940 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75 e changed withou 14950 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 t careful consid 14960 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 eration (e.g. it 14970 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 would.. 14980 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76 65 # preve 14990 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e nt the SQLiteCon 149a0 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 nection class fr 149b0 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 om allowing inva 149c0 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 lid.. # 149d0 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61 ["magica 149e0 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e l"] meta-flags). 149f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14a00 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 return [app 14a10 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22 endArgs "Flags=" 14a20 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20$flags \;]..
14a30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
14a40 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
14a50 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 61 62  ...    proc enab
14a60 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 7b 20  leSharedCache {
14a70 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b  channel enable {
14a80 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
14a90 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
14aa0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
14ab0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
14ac0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
14ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
14ae0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
14af0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14b00 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
14b10 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c     sqlite3_enabl
14b20 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b  e_shared_cache [
14b30 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65  expr int($enable 14b40 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 )].. } resu 14b50 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 14b60 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
14b70 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
14b80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $14b90 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 14ba0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 14bb0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 14bc0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 sqlite3_enable_s 14bd0 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 hared_cache("$e
14be0 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  nable \..
14bf0 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a         ")... ok:
14c00 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a   " $result \n].. 14c10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14c20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 14c30 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
14c40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14c50 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 14c60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 14c80 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 14c90 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 _enable_shared_c 14ca0 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c ache("$enable \
14cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14cc0 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c  ")... error: " \
14cd0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 14ce0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 14cf0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 14d00 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20 proc setupDb 14d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f 14d20 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 ileName {mode "" 14d30 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 } {dateTimeForma 14d40 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b t ""} {dateTimeK 14d50 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 ind ""} {flags " 14d60 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "}.. 14d70 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c {extra ""} {qual 14d80 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 ify true} {delet 14d90 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c e true} {uri fal 14da0 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se}.. 14db0 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65 {temporary true 14dc0 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b } {varName db} { 14dd0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 14de0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14df0 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 # NOTE: First, 14e00 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 see if our calle 14e10 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 r has requested 14e20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 an in-memory dat 14e30 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 14e40 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d . set isMem 14e50 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 ory [isMemoryDb 14e60 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
14e70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
14e80 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  OTE: For now, al
14e90 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73  l test databases
14ea0 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73   used by the tes
14eb0 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63  t suite are plac
14ec0 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
14ed0 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62    into the datab
14ee0 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20  ase directory.
14ef0 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e  Each database an
14f00 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d  d related files.
14f10 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
14f20 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68  sed by a test sh
14f30 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20  ould be cleaned
14f40 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20  up by that test
14f50 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  using the..
14f60 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75   #       "cleanu
14f70 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20  pDb" procedure,
14f80 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  below...      #.
14f90 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 14fa0 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 emory &&$qualif
14fb0 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..
14fc0 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
14fd0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
14fe0 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
14ff0 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  ] [file tail $fi 15000 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 15010 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 15020 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 # NOTE: By d 15030 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 efault, delete a 15040 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 ny pre-existing 15050 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 database with th 15060 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 e same file.. 15070 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 15080 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 if it currently 15090 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 exists... # 150a0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 .. if {!$is
150b0 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74  Memory && $delet 150c0 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 e && [file exist 150d0 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
150e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
150f0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
15100 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65   Attempt to dele
15110 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74  te any pre-exist
15120 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74  ing database wit
15130 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d  h the same file.
15140 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15150 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20   name...
15160 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
15170 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
15180 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 15190 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 151a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 151b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 151c0 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 151d0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 151e0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 151f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15200 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
15210 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
15220 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 15230 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 15240 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 15250 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 15260 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 15270 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat 15280 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
15290 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
152a0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
152b0 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72  during setup, er
152c0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 152d0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 152e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 152f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 15300 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 15310 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 15320 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 15330 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 15340 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 15350 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 15360 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 caller. The 15370 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 handle to the op 15380 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 69 ened database wi 15390 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ll be stored the 153a0 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 153b0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
153c0 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
153d0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
153e0 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67  : Start building
153f0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
15400 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c  string.  The onl
15410 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69  y required porti
15420 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
15430 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
15440 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68  ion string is th
15450 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77  e data source, w
15460 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68  hich contains th
15470 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
15480 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
15490 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20  ame itself.  If
154a0 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73  our caller wants
154b0 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61 73   to use a URI as
154c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
154d0 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
154e0 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69   use the FullUri
154f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
15500 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a  ng property to..
15510 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
15520 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20 73  event the data s
15530 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f  ource string fro
15540 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e  m being mangled.
15550 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15560 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20   if {$uri} then 15570 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 {.. set c 15580 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 onnection {FullU 15590 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d ri=${fileName}}.
155a0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
155b0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
155c0 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f  nection {Data So
155d0 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d  urce=${fileName} 155e0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 155f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15600 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20 OTE: Since this 15610 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f procedure has no 15620 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 special knowled 15630 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 64 ge of what the d 15640 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 efault.. # 15650 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 73 setting is 15660 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 for the ToFullP 15670 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 ath connection s 15680 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 tring propery, a 15690 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20 lways.. # 156a0 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 6c add the val 156b0 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 ue we know about 156c0 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 to the connecti 156d0 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 on string... 156e0 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e #.. appen 156f0 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 d connection {;T 15700 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c oFullPath=${qual
15710 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23  ify}}....      #
15720 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15730 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
15740 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61  ecified a journa
15750 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20  l mode, add the
15760 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
15770 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
15780 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
15790 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
157a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
157b0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
157c0 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68  h $mode] > 0} th 157d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 157e0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 157f0 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 {;Journal Mode=$
15800 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d  {mode}}..      }
15810 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15820 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
15830 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
15840 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f  ed a DateTime fo
15850 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65  rmat, add the ne
15860 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23  cessary..      #
15870 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f         portion o
15880 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
15890 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
158a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
158b0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
158c0 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d  $dateTimeFormat] 158d0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 158e0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 158f0 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 nection {;DateTi 15900 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 meFormat=${dateT
15910 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20  imeFormat}}..
15920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
15930 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
15940 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
15950 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d  cified a DateTim
15960 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e  eKind, add the n
15970 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e  ecessary portion
15980 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15990 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
159a0 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
159b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
159c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
159d0 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20   $dateTimeKind] 159e0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 159f0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn 15a00 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d ection {;DateTim 15a10 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 eKind=${dateTime
15a20 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  Kind}}..      }.
15a30 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15a40 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
15a50 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66 69   out what the fi
15a60 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68  nal flags for th
15a70 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65  is connection ne
15a80 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20  ed to be...
15a90 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c   #..      set fl
15aa0 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69  ags [getConnecti
15ab0 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d  onFlags $fileNam 15ac0 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d e$flags $quiet] 15ad0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15ae0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 15af0 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 15b00 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f ed some SQLiteCo 15b10 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 nnectionFlags, a 15b20 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 dd the.. # 15b30 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 necessary 15b40 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 portion of the c 15b50 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 15b60 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 15b70 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15b80 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d g length$flags]
15b90 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
15ba0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
15bb0 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d  nection {;Flags=
15bc0 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20  ${flags}}.. 15bd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 15be0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 15bf0 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci 15c00 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 fied an extra pa 15c10 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e yload to the con 15c20 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 nection.. # 15c30 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 string, a 15c40 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 ppend it now... 15c50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 15c60 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 15c70 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68$extra] > 0} th
15c80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
15c90 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
15ca0 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20  \; $extra.. 15cb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 15cc0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 # NOTE: Ope 15cd0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 n the database c 15ce0 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 onnection now, p 15cf0 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 lacing the opaqu 15d00 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a e handle value.. 15d10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 15d20 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 to the variable 15d30 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 specified by our 15d40 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... 15d50 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 #.. set db 15d60 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 [sql open -type 15d70 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 SQLite [subst$c
15d80 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20  onnection]]....
15d90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15da0 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20  NOTE: Configure
15db0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69  the temporary di
15dc0 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20  rectory for the
15dd0 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74  newly opened dat
15de0 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20  abase..      #
15df0 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20       connection
15e00 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63  now unless our c
15e10 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74  aller forbids it
15e20 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15e30 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79    if {$temporary 15e40 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 && ![info exist 15e50 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 s ::no(setTempor 15e60 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 aryDirectory)]} 15e70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15e80 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 sql execute$db
15e90 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
15ea0 20 20 20 20 20 20 20 20 20 20 20 22 50 52 41 47             "PRAG
15eb0 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
15ec0 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67  rectory = \"" [g
15ed0 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63  etTemporaryDirec
15ee0 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20  tory] \"\;]..
15ef0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
15f00 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50  .      # NOTE: P
15f10 65 72 66 6f 72 6d 20 61 6e 79 20 65 78 74 72 61  erform any extra
15f20 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection
15f30 73 65 74 75 70 20 66 6f 72 20 74 68 65 20 6e 65  setup for the ne
15f40 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20  wly opened..
15f50 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61    #       databa
15f60 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75  se now unless ou
15f70 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73  r caller forbids
15f80 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20   it...      #..
15f90 20 20 20 20 20 73 65 74 20 65 78 65 63 75 74 65       set execute
15fa0 4f 6e 53 65 74 75 70 20 5b 67 65 74 45 78 65 63  OnSetup [getExec
15fb0 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20  uteOnSetup]....
15fc0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
15fd0 20 6c 65 6e 67 74 68 20 24 65 78 65 63 75 74 65   length $execute 15fe0 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 26 26 20 OnSetup] > 0 && 15ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 21 5b 69 \.. ![i 16000 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 16010 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 29 5d executeOnSetup)] 16020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16030 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 16040 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e OTE: This comman 16050 64 20 6d 61 79 20 72 61 69 73 65 20 61 6e 20 65 d may raise an e 16060 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 rror; if so, tha 16070 74 20 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 t is fine, as.. 16080 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 16090 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 he enclosing tes 160a0 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c t will then fail 160b0 2e 20 20 54 68 65 20 5b 73 75 62 73 74 5d 20 63 . The [subst] c 160c0 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 ommand is.. 160d0 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 # used 160e0 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e 20 63 61 on the SQL in ca 160f0 73 65 20 69 74 20 6e 65 65 64 73 20 74 6f 20 72 se it needs to r 16100 65 66 65 72 20 74 6f 20 73 74 61 74 65 20 69 6e efer to state in 16110 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 20 23 20 our.. # 16120 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a context... 16130 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16140 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 sql execute$
16150 64 62 20 5b 73 75 62 73 74 20 24 65 78 65 63 75  db [subst $execu 16160 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 teOnSetup].. 16170 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 16180 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c # NOTE: Al 16190 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 ways return the 161a0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 161b0 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d e upon success.. 161c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 161d0 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 return$db..
161e0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
161f0 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b  etDbConnection {
16200 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20   {varName db} }
16210 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
16220 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20    # NOTE: Refer
16230 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
16240 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20   variable (e.g.
16250 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e  "db") in the con
16260 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20  text of our..
16270 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65     #       calle
16280 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74  r.  The handle t
16290 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  o the database p
162a0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
162b0 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20   via the..
162c0 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62  #       [setupDb
162d0 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75  ] procedure shou
162e0 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65  ld be stored the
162f0 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  re...      #..
16300 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 16310 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... 16320 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16330 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 : This returns t 16340 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f he ADO.NET IDbCo 16350 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 nnection object 16360 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 instance for the 16370 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16380 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 73 specified databs 16390 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 e handle. Since 163a0 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 getting this ob 163b0 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e ject relies upon 163c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 163d0 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c Eagle internals, 163e0 20 67 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 great care shou 163f0 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 ld be taken to a 16400 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f void disposing o 16410 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # 16420 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 this object or 16430 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 69 6e otherwise puttin 16440 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 g it into an inv 16450 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 alid state... 16460 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 16470 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d [info exists db] 16480 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16490 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 164a0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 164b0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 164c0 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 NonPublic -objec 164d0 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 tflags +NoDispos 164e0 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 164f0 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 Interp 16500 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e reter.GetActive. 16510 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d connections Item 16520 20 24 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20$db..        }
16530 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
16540 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16550 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
16560 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65  OTE: Success, re
16570 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20  turn the opaque
16580 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a  object handle...
16590 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
165a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r 165b0 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d esult.. } 165c0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 165d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 165e0 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c # NOTE: Failure, 165f0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 16600 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16610 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16620 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16630 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16640 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
16650 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
16660 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   get connection
16670 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62  handle for datab
16680 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ase \"" \..
16690 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22           $db "\" 166a0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 166b0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
166c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
166d0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
166e0 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
166f0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 6f 62 76  e, return an obv
16700 69 6f 75 73 6c 79 20 69 6e 76 61 6c 69 64 20 6f  iously invalid o
16710 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
16720 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  dle...      #..
16730 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
16740 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
16750 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  oc freeDbConnect
16760 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63  ion { {varName c
16770 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a  onnection} } {..
16780 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16790 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
167a0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
167b0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
167c0 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
167d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
167e0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
167f0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61  caller.  The opa
16800 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
16810 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54  e for an ADO.NET
16820 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16830 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69  connection previ
16840 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62  ously returned b
16850 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  y [getDbConnecti
16860 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  on] should be..
16870 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f       #       sto
16880 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
16890 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
168a0 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e   1 $varName conn 168b0 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 ection.... 168c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 168d0 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f Attempt to remo 168e0 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 ve the opaque ob 168f0 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d ject handle from 16900 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 the interpreter 16910 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16920 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 now. This [obje 16930 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c ct dispose] call 16940 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c will not actual 16950 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 ly dispose of th 16960 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 16970 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 underlying obje 16980 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b ct because the + 16990 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 NoDispose flag w 169a0 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 as set on it.. 169b0 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri 169c0 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 ng creation of t 169d0 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object 169e0 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 handle... 169f0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 16a00 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 fo exists connec 16a10 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tion] && \.. 16a20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 [catch {ob 16a30 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f ject dispose$co
16a40 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d  nnection} error]
16a50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16a60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
16a70 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
16a80 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65  failed to remove
16a90 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70   the handle, rep
16aa0 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
16ab0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
16ac0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 16ad0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= 16af0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 16b00 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f led to remove co 16b10 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle 16b20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 \""$connection
16b30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
16b40 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
16b50 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 16b60 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 16b70 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 . proc addDbC 16b80 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e onnection { conn 16b90 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 ection {varName 16ba0 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 db} } {.. # 16bb0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 16bc0 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe 16bd0 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable 16be0 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t 16bf0 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou 16c00 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 16c10 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... 16c20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 16c30 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
16c40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16c50 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20   NOTE: Create a
16c60 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74  correctly format
16c70 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ted name for the
16c80 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
16c90 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23  tion to..      #
16ca0 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20         be added
16cb0 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61  to the list mana
16cc0 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65  ged by the Eagle
16cd0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
16ce0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
16cf0 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t db [object inv
16d00 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
16d10 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
16d20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e     Eagle._Compon
16d30 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72  ents.Private.For
16d40 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f  matOps DatabaseO
16d50 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65  bjectName $conne 16d60 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 ction \.. 16d70 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 SQLiteConnect 16d80 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f ion [object invo 16d90 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ke Interpreter.G 16da0 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d etActive NextId] 16db0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 16dc0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 16dd0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con 16de0 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 nection provided 16df0 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 by our caller t 16e00 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 o the list.. 16e10 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f # of tho 16e20 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 se known to the 16e30 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 Eagle interprete 16e40 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 16e50 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 16e60 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 16e70 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ic Interpreter.G 16e80 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 etActive.connect 16e90 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 ions Add \.. 16ea0 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65$db $conne 16eb0 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ction.. }.... 16ec0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 . proc getRow 16ed0 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b sFromDataTable { 16ee0 20 64 61 74 61 54 61 62 6c 65 20 7b 76 61 6c 75 dataTable {valu 16ef0 65 43 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d 20 eCallback ""} } 16f00 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 {.. set row 16f10 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 s [list].. 16f20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 set count [$data
16f30 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f  Table Columns.Co
16f40 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  unt]....      fo
16f50 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20  r {set index 0}
16f60 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74  {$index <$count
16f70 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
16f80 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61  ..        set da
16f90 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54  taColumn [$dataT 16fa0 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 able -alias Colu 16fb0 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e mns.get_Item$in
16fc0 64 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  dex]..        se
16fd0 74 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20  t names($index) 16fe0 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c [$dataColumn Col
16ff0 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  umnName]..
17000 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
17010 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75      # NOTE: Setu
17020 70 20 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 72  p some Tcl retur
17030 6e 20 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 73  n code constants
17040 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17050 20 20 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 20    set Ok 0; set
17060 45 72 72 6f 72 20 31 3b 20 73 65 74 20 52 65 74  Error 1; set Ret
17070 75 72 6e 20 32 3b 20 73 65 74 20 42 72 65 61 6b  urn 2; set Break
17080 20 33 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 65   3; set Continue
17090 20 34 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65   4....      obje
170a0 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
170b0 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64  s dataRow [set d
170c0 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61  ataRows [$dataTa 170d0 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 ble Rows]] {.. 170e0 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c set row [l 170f0 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ist].... 17100 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 for {set index 0 17110 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 } {$index < $cou 17120 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d nt} {incr index} 17130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 17140 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f t value [$dataRo
17150 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73  w -create -alias
17160 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78   get_Item $index 17170 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 17180 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 17190 68 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b h$valueCallback
171a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
171b0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
171c0 6f 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  ode [catch {..
171d0 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c              $val 171e0 75 65 43 61 6c 6c 62 61 63 6b 20 24 64 61 74 61 ueCallback$data
171f0 54 61 62 6c 65 20 24 64 61 74 61 52 6f 77 20 24  Table $dataRow$
17200 69 6e 64 65 78 20 24 76 61 6c 75 65 0d 0a 20 20  index $value.. 17210 20 20 20 20 20 20 20 20 20 20 7d 20 6e 65 77 56 } newV 17220 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alue].... 17230 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d if {$code =
17240 3d 20 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20  = $Ok} then {.. 17250 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 17270 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 17280 65 63 69 66 69 65 64 20 28 6e 65 77 3f 29 20 72 ecified (new?) r 17290 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 ow value... 172a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 172b0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 172c0 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d d row [list$nam
172d0 65 73 28 24 69 6e 64 65 78 29 20 24 6e 65 77 56  es($index)$newV
172e0 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  alue]..
172f0 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f     } elseif {$co 17300 64 65 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74 68 de ==$Error} th
17310 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17320 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
17330 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
17340 20 74 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c 4c   the (new?) NULL
17350 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20   row value...
17360 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
17370 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
17380 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e  end row [list $n 17390 61 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 ames($index)]..
173a0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
173b0 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 52  eif {$code ==$R
173c0 65 74 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a 20  eturn} then {..
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
173f0 4e 4f 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 69  NOTE: Skip remai
17400 6e 69 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 20  ning values for
17410 74 68 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 20  this row...
17420 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
17430 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d            break.
17440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
17450 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20  lseif {$code == 17460 24 42 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d 0a$Break} then {..
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
17480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
17490 20 4e 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f 63   NOTE: Skip proc
174a0 65 73 73 69 6e 67 20 74 68 69 73 20 72 6f 77 20  essing this row
174b0 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...
174c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
174d0 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24       } elseif {$174e0 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 code ==$Continu
174f0 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
17500 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
17510 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
17520 3a 20 55 73 65 20 64 65 66 61 75 6c 74 20 72 6f  : Use default ro
17530 77 20 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e 67  w value handling
17540 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
17550 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
17560 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
17570 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
17580 20 20 20 73 65 74 20 63 6f 64 65 20 24 43 6f 6e     set code $Con 17590 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 tinue.. 175a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 175b0 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f if {$code == $Co 175c0 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a ntinue} then {.. 175d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 175e0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
175f0 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d  value] > 0 && \.
17600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17610 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65   ![object invoke
17620 20 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c   Convert IsDBNul
17630 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20  l $value]} then 17640 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17650 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 lappend row [li 17660 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 st$names($index 17670 29 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 ) [$value ToStri
17680 6e 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng]]..
17690 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
176a0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
176b0 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d  d row [list $nam 176c0 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 es($index)]..
176d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
176e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
176f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61   }....        la
17700 70 70 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d  ppend rows $row. 17710 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 17720 20 20 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a return$rows..
17730 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
17740 6f 63 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44  oc dumpRowsFromD
17750 61 74 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e  ataTable { chann
17760 65 6c 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20  el rows } {..
17770 20 20 20 73 65 74 20 73 65 71 75 65 6e 63 65 20     set sequence
17780 31 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  1....      forea
17790 63 68 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a  ch row $rows {.. 177a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
177b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
177c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
177d0 20 20 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e    [expr {$sequen 177e0 63 65 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 ce > 1 ? "\n" : 177f0 22 22 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 ""}] "---- ROW # 17800 22 20 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d "$sequence :\n]
17810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65  ....        fore
17820 61 63 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d  ach pair $row {. 17830 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 17840 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e llength$pair] >
17850 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 2} then {..
17860 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $17870 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17880 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 rgs \t \.. 17890 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 [list 178a0 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d [lindex$pair 0]
178b0 5d 20 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69  ] ": " [list [li
178c0 6e 64 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c  ndex $pair 1]] \ 178d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 178e0 65 6c 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 elseif {[llength 178f0 20 24 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68$pair] == 1} th
17900 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17910 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17920 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 [appendArgs \t 17930 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17940 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 [list [lindex 17950 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e$pair 0]] ": <n
17960 75 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ull>\n"]..
17970 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
17980 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
17990 24 63 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74  $channel \t<empt 179a0 79 3e 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f y>\n; # NOTE: No 179b0 20 64 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 data?.. 179c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 179d0 0d 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 .. incr s 179e0 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d equence.. } 179f0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 17a00 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b proc cleanupDb { 17a10 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 fileName {varNa 17a20 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 me db} {collect 17a30 74 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 true} {qualify t 17a40 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 rue}.. 17a50 20 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 {dele 17a60 74 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 te true} } {.. 17a70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 17a80 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 17a90 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e force all pendin 17aa0 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 g "garbage" obje 17ab0 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 cts to be collec 17ac0 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ted,.. # 17ad0 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 including SQ 17ae0 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 Lite statements 17af0 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 and backup objec 17b00 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 ts; this should 17b10 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 allow.. # 17b20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 the underly 17b30 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c ing database fil 17b40 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e e to be deleted. 17b50 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17b60 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 if {$collect} t
17b70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63  hen {..        c
17b80 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a  ollectGarbage $: 17b90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 :test_channel.. 17ba0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17bb0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17bc0 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 17bd0 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 17be0 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 17bf0 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 17c00 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 17c10 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 caller. The h 17c20 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 andle to the dat 17c30 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 abase previously 17c40 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d opened via the. 17c50 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 17c60 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 setupDb] procedu 17c70 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f re should be sto 17c80 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 red there... 17c90 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 17ca0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
17cb0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
17cc0 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74   # NOTE: Close t
17cd0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  he connection to
17ce0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f   the database no
17cf0 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  w.  This should
17d00 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20  allow us..
17d10 23 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74  #       to delet
17d20 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  e the underlying
17d30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d   database file..
17d40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17d50 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
17d60 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b   db] && [catch {
17d70 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65  sql close $db} e 17d80 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 17d90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 17da0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 17db0 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 ehow failed to c 17dc0 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73 lose the databas 17dd0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 17de0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17df0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
17e00 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
17e10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17e20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
17e30 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f  G: failed to clo
17e40 73 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20  se database \""
17e50 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  $db "\", error: 17e60 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 17e70 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
17e80 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
17e90 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
17ea0 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69  TE: First, see i
17eb0 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73  f our caller has
17ec0 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e   requested an in
17ed0 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
17ee0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17ef0 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b    set isMemory [
17f00 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65  isMemoryDb $file 17f10 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 Name].... # 17f20 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 17f30 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 Build the full p 17f40 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 ath to the datab 17f50 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 ase file name. 17f60 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 For now, all tes 17f70 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 17f80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 database files 17f90 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 are stored in th 17fa0 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 e temporary dire 17fb0 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d ctory... #. 17fc0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d . if {!$isM
17fd0 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66  emory && $qualif 17fe0 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 17ff0 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 18000 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 [file join [getD 18010 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 atabaseDirectory 18020 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 ] [file tail$fi
18030 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20  leName]]..
18040 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
18050 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
18060 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74  k if the file st
18070 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  ill exists...
18080 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
18090 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64  !$isMemory &&$d
180a0 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65  elete && [file e
180b0 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 180c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 180d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 180e0 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti 180f0 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ng database file 18100 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 s if somebody se 18110 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 ts the global.. 18120 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 # v 18130 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 ariable to preve 18140 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 nt it... 18150 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 18160 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 18170 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 o(cleanupDbFile) 18180 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 18190 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 181a0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 181b0 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 t to delete the 181c0 74 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69 test database fi 181d0 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 le now... 181e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 181f0 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 if {[set code [c 18200 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 18210 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 e$fileName} err
18220 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  or]]} then {..
18230 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18240 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
18250 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
18260 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
18270 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68   file, report wh
18280 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...
18290 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  #..            t
182a0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 182b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 182c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 182d0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 182e0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c G: failed to del 182f0 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c ete database fil 18300 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
18310 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18320 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
18330 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20  eanup, error: "
18340 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 18350 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 18360 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 18370 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 18380 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 18390 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 how that we skip 183a0 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 ped deleting the 183b0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... 183c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 183d0 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 et code 0.... 183e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
183f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
18400 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
18410 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
18420 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64  WARNING: skipped
18430 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61   deleting databa
18440 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  se file \"" $fil 18450 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 18460 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin 18470 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 g cleanup\n"].. 18480 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18490 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 184a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 184b0 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f OTE: The file do 184c0 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 es not exist, su 184d0 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 ccess!.. 184e0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 #.. set c 184f0 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a ode 0.. }.. 18500 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
18510 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  code..    }.....
18520 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76      proc saveEnv
18530 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
18540 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61  s { names {varNa
18550 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  me ""} } {..
18560 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
18570 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65  E: For each name
18580 2c 20 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20  , does the live
18590 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
185a0 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d  able exist?  If.
185b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
185c0 6f 2c 20 73 61 76 65 20 74 68 65 20 76 61 6c 75  o, save the valu
185d0 65 20 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68  e for later; oth
185e0 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72  erwise, make sur
185f0 65 20 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20  e the saved..
18600 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65     #       value
18610 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist
18620 65 69 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76  either.  The liv
18630 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  e environment va
18640 72 69 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23  riables..      #
18650 20 20 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63         ARE NOT c
18660 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70  hanged by this p
18670 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20  rocedure...
18680 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
18690 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 186a0 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 rName] == 0} the 186b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 186c0 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e varName savedEn 186d0 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 v.. }.... 186e0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
186f0 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d  Name savedEnv...
18700 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e  .      foreach n
18710 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20  ame $names {.. 18720 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 18730 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 exists ::env($na
18740 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  me)]} then {..
18750 20 20 20 20 20 20 20 20 73 65 74 20 73 61 76 65          set save
18760 64 45 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65  dEnv($name)$::e
18770 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20  nv($name).. 18780 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 18790 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 187a0 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 187b0 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 v($name)..
187c0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
187d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
187e0 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73   NOTE: This is s
187f0 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49  elf-cleaning.  I
18800 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72  f no saved envir
18810 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73  onment variables
18820 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20   now..      #
18830 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76      exist, remov
18840 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20  e the array...
18850 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
18860 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76  {[array size sav
18870 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65  edEnv] == 0} the
18880 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73  n {..        uns
18890 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73  et -nocomplain s
188a0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d  avedEnv..      }
188b0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
188c0 70 72 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69  proc restoreEnvi
188d0 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
188e0 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d   { names {varNam
188f0 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
18900 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18910 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c  : For each name,
18920 20 64 6f 65 73 20 74 68 65 20 73 61 76 65 64 20   does the saved
18930 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
18940 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d  able exist?  If.
18950 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
18960 6f 2c 20 72 65 73 74 6f 72 65 20 74 68 65 20 73  o, restore the s
18970 61 76 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75  aved value and u
18980 6e 73 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69  nset it; otherwi
18990 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20  se, make sure..
189a0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
189b0 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e   live environmen
189c0 74 20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20  t variable does
189d0 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72  not exist either
189e0 20 28 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20   (i.e. it..
189f0 20 23 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74   #       was not
18a00 20 73 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69   set to begin wi
18a10 74 68 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64  th).  Both saved
18a20 20 61 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f   and live enviro
18a30 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  nment..      #
18a40 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 20 41       variables A
18a50 52 45 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  RE changed by th
18a60 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20  is procedure...
18a70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
18a80 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
18a90 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d   $varName] == 0} 18aa0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18ab0 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 set varName sav 18ac0 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a edEnv.. }.. 18ad0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 18ae0 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e$varName savedEn
18af0 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  v....      forea
18b00 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b  ch name $names { 18b10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 18b20 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 nfo exists saved 18b30 45 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 Env($name)]} the
18b40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
18b50 65 74 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20  et ::env($name) 18b60 24 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29$savedEnv($name) 18b70 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 .. unse 18b80 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 t -nocomplain sa 18b90 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 vedEnv($name)..
18ba0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
18bb0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74  .          unset
18bc0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65   -nocomplain ::e
18bd0 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20  nv($name).. 18be0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 18bf0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18c00 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 # NOTE: This is 18c10 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 self-cleaning. 18c20 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 If no saved envi 18c30 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 18c40 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 s now.. # 18c50 20 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f exist, remo 18c60 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 ve the array... 18c70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 18c80 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 {[array size sa 18c90 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 vedEnv] == 0} th 18ca0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e en {.. un 18cb0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 18cc0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 savedEnv.. 18cd0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 18ce0 20 70 72 6f 63 20 73 61 76 65 47 65 74 53 65 74 proc saveGetSet 18cf0 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e tingValueEnviron 18d00 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 18d10 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 18d20 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 18d30 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d saveEnvironm 18d40 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 18d50 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 18d60 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c No_Expand No_SQL 18d70 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c iteGetSettingVal 18d80 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 ue No_SQLiteXmlC 18d90 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 onfigFile] \.. 18da0 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 18db0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 18dc0 70 72 6f 63 20 72 65 73 74 6f 72 65 47 65 74 53 proc restoreGetS 18dd0 65 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 ettingValueEnvir 18de0 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 18df0 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 18e00 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 18e10 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 18e20 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 18e30 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 18e40 20 20 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e No_Expand N 18e50 6f 5f 53 51 4c 69 74 65 47 65 74 53 65 74 74 69 o_SQLiteGetSetti 18e60 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 ngValue No_SQLit 18e70 65 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 eXmlConfigFile] 18e80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 \.. sav 18e90 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d edEnv.. }.... 18ea0 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 . proc saveSQ 18eb0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e LiteConnectionEn 18ec0 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a vironment {} {.. 18ed0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 upvar 1 sa 18ee0 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d vedEnv savedEnv. 18ef0 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 ... saveEnv 18f00 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 18f10 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 18f20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 DefaultFlag 18f30 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 s_SQLiteConnecti 18f40 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e on No_SQLiteConn 18f50 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d ectionNewParser] 18f60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 18f70 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 18f80 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f .. proc resto 18f90 72 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 reSQLiteConnecti 18fa0 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d onEnvironment {} 18fb0 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 18fc0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 1 savedEnv saved 18fd0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 Env.... res 18fe0 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 toreEnvironmentV 18ff0 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 19000 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 61 .. Defa 19010 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 ultFlags_SQLiteC 19020 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c onnection No_SQL 19030 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 iteConnectionNew 19040 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 Parser] \.. 19050 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 19060 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 19070 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 c saveSQLiteConv 19080 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b ertEnvironment { 19090 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 190a0 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 1 savedEnv save 190b0 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 dEnv.... sa 190c0 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 190d0 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 190e0 20 20 20 20 20 20 20 20 20 20 55 73 65 5f 53 51 Use_SQ 190f0 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 LiteConvert_Defa 19100 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53 51 ultDbType Use_SQ 19110 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 LiteConvert_Defa 19120 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a ultTypeName] \.. 19130 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 savedE 19140 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nv.. }..... 19150 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 proc restoreSQ 19160 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 LiteConvertEnvir 19170 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 19180 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 19190 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 191a0 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 191b0 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 191c0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 191d0 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 Use_SQLiteC 191e0 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 onvert_DefaultDb 191f0 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 Type Use_SQLiteC 19200 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 onvert_DefaultTy 19210 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 peName] \.. 19220 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 19230 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 19240 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 c setupDbInterru 19250 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 ptCallback { cha 19260 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 nnel log } {.. 19270 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
19280 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67  el "---- setting
19290 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e 74   up debugger int
192a0 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e  errupt callback.
192b0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
192c0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
192d0 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d      saveEnvironm
192e0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69  entVariables [li
192f0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
19300 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72    quietFindInter
19310 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20 71  preterTestPath q
19320 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72  uietSetupInterpr
19330 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d  eterTestPath]...
19340 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  .        try {..
19350 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
19360 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50         # NOTE: P
19370 72 65 76 65 6e 74 20 74 68 65 20 76 65 6e 64 6f  revent the vendo
19380 72 20 73 63 72 69 70 74 20 66 72 6f 6d 20 62 65  r script from be
19390 69 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 63  ing noisy when c
193a0 72 65 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 20  reating..
193b0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 69     #       the i
193c0 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
193d0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
193e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
193f0 20 3a 3a 65 6e 76 28 71 75 69 65 74 46 69 6e 64   ::env(quietFind
19400 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50  InterpreterTestP
19410 61 74 68 29 20 31 0d 0a 20 20 20 20 20 20 20 20  ath) 1..
19420 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65    set ::env(quie
19430 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
19440 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a  rTestPath) 1....
19450 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
19460 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
19470 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 72  ake sure the scr
19480 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e 64  ipt debugger and
19490 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
194a0 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20  terpreter..
194b0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
194c0 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 79   setup and ready
194d0 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20   for use...
194e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
194f0 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72    debug setup tr
19500 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20  ue true....
19510 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19520 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
19530 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 63  he necessary pac
19540 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69  kages into the i
19550 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
19560 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
19570 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
19580 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20  ug eval {..
19590 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
195a0 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20  equire Eagle..
195b0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
195c0 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
195d0 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20  Library..
195e0 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
195f0 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d  uire Eagle.Test.
19600 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
19610 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
19620 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
19630 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 72  opy the necessar
19640 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f  y variables into
19650 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
19660 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
19670 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19680 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20     debug invoke
19690 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61  0 set ::test_cha
196a0 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23  nnel $channel; # 196b0 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 NOTE: For [tput 196c0 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 s]... d 196d0 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 ebug invoke 0 se 196e0 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f t ::test_log$lo
196f0 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b  g; # NOTE: For [
19700 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20  tlog].....
19710 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
19720 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c   # NOTE: Install
19730 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63   the callback sc
19740 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75  ript to be evalu
19750 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c  ated in the isol
19760 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ated..
19770 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65  #       interpre
19780 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e  ter when this in
19790 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74  terpreter is int
197a0 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69  errupted by scri
197b0 70 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  pt..          #
197c0 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69        cancellati
197d0 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  on, etc...
197e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
197f0 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback
19800 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65  apply {{sender e
19810 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } {..
19820 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
19830 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
19840 20 74 68 69 73 20 64 65 62 75 67 67 65 72 20 63   this debugger c
19850 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74  allback is one t
19860 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75  hat we care abou
19870 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...
19880 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
19890 65 74 20 69 6e 74 65 72 72 75 70 74 54 79 70 65  et interruptType
198a0 73 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74  s [split [$e Int 198b0 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 erruptType] ", " 198c0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 198d0 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 if {"Canceled" 198e0 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 in$interruptTyp
198f0 65 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  es || \..
19900 20 20 20 20 20 20 20 20 20 22 55 6e 77 6f 75 6e           "Unwoun
19910 64 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74  d" in $interrupt 19920 54 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 Types} then {.. 19930 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 19950 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 NOTE: Make sure 19960 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com 19970 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c mand is availabl 19980 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 e. Since.. 19990 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 199a0 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c this is an isol 199b0 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 ated interpreter 199c0 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74 , check for it t 199d0 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20 he hard.. 199e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 199f0 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ay... 19a00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19a10 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength 19a20 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands 19a30 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 object]] > 0} th 19a40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19a50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19a60 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 19a70 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 Iterate through 19a80 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f all database co 19a90 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 nnections known 19aa0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 to the.. 19ab0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19ac0 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 parent interpret 19ad0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 19ae0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 19af0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 19b00 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 19b10 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ir [object invok 19b20 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 19b30 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 19b40 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49 6e$e In
19b50 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63  terpreter.connec
19b60 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20  tions] {..
19b70 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19b90 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
19ba0 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53   to cancel any S
19bb0 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72  QL queries in pr
19bc0 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20  ogress on..
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
19be0 20 20 20 20 20 74 68 69 73 20 64 61 74 61 62 61       this databa
19bf0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
19c20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
19c30 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43  h {$pair Value.C 19c40 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 ancel} error]} t 19c50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19c60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 19c70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
19c80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20   [appendArgs \n
19c90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19ca0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
19cb0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
19cc0 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79   to cancel query
19cd0 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20   for " \..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19cf0 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22    "connection \"
19d00 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 19d10 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 19d20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19d30 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72$err
19d40 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
19d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                }
19d80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
19d90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 19da0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 19db0 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a ppendArgs \n \.. 19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19dd0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 19de0 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c G: cannot cancel 19df0 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20 any queries: " 19e00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19e10 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62 "the \"ob 19e20 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 ject\" command i 19e30 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c s not available\ 19e40 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 19e50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 19e60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 19e70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e }.. } fin 19e80 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 ally {.. 19e90 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e restoreEnviron 19ea0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c mentVariables [l 19eb0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 19ec0 20 20 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e quietFindIn 19ed0 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 19ee0 68 20 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 h quietSetupInte 19ef0 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 5d rpreterTestPath] 19f00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 19f10 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 19f20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19f30 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 19f40 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 interruptCallbac 19f50 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 k.sqlite3.... 19f60 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
19f70 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
19f80 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19f90 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 19fa0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e l [appendArgs "n 19fb0 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 o, error: " \n\t 19fc0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
19fd0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
19fe0 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
19ff0 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  File { fileName
1a000 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b  {collect true} {
1a010 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b  force false} } {
1a020 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1a030 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
1a040 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
1a050 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
1a060 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
1a070 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
1a080 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
1a090 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
1a0a0 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
1a0b0 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
1a0c0 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
1a0d0 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
1a0e0 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
1a0f0 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
1a100 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
1a110 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 1a120 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1a130 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 1a140 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
1a150 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
1a160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1a170 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
1a180 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
1a190 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
1a1a0 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
1a1b0 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 1a1c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a1d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1a1e0 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti 1a1f0 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 ng test files if 1a200 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 somebody sets t 1a210 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 he global variab 1a220 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 1a230 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 to prevent i 1a240 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 1a250 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 if {$forc
1a260 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73  e || ![info exis
1a270 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46  ts ::no(cleanupF
1a280 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
1a290 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1a2a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
1a2b0 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
1a2c0 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f  the test file no
1a2d0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
1a2e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
1a2f0 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
1a300 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi 1a310 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d leName} error]]} 1a320 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a330 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a340 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 1a350 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 1a360 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file 1a370 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 1a380 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1a390 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1a3a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1a3b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a3d0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1a3e0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
1a3f0 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi 1a400 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 1a410 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 1a420 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 ring cleanup, er 1a430 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
1a440 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
1a450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1a460 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1a470 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1a480 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20  NOTE: Show that
1a490 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  we skipped delet
1a4a0 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20  ing the file...
1a4b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1a4c0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30        set code 0
1a4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
1a4e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1a4f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1a500 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a510 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1a520 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 1a530 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
1a540 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
1a550 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
1a560 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d  ring cleanup\n"]
1a570 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1a580 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1a590 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1a5a0 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65  # NOTE: The file
1a5b0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
1a5c0 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20   success!..
1a5d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
1a5e0 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20  t code 0..
1a5f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
1a600 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a  n $code.. }.. 1a610 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 ... proc clea 1a620 6e 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e nupMemory { varN 1a630 61 6d 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ame {quiet false 1a640 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 1a650 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1a660 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d ctCommand] && \. 1a670 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 1a680 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
1a690 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
1a6a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a6b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
1a6c0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
1a6d0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
1a6e0 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20  . "connection")
1a6f0 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..
1a700 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20  #       context
1a710 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20  of our caller.
1a720 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63  The opaque objec
1a730 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d  t handle for an.
1a740 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1a750 20 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74   ADO.NET connect
1a760 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72  ion previously r
1a770 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44  eturned by [getD
1a780 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20  bConnection]..
1a790 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
1a7a0 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
1a7b0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  here...        #
1a7c0 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
1a7d0 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65  1 $varName conne 1a7e0 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 ction.... 1a7f0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1a800 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1a810 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 invoke$connecti
1a820 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  on ReleaseMemory
1a830 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
1a840 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  lt]} then {..
1a850 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1a860 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1a870 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1a880 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1a890 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1a8b0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1a8c0 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 64 61  ed to release da
1a8d0 74 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65  tabase memory, e
1a8e0 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
1a8f0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
1a900 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 1a910 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1a920 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1a930 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 1a940 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command 1a950 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 s debug]] > 0} t 1a960 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1a970 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1a980 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 1a990 20 5b 6c 69 73 74 20 64 65 62 75 67 20 70 75 72 [list debug pur 1a9a0 67 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 ge].. } r 1a9b0 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a esult]} then {.. 1a9c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1a9d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1a9e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1a9f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1aa00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1aa20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1aa30 61 69 6c 65 64 20 74 6f 20 70 75 72 67 65 20 63 ailed to purge c 1aa40 61 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 all frame, error 1aa50 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1aa60 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
1aa70 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
1aa80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1aa90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1aaa0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1aab0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
1aac0 73 74 20 64 65 62 75 67 20 63 6c 65 61 6e 75 70  st debug cleanup
1aad0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  ]..        } res
1aae0 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ult]} then {..
1aaf0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1ab00 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1ab10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1ab20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1ab30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1ab50 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1ab60 6c 65 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 69  led to cleanup i
1ab70 6e 74 65 72 70 72 65 74 65 72 2c 20 65 72 72 6f  nterpreter, erro
1ab80 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
1ab90 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1aba0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1abb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1abc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1abd0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1abe0 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 1abf0 69 73 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 ist debug collec 1ac00 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 t].. } re 1ac10 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 sult]} then {.. 1ac20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1ac30 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1ac40 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1ac50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1ac60 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1ac80 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1ac90 69 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 iled to collect 1aca0 67 61 72 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 garbage, error: 1acb0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1acc0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1acd0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1ace0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1acf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1ad00 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
1ad10 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b  MemoryCounters {
1ad20 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20   varName } {..
1ad30 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1ad40 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1ad50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1ad60 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 1ad70 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 ame counter.... 1ad80 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 set count 1ad90 65 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 er(1) [object cr 1ada0 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 eate -alias \.. 1adb0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1adc0 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 m.Diagnostics.Pe 1add0 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 rformanceCounter 1ade0 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 Process \.. 1adf0 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 "Working 1ae00 20 53 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 Set" [file root 1ae10 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 name [file tail 1ae20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a$::bin_file]]]..
1ae30 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
1ae40 75 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 74  unter(2) [object
1ae50 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
1ae60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
1ae70 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73  stem.Diagnostics
1ae80 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e  .PerformanceCoun
1ae90 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20  ter Process \..
1aea0 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b             "Work
1aeb0 69 6e 67 20 53 65 74 20 50 65 61 6b 22 20 5b 66  ing Set Peak" [f
1aec0 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69  ile rootname [fi
1aed0 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66  le tail $::bin_f 1aee0 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ile]]].... 1aef0 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 33 29 set counter(3) 1af00 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 [object create 1af10 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 1af20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 1af30 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d gnostics.Perform 1af40 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 anceCounter Proc 1af50 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ess \.. 1af60 20 20 20 22 50 72 69 76 61 74 65 20 42 79 74 65 "Private Byte 1af70 73 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d s" [file rootnam 1af80 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a e [file tail$::
1af90 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20  bin_file]]]..
1afa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
1afb0 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
1afc0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f  ...    proc repo
1afd0 72 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73  rtMemoryCounters
1afe0 20 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61   { channel varNa
1aff0 6d 65 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20  me prefix } {..
1b000 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
1b010 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
1b020 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
1b030 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 1b040 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a Name counter.... 1b050 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1b060 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1b070 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1b080 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69    "---- " $prefi 1b090 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 x " counter \"" 1b0a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1b0b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
1b0c0 6f 75 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 65  ounter(1) Counte
1b0d0 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65  rName] "\" value
1b0e0 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20   is " \..
1b0f0 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76       [object inv
1b100 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20  oke $counter(1) 1b110 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d RawValue] \n]... 1b120 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1b130 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b140 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1b150 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66     "---- " $pref 1b160 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 ix " counter \"" 1b170 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b180 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
1b190 63 6f 75 6e 74 65 72 28 32 29 20 43 6f 75 6e 74  counter(2) Count
1b1a0 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75  erName] "\" valu
1b1b0 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  e is " \..
1b1c0 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e        [object in
1b1d0 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29  voke $counter(2) 1b1e0 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a RawValue] \n].. 1b1f0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1b200 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1b210 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1b220 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65      "---- " $pre 1b230 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 fix " counter \" 1b240 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1b250 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1b260 24 63 6f 75 6e 74 65 72 28 33 29 20 43 6f 75 6e$counter(3) Coun
1b270 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c  terName] "\" val
1b280 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20  ue is " \..
1b290 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
1b2a0 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33  nvoke $counter(3 1b2b0 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d ) RawValue] \n]. 1b2c0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 1b2d0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c .... proc col 1b2e0 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 lectGarbage { ch 1b2f0 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f annel {milliseco 1b300 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 nds 1000} {quiet 1b310 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 1b320 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1b330 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 1b340 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b350 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1b360 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1b370 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 1b380 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a alMemory false.. 1b390 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1b3a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1b3b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1b3c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1b3d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1b3e0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1b3f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1b400 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d "---- m 1b410 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 1b420 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 the CLR before c 1b430 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c ollection... " \ 1b440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b450 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
1b460 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
1b470 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
1b480 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1b490 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1b4a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1b4c0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1b4d0 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d d to get CLR mem 1b4e0 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 ory usage, error 1b4f0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1b500 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1b510 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t \n]..        }
1b520 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1b530 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
1b540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b570 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1b580 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1b590 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c   NOTE: Repeatedl
1b5a0 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  y attempt to col
1b5b0 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74  lect garbage unt
1b5c0 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20  il the allotted
1b5d0 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20  number..      #
1b5e0 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65        of millise
1b5f0 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65  conds has elapse
1b600 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d  d.  Always attem
1b610 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  pt to collect ga
1b620 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20  rbage..      #
1b630 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e       at least on
1b640 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ce...      #..
1b650 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1b660 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1b670 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1b680 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c     set start [cl
1b690 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20  ock seconds]..
1b6a0 20 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b        set stop [
1b6b0 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28  expr {$start + ( 1b6c0 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20$milliseconds /
1b6d0 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20  1000)}]....
1b6e0 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20     do {..
1b6f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1b700 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
1b710 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20  to force a full
1b720 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
1b730 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20  on now.  Report
1b740 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23  any..          #
1b750 20 20 20 20 20 20 20 65 72 72 6f 72 20 74 68 61         error tha
1b760 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  t is encountered
1b770 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20   if we fail...
1b780 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1b790 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1b7a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
1b7b0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
1b7c0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74  GetTotalMemory t
1b7d0 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rue..          }
1b7e0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1b800 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1b810 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1b820 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 1b830 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 1b840 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 1b850 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a llection, error: 1b860 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1b870 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f \n\t$erro
1b880 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
1b890 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1b8a0 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73  set now [clock s
1b8b0 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20  econds]..
1b8c0 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74   } while {$start 1b8d0 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 <=$now && $now 1b8e0 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20 20 <$stop}..
1b8f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23   }....      ####
1b900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b940 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69  #####....      i
1b950 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1b960 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1b970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
1b980 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1b990 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1b9a0 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
1b9b0 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20  emory false..
1b9c0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d       } result] =
1b9d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1b9e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1b9f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1ba00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1ba10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1ba20 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1ba30 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f        "---- memo
1ba40 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65  ry in use by the
1ba50 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65   CLR after colle
1ba60 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20  ction... " \..
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 1ba80 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 esult " bytes\n" 1ba90 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1baa0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1bab0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1bac0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1bad0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1bae0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1baf0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1bb00 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20   get CLR memory
1bb10 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20  usage, error: "
1bb20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1bb30 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1bb40 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 1bb50 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1bb60 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c . proc getSQL 1bb70 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 iteHandleCounts 1bb80 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 { channel {quiet 1bb90 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 1bba0 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 1bbb0 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ist].... if 1bbc0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1bbd0 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c ectCommand] && \ 1bbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 .. [hav 1bbf0 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e eSQLiteDefineCon 1bc00 73 74 61 6e 74 20 43 4f 55 4e 54 5f 48 41 4e 44 stant COUNT_HAND 1bc10 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 LE]} then {.. 1bc20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1bc30 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 # NOTE: Add each 1bc40 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 critical handle 1bc50 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 count to the re 1bc60 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 sulting list... 1bc70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bc80 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b foreach name [ 1bc90 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1bca0 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f connectionCo 1bcb0 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 unt statementCou 1bcc0 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 20 62 nt backupCount b 1bcd0 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 lobCount] {.. 1bce0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1bcf0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 1bd00 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 1bd10 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1bd20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bd30 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 1bd40 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 SQLite.DebugData 1bd50 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20$name..
1bd60 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d    } value] == 0}
1bd70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bd80 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1bd90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1bda0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1bdb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1bdc0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1bdd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72          "---- cr
1bde0 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
1bdf0 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c  unt \"" $name "\ 1be00 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e " is "$value \n
1be10 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1be20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1be30 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $1be40 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 value.. 1be50 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1be60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1be70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1be80 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1be90 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1bea0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65  NG: failed to ge
1beb0 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  t critical handl
1bec0 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20  e count \"" \..
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1bee0 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a name "\", error: 1bef0 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c " \n\t$value \
1bf00 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1bf10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1bf20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75    } elseif {!$qu 1bf30 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1bf40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1bf50 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 # NOTE: The actu 1bf60 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 al handle counts 1bf70 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 are not availab 1bf80 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a le; therefore, j 1bf90 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ust.. # 1bfa0 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 return an e 1bfb0 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 mpty list... 1bfc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 1bfd0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1bfe0 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e  --- critical han
1bff0 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61  dle counts unava
1c000 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20  ilable\n"..
1c010 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
1c020 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 1c030 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 1c040 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 hutdownSQLite { 1c050 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 channel {force f 1c060 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c alse} {quiet fal 1c070 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # 1c080 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1c090 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 Make sure that S 1c0a0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 1c0b0 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 ry is completely 1c0c0 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 shutdown. This 1c0d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1c0e0 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 73 is used by tests 1c0f0 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e that change con 1c100 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f figuration optio 1c110 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d ns and/or those. 1c120 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 1c130 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 hat need to make 1c140 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 sure logging is 1c150 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e initialized (i. 1c160 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d e. just in case. 1c170 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 1c180 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 1c190 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 ibrary was initi 1c1a0 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 alized in the pr 1c1b0 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a ocess prior to.. 1c1c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 1c1d0 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 e SQLiteLog clas 1c1e0 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 s being able to 1c1f0 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e setup its loggin 1c200 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 g callback)... 1c210 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d # Norm 1c220 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c ally, this shoul 1c230 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 d only be perfor 1c240 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 med if SQLite is 1c250 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 loaded and.. 1c260 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 79 # ready 1c270 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 for use by the 1c280 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 test suite... 1c290 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1c2a0 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c$force || [isSQL
1c2b0 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20  iteReady]} then
1c2c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c2d0 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20        # BUGFIX:
1c2e0 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61  Make sure that a
1c2f0 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e  ny "leaked" tran
1c300 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20  sactions and/or
1c310 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20  connections..
1c320 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 61       #         a
1c330 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65  re cleaned up be
1c340 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65  fore calling the
1c350 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e   native shutdown
1c360 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20   function...
1c370 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66      #..        f
1c380 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63 74 69  oreach transacti
1c390 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63  on [info transac
1c3a0 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20  tions] {..
1c3b0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1c3c0 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20  match \..
1c3d0 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61         System#Da
1c3e0 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65  ta#SQLite#SQLite
1c3f0 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74  Transaction#* $t 1c400 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 ransaction]} the 1c410 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1c420 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c sql 1c440 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c transaction rol 1c450 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 lback$transacti
1c460 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
1c470 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74  } error] == 0} t
1c480 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c490 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1c4a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c4b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c4c0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1c4d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1c4f0 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65  - rolled back le
1c500 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  aked transaction
1c510 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
1c520 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61              $tra 1c530 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a nsaction \"\n].. 1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1c550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 1c560 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1c570 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1c580 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1c590 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1c5a0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1c5b0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1c5d0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1c5e0 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 d to rollback le 1c5f0 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e aked transaction 1c600 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 1c610 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61$tra
1c620 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72  nsaction "\", er
1c630 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1c640 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1c650 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1c660 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1c670 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1c680 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 1c690 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 h db [info conne 1c6a0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ctions] {.. 1c6b0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 1c6c0 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 match \.. 1c6d0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 System#D 1c6e0 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 ata#SQLite#SQLit 1c6f0 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 eConnection#*$d
1c700 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  b]} then {..
1c710 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1c720 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64  ch {sql close $d 1c730 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 b} error] == 0} 1c740 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c750 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1c760 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1c770 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1c780 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1c790 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1c7b0 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 -- closed leaked 1c7c0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 database \""$d
1c7d0 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  b \"\n]..
1c7e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c7f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c810 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1c820 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c830 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1c840 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1c850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c860 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1c870 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c  NG: failed to cl
1c880 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62  ose leaked datab
1c890 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ase \"" \..
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1c8b0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " 1c8c0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c8e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1c900 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1c910 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1c920 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20   BUGFIX: Before
1c930 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69  calling the nati
1c940 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63  ve shutdown func
1c950 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20  tion, make sure
1c960 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20  both..        #
1c970 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 50          of the P
1c980 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69  RAGMA related di
1c990 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72  rectory names ar
1c9a0 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20  e freed...
1c9b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
1c9c0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63  ckForSQLiteDirec
1c9d0 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20  tories $channel 1c9e0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 true.... 1c9f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 1ca00 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 1ca10 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 1ca20 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 1ca30 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 1ca40 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 1ca50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 1ca60 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e sqlite3_shutdown 1ca70 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 1ca80 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 1ca90 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1caa0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1cab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1cac0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1cad0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1cae0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1caf0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 call sqlite3_sh 1cb00 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 utdown()... ok: 1cb10 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 "$result \n]..
1cb20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1cb30 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1cb40 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1cb50 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1cb60 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1cb70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1cb80 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1cb90 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
1cba0 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  l sqlite3_shutdo
1cbb0 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22  wn()... error: "
1cbc0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1cbd0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1cbe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1cbf0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1cc00 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c proc reportSQL 1cc10 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a iteResources {.. 1cc20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e chan 1cc30 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 nel {quiet false 1cc40 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b } {reset true} { 1cc50 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 collect true} } 1cc60 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1cc70 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 # NOTE: If ava 1cc80 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f ilable, report o 1cc90 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 n (and possibly 1cca0 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 69 reset) the runti 1ccb0 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 me.. # 1ccc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 configuration 1ccd0 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 statistics... 1cce0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1ccf0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1cd00 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a tCommand] && \.. 1cd10 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 [haveC 1cd20 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 onstraint buildC 1cd30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 onfiguration.Deb 1cd40 75 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ug]} then {.. 1cd50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1cd60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 1cd70 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1cd80 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c s +NonPublic -al 1cd90 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 1cda0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1cdb0 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 .SQLite.DebugDat 1cdc0 61 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 a settingReadCou 1cdd0 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 nts.. } s 1cde0 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 ettingReadCounts 1cdf0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1ce00 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 set na 1ce10 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e meCount [$settin
1ce20 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e  gReadCounts Coun
1ce30 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
1ce40 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
1ce50 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
1ce60 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
1ce70 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52  s pair $settingR 1ce80 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 eadCounts {.. 1ce90 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 1cea0 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
1ceb0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
1cec0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1ced0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1cee0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1cef0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1cf00 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1cf10 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
1cf20 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69  etting \"" [$pai 1cf30 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 r Key] "\" was r 1cf40 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 1cf50 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 [$pai
1cf60 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73  r Value] " times
1cf70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
1cf80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1cf90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1cfa0 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 1cfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1cfc0 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69 {[catch {$setti
1cfd0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65  ngReadCounts Cle
1cfe0 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d  ar} error] == 0}
1cff0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d000 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1d010 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1d020 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1d030 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1d040 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1d060 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e  --- reset settin
1d070 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
1d080 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20   the previous "
1d090 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d0a0 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e         $nameCoun 1d0b0 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 1d0c0 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61$valueCount " va
1d0d0 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20  lues read\n"]..
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
1d100 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1d110 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1d120 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1d130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d140 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1d150 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 G: failed to res 1d160 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 et setting stati 1d170 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 stics for " \.. 1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d190 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 "the previous " 1d1a0 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61$nameCount " na
1d1b0 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65  mes and " $value 1d1c0 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 Count \.. 1d1d0 20 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c " val 1d1e0 75 65 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a ues read, error: 1d1f0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
1d200 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1d210 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1d220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1d230 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1d240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1d250 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1d260 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
1d270 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
1d280 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
1d290 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74  .SQLite.DebugDat
1d2a0 61 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61  a settingFileRea
1d2b0 64 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20  dCounts..
1d2c0 20 7d 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65   } settingFileRe
1d2d0 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20  adCounts] == 0}
1d2e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d2f0 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20    set nameCount
1d300 5b 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61  [$settingFileRea 1d310 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a dCounts Count].. 1d320 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 set va 1d330 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 lueCount 0.... 1d340 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 1d350 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 1d360 69 72 20 24 73 65 74 74 69 6e 67 46 69 6c 65 52 ir$settingFileR
1d370 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20  eadCounts {..
1d380 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61           incr va
1d390 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20  lueCount [$pair 1d3a0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 Value].... 1d3b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1d3c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1d3d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1d3e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1d3f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1d400 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 1d410 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 etting \"" [$pai
1d420 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72  r Key] "\" was r
1d430 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ead " \..
1d440 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69             [$pai 1d450 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 r Value] " times 1d460 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 from the config 1d470 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d uration file\n"] 1d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1d490 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 1d4a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 if {$r
1d4b0 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
1d4c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
1d4d0 61 74 63 68 20 7b 24 73 65 74 74 69 6e 67 46 69  atch {$settingFi 1d4e0 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 leReadCounts Cle 1d4f0 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d ar} error] == 0} 1d500 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d510 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1d520 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1d530 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1d540 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1d550 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1d570 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e --- reset settin 1d580 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 g statistics for 1d590 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 the previous " 1d5a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d5b0 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e$nameCoun
1d5c0 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20  t " names and "
1d5d0 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61  $valueCount " va 1d5e0 6c 75 65 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 lues read " \.. 1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d600 20 20 20 22 66 72 6f 6d 20 74 68 65 20 63 6f 6e "from the con 1d610 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c figuration file\ 1d620 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 1d630 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1d640 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1d650 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1d660 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1d670 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1d680 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1d690 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1d6a0 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e 67  to reset setting
1d6b0 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20   statistics for
1d6c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1d6d0 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76         "the prev
1d6e0 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e  ious " $nameCoun 1d6f0 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 1d700 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20$valueCount \..
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d720 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 66   " values read f
1d730 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72  rom the configur
1d740 61 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f  ation file, erro
1d750 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20  r: " \n\t \..
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1d770 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 1d780 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1d790 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1d7a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1d7b0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1d7c0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1d7d0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1d7e0 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 [haveSQLiteDefi 1d7f0 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 neConstant INTER 1d800 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 OP_VIRTUAL_TABLE 1d810 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1d820 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 [haveSQLiteDef 1d830 69 6e 65 43 6f 6e 73 74 61 6e 74 20 54 52 41 43 ineConstant TRAC 1d840 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d K_MEMORY_BYTES]} 1d850 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d860 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1d870 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1d880 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 1d890 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d ---- current mem 1d8a0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 ory in use by SQ 1d8b0 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d LiteMemory... ". 1d8c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1d8d0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1d8e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 1d8f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1d900 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1d910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 1d920 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1d930 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 e.SQLiteMemory b 1d940 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 ytesAllocated.. 1d950 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 1d960 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1d970 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1d980 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1d990 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d9a0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1d9b0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
1d9c0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
1d9d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1d9e0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1d9f0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
1da00 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
1da10 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1da20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1da30 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1da40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1da50 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 1da60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1da70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1da80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1da90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1daa0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 1dab0 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 - maximum memory 1dac0 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 1dad0 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 eMemory... ".. 1dae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1daf0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1db00 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1db10 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1db20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 1db30 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1db40 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 1db50 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 QLiteMemory maxi 1db60 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 mumBytesAllocate 1db70 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d d.. } mem 1db80 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ory] == 0} then 1db90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 1dba0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1dbc0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1dbd0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
1dbe0 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
1dbf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1dc00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1dc10 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
1dc20 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
1dc30 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1dc40 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1dc50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1dc60 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1dc70 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 1dc80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1dc90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1dca0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 ... if {!$q
1dcb0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1dcc0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1dcd0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 nnel "---- curre 1dce0 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 nt memory in use 1dcf0 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d by SQLite... ". 1dd00 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1dd10 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1dd20 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 1dd30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1dd40 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1dd50 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1dd60 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1dd70 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1dd80 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1dd90 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 1dda0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 1ddb0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 1ddc0 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 used.. } 1ddd0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 1dde0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ddf0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1de00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1de10 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1de20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
1de30 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
1de40 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1de50 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1de60 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1de70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
1de80 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20  aybe the SQLite
1de90 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
1dea0 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20  unavailable?..
1deb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1dec0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1ded0 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
1dee0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1def0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1df00 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1df10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1df20 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1df30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1df40 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 1df50 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se 1df60 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c t memory unavail 1df70 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 able.... 1df80 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1df90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
1dfa0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1dfb0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
1dfc0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
1dfd0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1dfe0 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d     set result $m 1dff0 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 emory; # NOTE: R 1e000 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d eturn memory in- 1e010 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 use to our calle 1e020 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b r..... if { 1e030 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1e040 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1e050 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 channel "---- ma 1e060 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 ximum memory in 1e070 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e use by SQLite... 1e080 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ".. }.... 1e090 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1e0a0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1e0b0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 1e0c0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1e0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1e0e0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1e0f0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1e110 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1e120 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 1e130 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 1e140 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d sqlite3_mem 1e150 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d ory_highwater 0. 1e160 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 1e170 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 1e180 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1e190 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1e1b0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1e1c0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 ndArgs$memory "
1e1d0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
1e1e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1e1f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1e200 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1e210 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
1e220 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
1e230 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
1e240 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
1e250 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1e260 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
1e270 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
1e280 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1e290 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e2a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1e2b0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1e2c0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 1e2d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1e2e0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 1e2f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 1e300 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d ory unavailable. 1e310 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 1e320 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1e330 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1e340 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1e350 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
1e360 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1e370 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
1e380 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e   {$collect} then 1e390 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c {.. coll 1e3a0 65 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e ectGarbage$chan
1e3b0 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
1e3c0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1e3d0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1e3e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1e3f0 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20  l "---- current
1e400 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
1e410 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20   the CLR... "..
1e420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1e430 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1e440 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1e450 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
1e460 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1e470 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1e480 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c  voke GC GetTotal
1e490 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20  Memory false..
1e4a0 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
1e4b0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1e4c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
1e4d0 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
1e4e0 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d  strict $memory]} 1e4f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1e500 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e510 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e520 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1e530 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1e540 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
1e550 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
1e560 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1e570 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1e580 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
1e590 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20  y invalid....
1e5a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1e5b0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e5d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1e5e0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 1e5f0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 1e600 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1e610 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1e620 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1e630 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. 1e640 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1e650 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1e660 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1e670 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1e680 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1e690 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1e6a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1e6b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1e6c0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1e6d0 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20  unavailable....
1e6e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1e6f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1e700 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1e710 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1e720 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1e730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1e740 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 1e750 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d$result..    }.
1e760 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
1e770 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63  ckForSQLiteDirec
1e780 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c  tories { channel
1e790 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d   {reset false} }
1e7a0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
1e7b0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1e7c0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
1e7d0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
1e7e0 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ory function is
1e7f0 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20  available...
1e800 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73    #..      tputs
1e810 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20   $channel \.. 1e820 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che 1e830 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 cking for functi 1e840 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 on sqlite3_win32 1e850 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e _set_directory.. 1e860 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a . ".... #.. 1e870 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 1e880 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 is call to the s 1e890 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1e8a0 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 _directory funct 1e8b0 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 ion uses the.. 1e8c0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 # inva 1e8d0 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 lid value 0 for 1e8e0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 the first argume 1e8f0 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 nt. This code i 1e900 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 s designed.. 1e910 20 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 # to che 1e920 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 ck if calling th 1e930 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 e function will 1e940 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 raise an excepti 1e950 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 on (i.e... 1e960 23 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 # the actu 1e970 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 al result of the 1e980 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e function does n 1e990 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e ot matter as lon 1e9a0 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 g as no.. # 1e9b0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 1e9c0 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 is changed)... 1e9d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1e9e0 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 26 {[isWindows] && 1e9f0 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 [catch {.. 1ea00 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1ea10 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1ea20 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1ea30 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1ea40 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 1ea50 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 1ea60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 1ea70 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1ea80 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 ory 0 null.. 1ea90 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then 1eaa0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1eab0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 # NOTE: Ca 1eac0 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 lling the sqlite 1ead0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 1eae0 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 ctory function d 1eaf0 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 oes not.. 1eb00 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61 # cause a 1eb10 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 n exception; the 1eb20 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 refore, it must 1eb30 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e be available (i. 1eb40 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 e... # 1eb50 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 even though 1eb60 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e it should return 1eb70 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 a failure retur 1eb80 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a n code in this.. 1eb90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1eba0 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 case)... 1ebb0 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo 1ebc0 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 nstraint sqlite3 1ebd0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 1ebe0 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tory.... 1ebf0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
1ec00 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  es\n....
1ec10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1ec20 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c  E: Does our call
1ec30 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74  er want to reset
1ec40 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73   the directories
1ec50 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ?..        #..
1ec60 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74        if {$reset 1ec70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ec80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1ec90 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b # NOTE: Now mak 1eca0 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 e sure the datab 1ecb0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 1ecc0 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 y directories ar 1ecd0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 1ece0 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 reset their 1ecf0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c default values, 1ed00 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 which should be 1ed10 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d null for both.. 1ed20 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1ed30 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c Since the sql 1ed40 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 1ed50 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 1ed60 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d n is available,. 1ed70 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1ed80 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 use it... 1ed90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1eda0 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 for {set inde 1edb0 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 x 1} {$index < 3
1edc0 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
1edd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1ede0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1edf0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1ee00 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1ee10 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1ee30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1ee40 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
1ee50 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
1ee60 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1ee70 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
1ee80 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75  ectory $index nu 1ee90 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 1eea0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 1eeb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1eec0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1eed0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1eee0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1eef0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c        "---- call
1ef00 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1ef10 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24  et_directory(" $1ef20 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 index \.. 1ef30 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 ", nu 1ef40 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 ll)... ok: "$re
1ef50 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1ef60 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1ef80 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1ef90 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1efb0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 1efc0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 1efd0 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d tory("$index \.
1efe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1eff0 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65     ", null)... e
1f000 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 1f010 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1f020 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f030 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1f040 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 1f050 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1f060 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a  channel no\n....
1f070 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1f080 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20     # NOTE: Does
1f090 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20  our caller want
1f0a0 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72  to reset the dir
1f0b0 65 63 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20  ectories?  This
1f0c0 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  can only..
1f0d0 20 20 23 20 20 20 20 20 20 20 62 65 20 70 65 72    #       be per
1f0e0 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65  formed if SQLite
1f0f0 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72   is loaded and r
1f100 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
1f110 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20  the test..
1f120 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 2e    #       suite.
1f130 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1f140 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 20       if {$reset 1f150 26 26 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 && [isSQLiteRead 1f160 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 1f170 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f180 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d # NOTE: Now m 1f190 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 ake sure the dat 1f1a0 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor 1f1b0 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 ary directories 1f1c0 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 are.. # 1f1d0 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 reset the 1f1e0 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 ir default value 1f1f0 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 s, which should 1f200 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 be null for both 1f210 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ... # 1f220 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 Since the s 1f230 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1f240 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 _directory funct 1f250 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 ion does not.. 1f260 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1f270 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 appear to be ava 1f280 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 ilable, use the 1f290 61 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d associated PRAGM 1f2a0 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 A commands.. 1f2b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 1f2c0 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 stead... 1f2d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 #.. f 1f2e0 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 oreach directory 1f2f0 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 [list data_stor 1f300 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 e_directory temp 1f310 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 _store_directory 1f320 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. 1f330 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 set sql [append 1f340 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 Args "PRAGMA "$
1f350 64 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22  directory " = \"
1f360 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \";"]....
1f370 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1f380 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c  {executeSql $sql 1f390 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 1f3a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f3b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1f3c0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f3d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f3e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63        "---- exec
1f3f0 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69  ute PRAGMA " $di 1f400 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a rectory "... ok: 1f410 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 1f420 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c$resul
1f430 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  t \"\n]..
1f440 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1f460 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1f470 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1f490 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d -- execute PRAGM 1f4a0 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 A "$directory "
1f4b0 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  ... error: " \..
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f4d0 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c    \n\t $result \ 1f4e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 1f4f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1f500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f510 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 1f520 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e # NOTE: Fin 1f530 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 ally, show the c 1f540 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 urrent value of 1f550 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 the database and 1f560 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 temporary.. 1f570 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 1f580 6f 72 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e ories. This can 1f590 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d only be perform 1f5a0 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 ed if SQLite is 1f5b0 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 loaded.. # 1f5c0 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 and ready 1f5d0 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 for use by the t 1f5e0 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 est suite... 1f5f0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1f600 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 isSQLiteReady]} 1f610 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f620 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 foreach director 1f630 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f y [list data_sto 1f640 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d re_directory tem 1f650 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 p_store_director 1f660 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 y] {.. 1f670 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1f680 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d  appendArgs "----
1f690 20 63 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72   checking " $dir 1f6a0 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a ectory "... "].. 1f6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1f6c0 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 sql [appendArgs 1f6d0 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 "PRAGMA "$direc
1f6e0 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20  tory \;]....
1f6f0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1f700 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71   {executeSql $sq 1f710 6c 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 l scalar} result 1f720 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1f730 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f740 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f750 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20  ndArgs "ok: \""
1f760 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20  $result \"\n].. 1f770 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1f780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1f790 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1f7a0 70 70 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72  ppendArgs "error
1f7b0 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 1f7c0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1f7d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1f7e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1f7f0 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 . proc loadSQ 1f800 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 LiteTestSettings 1f810 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 { channel {suff 1f820 69 78 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 ix ""} {quiet fa 1f830 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 1f840 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1f850 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 Skip loading th 1f860 65 20 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 e settings if th 1f870 65 69 72 20 75 73 61 67 65 20 68 61 73 20 62 65 eir usage has be 1f880 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 en disabled... 1f890 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1f8a0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1f8b0 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 :no(sqliteTestSe 1f8c0 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b ttings)]} then { 1f8d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1f8e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 # NOTE: Loa 1f8f0 64 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 d custom per-use 1f900 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 r and/or per-hos 1f910 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 t test settings 1f920 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 1f930 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 1f940 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f fo exists ::tcl_ 1f950 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d platform(user)]} 1f960 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1f970 20 20 20 73 65 74 20 75 73 65 72 53 65 74 74 69 set userSetti 1f980 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c ngsFileName [fil 1f990 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f e join [getCommo 1f9a0 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 nDirectory] \.. 1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap 1f9c0 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 pendArgs setting 1f9d0 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 s$suffix . $::t 1f9e0 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 cl_platform(user 1f9f0 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 ) .eagle]].... 1fa00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c if {[fil 1fa10 65 20 65 78 69 73 74 73 20 24 75 73 65 72 53 65 e exists$userSe
1fa20 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d  ttingsFileName]}
1fa30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1fa40 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1fa50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1fa60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1fa70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1fa80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1fa90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f          "---- lo
1faa0 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74  ading per-user t
1fab0 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
1fac0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
1fad0 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72             $user 1fae0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 1faf0 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 \"...\n].. 1fb00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1fb10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1fb20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1fb30 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 1fb40 69 73 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 ist source$user
1fb50 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
1fb60 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1fb70 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1fb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1fb90 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1fba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1fbb0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1fbc0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1fbd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1fbe0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1fbf0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c  ING: failed to l
1fc00 6f 61 64 20 70 65 72 2d 75 73 65 72 20 73 65 74  oad per-user set
1fc10 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
1fc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1fc30 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 1fc40 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", 1fc50 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
1fc60 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
1fc70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1fc80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1fc90 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1fca0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1fcb0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 1fcd0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1fce0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1fd00 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64  --- skipped load
1fd10 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73  ing per-user tes
1fd20 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20  t settings file
1fd30 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
1fd40 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 1fd50 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 1fd60 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not 1fd70 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 exist\n"].. 1fd80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1fd90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1fda0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 .... #### 1fdb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1fdc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1fdd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1fde0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1fdf0 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ###.... i 1fe00 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 1fe10 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 ::tcl_platform(h 1fe20 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ost)]} then {.. 1fe30 20 20 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 set hos 1fe40 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 1fe50 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 1fe60 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 tCommonDirectory 1fe70 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 1fe80 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 [appendArgs s 1fe90 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 ettings$suffix
1fea0 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  . $::tcl_platfor 1feb0 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d m(host) .eagle]] 1fec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 1fed0 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
1fee0 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
1fef0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
1ff00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1ff10 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 1ff30 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1ff40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1ff60 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  --- loading per-
1ff70 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e  host test settin
1ff80 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ffa0 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69   $hostSettingsFi 1ffb0 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d leName \"...\n]. 1ffc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1ffd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1ffe0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1fff0 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 upleve 20000 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 l 1 [list source 20010 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
20020 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
20030 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
20040 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20050 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 20060 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20070 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20080 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
20090 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
200a0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
200b0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
200c0 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f  d to load per-ho
200d0 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  st settings file
200e0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
200f0 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 20100 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 20110 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 20120 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
20130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
20140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20150 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
20160 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
20170 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 20180 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20190 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
201a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
201b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
201c0 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
201d0 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  d loading per-ho
201e0 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
201f0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $20210 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 20220 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 Name "\", it doe 20230 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 20240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 20250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20260 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 20270 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 20280 72 6f 63 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 roc copySampleDa 20290 74 61 62 61 73 65 46 69 6c 65 73 20 7b 7d 20 7b tabaseFiles {} { 202a0 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 .. uplevel 202b0 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 1 {.. #.. 202c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 202d0 43 6f 70 79 20 28 6f 72 20 72 65 2d 63 6f 70 79 Copy (or re-copy 202e0 29 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 ) the reference 202f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 database file us 20300 65 64 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 ed for this.. 20310 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 69 # uni 20320 74 20 74 65 73 74 20 74 6f 20 74 68 65 20 62 75 t test to the bu 20330 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 6e ild directory in 20340 20 63 61 73 65 20 69 74 20 68 61 73 20 62 65 65 case it has bee 20350 6e 20 63 68 61 6e 67 65 64 0d 0a 20 20 20 20 20 n changed.. 20360 20 20 20 23 20 20 20 20 20 20 20 62 79 20 61 20 # by a 20370 70 72 65 76 69 6f 75 73 20 74 65 73 74 20 72 75 previous test ru 20380 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 n... #.. 20390 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 file copy 203a0 20 2d 66 6f 72 63 65 20 24 6e 6f 72 74 68 77 69 -force$northwi
203b0 6e 64 45 66 44 62 46 69 6c 65 20 5c 0d 0a 20 20  ndEfDbFile \..
203c0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
203d0 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65  in [getBuildDire
203e0 63 74 6f 72 79 20 66 61 6c 73 65 5d 20 5b 66 69  ctory false] [fi
203f0 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69  le tail $northwi 20400 6e 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 ndEfDbFile]].. 20410 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 20420 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 20430 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 20440 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 20450 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 20460 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 20470 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 20480 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 20490 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 204a0 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 204b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 204c0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 204d0 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 204e0 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 204f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 20500 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 20510 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 the "before-cons 20520 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 20530 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 20540 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 20550 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 20560 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 20570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 20580 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 20590 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 205a0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
205b0 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d  channel .before]
205c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
205d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
205e0 68 65 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a  heck if the [obj
205f0 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ect] command is
20600 61 76 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f  available; if no
20610 74 2c 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20  t, add some..
20620 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 69       #       shi
20630 6d 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74  ms to make the t
20640 65 73 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d  est suite run sm
20650 6f 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20  oother...
20660 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
20670 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74  kForSQLiteObject
20680 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f  Command $::test_ 20690 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 206a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 206b0 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 NOTE: Determine 206c0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 the names of the 206d0 20 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d native platform 206e0 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 and architectur 206f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 20700 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 20710 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 orm [getBuildPla 20720 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 tform true].. 20730 20 20 20 20 20 73 65 74 20 61 72 63 68 69 74 65 set archite 20740 63 74 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 cture [architect 20750 75 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 ureForPlatform$
20760 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
20770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20780 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65  # NOTE: Show the
20790 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72   platform and ar
207a0 63 68 69 74 65 63 74 75 72 65 20 75 73 65 64 20  chitecture used
207b0 74 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74  to help locate t
207c0 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
207d0 20 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64      native build
207e0 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20   files...
207f0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
20800 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 20810 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 20820 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 20830 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 -- platform for 20840 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 locating native 20850 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c build files is \ 20860 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 20870 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e$platform \"\n
20880 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ]....        tpu
20890 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 208a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 208b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 208c0 2d 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 --- architecture 208d0 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 for locating na 208e0 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 tive build files 208f0 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 is \"" \.. 20900 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
20910 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  ture \"\n]....
20920 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
20930 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61   # NOTE: Build a
20940 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75   list of configu
20950 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61  ration files tha
20960 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  t we handle...
20970 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
20980 20 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e   set configFileN
20990 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
209a0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
209b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
209c0 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
209d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
209e0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c   NOTE: Build a l
209f0 69 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79  ist of auxiliary
20a00 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69   Managed Debuggi
20a10 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d  ng Assistants (M
20a20 44 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20  DA)..        #
20a30 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
20a40 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  on files that we
20a50 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
20a60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
20a70 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61   mdaConfigFileNa
20a80 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
20a90 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 68           EagleSh
20aa0 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f  ell32.exe.mda.co
20ab0 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65  nfig Installer.e
20ac0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d  xe.mda.config \.
20ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
20ae0 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  t.exe.mda.config
20af0 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64   testlinq.exe.md
20b00 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20  a.config \..
20b10 20 20 20 20 20 20 20 20 74 65 73 74 65 66 36 2e          testef6.
20b20 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d  exe.mda.config].
20b30 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20b40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
20b50 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
20b60 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74  external files t
20b70 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20  hat we handle.
20b80 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20  Some of..
20b90 20 23 20 20 20 20 20 20 20 74 68 65 73 65 20 66   #       these f
20ba0 69 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69  iles may be nati
20bb0 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65  ve and/or manage
20bc0 64 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61  d assemblies tha
20bd0 74 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23  t are..        #
20be0 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20         required
20bf0 74 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f  to perform vario
20c00 75 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  us tests...
20c10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
20c20 74 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61  t externalFileNa
20c30 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
20c40 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
20c50 6f 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77  oin EntityFramew
20c60 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20  ork lib [string
20c70 6d 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d  map [list Fx ""]
20c80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20c90 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
20ca0 74 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78  t netFx451 netFx
20cb0 34 35 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46  45 netFx452 netF
20cc0 78 34 35 20 6e 65 74 46 78 34 36 20 5c 0d 0a 20  x45 netFx46 \..
20cd0 20 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78             netFx
20ce0 34 35 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46  45 netFx461 netF
20cf0 78 34 35 20 6e 65 74 46 78 34 36 32 20 6e 65 74  x45 netFx462 net
20d00 46 78 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e  Fx45] [getBuildN
20d10 65 74 46 78 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20  etFx]]] \..
20d20 20 20 20 20 20 20 20 45 6e 74 69 74 79 46 72 61         EntityFra
20d30 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  mework.dll]]....
20d40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
20d50 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
20d60 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74   the list of nat
20d70 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ive assembly fil
20d80 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
20d90 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
20da0 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
20db0 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  eFileNames [list
20dc0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61  ]....        eva
20dd0 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65  l lappend native
20de0 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61  FileNames [getNa
20df0 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
20e00 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20  amesOnly]..
20e10 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
20e20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
20e30 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
20e40 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
20e50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
20e60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
20e70 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
20e80 66 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  f mixed-mode ass
20e90 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
20ea0 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
20eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20ec0 73 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d  set mixedFileNam
20ed0 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
20ee0 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
20ef0 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
20f00 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
20f10 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69        lappend mi
20f20 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73  xedFileNames Sys
20f30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20f40 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dll..        }..
20f50 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
20f60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
20f70 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
20f80 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
20f90 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
20fa0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
20fb0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61  ..        set ma
20fc0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b  nagedFileNames [
20fd0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
20fe0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
20ff0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20  SQLite.Linq.dll
21000 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
21010 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20  te.EF6.dll]....
21020 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73         if {![has
21030 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
21040 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tive]} then {..
21050 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
21060 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65   managedFileName
21070 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
21080 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Lite.dll..
21090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
210a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
210b0 3a 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f  : Show the vario
210c0 75 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65  us lists of file
210d0 20 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20   names that are
210e0 68 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d  handled by this.
210f0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
21100 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
21110 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
21120 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 21130 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 21140 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 21150 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 21160 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 "configuration\" 21170 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 file names is: 21180 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 21190 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65$configFileName
211a0 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
211b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 211c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 211d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 211e0 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 211f0 5c 22 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 \"MDA configurat 21200 69 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 ion\" file names 21210 20 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 is: " \.. 21220 20 20 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67$mdaConfig
21230 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d  FileNames \n]...
21240 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $21250 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 21260 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 21270 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 21280 6c 69 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e list of \"extern 21290 61 6c 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 al\" file names 212a0 69 73 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 is: "$externalF
212b0 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a  ileNames \n]....
212c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 212d0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 212e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 212f0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 21300 69 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c ist of \"native\ 21310 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a " file names is: 21320 20 22 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 "$nativeFileNa
21330 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  mes \n]....
21340 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 21350 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 21360 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 21370 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f "---- list o 21380 66 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 f \"mixed\" file 21390 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 names is: "$mi
213a0 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d  xedFileNames \n]
213b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
213c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 213d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 213e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 213f0 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e -- list of \"man 21400 61 67 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 aged\" file name 21410 73 20 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 s is: "$managed
21420 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d  FileNames \n]...
21430 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
21440 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f      # NOTE: Remo
21450 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73  ve any test cons
21460 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66  traints that ref
21470 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65  er to the native
21480 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20   and/or..
21490 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
214a0 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20   assembly files
214b0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75  that we handle u
214c0 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20  nless forbidden
214d0 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20  from..        #
214e0 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d        doing so..
214f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
21500 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
21510 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74  xists ::no(sqlit
21520 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e  eRemoveConstrain
21530 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
21540 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
21550 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 21560 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 21570 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 21580 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 21590 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
215a0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
215b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
215c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
215d0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65  e $mdaConfigFile 215e0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 215f0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 21600 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 21610 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
21620 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
21630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
21640 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65  each fileName $e 21650 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 xternalFileNames 21660 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21670 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 21680 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 21690 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 e_ [file tail$f
216a0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20  ileName]]..
216b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
216c0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
216d0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 216e0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 216f0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 21700 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 21710 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
21720 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
21730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
21740 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 21750 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 21760 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 21770 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 21780 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 21790 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
217a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
217b0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
217c0 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 217d0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 217e0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 217f0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 21800 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
21810 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
21820 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
21830 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21840 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
21850 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  all System.Data.
21860 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66  SQLite related f
21870 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65  ile handling (de
21880 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  leting,..
21890 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67   #       copying
218a0 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69  , and loading) i
218b0 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
218c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
218d0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
218e0 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46  sts ::no(sqliteF
218f0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
21900 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
21910 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
21920 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65  kip trying to de
21930 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69  lete any files i
21940 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
21950 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
21960 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
21970 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
21980 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d  eteSqliteFiles)]
21990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
219a0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
219b0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
219c0 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46  eteSqliteConfigF
219d0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
219f0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $21a00 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 configFileNames 21a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21a20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 tryDeleteBina 21a30 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ryFile$fileName
21a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
21a70 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
21a80 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
21a90 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73  iteExternalFiles
21aa0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
21ab0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
21ac0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 21ad0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 21ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21af0 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 tryDeleteBuild 21b00 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 File$fileName f
21b10 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..
21b20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
21b30 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
21b40 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 21b50 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 21b70 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c yDeleteBinaryFil 21b80 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 e$fileName..
21b90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
21ba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
21bb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
21bc0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
21bd0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61  o(deleteSqliteNa
21be0 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  tiveFiles)]} the
21bf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21c00 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
21c10 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
21c20 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61  SqliteImplicitNa
21c30 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  tiveFiles)]} the
21c40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21c50 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
21c60 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 21c70 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 21c80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 21c90 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
21ca0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
21cb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21cc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
21ce0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
21cf0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
21d00 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
21d10 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
21d20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
21d30 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
21d40 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50  no(deleteSqliteP
21d50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
21d60 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
21d70 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
21d80 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 21d90 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21db0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 21dc0 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
21dd0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
21de0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
21df0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 21e00 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
21e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21e20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
21e30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21e40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
21e50 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
21e60 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41  no(deleteSqliteA
21e70 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73  rchitectureFiles
21e80 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
21ea0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 21eb0 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 21ec0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21ed0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 21ee0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
21ef0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f10 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
21f20 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
21f30 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
21f60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
21f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
21f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
21f90 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
21fa0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
21fb0 65 53 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65  eSqliteMixedFile
21fc0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
21fd0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
21ff0 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69  TE: If the "nati
22000 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ve" runtime opti
22010 6f 6e 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74  on is set, delet
22020 65 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20  e implicit..
22030 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
22040 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73    mixed-mode ass
22050 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77  embly files as w
22060 65 6c 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69  ell.  This runti
22070 6d 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  me option..
22080 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
22090 20 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65   check is handle
220a0 64 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20  d when building
220b0 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65  the list of mixe
220c0 64 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20  d-mode..
220d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
220e0 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65  sembly file name
220f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
22100 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
22110 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
22120 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
22130 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69  SqliteImplicitMi
22140 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  xedFiles)]} then
22150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22160 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
22170 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e  Name $mixedFileN 22180 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 22190 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 221a0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
221b0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
221c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
221d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
221e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
221f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
22200 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f  o(deleteSqliteNo
22210 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  nImplicitFiles)]
22220 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22230 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
22240 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
22250 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61  (deleteSqlitePla
22260 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20  tformFiles)] &&
22270 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
22280 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
22290 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 222a0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 222c0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 222d0 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
222e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
222f0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
22300 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 22310 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 ame$platform..
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22330 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
22340 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
22350 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
22360 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
22370 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68  deleteSqliteArch
22380 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
22390 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
223a0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
223b0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 223c0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 223d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 223e0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 223f0 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 ileName$mixedFi
22400 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22420 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
22430 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68   $fileName$arch
22440 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20  itecture..
22450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22480 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
224a0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
224b0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
224c0 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29  iteManagedFiles)
224d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
224e0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
224f0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 22500 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 22520 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 22530 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
22540 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22550 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
22560 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
22570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22580 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
22590 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c  for the "autoSel
225a0 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ect" runtime opt
225b0 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74  ion.  If present
225c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ,..          #
225d0 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20       attempt to
225e0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65  automatically se
225f0 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61  lect the first a
22600 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
22610 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c      #       buil
22620 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29  d (or "release")
22630 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53   of SQLite and S
22640 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22650 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
22660 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74       for use wit
22670 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  h the test suite
22680 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
22690 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68            if {[h
226a0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
226b0 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65  autoSelect]} the
226c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
226d0 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53   if {![checkForS
226e0 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74  QLiteBuilds $::t 226f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 est_channel true 22700 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 22710 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 22720 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 rSQLiteReleases 22730 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
22740 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
22750 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
22760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
22770 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
22780 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
22790 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69  o verify the bui
227a0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20  ld directory if
227b0 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20  instructed;..
227c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
227d0 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73  therwise, make s
227e0 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20  ure it actually
227f0 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74  exists or halt t
22800 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20  he entire..
22810 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
22820 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20  ting process if
22830 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
22840 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
22850 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
22860 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
22870 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72  o(verifyBuildDir
22880 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b  ectory)]} then {
22890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
228a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
228b0 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69  OTE: At this poi
228c0 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69  nt, the build di
228d0 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69  rectory MUST exi
228e0 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20  st as a..
228f0 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c       #       val
22900 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  id directory for
22910 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f   the testing pro
22920 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65  cess to continue
22930 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
22940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
22950 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74  t directory [get
22960 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66  BuildDirectory f
22970 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alse]....
22980 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
22990 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72  exists $director 229a0 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 y] || \.. 229b0 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 ![file 229c0 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 isdirectory$dir
229d0 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
229e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
229f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22a00 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69  # NOTE: Just pri
22a10 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68  or to actually h
22a20 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69  alting the testi
22a30 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20  ng process,..
22a40 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
22a50 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20     add an error
22a60 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20  to the test log
22a70 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...
22a80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22a90 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22aa0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 22ab0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 22ad0 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 -- could not ver 22ae0 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 ify build direct 22af0 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f ory \""$directo
22b00 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
22b10 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c          "\", all
22b20 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c   testing halted\
22b30 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
22b40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22b50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61        # NOTE: Ra
22b60 69 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65  ising a script e
22b70 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70  rror from this p
22b80 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74  oint should halt
22b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22ba0 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74  #       the test
22bb0 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ing process...
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22be0 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  or [appendArgs \
22bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22c00 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76      "could not v
22c10 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65  erify build dire
22c20 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63  ctory \"" $direc 22c30 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 tory \.. 22c40 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 "\", a 22c50 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 ll testing halte 22c60 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d"].. 22c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 22c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 22c90 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 22ca0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 22cb0 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 copy any files 22cc0 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a if instructed... 22cd0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 22ce0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 22cf0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 22d00 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d pySqliteFiles)]} 22d10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22d20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 22d30 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 22d40 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 22d50 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 22d60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 22d70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
22d80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22d90 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79        "---- copy
22da0 69 6e 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74  ing \"configurat
22db0 69 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e  ion\" files...\n
22dc0 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "....
22dd0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
22de0 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e  ame $configFileN 22df0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 22e00 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 22e10 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 uildFile$fileNa
22e20 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  me false..
22e30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
22e40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
22e50 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
22e60 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
22e70 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61  opySqliteExterna
22e80 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  lFiles)]} then {
22e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22ea0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
22eb0 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
22ec0 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67  e Managed Debugg
22ed0 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28  ing Assistants (
22ee0 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69  MDA) configurati
22ef0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
22f00 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66    #       file f
22f10 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65  or the Eagle she
22f20 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20  ll to the build
22f30 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
22f40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..
22f50 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75   #       while u
22f60 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65  sing each of the
22f70 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61   names of the va
22f80 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73  rious legacy tes
22f90 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
22fa0 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61   #       executa
22fb0 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c  bles.  This will
22fc0 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75   help to make su
22fd0 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d  re that all the.
22fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
22ff0 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65         legacy te
23000 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61  sts run with exa
23010 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65  ctly the same se
23020 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20  t of Managed..
23030 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
23040 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73      Debugging As
23050 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75  sistants configu
23060 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  red...
23070 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
23080 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 23090 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 230a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 230b0 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 "---- copying \" 230c0 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f MDA configuratio 230d0 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d n\" files...\n". 230e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 230f0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 23100 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
23110 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
23120 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
23130 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65  BinaryFile Eagle
23140 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f  Shell.exe.mda.co
23150 6e 66 69 67 20 74 72 75 65 20 22 22 20 24 66 69  nfig true "" $fi 23160 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 23170 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 23180 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 23190 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 231a0 3a 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 : Copy the exter 231b0 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 nal binaries, if 231c0 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 any, to the dir 231d0 65 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 ectory that.. 231e0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 231f0 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 contains the 23200 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 Eagle shell. Th 23210 69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 is is typically 23220 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 used to make.. 23230 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 23240 20 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c sure assembl 23250 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 ies referenced b 23260 79 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 y the ones being 23270 20 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 tested are.. 23280 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 23290 20 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 available dur 232a0 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 232b0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 process... 232c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 232d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
232e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22  ::test_channel "
232f0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65  ---- copying \"e
23300 78 74 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e  xternal\" files.
23310 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
23320 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
23330 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 23340 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 23360 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c yCopyExternalFil 23370 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 e$fileName..
23380 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
23390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
233a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
233b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
233c0 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69  o(copySqliteNati
233d0 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
233e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
233f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
23400 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
23410 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69   test platform i
23420 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66  s likely the def
23430 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20  ault for this..
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
23450 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c       machine, al
23460 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74  so try to copy t
23470 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20  he native files
23480 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
23490 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
234a0 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  nary location...
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
234c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
234d0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
234e0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
234f0 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69  ImplicitNativeFi
23500 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69                [i
23520 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61  sDefaultBuildPla
23530 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23550 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 23560 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 23570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 23580 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 -- copying impli 23590 63 69 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 cit \"native\" f 235a0 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 iles...\n".... 235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 235c0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
235d0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
235e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
235f0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
23600 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66  mbly $fileName f 23610 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 23620 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 23630 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23640 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 23650 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 23660 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d (copySqliteNonIm 23670 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 23680 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23690 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 236a0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 236b0 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d pySqlitePlatform 236c0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 236e0 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 236f0 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
23700 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23710 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
23720 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 23730 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 23740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23750 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 "---- copy 23760 69 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 ing \"native\" f 23770 69 6c 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 iles for platfor 23780 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 m \"" \.. 23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
237a0 70 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e  platform \"...\n
237b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
237c0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
237d0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 237e0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23800 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 23810 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20$fileName false
23820 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20  $platform.. 23830 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23850 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 23860 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 23870 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 23880 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 23890 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 238b0 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 238c0 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
238d0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
238f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 23900 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 23910 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 23920 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 23930 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 - copying \"nati 23940 76 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 ve\" files for a 23950 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 rchitecture \"" 23960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23970 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74$archit
23980 65 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d  ecture \"...\n].
23990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
239a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
239b0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 239c0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 239e0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
239f0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61  ileName false $a 23a00 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 23a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23a30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 23a40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 23a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 23a60 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 23a70 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 23a80 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d liteMixedFiles)] 23a90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 23aa0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 23ab0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 23ac0 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 If the "native" 23ad0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 runtime option 23ae0 69 73 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 is set, copy imp 23af0 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 licit.. 23b00 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 # mix 23b10 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 23b20 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 files as well. 23b30 20 54 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 The runtime opt 23b40 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ion.. 23b50 20 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b # check 23b60 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e is handled when 23b70 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 building the li 23b80 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 st of mixed-mode 23b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23ba0 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 23bb0 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 file names... 23bc0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 23be0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 23bf0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d :no(copySqliteIm 23c00 70 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 plicitMixedFiles 23c10 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 23c20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 23c30 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
23c40 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
23c50 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
23c60 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20  opying implicit
23c70 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e  \"mixed\" files.
23c80 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
23c90 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
23ca0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64   fileName $mixed 23cb0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 23cd0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
23ce0 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a  fileName false..
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23d00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
23d10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
23d20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
23d30 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
23d40 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
23d50 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
23d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23d70 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
23d80 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
23d90 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
23da0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
23db0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
23dc0 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 23dd0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 23de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23df0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
23e00 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
23e10 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23e30 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22  "---- copying \"
23e40 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f  mixed\" files fo
23e50 72 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c  r platform \"" \
23e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23e70 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 23e80 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 m \"...\n].... 23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23ea0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 23eb0 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
23ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
23ed0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
23ee0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 23ef0 65 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 e false$platfor
23f00 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..
23f10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23f20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
23f40 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
23f50 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72  :no(copySqliteAr
23f60 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29  chitectureFiles)
23f70 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
23f80 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
23f90 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 23fa0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 23fb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23fc0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
23fd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
23fe0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24000 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e      "---- copyin
24010 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65  g \"mixed\" file
24020 73 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  s for architectu
24030 72 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  re \"" \..
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24050 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22  $architecture \" 24060 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ...\n].... 24070 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 24080 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 ach fileName$mi
24090 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
240b0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
240c0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  bly $fileName fa 240d0 6c 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 lse$architectur
240e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
240f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24100 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
24110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24130 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
24140 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
24150 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65  copySqliteManage
24160 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
24170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24180 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24190 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 annel "---- copy 241a0 69 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 ing \"managed\" 241b0 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 files...\n".... 241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 241d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
241e0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
241f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
24200 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
24210 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75  ly $fileName tru 24220 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 24230 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 24240 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 24250 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 24260 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 24270 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 Skip trying to 24280 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 load any files i 24290 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 f instructed... 242a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 242b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 242c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 242d0 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 dSqliteFiles)]} 242e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 242f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 24300 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 24310 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 24320 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 24330 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c tryL 24340 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 oadAssembly Syst 24350 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 24360 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 24370 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 24380 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 24390 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 243a0 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 teLinqFiles)]} t 243b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 243c0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 243d0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 243e0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 243f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 24400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 24410 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 24420 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 24430 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e Ef6Files)]} then 24440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24450 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 24460 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 24470 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 Lite.EF6.dll.. 24480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 24490 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 244a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 244b0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 o(loadSqliteNonI 244c0 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 244d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 244e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 244f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 24500 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 dSqlitePlatformF 24510 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 24530 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
24540 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
24550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24560 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
24570 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
24580 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c  a.SQLite.dll $pl 24590 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 atform.. 245a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 245b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 245c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 245d0 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 loadSqliteArchit 245e0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 245f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24600 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 24610 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
24620 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
24630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24640 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
24650 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
24660 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65  ite.dll $archite 24670 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 cture.. 24680 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 24690 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 246a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 246b0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 246c0 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e fileNameOnly$n
246d0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
246e0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
246f0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
24700 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 24710 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 24720 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 24730 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 24740 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 version of \"" 24750 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c$fileNameOnly "\
24760 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20  "... \"" \..
24770 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
24780 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
24790 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 247a0 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c leNameOnly]] \"\ 247b0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 247c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 247d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 247e0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 leNameOnly$mixe
247f0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
24800 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
24810 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
24820 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 24830 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 24840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24850 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 24860 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c sion of \""$fil
24870 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e  eNameOnly "\"...
24880 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
24890 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65          [file ve
248a0 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79  rsion [getBinary
248b0 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa 248c0 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a meOnly]] \"\n].. 248d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 248e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 248f0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 24900 6d 65 4f 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 meOnly$managedF
24910 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
24920 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
24930 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
24940 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 24950 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24970 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 24980 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e on of \""$fileN
24990 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c  ameOnly "\"... \
249a0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
249b0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
249c0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
249d0 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 249e0 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 Only]] \"\n].. 249f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24a00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 24a10 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 24a20 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
24a30 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
24a40 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
24a50 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76  eNameOnly $nativ 24a60 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 24a70 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 24a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24a90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
24aa0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24ab0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
24ac0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
24ad0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
24ae0 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20  " $platform \.. 24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24b00 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 /$fileNameOnly
24b10 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c   "\"... \"" [fil
24b20 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
24b40 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
24b50 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  e $fileNameOnly 24b60 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e$platform]] \"\n
24b70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
24b80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
24b90 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
24ba0 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
24bb0 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 24bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 {.. c 24bd0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 24be0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
24bf0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
24c00 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
24c20 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
24c30 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d  of \"" $platform 24c40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24c50 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d /$fileNam
24c60 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
24c70 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c   [file version \
24c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24c90 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
24ca0 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 24cb0 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d Only$platform]]
24cc0 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
24cd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
24ce0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
24cf0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
24d00 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 24d10 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 24d20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24d30 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 24d40 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 meOnly$nativeFi
24d50 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
24d60 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
24d80 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 24d90 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 24da0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24db0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 24dc0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
24dd0 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a  architecture \..
24de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24df0 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c    / $fileNameOnl 24e00 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 y "\"... \"" [fi 24e10 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24e30 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 24e40 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 me$fileNameOnly
24e50 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d   $architecture]] 24e60 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 24e70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 24e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 24e90 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 24ea0 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e Only$mixedFileN
24eb0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
24ec0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
24ed0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
24ee0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 24ef0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24f10 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 24f20 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 sion of \""$arc
24f30 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20  hitecture \..
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24f50 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22   $fileNameOnly " 24f60 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 \"... \"" [file 24f70 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 version \.. 24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 24f90 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 24fa0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61$fileNameOnly $a 24fb0 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 rchitecture]] \" 24fc0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 24fd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 24fe0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 24ff0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25000 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 # NOTE: Grab th 25010 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 e list of manage 25020 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 d assemblies for 25030 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f the current pro 25040 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 cess.. # 25050 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 and report 25060 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 on the System.D 25070 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 ata.SQLite relat 25080 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 ed ones... 25090 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 250a0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 250b0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 250c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 250d0 74 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 t assemblies [ob 250e0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 ject invoke AppD 250f0 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d omain.CurrentDom 25100 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 ain GetAssemblie 25110 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 s].... 25120 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 object foreach a 25130 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c ssembly$assembl
25140 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ies {..
25150 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
25160 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61  atch \{System.Da
25170 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65  ta.SQLite* $asse 25180 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mbly]} then {.. 25190 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 251a0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
251b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
251c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
251d0 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20      "---- found
251e0 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a  loaded assembly:
251f0 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d   " $assembly \n] 25200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 25210 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 25220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 25230 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 25240 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
25250 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
25270 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  -- define consta
25280 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d  nts for \"System
25290 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e  .Data.SQLite\"..
252a0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
252b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
252c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
252d0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
252e0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
25300 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
25310 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43  .SQLite3 DefineC
25320 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..
25330 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73      } defineCons
25340 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tants] == 0} the
25350 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
25360 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 25370 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 25380 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b gs [formatList [ 25390 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 lsort \.. 253a0 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65$define
253b0 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65  Constants] <none
253c0 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  >] \n]..
253d0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
253e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 253f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e :test_channel un 25400 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 known\n.. 25410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 25420 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 25430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 25440 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
25450 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
25460 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63       "---- sourc
25470 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
25480 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
25490 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a  e.dll\"... "....
254a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
254b0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
254c0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
254d0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
254e0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
254f0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
25500 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
25510 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69  Connection Provi
25520 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  derVersion..
25530 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d        } version]
25540 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
25550 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
25560 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 25570 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 ersion] == 0} th 25580 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25590 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 set version 255a0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 null.. 255b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 255c0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
255d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
255e0 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d  gs $version \n]. 255f0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 25600 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 25610 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
25620 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
25630 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
25640 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25650 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
25660 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 25670 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 25690 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b --- source check 256a0 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e out of \"System. 256b0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c Data.SQLite.dll\ 256c0 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 "... ".... 256d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 256e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 256f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 25700 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 25710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 25720 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 25730 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec 25740 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 tion ProviderSou 25750 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 rceId.. 25760 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 } sourceId] == 25770 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 25780 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 25790 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 ng length$sourc
257a0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
257b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
257c0 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75   set sourceId nu
257d0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
257e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  }..            t
257f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 25800 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 25810 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a$sourceId \n]..
25820 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
25830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25840 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 25850 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 25860 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 25870 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 25880 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 25890 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 258a0 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 available builds 258b0 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 (and "releases" 258c0 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d ) of SQLite and. 258d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 258e0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 258f0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ite... #. 25900 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 25910 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a rSQLiteBuilds$:
25920 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20  :test_channel..
25930 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
25940 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a  QLiteReleases $: 25950 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 25960 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25970 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c # NOTE: Now, 25980 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 we need to know 25990 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 if the SQLite c 259a0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 ore library is a 259b0 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. 259c0 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 # (i.e. 259d0 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 because the mana 259e0 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e ged-only System. 259f0 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 Data.SQLite asse 25a00 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 mbly can.. 25a10 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 # load w 25a20 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 ithout it; howev 25a30 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f er, it cannot do 25a40 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c anything useful 25a50 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 without.. 25a60 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 # it). 25a70 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 If we are using 25a80 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 25a90 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 ssembly and we a 25aa0 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 lready.. 25ab0 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 # found it 25ac0 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 (above), this s 25ad0 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 hould always suc 25ae0 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 ceed... # 25af0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 25b00 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 orSQLiteLibrary 25b10 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
25b20 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
25b30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
25b40 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74  eck if the SQLit
25b50 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
25b60 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ly is available.
25b70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
25b80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
25b90 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65  iteInterop $::te 25ba0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 25bb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25bc0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 25bd0 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 he SQLite databa 25be0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 25bf0 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 directories... 25c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25c10 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 25c20 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 Directories$::t
25c30 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
25c40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25c50 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
25c60 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  t to determine i
25c70 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c  f various compil
25c80 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e  e-time options n
25c90 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20  eeded for..
25ca0 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
25cb0 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65  constraints were
25cc0 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
25cd0 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
25ce0 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20  y.  There..
25cf0 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73     #       are s
25d00 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ome compile-time
25d10 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75   options that mu
25d20 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65  st also have bee
25d30 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20  n enabled..
25d40 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74     #       for t
25d50 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  he interop assem
25d60 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  bly in order to
25d70 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46  be effective.  F
25d80 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20  or those..
25d90 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e    #       option
25da0 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73  s, it will be as
25db0 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61  sumed that it wa
25dc0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68  s enabled for th
25dd0 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20  e interop..
25de0 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d     #       assem
25df0 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e  bly if it was en
25e00 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61  abled for the ma
25e10 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d  naged assembly..
25e20 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
25e30 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69      foreach defi
25e40 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74  neConstant [list
25e50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25e60 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e  CHECK_STATE COUN
25e70 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49  T_HANDLE DEBUG I
25e80 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54  NTEROP_CODEC INT
25e90 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20  EROP_DEBUG \..
25ea0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
25eb0 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43  P_EXTENSION_FUNC
25ec0 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54  TIONS INTEROP_FT
25ed0 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a  S5_EXTENSION \..
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
25ef0 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f  ROP_INCLUDE_CERO
25f00 44 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  D INTEROP_INCLUD
25f10 45 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f  E_EXTRA INTEROP_
25f20 49 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20  INCLUDE_SEE \..
25f30 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
25f40 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46  OP_INCLUDE_ZIPVF
25f50 53 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f  S INTEROP_JSON1_
25f60 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20  EXTENSION \..
25f70 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
25f80 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e  _LEGACY_CLOSE IN
25f90 54 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f  TEROP_LOG INTERO
25fa0 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54  P_PERCENTILE_EXT
25fb0 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ENSION \..
25fc0 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45        INTEROP_RE
25fd0 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49  GEXP_EXTENSION I
25fe0 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45  NTEROP_TEST_EXTE
25ff0 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
26000 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54       INTEROP_TOT
26010 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  YPE_EXTENSION IN
26020 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
26030 42 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33  BLE NET_20 NET_3
26040 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5 \..
26050 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e   NET_40 NET_45 N
26060 45 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e  ET_451 NET_452 N
26070 45 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 4e 45  ET_46 NET_461 NE
26080 54 5f 34 36 32 20 5c 0d 0a 20 20 20 20 20 20 20  T_462 \..
26090 20 20 20 20 20 4e 45 54 5f 43 4f 4d 50 41 43 54       NET_COMPACT
260a0 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  _20 PLATFORM_COM
260b0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 50 52  PACTFRAMEWORK PR
260c0 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42  ELOAD_NATIVE_LIB
260d0 52 41 52 59 20 5c 0d 0a 20 20 20 20 20 20 20 20  RARY \..
260e0 20 20 20 20 52 45 54 41 52 47 45 54 41 42 4c 45      RETARGETABLE
260f0 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44   SQLITE_STANDARD
26100 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
26110 45 44 20 54 52 41 43 45 20 5c 0d 0a 20 20 20 20  ED TRACE \..
26120 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 43 4f          TRACE_CO
26130 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44  NNECTION TRACE_D
26140 45 54 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48  ETECTION TRACE_H
26150 41 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c  ANDLE TRACE_PREL
26160 4f 41 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  OAD \..
26170 20 20 20 54 52 41 43 45 5f 53 48 41 52 45 44 20     TRACE_SHARED
26180 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20  TRACE_STATEMENT
26190 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52  TRACE_WARNING TR
261a0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
261b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
261c0 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45  USE_ENTITY_FRAME
261d0 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52  WORK_6 USE_INTER
261e0 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41  OP_DLL USE_PREPA
261f0 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b  RE_V2 WINDOWS] {
26200 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
26210 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
26220 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f   Check if the co
26230 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
26240 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74  n is listed in t
26250 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20  he list of..
26260 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64        #       "d
26270 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22  efine constants"
26280 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62   kept track of b
26290 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  y the managed as
262a0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
262b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
262c0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65  checkForSQLiteDe
262d0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a  fineConstant $:: 262e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 test_channel$de
262f0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20  fineConstant..
26300 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
26310 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
26320 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
26330 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
26340 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20 77  QLite provider w
26350 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
26360 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
26370 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e    support for an
26380 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61  y encrypted data
26390 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bases...
263a0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
263b0 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65  haveSQLiteDefine
263c0 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50  Constant INTEROP
263d0 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20  _CODEC] || \..
263e0 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53            [haveS
263f0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
26400 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c  ant INTEROP_INCL
26410 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b  UDE_SEE]} then {
26420 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
26430 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
26440 20 59 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69   Yes, add generi
26450 63 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72  c constraint for
26460 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
26470 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
26480 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
26490 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79  addConstraint Sy
264a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
264b0 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20  .Encryption..
264c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
264d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
264e0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63  OTE: Check the c
264f0 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61  urrent build yea
26500 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74  r.  Basically, t
26510 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20  his indicates..
26520 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
26530 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20  hich version of
26540 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56  MSBuild and/or V
26550 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73  isual Studio was
26560 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   used to..
26570 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c    #       compil
26580 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62  e the assembly b
26590 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65  inaries under te
265a0 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
265b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 265c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 265d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 265e0 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for 265f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 26600 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e te build year... 26610 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ".... se 26620 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 t year [getBuild 26630 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 Year].. a 26640 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 26650 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 pendArgs buildYe 26660 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 ar.$year]..
26670 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 26680 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 26690 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c dArgs \"$year \
266a0 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "\n]....
266b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
266c0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
266d0 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20  rent build .NET
266e0 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69  Framework.  Basi
266f0 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20  cally, this..
26700 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 64       #       ind
26710 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65 72  icates which ver
26720 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54  sion of the .NET
26730 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65   Framework is be
26740 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ing..        #
26750 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68 65       used by the
26760 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69   assembly binari
26770 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a  es under test...
26780 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26790 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 267a0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 267b0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 267c0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 267d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 267e0 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f ild .NET Framewo 267f0 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 rk... ".... 26800 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 set netFx [ge 26810 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 tBuildNetFx].. 26820 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 26830 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 26840 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 buildFramework. 26850 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20$netFx]..
26860 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 26870 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 26880 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c gs \"$netFx \"\
26890 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
268a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
268b0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
268c0 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  nt build configu
268d0 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68  ration.  This sh
268e0 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20  ould normally..
268f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
26900 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22  e either "Debug"
26910 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a   or "Release"...
26920 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26930 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 26940 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 26950 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 26960 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 26970 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 26980 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 26990 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 n... ".... 269a0 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 set configurat 269b0 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e ion [getBuildCon 269c0 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 269d0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 269e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 nt [appendArgs b 269f0 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 26a00 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f n.$configuratio
26a10 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  n]..        tput
26a20 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 26a30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 l [appendArgs \" 26a40 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
26a50 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
26a60 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
26a70 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70  TE: Try to setup
26a80 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61   an interrupt ca
26a90 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65  llback using the
26aa0 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72   script debugger
26ab0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
26ac0 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63    that will canc
26ad0 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69  el all SQL queri
26ae0 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66  es in progress f
26af0 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d  or all database.
26b00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
26b10 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f   connections kno
26b20 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72  wn to this inter
26b30 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
26b40 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
26b50 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
26b60 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75  no(sqliteInterru
26b70 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68  ptCallback)]} th
26b80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26b90 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74  setupDbInterrupt
26ba0 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74  Callback $::test 26bb0 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 _channel$::test
26bc0 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d  _log..        }.
26bd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
26be0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
26bf0 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69  eck for the nati
26c00 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  ve runtime optio
26c10 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d  n, which would m
26c20 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20  ean we are..
26c30 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e      #       usin
26c40 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  g the mixed-mode
26c50 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
26c60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
26c70 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70  heckForRuntimeOp
26c80 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61  tion $::test_cha 26c90 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 nnel native.... 26ca0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 26cb0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 26cc0 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 if the test suit 26cd0 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 e should count t 26ce0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e he number of con 26cf0 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 nections.. 26d00 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 # "opene 26d10 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 d" and "closed" 26d20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 from the pool wh 26d30 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 en determining i 26d40 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 f a test.. 26d50 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 # passed 26d60 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 . Disabling thi 26d70 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f s behavior is so 26d80 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 metimes necessar 26d90 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 y (e.g... 26da0 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 # during 26db0 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 the release test 26dc0 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 ing process) bec 26dd0 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73 ause there are s 26de0 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 everal.. 26df0 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 # tests th 26e00 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 at rely on the " 26e10 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c opened from pool 26e20 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 " count being gr 26e30 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 eater.. # 26e40 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f than zero 26e50 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d . These tests m 26e60 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 ay fail due to t 26e70 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 he non-determini 26e80 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 stic.. # 26e90 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f behavior o 26ea0 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 f the CLR GC, ev 26eb0 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 en when there is 26ec0 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 no bug in the c 26ed0 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ode.. # 26ee0 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 being teste 26ef0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 26f00 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 checkForR 26f10 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a untimeOption$::
26f20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50  test_channel noP
26f30 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20  oolCounts....
26f40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
26f50 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
26f60 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite
26f70 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65  should use share
26f80 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20  d-cache mode...
26f90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
26fa0 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
26fb0 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 26fc0 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 channel sharedCa 26fd0 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 che.... # 26fe0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26ff0 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 : Report the res 27000 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f ource usage prio 27010 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 r to running any 27020 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 27030 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 27040 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 27050 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
27060 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
27070 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
27080 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66  Grab the list of
27090 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20   native modules
270a0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current
270b0 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20  process and..
270c0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 70       #       rep
270d0 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65  ort on the Syste
270e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65  m.Data.SQLite re
270f0 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20  lated ones...
27100 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27110 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
27120 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
27130 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
27140 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62   set modules [ob
27150 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20  ject invoke \..
27160 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
27170 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e  tem.Diagnostics.
27180 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65  Process.GetCurre
27190 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65  ntProcess Module
271a0 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  s]....
271b0 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
271c0 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f  alias module $mo 271d0 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 dules {.. 271e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 271f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 27200 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 module file name 27210 20 68 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f here must be no 27220 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 rmalized... 27230 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27240 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 27250 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 me [file normali 27260 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 ze [$module File
27270 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20  Name]]..
27280 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
27290 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61 69 6c 20  Only [file tail
272a0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName].... 272b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c if {[l 272c0 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e search -exact -n 272d0 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 ocase -- \.. 272e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 272f0 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c NativeLibraryFil 27300 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c eNamesOnly]$fil
27310 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31  eNameOnly] != -1
27320 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
27330 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 27340 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 27350 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 27370 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 27380 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 d SQLite native 27390 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 library module: 273a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 273b0 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65$fileName
273c0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
273d0 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65    } elseif {[lse
273e0 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63  arch -exact -noc
273f0 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20  ase -- \..
27400 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 49 6e            [getIn
27410 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c  teropAssemblyFil
27420 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c  eNamesOnly] $fil 27430 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 eNameOnly] != -1 27440 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 27450 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
27460 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
27470 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27490 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65  ---- found loade
274a0 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70  d SQLite interop
274b0 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65   assembly module
274c0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
274d0 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61           $fileNa 274e0 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 me \n].. 274f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 27500 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 27510 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 27520 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 27530 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
27540 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
27550 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65     "---- compile
27560 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f  -time options fo
27570 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  r SQLite core li
27580 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  brary... "....
27590 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
275a0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
275b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
275c0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
275d0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
275e0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
275f0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
27600 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74  SQLiteCompileOpt
27610 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..
27620 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  } compileOptions
27630 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
27640 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
27650 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 27660 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 l [appendArgs [f 27670 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 ormatList [lsort 27680 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27690 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69$compileOpti
276a0 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d  ons] <none>] \n]
276b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
276c0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
276d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 276e0 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c channel unknown\ 276f0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a n.. }.. 27700 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 27710 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 27720 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
27730 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
27740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
27750 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ---- compile-tim
27760 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51  e options for SQ
27770 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
27780 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  embly... "....
27790 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
277a0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
277b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
277c0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
277d0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
277e0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
277f0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
27800 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70  InteropCompileOp
27810 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  tions..
27820 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e   } compileOption
27830 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
27840 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
27850 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 27860 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b el [appendArgs [ 27870 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 formatList [lsor 27880 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 27890 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74$compileOpt
278a0 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e  ions] <none>] \n
278b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
278c0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
278d0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 278e0 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 278f0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 27900 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 27910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27920 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 27930 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f e active test co 27940 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 nstraints... 27950 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 27960 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
27970 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
27980 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e   "---- constrain
27990 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ts: " \..
279a0 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74       [formatList
279b0 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73   [lsort [getCons
279c0 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e  traints]] <none>
279d0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
279e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
279f0 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73  TE: Save the tes
27a00 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  t constraints fo
27a10 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73  r use by threads
27a20 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73   created in this
27a30 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
27a40 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f    application do
27a50 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e  main.  This is n
27a60 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65  ecessary because
27a70 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a   all the Eagle..
27a80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
27a90 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69  "test context" i
27aa0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65  nformation is pe
27ab0 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20  r-thread...
27ac0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
27ad0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
27ae0 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e  ::test_constrain
27af0 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ts]} then {..
27b00 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
27b10 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a  t_constraints $: 27b20 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e :eagle_tests(con 27b30 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 straints).. 27b40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 27b50 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 27b60 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 E: Load the "aft 27b70 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 er-constraints" 27b80 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 27b90 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 27ba0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 27bb0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 27bc0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 27bd0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 27be0 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 27bf0 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
27c00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
27c10 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  after]....
27c20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
27c30 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72  OTE: If necessar
27c40 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64  y, enable shared
27c50 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e  -cache mode now.
27c60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
27c70 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
27c80 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65  timeOption share
27c90 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d  dCache]} then {.
27ca0 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c  .          enabl
27cb0 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a  eSharedCache $:: 27cc0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 27cd0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 27ce0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 27cf0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 27d00 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 when our tests a 27d10 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e ctually began (n 27d20 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ow)... #. 27d30 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
27d40 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
27d50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
27d60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
27d70 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
27d80 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61  te tests began a
27d90 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
27da0 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     [clock format
27db0 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
27dc0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ] \n]..      }..
27dd0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
27de0 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
27df0 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d  FilesPrologue {}
27e00 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65   {..      upleve
27e10 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  l 1 {..        #
27e20 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
27e30 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69  : Setup the vari
27e40 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72  ables that refer
27e50 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20   to the various
27e60 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a  non-data files..
27e70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
27e80 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the
27e90 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69  tests in this fi
27ea0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
27eb0 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69          set enti
27ec0 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69  tyFrameworkDllFi
27ed0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
27ee0 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
27ef0 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77  ame EntityFramew
27f00 6f 72 6b 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a  ork.dll false]..
27f10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e  ..        set in
27f20 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c  stallerExeFile \
27f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
27f40 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
27f50 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 20 66 61  Installer.exe fa
27f60 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse]....
27f70 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 67 6e  set sqliteDesign
27f80 65 72 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20  erDllFile \..
27f90 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
27fa0 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74  ldFileName SQLit
27fb0 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66  e.Designer.dll f
27fc0 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alse]....
27fd0 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53   set systemDataS
27fe0 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a  QLiteDllFile \..
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
28000 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79  BuildFileName Sy
28010 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
28020 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20  .dll false]....
28030 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65         set syste
28040 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44  mDataSQLiteLinqD
28050 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  llFile \..
28060 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46        [getBuildF
28070 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
28080 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
28090 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20  dll false]....
280a0 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d        set system
280b0 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
280c0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
280d0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
280e0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
280f0 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
28100 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20   false]....
28110 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69     set testExeFi
28120 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
28130 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 66 61  Name test.exe fa
28140 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  lse]..        se
28150 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c  t testLinqExeFil
28160 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
28170 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65  ame testlinq.exe
28180 20 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20   false]..
28190 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46   set testEf6ExeF
281a0 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ile [getBuildFil
281b0 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78  eName testef6.ex
281c0 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20  e false]....
281d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
281e0 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65   NOTE: Setup the
281f0 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20   variables that
28200 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72  refer to the var
28210 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d  ious data files.
28220 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
28230 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
28240 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66   tests in this f
28250 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ile...        #.
28260 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
28270 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69  tLinqOutFile [fi
28280 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
28290 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
282a0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
282b0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
282c0 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a  testlinq.out]]..
282d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f  ..        set no
282e0 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20  rthwindEfDbFile
282f0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
28300 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
28310 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
28320 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64   dirname [file d
28330 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74  irname [getSQLit
28340 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d  eTestDataPath]]]
28350 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28360 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69  testlinq northwi
28370 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20  ndEF.db]]....
28380 20 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44       set nonWalD
28390 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  bFile [file nati
283a0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
283b0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
283c0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
283d0 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e  ataPath] nonWal.
283e0 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
283f0 73 65 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66  set walDbFile [f
28400 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
28410 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
28420 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
28430 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
28440 20 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20   wal.db]]....
28450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28460 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69  # NOTE: The vari
28470 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e  ous install/unin
28480 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20  stall log files
28490 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
284a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
284b0 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f    design-time co
284c0 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65  mponent installe
284d0 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  r...        #..
284e0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
284f0 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
28500 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
28510 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
28520 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
28530 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
28540 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72  aPath] Installer
28550 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67  _Test_Vs2005.log
28560 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
28570 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
28580 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  008LogFile [file
28590 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
285a0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
285b0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
285c0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e  TestDataPath] In
285d0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
285e0 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  008.log]]....
285f0 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73       set testIns
28600 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
28610 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
28620 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
28630 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
28640 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
28650 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
28660 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d  est_Vs2010.log]]
28670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
28680 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
28690 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  2LogFile [file n
286a0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
286b0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
286c0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
286d0 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74  stDataPath] Inst
286e0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
286f0 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  2.log]]....
28700 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
28710 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20  llVs2013LogFile
28720 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
28730 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
28740 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
28750 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
28760 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73  h] Installer_Tes
28770 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2013.log]]..
28780 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
28790 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c  stInstallVs2015L
287a0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
287b0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
287c0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
287d0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
287e0 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
287f0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e  ler_Test_Vs2015.
28800 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
28810 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61   set testUninsta
28820 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20  llVs2005LogFile
28830 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
28840 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
28850 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
28860 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
28870 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54  h] Uninstaller_T
28880 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d  est_Vs2005.log]]
28890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
288a0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
288b0 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  008LogFile [file
288c0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
288d0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
288e0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
288f0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e  TestDataPath] Un
28900 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  installer_Test_V
28910 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2008.log]]....
28920 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
28930 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
28940 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
28950 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
28960 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
28970 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
28980 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
28990 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30  ller_Test_Vs2010
289a0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
289b0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74    set testUninst
289c0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
289d0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
289e0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
289f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
28a00 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
28a10 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f  th] Uninstaller_
28a20 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d  Test_Vs2012.log]
28a30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
28a40 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
28a50 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2013LogFile [fil
28a60 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
28a70 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
28a80 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
28a90 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55  eTestDataPath] U
28aa0 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f  ninstaller_Test_
28ab0 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2013.log]]....
28ac0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
28ad0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c  UninstallVs2015L
28ae0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
28af0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
28b00 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
28b10 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
28b20 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
28b30 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
28b40 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  5.log]]....
28b50 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
28b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b90 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....
28ba0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
28bb0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
28bc0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
28be0 65 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72  e tail $entityFr 28bf0 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d ameworkDllFile]] 28c00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 28c10 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 28c20 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
28c30 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b  $entityFramework 28c40 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 28c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 28c60 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 28c70 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 28c80 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 28c90 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
28ca0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
28cb0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
28cc0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
28cd0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 28ce0 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 l$installerExeF
28cf0 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78  ile Installer.ex
28d00 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
28d10 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
28d20 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
28d30 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
28d50 69 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65  ile tail $sqlite 28d60 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d DesignerDllFile] 28d70 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 28d80 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 28d90 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
28da0 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72   $sqliteDesigner 28db0 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 28dc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 28dd0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 28de0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 28df0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 28e00 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
28e10 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
28e20 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
28e30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
28e40 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 28e50 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d _channel$system
28e60 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c  DataSQLiteDllFil
28e70 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
28e80 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
28e90 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
28ea0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
28eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
28ec0 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d  ile tail $system 28ed0 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c DataSQLiteLinqDl 28ee0 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 28ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 28f00 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
28f10 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61  hannel $systemDa 28f20 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 28f30 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 28f40 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 28f50 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 28f60 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 28f70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28f80 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 [file tail$syst
28f90 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44  emDataSQLiteEf6D
28fa0 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
28fb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
28fc0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 28fd0 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 channel$systemD
28fe0 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46  ataSQLiteEf6DllF
28ff0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
29000 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
29010 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
29020 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
29030 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29040 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 29050 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e ExeFile]]]} then 29060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 29070 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
29080 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78  _channel $testEx 29090 65 46 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a eFile test.exe.. 290a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 290b0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 290c0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 290d0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 290e0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 290f0 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 tail$testLinqE
29100 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
29110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
29120 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 29130 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e channel$testLin
29140 71 45 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e  qExeFile testlin
29150 71 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d  q.exe..        }
29160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
29170 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
29180 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
29190 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
291a0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 291b0 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d stEf6ExeFile]]]} 291c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 291d0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 291e0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 291f0 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 estEf6ExeFile te 29200 73 74 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 stef6.exe.. 29210 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29220 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 29230 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 29240 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 29250 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 29260 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c$testLinqOutFil
29270 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
29280 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
29290 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 292a0 65 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 el$testLinqOutF
292b0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
292c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
292d0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
292e0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
292f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29300 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74  [file tail $nort 29310 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d hwindEfDbFile]]] 29320 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29330 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 29340 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $29350 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 29360 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 29370 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 29380 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 29390 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 293a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 293b0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c ile tail$nonWal
293c0 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  DbFile]]]} then
293d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
293e0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 293f0 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 channel$nonWalD
29400 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  bFile..        }
29410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
29420 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
29430 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
29440 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
29450 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61    [file tail $wa 29460 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e lDbFile]]]} then 29470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 29480 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
29490 5f 63 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46  _channel $walDbF 294a0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 294b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 294c0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 294d0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 294e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 294f0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
29500 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  InstallVs2005Log
29510 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
29520 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
29530 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 29540 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
29550 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d  llVs2005LogFile.
29560 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
29570 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
29580 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
29590 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
295a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
295b0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 295c0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 295d0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 295e0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 295f0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
29600 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 29610 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2008LogFile.. 29620 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29630 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 29640 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29650 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 29660 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 29670 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
29680 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2010LogFile]]]}
29690 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
296a0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
296b0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
296c0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30  estInstallVs2010
296d0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
296e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
296f0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
29700 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
29710 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
29720 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $29730 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 29740 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 2LogFile]]]} the 29750 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 29760 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
29770 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 29780 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 29790 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 297a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 297b0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 297c0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 297d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 297e0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
297f0 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  InstallVs2013Log
29800 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
29810 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
29820 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 29830 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
29840 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d  llVs2013LogFile.
29850 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
29860 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
29870 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
29880 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
29890 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
298a0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 298b0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 298c0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 298d0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 298e0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
298f0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 29900 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2015LogFile.. 29910 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29920 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 29930 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29940 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 29950 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 29960 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
29970 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d  lVs2005LogFile]]
29980 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
29990 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
299a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 299b0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
299c0 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2005LogFile..
299d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
299e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
299f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
29a00 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
29a10 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
29a20 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 29a30 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d lVs2008LogFile]] 29a40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 29a50 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 29a60 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
29a70 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 29a80 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2008LogFile.. 29a90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29aa0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 29ab0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29ac0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 29ad0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 29ae0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
29af0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d  lVs2010LogFile]]
29b00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
29b10 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
29b20 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 29b30 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
29b40 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2010LogFile..
29b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
29b60 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
29b70 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
29b80 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
29b90 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
29ba0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 29bb0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d lVs2012LogFile]] 29bc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 29bd0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 29be0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
29bf0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 29c00 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2012LogFile.. 29c10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29c20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 29c30 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29c40 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 29c50 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 29c60 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
29c70 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d  lVs2013LogFile]]
29c80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
29c90 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
29ca0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 29cb0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
29cc0 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2013LogFile..
29cd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
29ce0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
29cf0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
29d00 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
29d10 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
29d20 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 29d30 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d lVs2015LogFile]] 29d40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 29d50 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 29d60 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
29d70 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 29d80 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2015LogFile.. 29d90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 29da0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 29db0 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 roc runSQLiteTes 29dc0 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b tFilesEpilogue { 29dd0 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 } {.. uplev 29de0 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 el 1 {.. 29df0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 29e00 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 29e10 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 29e20 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 2015LogFile test 29e30 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c UninstallVs2013L 29e40 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 29e50 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 29e60 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 29e70 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 29e80 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2010LogFile \.. 29e90 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 testU 29ea0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f ninstallVs2008Lo 29eb0 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 gFile testUninst 29ec0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 29ed0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29ee0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 29ef0 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 5LogFile testIns 29f00 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 29f10 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 29f20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 29f30 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 12LogFile testIn 29f40 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 stallVs2010LogFi 29f50 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 29f60 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 testInstallVs2 29f70 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 008LogFile testI 29f80 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 29f90 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 ile.... u 29fa0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 29fb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29fc0 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 29fd0 65 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c e testLinqOutFil 29fe0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 29ff0 20 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 walDbFile nonWa 2a000 6c 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 lDbFile.... 2a010 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 unset -nocomp 2a020 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 lain \.. 2a030 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69 testEf6ExeFi 2a040 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 le testLinqExeFi 2a050 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2a060 20 20 74 65 73 74 45 78 65 46 69 6c 65 20 73 79 testExeFile sy 2a070 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 stemDataSQLiteEf 2a080 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 6DllFile \.. 2a090 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 systemDa 2a0a0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 taSQLiteLinqDllF 2a0b0 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 ile systemDataSQ 2a0c0 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 LiteDllFile \.. 2a0d0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit 2a0e0 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 eDesignerDllFile 2a0f0 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c installerExeFil 2a100 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 2a110 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b entityFramework 2a120 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d DllFile.. } 2a130 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 2a140 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 proc runSQLiteTe 2a150 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d stEpilogue {} {. 2a160 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2a170 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e # NOTE: Skip run 2a180 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 ning our custom 2a190 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 epilogue if the 2a1a0 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 main one has bee 2a1b0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 2a1c0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 skipped... 2a1d0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 2a1e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 2a1f0 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 (epilogue.eagle) 2a200 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2a210 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2a220 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 NOTE: Show when 2a230 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c our tests actual 2a240 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d ly ended (now).. 2a250 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a260 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
2a270 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
2a280 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
2a290 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65       "---- Syste
2a2a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65  m.Data.SQLite te
2a2b0 73 74 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c  sts ended at " \
2a2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63  ..            [c
2a2d0 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f  lock format [clo
2a2e0 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d  ck seconds]] \n]
2a2f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2a300 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
2a310 6f 61 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75  oad the "epilogu
2a320 65 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73  e" custom per-us
2a330 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f  er and/or per-ho
2a340 73 74 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20  st test..
2a350 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67   #       setting
2a360 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  s now...
2a370 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76  #..        uplev
2a380 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53  el 1 [list loadS
2a390 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67  QLiteTestSetting
2a3a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2a3b0 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a l .epilogue].... 2a3c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2a3d0 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 # BUGFIX: Bef 2a3e0 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 ore checking the 2a3f0 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 final resources 2a400 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 2a410 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 e, make.. 2a420 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20 # sure 2a430 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 both of the PRAG 2a440 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 MA related direc 2a450 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 tory names are f 2a460 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 reed... # 2a470 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 2a480 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 2a490 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ies$::test_chan
2a4a0 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  nel true....
2a4b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2a4c0 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f   NOTE: Also repo
2a4d0 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20  rt the resource
2a4e0 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e  usage after runn
2a4f0 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a  ing the tests...
2a500 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2a510 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52     reportSQLiteR
2a520 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74  esources $::test 2a530 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 2a540 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2a550 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 NOTE: Report th 2a560 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c e critical handl 2a570 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 e counts after r 2a580 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 unning the tests 2a590 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2a5a0 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 getSQLiteH 2a5b0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 andleCounts$::t
2a5c0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
2a5d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2a5e0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63    # NOTE: If nec
2a5f0 65 73 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20  essary, disable
2a600 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
2a610 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  e now...
2a620 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
2a630 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  hasRuntimeOption
2a640 20 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74   sharedCache]} t
2a650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2a660 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63   enableSharedCac
2a670 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  he \$::test_chann
2a680 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  el false..
2a690 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
2a6a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23    }.....    ####
2a6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a6c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a6d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a6f0 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
2a700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a710 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45  ########## END E
2a720 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23  agle ONLY ######
2a730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a740 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
2a750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a790 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a  #########..  }..
2a7a0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
2a7b0 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f   Save the name o
2a7c0 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  f the directory
2a7d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this
2a7e0 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66  file...  #..  if
2a7f0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
2a800 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
2a810 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73  ]} then {..    s
2a820 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  et common_direct
2a830 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
2a840 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d  e [info script]]
2a850 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20  ..  }....  #..
2a860 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20  # NOTE: Provide
2a870 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2a880 53 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b  SQLite test pack
2a890 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72  age to the inter
2a8a0 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20  preter...  #..
2a8b0 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide
2a8c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2a8d0 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a  te.Test 1.0..}..